Les 7, Obstakels vermijden

Tijdens deze les leer je de afstandssensor (sonar) voor de Simple Walker gebruiken.

1
Sluit je SimpleWalker-robot aan op de computer met een USB-kabel.

charging

2
Net als voor de servo’s heb je voor de sonar een library nodig om hem aan te sturen. Deze library zit helaas niet standaard in de Arduino omgeving, dus die zal je eerst moeten downloaden en installeren. Klik hier voor de download en instructies.
3
Eerst moet je de bijbehorende library (bibliotheek) aanroepen:

4
Vervolgens maken we een nieuwe variabele aan voor de sonar:

5
Aan de sonar geven we drie waardes mee: de trigger-pin (pin 10) de echo-pin (pin 16), en de maximale afstand die de sonar kan meten (200 cm).
6
Vervolgens definiëren we een variabele voor het bijhouden van de afstand:

7
Nu willen we iets doen met de gemeten afstand. We gaan de LED besturen met de sonar. Hiervoor moeten we, net als in de vorige opdracht pin 13 als output configureren. Dat doen we in de setup-functie:

8
Vervolgens kunnen we in de loop-functie de afstand meten. Als de afstand kleiner is dan 15 cm, dan zetten we de LED aan. Als de afstand groter of gelijk is aan 15 cm dan zetten we de LED uit:

Dit stuk code bevat een aantal nieuwe concepten, dus laten we er stap voor stap doorheen lopen:

De eerste regel meet de afstand met de sonar en kent de gemeten waarde toe aan de variable afstand:

Het volgende stuk code maakt gebruik van de if()-else()-constructie. Hiermee is het mogelijk om het programma verschillende dingen te laten doen, afhankelijk van de gemeten waarde. De algemene constructie ziet er als volgt uit:

In dit geval zetten we de LED aan als de afstand kleiner is dan 15 cm:

En anders (als de afstand groter of gelijk is aan 15 cm) zetten we de LED uit:

Ten slotte laten we het programma even pauzeren voordat het weer opnieuw begint.

9
De volledige code wordt dus als volgt:

Opdrachten

Opdracht 1 – Sonar met LED

Kopieer de bovenstaande code en sla op onder de naam Lesbrief5Opdracht1. Upload de code naar de Simple Walker en kijk of deze werkt. Wat gebeurt er als je je hand op 10 cm van de sonar module houdt? Wat gebeurt er als je je hand op 20 cm houd?

N.B. Het kan zijn dat de NewPing-library niet is geïnstalleerd. In dat geval krijg je een foutmelding:

In dit geval moet je de NewPing-library installeren. Ga daarvoor naar de downloads-sectie.

Opdracht 2 – Maximaal bereik

Als de gemeten afstand groter is dan 200cm gebeurt er iets geks, dan is het gemeten object buiten het bereik van de Sonar. In dat geval gaat de LED aan. Dit komt omdat de functie sonar.ping_cm(); 0 geeft als het gemeten object te ver is. Dit is onwenselijk gedrag.

Kan je de code zo aanpassen dat in dat geval de LED ook aangaat als het gemeten object buiten het bereik valt?

TIP: Je kan dit oplossen door de testconditie aan te passen. Verander de conditie (afstand < 15) in (afstand < 15 && afstand > 0).

Sla het programma op onder de naam Lesbrief5Opdracht2.

Opdracht 3 - Lopen

Je hebt in de vorige les (Les 4) de Simple Walker laten lopen. Combineer de programma's van deze en de vorige les zodat de robot obstakels gaat vermijden: Normaal gesproken loopt de Simple Walker vooruit, maar als hij een obstakel tegenkomt zet hij een aantal stappen achteruit. Sla de code op onder de naam Lesbrief5Opdracht3.