Ik vind het belangrijk dat Bas on Tech door iedereen kosteloos gebruikt kan worden.
Help mij de toekomst van Bas on Tech te verzekeren. Je donatie zal o.a. worden gebruikt voor hosting, video's en onderhoud.
Alvast bedankt!
iDEAL en Bancontact vind je onder het "Direct Debit" tabblad in de 4e stap.
Benieuwd hoe je een ultrasoon geluidsensor kunt uitlezen? In de deze Nederlandstalige Arduino tutorial voor beginners leg ik je dit precies uit 😃
Onderaan op deze pagina vind je de knop lesmateriaal waarmee je het lesmateriaal kunt downloaden. Dit materiaal bestaat uit de code, schakelschema en andere bestanden die in de les worden gebruikt.
Ultrasoon geluid is geluid wat wij als mensen niet kunnen horen. De frequentie is simpelweg te hoog. Er zijn wel dieren die dit geluid kunne horen zoals vleermuizen, honden en dolfijnen. Zo geeft bijvoorbeeld een hondenfluitje een ultrasoon geluid.
In deze les maken we gebruik van de HC-SR04 ultrasoon afstandssensor Deze maakt gebruik van ultrasoon geluid om een afstand te bepalen.
De sensor heeft twee "ogen", ieder gemarkeerd met een letter:
T
is de zender (Transmitter)R
is de ontvanger (Receiver)Voorwerpen weerkaatsen ultrasoon geluid. Doordat deze sensor geluid kan zenden ontvangen is het mogelijk de afstand te berekenen. Dit doet hij door geluid uit te zenden en vervolgens te meten hoe lang het duurt voordat de ontvanger dit geluid terug hoort. Het is bekend hoeveel afstand geluid in een bepaalde tijd kan afleggen. Op deze manier kunnen we aan de hand van de verstreken tijd tussen zenden en ontvangen, berekenen wat ongeveer de afstand is.
De sensor heeft naast de bekende 5V
en GND
nog twee speciale pins: Trig
en Echo
. Als de trigger
pin HIGH
is begint de HC-SR04 sensor met zenden. De echo
pin wordt HIGH
als de ontvanger geluid ontvangt.
💡 Het is belangrijk dat we straks de berekende afstand door 2 delen. Het geluid is immers eerst naar het object toegegaan en daarna teruggekaatst. De afstand is dus 2x afgelegd.
Druk de HR-SR04 in het breadboard en sluit de volgende jumper wires aan:
5V
op de Arduino -> de linker pin van de sensor12
op de Arduino -> de trig pin van de sensor8
op de Arduino -> de echo pin van de sensorGND
op de Arduino -> de rechter pin van de sensorWe beginnen de code met het definiëren van drie variabelen:
1 const int trigPin = 12;
2 const int echoPin = 8;
3
4 float duration;
5 float distance;
trigPin
is de pin waarop we de trigger
hebben aangeslotenechoPin
is de pin waarop we de echo
hebben aangeslotenduration
is de verstreken tijddistance
is de gemeten afstand1 void setup() {
2 Serial.begin(9600);
3 pinMode(trigPin, OUTPUT);
4 pinMode(echoPin, INPUT);
5 }
Als eerste initialiseren we de seriële monitor. Daarna stellen we de trigPin
in als uitvoer en de echoPin
als invoer.
1 // Herhaal oneindig
2 void loop() {
3 digitalWrite(trigPin, LOW);
4 delayMicroseconds(2);
5
6 digitalWrite(trigPin, HIGH);
7 delayMicroseconds(10);
8 digitalWrite(trigPin, LOW);
9
10 duration = pulseIn(echoPin, HIGH);
11 distance = (duration * 0.0343) / 2;
12
13 Serial.print("Afstand: ");
14 Serial.println(distance);
15
16 delay(100);
17 }
In de code zien we een nieuwe functie delayMicroseconds()
. Eerder maakte we al gebruik van delay()
deze pauzeert een aantal milliseconden. De delayMicroseconds()
is nog wat preciezer en pauzeert in microseconden.
De loop()
functie bestaat uit 4 delen:
trigPin
voorbereidenWe beginnen met er zeker van zijn dat trigPin
op LOW
wordt ingesteld en dus niet aan het zenden is. Hierna kunnen we beginnen om 10 microseconden ultrasoon geluid uit te zenden. Dit doen we door trigPin
op HIGH
in te stellen en vervolgens met delayMicroseconds()
pauzeren. Daarna stoppen we het zenden door de trigPin
weer op LOW
in te stellen. Het geluid is weggestuurd en nu wachten we totdat het geluid terugkomt.
De pulseIn()
functie is een speciale functie om de lengte van een puls te meten. Deze kan een wisseling van LOW
naar HIGH
zijn, of omgekeerd. pulseIn()
heeft 3 parameters waarvan de laatste optioneel is:
LOW
of HIGH
Als we in onze code kijken dan zien we:
1 pulseIn(echoPin, HIGH);
Dit betekend dat we wachten totdat de echoPin
van LOW
naar HIGH
gaat. Zoals hieronder schematisch is weergegeven:
Zodra deze verandering wordt waargenomen begint het meten van de verstreken tijd. De timer stopt als de waarde weer terug veranderd van HIGH
naar LOW
.
We kunnen ook het omgekeerde doen:
1 pulseIn(echoPin, LOW);
In dit geval wachten we totdat de pin van HIGH
naar LOW
veranderd en starten dan de meting.
Nu we weten hoe pulseIn()
werkt, is onderstaande code makkelijk te begrijpen.
1 duration = pulseIn(echoPin, HIGH);
2 distance = (duration * 0.0343) / 2;
We beginnen met het meten van hoe lang het geluid onderweg is geweest. Hiervoor zetten we pulseIn()
op de echoPin, en wachten totdat het geluid terugkomt. We weten nu de tijd tussen het verzenden en ontvangen van het geluid. Dit slaan we op in duration
.
Om de afgelegde afstand te berekenen moeten we eerst de snelheid van het geluid weten. Deze is 343
meter per seconde. Dit gelijk aan 0.000343
meter per microseconde.
We willen echter het aantal centimeters per microseconde weten. Een meter is 100
centimeter. Dus vermenigvuldigen we 0.000343
met 100
. Zo komen we op 0.0343
centimeter per seconde.
Omdat het geluid de afstand twee keer aflegd, moeten we deze waarde door 2
delen om de afstand in centimeters te krijgen.
🎓 Met hoeveel hadden we moeten vermenigvuldigen om de afstand in millimeters te krijgen?
Ons programma is nu klaar om naar de Arduino te worden gestuurd. Open hierna de seriële monitor:
Beweeg nu je hand van de sensor af en naar de sensor toe. Als het goed is zie je de afstand tot je hand in de seriële monitor.