Sensoren voor robots

sensoren zelfbouw robotEen robot heeft sensoren nodig vergelijkbaar met de zintuigen van een mens om te kunnen reageren op zijn omgeving. De sensoren zorgen voor input aan de computer module van de robot zodat deze bijvoorbeeld een object kan ontwijken. Vergelijkbaar met de mens die meerdere zintuigen heeft, kan ook een robot meerdere soorten en aantallen sensoren hebben om goed te kunnen reageren op zijn omgeving. Aangezien sommige zintuigen zoals onze ogen wel erg complex zijn en de verwerking van de signalen van een camera ook veel rekenkracht vergt zullen we vaak uitwijken naar eenvoudigere sensoren waarbij we soms beter kunnen kijken naar eenvoudige organismen. Sensoren zijn momenteel vrij goedkoop en redelijk verkrijgbaar, vaak al compleet met interface gemonteerd op een klein board. Op deze pagina wil ik ingaan op diverse soorten sensoren met hun toepassingsgebied, datasheet en voorbeeld code. Vriendelijke groet, Hein Pragt

Ultrasoon sensor HC-SR04

Ultrasoon sensor HC-SR04 Een robot moet zijn omgeving kunnen waarnemen om er op te kunnen reageren. Een eenvoudige methode is afstand meting door middel van ultrasone geluidsgolven, deze techniek is zeer goedkoop geworden door toepassingen in de auto (parkeerhulp) en in digitale afstandsmeters. De SR-04 is een populaire ultrasone zender / ontvanger met interface chip die maar een paar euro kost, ik heb ze zelfs al voor 1 euro 5 gekocht. De module heeft maar vier aansluitingen en is zeer eenvoudig te programmeren, het enige wat er voor nodig is dat is een nauwkeurige timer in microseconden. De module zend ultrasone geluidsgolven uit van 40 Khz wat ver boven het menselijke gehoor ligt. De werking van ultrasone afstandsmeting berust op het uitsturen van een ultrasoon geluidssignaal en het opvangen van het gereflecteerde (echo) signaal. De tijd tussen versturen en ontvangen is afhankelijk van de afgelegde weg van het geluidssignaal en aangezien geluid een redelijk nauwkeurige snelheid heeft, kunnen we hieruit de afstand berekenen. De afstand is dus gelijk is aan de snelheid van het geluidssignaal vermenigvuldigt met echo tijd / 2 (heen en terugweg). De snelheid van het geluid in lucht bedraagt gemiddeld 340 meter per seconden en deze tijd moeten we delen door twee want tussen zenden en ontvangen legt het geluid twee maal dezelfde afstand af, van zender naar object en weerkaatst van object naar ontvanger. Uiteraard er van uitgaande dat zender en ontvanger zich op eenzelfde plaats bevinden. 1 sec is dus 780 meter (340 x 2), 100 Ms is dus 34 meter, 10 Ms is dus 3,4 meter, 1 Ms is dus 30 cm. U ziet dat voor kleinere afstanden een nauwkeurige timer met een hoge resolutie nodig is.

Ultrasoon sensor HC-SR04
De HC-SR04 heeft een trigger signaal van 10us (microseconden) nodig (op TTL niveau) op de trigger pin als startsignaal waarna er een burst van 8 pulsen van 40KHz zal worden uitgestuurd. Daarna begint de module te luisteren naar de ontvangen echo van deze pulstrein en de echo uitgang blijft hoog tot de echo is ontvangen. Aangezien niet elke module weer na een timeout omlaag gaat is het veiliger om ook in de software hier een timeout op te zetten met als resultaat een oneindige afstand.

 /*   
  Eenvoudige code voor ultrasone afstandsmeting met HC-SR04 module  voor de Raspberry Pi
  © Hein Pragt 2015
 */  

   // Set up gpi pointer for direct register access
   setup_io();

   INP_GPIO(ECHO); // must use INP_GPIO before we can use OUT_GPIO
   OUT_GPIO(TRIG);

   printf("Waiting For Sensor To Settle\n");
   GPIO_CLR = (1 << TRIG);
   usleep(20 * 1000);
   GPIO_SET = (1 << TRIG);
   usleep(10 * 1000);
   GPIO_CLR  = (1 << TRIG);

   gettimeofday(&gettime_now, NULL);
   save_time = 0;
   while(GPIO_READ(ECHO) == 0 && save_time++ < 10000); 
     gettimeofday(&gettime_now, NULL);
   start_time = gettime_now.tv_nsec;             //Get nS value
   save_time = 0;
   while(GPIO_READ(ECHO) != 0 && save_time++ < 2000000);
   gettimeofday(&gettime_now, NULL);
   end_time = gettime_now.tv_nsec;             //Get nS value
   time_diff  = end_time - start_time;
   distance = (time_diff * 17150) / 1000000;
   printf("Distance (C:%d S:%d E:%d) = %d cm\n", save_time,start_time,  end_time,distance);

Ultrasoon sensor HC-SR04 Dit werkt in mijn project prima, wel is het oppassen dat bij gebruik van meerdere sensoren u voldoende tijd neemt tussen twee metingen zodat de sensor niet de echo van een andere (vorige) meting opvangt. Hier ben ik ooit eens ingestonken, waardoor ik zeer vreemde afstandmetingen kreeg. Ook is de spreiding van het signaal niet recht maar waaiervormig waardoor de echo op langere afstand niet van recht achter de module kan komen, hier moet u ook rekening mee houden. Hoe dichterbij hoe minder het waaier effect is en hoe meer u kunt aannemen dat het echo object ook recht achter de sensor staat.

5 volt naar 3v3 omzetten Aangezien deze module op 5 Volt werkt is ook het uitgansignaal van de echo pin 5 Volt. Dit kunnen we niet zomaar aansluiten op een 3v3 ingang van bijvoorbeeld een Raspberry Pi omdat we deze dan opblazen. Hiervoor hebben we dus een 5 naar 3v3 omzetter nodig en wie een beetje electro kennis heeft, weet dit met twee weerstanden gemaakt kan worden. De volgende schakeling geeft aan hoe dit werkt, voor de weerstanden kan ook 3k3 en 4k7 gebruikt worden, het gaat om de verhouding tussen beide weerstanden. Het knooppunt van beide weerstanden kunt u rechtstreeks op de GPIO ingang van de Raspberry Pi aansluiten.

Cyn70 infraroodsensor

cyn70 infrarood sensor wiel encoder Om de draaisnelheid en de afstand die wielen afleggen te kunnen meten heeft u een vorm van terugkoppeling nodig. Hiervoor zijn zeer dure motoren met ingebouwde encoders te koop maar deze zijn voor de hobbyist niet echt betaalbaar te noemen. Een goede goedkope oplossing is een infrarood zender/ontvanger om een zwart en wit patroon op een schijf naast of op het wiel te lezen. Bij een overgang van wit naar zwart zal het signaal naar hoog gaan en bij de overgang van zwart naar wit naar laag. Eigenlijk zijn het een hogere spanning en een lagere spanning, maar deze vallen bij de meeste processoren net binnen de 0 en 1 marge. Bij de meeste processoren kunnen ze dus rechtstreeks op de pennen van de processor aangesloten worden. Na wat onderzoek kwam ik uit op de CYN70 die tussen de 80 eurocent en de 2 euro per stuk kost. Samen met twee weerstanden heeft u voor weinig geld een complete betrouwbare sensor. Het geheel is een klein blokje met vier aansluitpennen waarin een infrarood led en een fototransistor zitten. Wanneer de reflectie van het licht van de infrarood diode op de fototransitoir valt, zal deze gaan geleiden en zo de spanning naar de ground trekken. Hier staat de datasheet van de cyn70! Voor het strepenpatroon heb ik het hier meegeleverd voorbeeld geprint en daarna met het lamineerapparaat van een plastic coating voorzien. Na het aftekenen en precies uitknippen kon ik het aan de binnenkant van het wiel plakken. De sensor moet wel redelijk dicht op het wiel gemonteerd worden, de datasheet geeft een paar millimeter aan, ik heb zelf de ervaring dat een half centimeter ook nog prima werkt. Maar hoe dichterbij hoe nauwkeuriger de meting is, zeker bij hogere snelheden van het wiel.

Na het aansluiten op bijvoorbeeld een Arduino kreeg ik nette pulsjes binnen, het signaal was helaas niet geschikt om een interrupt ingang aan te sturen, ik denk dat de flanken en de niveaus hiervoor niet goed genoeg zijn. Wanneer u dit wilt kunt u beter een kant en klaar board kopen waar ook een zogenaamde comperator of Schmitt trigger schakeling zit om het signaal mooi op te poetsen. Het signaal kan op een analoge ingang worden aangesloten maar ook digitaal werkt prima omdat de niveaus wel mooi in de nul en één gebieden vallen. Voor het uitlezen van de twee sensoren (elk wiel één) heb ik zelf op de Arduino een timer interrupt routine gemaakt de telkens de niveaus van de inputs vergelijkt met de vorige waarde en bij verschil een teller (voor deze sensor) ophoogt. Hiermee kan de afgelegde afstand per wiel gemeten worden en kunnen we de motoren gelijk laten lopen door ze sneller of langzamer te laten draaien.

wiel encoder schijf Dit is een wiel encoder schijf om af te drukken, sla de afbeelding op (dan is deze groter) en druk hem daarna af. Voor het beste resultaat is het handig om daarna de afdruk te lamineren of met doorzichtig plakplastic te bewerken.

Rotary encoder

rotary encoder motor Bij duurdere robots worden vaak motoren voor de aandrijving gebruik die voorzien zijn van een zogenaamde rotary encoder. Deze rotary encoder is aangesloten op de as van de motor of de as van het wiel en zal bij het draaien pulsen afgeven waarmee de mate van rotatie (vermenigvuldigd met de omtrek van het wiel) en dus de afstand die het wiel afgelegd heeft te berekenen is. Hiermee kunt u dus de afstand die de robot moet afleggen bepalen maar ook kunt u hiermee zorgen dat beide wielen gelijklopen en dezelfde afstand afleggen waardoor de robot recht vooruit kan rijden. Een groot probleem met dc motoren is dat ze vaak niet exact gelijk lopen bij dezelfde spanning. De oplossing is een terugkoppeling door middel van rotary encoders. Deze encoders kunnen op verschillende techniek gebaseerd zijn. De eerste methode werkt op basis van een schijfje met daarin kleine sleufjes die draait tussen een infrarood zender en ontvanger. Telkens wanneer een sleufje de lichtsluis passeert zal er een pulsje afgegeven worden en door deze pulsen te tellen kan de afgelegde afstand berekend worden. Deze modules zijn een paar euro per stuk en zijn al kant-en-klaar gemonteerd op een klein board te koop. Ze hebben 5 volt spanningslijnen en een trigger uitgang voor de microprocessor. Het probleem hierbij is het schijfje met sleuven dat meestal niet meegeleverd zal worden, er zijn echter complete setjes inclusief schijfje te koop. Deze constructie geeft echter alleen maar aan dat de as in beweging is, maar geeft geen richting aan. Een beter alternatief is een rotary encoder gebruiken die momenteel als vervanging van de potmeter gebruikt wordt.

rotary encoder pulsen Deze digitale potmeters hebben een zachte klik en ze zijn continue door te draaien. Ook deze encoders kosten een paar euro en hebben twee uitgangen en een ground pin. Via deze twee uitgangen kunt u een digitaal patroon lezen wat aangeeft of de knop links of rechtsom gedraaid wordt. Deze encoder geeft 48 stappen per volledige rotatie aan, met een omtrek van het wiel van 20 cm is dit dus 20 / 48 = 0,4 cm verplaatsing per click. Dit is voldoende om bij te sturen en afgelegde afstand te bepalen. De encoder gebruikt pin A en B als uitgangen, de A- en B-uitgangen gaan naar de GPIO ingangen op de Raspberry Pi waarbij de interne pull-up weerstanden aan moeten staan zodat deze hoog zijn wanneer de contacten zijn open en laag bij gesloten contacten. De ingangen genereren reeks pulsen zoals in het diagram weergegeven is. Omdat de uitgangen vier gecombineerde toestanden hebben staat deze encoder bekend als kwadratuur encoder. De volgorde van de pulsen bepalen de richting van de roatatie.

Voorbeeld code

int encoderPin1 = 2;
int encoderPin2 = 3;

volatile int lastEncoded = 0;
volatile long encoderValue = 0;

long lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;

void setup() {
  Serial.begin (9600);
  pinMode(encoderPin1, INPUT); 
  pinMode(encoderPin2, INPUT);
  digitalWrite(encoderPin1, HIGH); //turn pullup resistor on
  digitalWrite(encoderPin2, HIGH); //turn pullup resistor on
  //call updateEncoder() when any high/low changed seen
  //on interrupt 0 (pin 2), or interrupt 1 (pin 3) 
  attachInterrupt(0, updateEncoder, CHANGE); 
  attachInterrupt(1, updateEncoder, CHANGE);
}

void loop(){ 
  //Do stuff here
  Serial.println(encoderValue);
  delay(1000); // Some delay
}


void updateEncoder(){
  int MSB = digitalRead(encoderPin1); 
  int LSB = digitalRead(encoderPin2);
  
	//converting the 2 pin value to single number
  int encoded = (MSB << 1) |LSB; 
	//adding it to the previous encoded value
  int sum  = (lastEncoded << 2) | encoded; 
  if (sum == 0b1101 || sum == 0b0100 
	    || sum == 0b0010 || sum == 0b1011) encoderValue ++;
  if (sum == 0b1110 || sum == 0b0111 
	    || sum == 0b0001 || sum == 0b1000) encoderValue --;

  lastEncoded = encoded;
}

Hier staat een datasheet van een rotary encoder met afmetingen en beschrijving van de uitgansignalen.

Drukschakelaar

Drukschakelaar met Pull-up of Pull-down weerstand Een heel eenvoudige “sensor” voor een robot is een heel gewone drukschakelaar. De schakelaar kan zijn uitgevoerd met maak-, verbreek- of wisselcontact wat aangeduid word NO (normally open) of NC (normally closed). Wanneer we een schakelaar aansluiten op een Arduino ingang gebruiken we meestal een Pull-up of een Pull-down weerstand. Ik gebruik zelf meestal Pull-up weerstand waarbij de ingang in rust dus 1 is en bij het maken van het contact naar 0 zal gaan. Bij een Pull-down is de rust dus 0 en bij het maken van het contact dus 1. We gebruiken de weerstand om te zorgen dat de ingang een goed stabiel gedefineeerde stand heeft wanneer het contact niet gesloten is. Wanneer we de weerstand niet zouden gebruiken zou de ingang bij een niet gesloten contact “zwevend” zijn en dit kan dus verkeerde uitlees resultaten geven. Deze schakeling zal dus altijd een keiharde 0 of 1 geven op een ingang van de Arduino.

Reed-contact / schakelaar

Reed-contact / schakelaar Een reed-contact of magneetschakelaar bestaat uit twee schakelcontacten in een glazen buisje die gesloten kunnen worden door een magnetisch veld dat bijvoorbeeld afkomstig is van een permanente magneet. Het glazen buisje is gevuld met een edelgas zodat de elektrische stroom de schakelcontacten niet zal aantasten, ze hebben dus een behoorlijk lange levensduur. De meeste reed-contacten kunnen een maximale schakelfrequentie tot wel 300 Hz aan maar meestal zal dit niet van toepassing zijn. De schakelaar kan zijn uitgevoerd met maak-, verbreek- of wisselcontact wat aangeduid word NO (normally open) of NC (normally closed). Omdat de contacten in een glazen buisje zitten kunnen ze niet oxideren of vuil worden en kunnen ze daardoor gebruikt worden in stoffige of brandgevaarlijke omgevingen. Deze contacten worden veel gebruikt in bij modeltreinen waarbij ze tussen de rails gemonteerd worden en er een magneetje onder een locomotief of wagon geplaatst is. Maar ook zijn de sensoren van fietscomputers vaak reed-contacten met magneetjes in de spaken. Ook in alarmsystemen komen ze veel voor om bijvoorbeeld deuren en ramen te bewaken. In robots kunnen deze contacten ook gebruikt worden voor het detecteren van een magneet of sterk magnetisch veld. Een praktijk toepassing is een robot poes die onder de snuit een reed-contact heeft. In een speelgoed visje hebben we een magneet gezet en nu zal de robot poes herkennen dat er een visje onder zijn snuit gehouden wordt en eet en smakgeluiden gaan maken. Het aansluiten van een reed-contact werkt precies hetzelfde als een “normale” drukschakelaar.

Hevelschakelaars

hevel schakelaar Een goedkope basissensor is de hevelschakelaar, dit is een mechanische schakelaar met een uitstekende metalen lip die de schakelaar bediend. Deze schakelaars worden vaak ingezet om te zien of deuren of deksels van elektrische apparaten gesloten of open zijn. Ook worden ze gebruikt als eindstop detectie, maar ook in robots kunnen deze schakelaars zeer efficiënt zijn. In de meeste gevallen (wanneer de ingang van de processor al een pullup heeft) kan de schakelaar zo aangesloten worden op een input pin van de processor en aan de andere kan aan de ground. Wanneer de schakelaar open is zal de ingang dan logisch 1 zijn en wanneer de schakelaar gesloten is zal de ingang naar ground getrokken worden waardoor de ingang een logische 0 zal lezen. Wanneer de ingang geen pullup heeft kunnen we zelf de pin die naar de input gaat door middel van bijvoorbeeld een 10k weerstand aan de plus hangen. De hevel kan ook kunstmatig verlengd worden zodat er een voelspriet ontstaat waarmee de robot een wand of ander object kan detecteren. Dit gebruiken we bijvoorbeeld in de puur mechanische “beetlebot”. (BeetleBot) Hevelschakelaars zijn in veel maten te koop en de meeste hevelschakelaars zijn omschakelaars met een maak en verbreek contact in één behuizing. U kunt dus eenvoudig kiezen of de schakelaar in rust een logisch 1 of een logisch 0 af moet geven.

 

Boeken over zelfbouw robots

boek boek bestellen Voertuigen die zich schijnbaar zelfstandig voortbewegen, als door een onzichtbare hand gestuurd, oefenen op veel toeschouwers een grote aantrekkingskracht uit. Deze aantrekkingskracht wordt vaak gevolgd door de wens om zelf ook zo'n voertuig te bouwen, dus een eigen robot te construeren. De zelfbouw van dergelijke robotvoertuigen is echter geen sinecure. Wanneer men niet over de nodige kennis op dit gebied beschikt, zijn mislukkingen gegarandeerd. En het onvermijdelijke gevolg? Frustraties, vaak na onnodig grote investeringen, die in veel gevallen het voortijdige einde van een nieuwe hobby betekenen. Dit boek reikt de roboticus in spé de nodige basiskennis aan van mechanische constructies en elektronische systemen. Bovendien worden eenvoudige, gemakkelijk na te bouwen en goed functionerende systemen beschreven die de fantasie van de lezer zullen prikkelen en een bron van inspiratie zijn voor de eigen creativiteit. In dit boek worden niet alleen bouwbeschrijvingen van complete systemen gegeven, maar wordt ook een groot aantal modulaire componenten beschreven ten behoeve van aandrijving, voortbeweging, voeding en sensoren. De beschreven modules kunnen naar believen in eigen modellen worden ingebouwd waarbij aan de combinatiemogelijkheden geen grenzen zijn gesteld. Zelfbouw van robots is niet zo eenvoudig en ook niet zo goedkoop. Op een populaire manier geeft de schrijver een aantal hoofdelementen die voor de zelfbouwer belangrijk zijn: werkruimte, energie, voortbeweging en sensoren. In de opvattingen van de schrijver die zichzelf als een amateur presenteert, is kennis van mechanica, elektronica en informatica onontbeerlijk. Die punten krijgen dan ook aandacht. Aan het slot worden vier modellen, waaronder de lichtzoeker en de tafelrobot, beknopt behandeld en van kritische kanttekeningen voorzien. De tekst is duidelijk afgestemd op de creatieve zelfbouwer met doorzettingsvermogen. Er worden studieboeken en leveranciers van materialen aanbevolen en er zijn internetadressen.


boek boek bestellen Mobiele robots voor zelfbouw Gunther May Robots kunnen zich zelfstandig voortbewegen en lijken soms zelfs eigen beslissingen te nemen. Dit grensvlak tussen technologie en 'echte' intelligentie is bijzonder fascinerend. Het is dan ook niet verwonderlijk dat veel mensen een eigen robot willen - voor het uitvoeren van praktische taken, of alleen maar om mee te experimenteren en te spelen. De ontwikkeling en constructie van een eigen robot is een lange en vaak moeizame weg. U moet zich echter niet laten afschrikken door aanvankelijke mislukkingen, want het geeft veel voldoening om te zien hoe een zelfontworpen robot voor het eerst in actie komt! Dit boek biedt een praktijkgerichte inleiding in de robotbouw. Eerst wordt beschreven hoe een robot wordt gepland en in mechanisch opzicht kan worden gerealiseerd. Daarna wordt de aandacht in het bijzonder gericht op de ontwikkeling van elektronische stuurschakelingen. Hier worden verschillende mogelijkheden beschreven, vari nd van eenvoudige analoge schakelingen tot oplossingen met microcontrollers en CPLD's. De schrijver bespreekt ook op een begrijpelijke manier allerlei sensoren en actuatoren, alsmede communicatiemogelijkheden en technieken om gegevens op te slaan. Hierbij speelt ook de programmering van de robots een belangrijke rol. Het boek bevat gedetailleerde bouwbeschrijvingen voor vier verschillende robots. U kunt deze naar keuze gewoon nabouwen, of ze vervolmaken met uitbreidingen die aan uw eigen creativiteit ontspringen. De schrijver houdt zich in zijn vrije tijd al meer dan tien jaar bezig met het bouwen van robots, en werd daarvoor onder andere bij de 'Jugend forscht'-wedstrijd onderscheiden. Hij studeerde informatica/systeemtechniek en is wetenschappelijk medewerker aan het Institut f r Nachrichtentechnik van de Technische Universiteit Braunschweig.



Reacties op het onderwerp: Robots


32 - Techniek »  -  Robots »
2018-02-02 16:30:00
Hier kunt u vragen stellen en antwoorden geven die betrekking hebben op robots en robot elektronica en mechanica. Reacties zullen pas na goedkeuring geplaatst worden, dit kan enige tijd duren.
Reactie van een bezoeker van de site!
Vragen en antwoorden m.b.t. tot robots en robot elektronica en mechanica.
Er zijn nog geen reacties!


Last update: 05-03-2015
 Binnen dit thema



 Meer thema's


 Lees hier de privacyverklaring van deze site.

Disclaimer.

Hoewel de heer Hein Pragt de informatie beschikbaar op deze pagina met grote zorg samenstelt, sluit de heer Pragt alle aansprakelijkheid uit met betrekking tot de informatie die, in welke vorm dan ook, via zijn site wordt aangeboden. Het opnemen van een afbeelding of verwijzing is uitsluitend bedoeld als een mogelijke bron van informatie voor de bezoeker en mag op generlei wijze als instemming, goedkeuring of afkeuring worden uitgelegd, noch kunnen daaraan rechten worden ontleend. Op de artikelen van de heer Pragt op deze Internetsite rust auteursrecht. Overname van informatie (tekst en afbeeldingen) is uitsluitend toegestaan na voorafgaande schriftelijke toestemming van de rechthebbende. Voor vragen over copyright en het gebruik van de informatie op deze site kunt u contact opnemen met: (email: mail@heinpragt.com). Dit is mijn