NLT

FME les 15: HC-SR04 parkeersensor

Bij deze les zit er geen aansluitschema bij op de site, dus we moesten er zelf achter komen wat we waar moesten aansluiten. Wij hebben dus zelf een schema moeten tekenen, hierbij hebben wij een programma gebruikt waarbij er een andere soort sensor is die op een andere manier moet worden aangesloten. In de plaats van hoe de sensor op het plaatje is aangesloten bestaat de SIG bij onze code niet, in de plaats daarvan zijn er een TRIG die aan pin 2 zit en een ECHO die aan pin 4 zit. Ook de 5V op de sensor bestaat bij ons niet, in de plaats daarvan hebben we een VCC die op dezelfde manier als de 5V op de tekening wordt aangesloten.

voorbeeld

De code die hiervoor wordt gebruikt staat hieronder. Alles tussen /* en */ telt niet mee en alles wat op een regel na // wordt geschreven ook niet.

/* HC-SR04 parkeersensor    Deze sketch maakt met een HC-SR04 een parkeersensor. Er is een seriele    monitor aan gekoppeld om het moment te kunnen bepalen waarop de led moet gaan    branden is in te stellen.    Het schema maak je nu zonder plaatje:   
HC SR04:     
* VCC aan +5V     
* GND aan GND     
* TRIG aan pin 2     
*ECHO aan pin 4   
Led aan pin 13 (denk bij het aansluiten aan de weerstand van 330 ohm) */

const int trigPin = 2;
const int echoPin = 4;
const int led = 13;
long duration;

void setup() {
pinMode (led, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}

void loop() {
digitalWrite(trigPin, LOW); //maak een signaal wat je uit zendt
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // lees het signaal wat terugkomt
// op de echoPin, de tijd die tussen uitzenden en ontvangen zit is
// maatgevend voor de afstand, de tijd is in microseconden
Serial.print(duration);     // geef de echo-tijd weer in de seriele monitor
Serial.println();
delay(100);
if (duration < 1000){     // als de echotijd kleiner is dan 100 dan…
digitalWrite (led, HIGH); // zet de led aan
}
else {                     // anders..
digitalWrite (led, LOW);   // zet de led uit..
}
}
/* je kan deze parkeersensor natuurlijk veel verder uitbreiden. Meer ledjes, een geluidsignaal… */

Hieronder staat de uitleg van wat elk deel  van de code doet, de code staat tussen blokhaken [] en daaronder staat de uitleg voor dat deel.

[const int trigPin = 2;
const int echoPin = 4;
const int led = 13; ]
Dit vertelt aan de arduino welk apparaat aan welke pin is aangesloten. (bijvoorbeeld: de trigPin is aangesloten aan pin 2)

[long duration;]
Hierbij geeft ‘long’ aan dat de variabele een heel groot getal kan zijn.

Dan komt de setup.
[void setup() {
pinMode (led, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
} ]
De pinMode vertelt aan de arduino of de pin signalen verstuurt of ontvangt. (OUTPUT betekent dat de arduino signalen naar deze pin stuurt terwijl INPUT betekent dat de arduino hier signalen van ontvangt.)
Serial.begin geeft aan hoe veel informatie er per seconde wordt verstuurd. Hierbij is de waarde 9600 ingevoerd omdat dit een waarde is die de computer kan ontvangen. Er zijn ook andere waarden mogelijk maar hier gebruiken we deze.

Nu komen we bij de loop. Het eerste deel hiervan is om een geluidssignaal te sturen.
[void loop() {
digitalWrite(trigPin, LOW); //maak een signaal wat je uit zendt
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); ]
Eerst zorg je ervoor dat er een tijd is zonder geluidssignaal door het uit te zetten en er een delay van 2 microseconden bij te doen. Een delay zorgt ervoor dat de arduino even niets verandert. Daarna moet er heel even geluid zijn, dit is door een geluid te maken en een delay van 10 microseconden te gebruiken. Daarna zet je het weer uit. Als laatste zeg je dat duration de tijd is tot de echoPin het uitgezonden signaal weer terugkrijgt.

[Serial.print(duration);
Serial.println();
delay(100);
if (duration < 1000){
digitalWrite (led, HIGH);
else {
digitalWrite (led, LOW);
}
} ]
Met de serialprints wordt de waarde van duration voor de arduino opgeschreven. Daarna wordt een delay gebruikt. Uiteindelijk komt een if/else, die zorgt ervoor dat bij een duration onder 1000 de led aan gaat en anders uitgaat.

Hiermee is de loop geëindigd. De code is klaar en wordt steeds herhaald.

Om een ingewikkelder systeem te maken kun je een if/else if/else gebruiken. Je kunt hiermee zo vaak als je wilt een else if gebruiken op dezelfde manier dat je een if gebruikt. Door bij elke else if een andere interval te gebruiken voor de duration (zoals 1000 < duration < 2000) zonder overlap te krijgen kun je op verschillende afstanden verschillende effecten maken. Zo kun je een snel of langzaam knipperend licht gebruiken. Je zou ook een zoemer in de plaats van een led kunnen aansluiten.

Door Ilonka van Vliet en Sophie Huyzen

Leave a Reply