De ultrasone afstandssensoren geven een simpele manier om met de Arduino afstanden te meten. Het maakt daarbij gebruik van ultrasoon geluid.
Het meetproces van de ultrasone afstandsensor
Een ultrasoon sensor maakt dus gebruik van ultrasoon geluid om afstand te meten. Maar hoe werkt dit precies?
Op een ultrasoon sensor module zit zowel een zender als een ontvanger. Dit zijn de twee onderdelen die eruitzien als oogjes. Bij de zender staat een T, dit komt van het Engelse woord transmitter. Bij de ontvanger staat een R van het Engelse woord receiver.
Wanneer we een meting starten, worden er vanuit de zender ultrasone geluidsgolven uitgezonden. De frequentie van dit geluid is zo hoog dat mensen deze niet meer kunnen horen. Bovendien is ook het volume vrij laag.
De geluidsgolven zullen op de geluidssnelheid door de ruimte heen bewegen. Totdat er iets in de weg zit. Wanneer deze golven een object tegenkomen, worden ze weerkaatst. De golven zullen nu weer terug, in de richting van de sensor, bewegen.
De geluidsgolven zullen na een tijdje weer op de plek van onze sensor zijn. De golven planten zich nog verder voort. Maar de ontvanger herkent op dit moment dat de geluidsgolven weer terug gekomen zijn.
We zien dat het, bij de meting in de afbeeldingen, 1,8 miliseconden heeft geduurd totdat de geluidsgolven weer terug zijn gekomen. Omdat geluidsgolven zich op een bepaalde snelheid voortplanten, de geluidssnelheid, kunnen we dit gegeven gebruiken om de afstand van het object te berekenen.
De berekening
Op kamertemperatuur is de geluidssnelheid 343 meter per seconden. Elke seconde zal een geluidsgolf dus 343 meter afleggen.
Een milliseconde is een duizendste van een seconde. In een milliseconde zal een geluidsgolf ook een duizendste van 343 meter afleggen. Dit is 0,343 meter of 34,3 centimeter.
In de meting hierboven zien we dat het geluid er 1,8 milliseconden over heeft gedaan om naar een object toe te gaan, en weer terug te komen. De afstand die de geluidsgolven hebben afgelegd is dan ook ‘1,8 milliseconden keer 34,3 centimeter is’ 61,7 centimeter.
De geluidsgolven hebben in totaal dus 61,7 centimeter afgelegd. Het object zal zich precies op het halverwege punt van deze afgelegde route bevinden, dit komt doordat de route naar het object toe even lang is als de route van het object van het object af, terug naar de sensor. Het object zit dus op een afstand van ‘61,7 delen door 2 is’ 30,9 centimeter.
Geen meting
Het komt wel eens voor dat er geluidsgolven uitgezonden worden die nooit terugkomen. Dit kan komen doordat de geluidsgolven:
- Niet in de richting van de sensor weerkaatst worden.
- Onderweg geen object tegenkomen en dus helemaal niet worden weerkaatst.
- Zo een grote afstand hebben afgelegd dat de amplitude (het volume) zo klein is dat de geluidsgolven niet meer worden herkend door de ontvanger.
In deze gevallen zal de ultrasoon sensor, afhankelijk van het type, nooit het signaal geven dat er een geluidsgolf ontvangen is, of na een bepaalde tijd, toch doen alsof de module een geluidsgolf herkend heeft. In het laatste geval zal het lijken alsof er een hele grote afstand gemeten is. De HC-SR04, de module die hieronder uitgelegd wordt, maakt gebruik van de laatste methode.
De HC-SR04
Onder hobbyisten is de meest gebruikte ultrasoon sensor de HC-SR04. Dit komt doordat dit een ontzettend goedkope en makkelijk te gebruiken module is. Ook wij maken in onze werkplaats voornamelijk gebruik van dit type sensor. Voor deze module is de volgende datasheet beschikbaar.
Pinout van de HC-SR04
De HC-SR04 heeft vier pinnen. Dit zijn VCC, GND, Triger en Echo.
Om de module van stroom te voorzien zullen de VCC en GND aan een 5 volt spanningsbron moeten worden aangesloten. Dit mag een Arduino zijn.
Om een meting te starten kunnen we een kort signaal over de triger pin sturen. We zetten de triger pin minimaal voor 10 microseconden op 5 volt. Wanneer de ultrasone golven uitgezonden zijn, zet de module de echo pin op 5 volt. Wanneer de ultrasone golven weer ontvangen zijn, wordt de echo pin weer op 0 volt (ground) gezet. Het hele proces zal er op een oscilloscoop dus als volgt uitzien:
Met de Arduino afstand meten
Om met de HC-SR04 sensor te werken maken wij in onze werkplaats over het algemeen gebruik van de ‘HCSR04’ library door ‘Martin Sosic’. Je hoeft echter niet gebruik te maken van een library, het lab hierover is nog in ontwikkeling. Maar het maakt het schrijven van code wel een stuk makkelijker.
De HCSR04 library bevat de volgende voorbeeldcode:
#include <HCSR04.h> UltraSonicDistanceSensor distanceSensor(13, 12); // Initialiseer de sensor met de triger pin op D13 en de echo pin op D12. void setup () { Serial.begin(9600); // Initialiseer Serial, zodat we op de computer gebruik kunnen maken van de seriële monitor } void loop () { Serial.println(distanceSensor.measureDistanceCm()); // Doe een meting, en stuur deze door naar de seriële monitor delay(500); // wacht 500 milliseconden = 0,5 seconden }
Om te snappen hoe deze code werkt, delen we het op in stukjes.
#include <HCSR04.h>
Met deze code geven we aan dat we gebruik willen maken van de HCSR04 library. Dit zorgt er dus voor dat Arduino deze library in zal laden.
UltraSonicDistanceSensor distanceSensor(13, 12);
We geven aan dat we gebruik willen maken van een ultrasoon sensor met de triger pin D13 en de echo pin D12. We geven deze sensor de naam ‘distanceSensor’, dit zou ook wat anders mogen zijn als het maar begint met een letter. Ook zouden we de pinnen die we willen gebruiken aan kunnen passen, we kunnen 12 en 13 veranderen in elke andere pin, om de analoge pinnen te gebruiken vullen we bijvoorbeeld A0 of A1 in.
distanceSensor.measureDistanceCm();
Met de code hierboven starten we een meting op de module met de naam distanceSensor, de afstand zal in centimeters gegeven worden.
Maar wat doen we met het resultaat van deze meting?
double afstand = distanceSensor.measureDistanceCm();
We zouden het resultaat in een variabele kunnen stoppen, zodat we dit getal later in de code kunnen gebruiken. Dit krijgen we met de code hierboven voor elkaar.
Of we kunnen gebruik maken van een if-statement om onze code alleen uit te voeren wanneer de afstand groter is dan bijvoorbeeld 50 centimeter:
if(distanceSensor.measureDistanceCm() > 50){ // De code die we hier neetzetten zal uitgevoerd worden als de gemeten afstand groter is dan 50 centimeter }else{ // Als de afstand kleiner is dan 50 centimeter zal de code die we hier neerzetten worden uitgevoerd }
De ultrasone afstandsensor gebruiken met de Arduino
Nu dat je weet hoe de ultrasoon sensor werkt, kun je deze ook in jouw projecten gebruiken. Heb je nog geen project? Geen probleem, wij hebben ook labs die je kunt volgen! Volg bijvoorbeeld het lab ‘Arduino afstand Smiley’.