mBot-tutorial: uitbreidingen installeren

Een robot maak je zelf eenvoudig op basis van een Arduino-microcontroller. Heb je eenmaal zo’n robotje rondrijden, dan houdt het knutselen niet op. In deze mBot-tutorial kijken we naar het installeren van uitbreidingen.

We laten in dit artikel een aantal mogelijkheden zien om de mBot uit te breiden. Op het einde volgt je robot lichtstralen in het donker, reageert hij op bewegingen of toont hij afhankelijk van de temperatuur een andere gezichtsuitdrukking. En alle mogelijke combinaties daarvan, want je programmeert je robot immers helemaal zelf.

Interactive Light & Sound Add-on Pack

Voor onze eerste uitbreiding hebben we het Interactive Light & Sound Add-on Pack voor de mBot gekocht. Dit geeft je robot ogen en oren. Het pakket bestaat uit licht- en geluidsensoren, een rgb-led, en bijbehorende kabels en onderdelen om alles te bevestigen. De handleiding komt met instructies voor drie robots: een robot die licht najaagt, een slimme bureaulamp die je inschakelt met je stem of met een beweging, en een robot in de vorm van een schorpioen.

We maken in deze masterclass gebruik van de robot die het licht najaagt. Dit is een uitbreiding van de standaard mBot uit ons vorige artikel, dus we kunnen direct verdergaan met de instructies van de uitbreiding. Je monteert aan de twee zijkanten van de voorkant van de robot een balkje en op elk balkje plaats je een lichtsensor. Gebruik voor dat laatste de schroevendraaier die bij de mBot geleverd wordt, maar let erop dat je de steel er zo insteekt dat je een zeshoekige kop hebt.

Als je de mBot uit ons vorige artikel nog hebt staan met de standaard bekabeling, dien je nóg iets te veranderen. De lijnsensor (onderaan de mBot) mag in rj25-connector 2 blijven, maar de ultrasone sensor steek je in connector 1 in plaats van 3. De twee lichtsensoren zijn immers analoge sensoren, die we met connectoren 3 en 4 moeten verbinden.

De hardware is dus klaar, nu is het tijd om onze aangepaste robot opnieuw te programmeren. Het programma lijkt heel wat op die van de lijnvolger in het vorige artikel en is eigenlijk vrij eenvoudig. We definiëren twee snelheden: snel en traag. En dan herhalen we de hele tijd een lus.

In die lus gebeuren drie tests: als de lichtsensor op poort 3 (links) een hogere lichtintensiteit registreert dan de lichtsensor op poort 4 (rechts), laten we de motor op poort M2 (de rechtermotor) sneller draaien dan de motor op poort M1 (de linkermotor). In het andere geval sturen we de motoren andersom aan. En als beide sensoren dezelfde lichtintensiteit registreren, laten we beide motoren even snel draaien.

Verbind je mBot via de usb-kabel met je pc. Open dan in het menu Verbinden het onderdeel Seriële Poort en kies de poort die in het submenu staat, zoals COM3. Klik daarvoor eerst op het menu Bewerken / Arduino mode. Rechts krijg je nu de Arduino-code te zien die overeenkomt met je mBlock-programma. Klik bovenaan rechts op Upload naar Arduino. Als er Upload gelukt staat, staat het programma op je mBot en kun je de kabel verwijderen.

Media has no description

© PXimport

Plaats je robot nu in een volledig verduisterde kamer en schakel hem in. Schijn met een zaklamp (of de flits van je smartphone) op de vloer. Als je links van de robot schijnt, volgt de robot je licht naar links. Schijn je rechts, dan maakt hij een bocht naar rechts. En schijn je recht vooruit, dan volgt hij je vooruit. Dat werkt het best als de kamer volledig verduisterd is, want anders komt er ook ander licht op de sensoren en reageert hij dus niet alleen op het licht dat jij schijnt.

Als de robot te traag rijdt en zijn draaicirkel daardoor te groot is, verander dan de waarde van de variabelen traag en snel in de code en upload het programma opnieuw. De code is uiteraard ook nog uit te breiden. Zo maken we momenteel geen gebruik van de lijnvolger en de ultrasone sensor. We houden het als een oefening voor de lezer om het programma uit te breiden zodat het dankzij de ultrasone sensor niet meer botst tegen objecten.

PIR-bewegingssensor

Een andere interessante sensor is een PIR-bewegingssensor. Die detecteert beweging tot op ongeveer zes meter afstand. Als we de lichtsensoren weer van de mBot afhalen en er een PIR-bewegingssensor op aansluiten, geven we onze robot plots heel wat andere mogelijkheden. Naast de sensor zie je op de sensormodule trouwens een klein schroefje met de tekst DISTANCE. Dat is een potentiometer waarmee je het bereik van de sensor instelt door eraan te draaien.

We schrijven nu een klein programma dat onze robot doet voortbewegen zolang hij beweging detecteert en doet stoppen zodra hij geen beweging meer detecteert. Dat is heel eenvoudig. We maken weer een herhaal voor altijd lus met daarin een als... dan... anders test. We testen met PIR bewegings sensor op Poort 3 = 1 op beweging, en we schakelen in dat geval beide motoren op dezelfde snelheid in. Is er geen beweging, dan schakelen we beide motoren uit door hun snelheid op 0 te zetten.

Led-matrix

Tot nu toe hebben we onze robot alleen maar uitgebreid met sensoren om op allerlei omstandigheden te reageren. Maar de reacties bleven altijd hetzelfde: de robot beweegt. Met een ledmatrix kunnen we daar iets aan doen: daarmee geven we onze robot een gezicht. Deze component heeft 128 blauwe leds in een matrix van 16 bij 8. Alle leds zijn individueel te programmeren om icoontjes of tekst te tonen. We monteren de ledmatrix in de plaats van de ultrasone sensor op de mBot.

Media has no description

© PXimport

Verwijder het bruine plastic laagje aan de voor- en achterkant van het ‘gezicht’. Je houdt nu een halfdoorzichtig acrylaat plaatje vast. Plaats de voorkant van de ledmatrix tegen dit plaatje en bevestig het met de meegeleverde plastic schroefjes eraan vast. Verwijder met de zeshoekige schroefkop de ultrasone sensor van de voorkant van de mBot en gebruik de twee schroefjes om daarvoor in de plaats het ‘gezicht’ van de ledmatrix te monteren. We sluiten de rj25-connector aan op poort 1.

We beginnen van ons bewegingsprogramma, maar voegen aan de tak waarmee de test beweging detecteert nog een opdracht toe om de tekst ‘Hoi’ op de ledmatrix te tonen. Zoek bij de scripts in de categorie Robots naar de component wijzig matrix display op Poort 1 x: 0 y: 0 tekst: Hi en verander de tekst Hi in Hoi. In het geval dat er geen beweging meer is, verander je de tekst in een spatie. Zo begroet onze robot ons als we in zijn gezichtsveld bewegen en komt het gezichtje terug als er geen beweging is.

We kunnen dus een korte tekst op de ledmatrix tonen. En met de opdracht wijzig matrix display op Poort 1 10 uur : 20 min toon je een tijdstip. Maar er is nog een interessante opdracht: wijzig matrix display op Poort 1 x: 0 y: 0 tekening:. Als je deze naar je programma sleept en op het vakje naast tekening klikt, krijg je de matrix in het groot te zien op een canvas, waar je elk van de leds individueel kunt in- of uitschakelen.

Standaard staan er al twee afbeeldingen bij de favorieten onderaan: een lachend gezichtje en een omgekeerd lachend gezichtje (voor als je de ledmatrix omgekeerd hebt gemonteerd). Als je zelf een afbeelding hebt gemaakt, kun je die ook in de favorieten opslaan, zodat je die niet voor elk programma waarin je het wilt gebruiken opnieuw hoeft aan te maken. Overigens zijn er ook knopjes om je afbeelding te spiegelen of te roteren. Als je een afbeelding gekozen hebt, klik je onderaan op Klaar en wordt die afbeelding in de opdracht gebruikt.

Media has no description

© PXimport

Een andere manier om de robot te laten reageren op zijn omgeving is met een rgb-led uit het Interactive Light & Sound pack. Zo kun je verschillende kleuren tonen. Verwijder de ledmatrix van de voorkant en bevestig er met twee M4x14 schroeven een brede balk uit het Interactive Light & Sound Pack op. Bevestig aan de bovenkant van de balk de rgb-led met twee M4x14 schroeven en twee moeren. Verbind de rgb-led door een rj25-kabel met poort 1.

Dat is het voor de hardwarekant. De softwarekant is even eenvoudig: in je mBlock-programma gebruik je de opdracht set led Poort 1 alles red ... green ... blue .... Bij red, green en blue vul je telkens waarden van 0 tot en met 255 in. Met de combinatie van deze drie waarden kun je 16,7 miljoen kleuren weergeven.

Op deze manier tonen de vier leds van de rgb-ledmodule dezelfde kleur. Maar je kunt ze ook elk individueel aansturen. Om maar één led in te schakelen, zet je ze eerst allemaal op 0 en geef je dan één led een kleur. De bovenste led is led1 en de volgende krijgen hun nummer met de klok mee. Zo kun je de vier leds gelijktijdig een andere kleur laten zien.

Aan de slag met de rj25-adaptermodule

Nu kun je wel allerlei componenten van Makeblock aankopen, maar wat als je al sensoren of andere componenten in huis hebt, bijvoorbeeld van eerdere experimentjes met Arduino of een Raspberry Pi? Gelukkig zijn die in veel gevallen eenvoudig te hergebruiken. Makeblock heeft immers een handige rj25-adapter die aan de ene kant een rj25-connector heeft om op je mBot aan te sluiten en aan de andere kant losse aansluitingen.

Als je hier een willekeurige component op wilt aansluiten, zul je zelf wel wat huiswerk moeten doen voor de signalen van de component. De rj25-adaptermodule heeft 6 I/O-poorten die de aanduiding SCL, SSA, GND, VCC, S1 en S2 krijgen. S1 en S2 zijn in te zetten als in- en uitvoer voor zowel digitale als analoge signalen. SCL is de I²C-klokbus, terwijl SDA de I²C-databus is. Beide zijn te gebruiken als je sensoren wilt aansluiten die de I²C-bus ondersteunen. GND is de aarding en op VCC staat 5 V.

Die 6 I/O-poorten zijn op meerdere manieren toegankelijk. De eenvoudigste manier is via twee 3-pins-connectoren waarin je jumperwires kunt steken. Slot 1 (P1) heeft drie pinnen met signalen S1, VCC en GND, terwijl slot 2 (P2) drie pinnen met signalen S2, VCC en GND heeft.

Hier sluit je bijvoorbeeld digitale sensoren op aan die het 1-Wire-protocol gebruiken. Die werken met drie kabels: een signaalkabel, aarding en 5 V (het protocol heet 1-Wire omdat de data slechts één signaalkabel nodig hebben). Daarnaast bevat de adaptermodule ook uitsparingen voor de 6 I/O-poorten (in het blok P3) waarop je rechtstreeks kabels kunt solderen.

Temperatuursensor

We illustreren de werking van de rj25-adaptermodule door een DS18B20-sensor op onze mBot aan te sluiten. Dit is een populaire digitale temperatuursensor van Maxim IC die met het 1-Wire-protocol werkt. Die is er in diverse uitvoeringen: alleen de chip of met een kabel (al dan niet waterdicht) om temperaturen op grotere afstanden te meten, met blote draad of met een 3-pins-connector.

We kozen voor de waterdichte uitvoering met connector, zodat die eenvoudig op de rj25-module aan te sluiten is. Andere uitvoeringen zijn geen probleem, dan heb je alleen wat meer voorbereidend werk voor het aansluiten.

We monteren de rj25-adapter opzij aan de achterkant van de mBot en sluiten die aan op poort 3. De DS18B20-temperatuursensor sluiten we aan op de 3-pins-connector van slot 1 van de rj25-adaptermodule. De kabel van de sensor leiden we door de mBot, zodat de kop van de sensor vooraan de mBot hangt om de temperatuur te meten.

Het programma dat we maken is eenvoudig: we lezen Temperatuur op Poort 3 Slot 1 in en kennen die waarde toe aan de variabele temperatuur. Als de temperatuur lager dan 15 graden Celsius is, laten we de led blauw schijnen, als de temperatuur hoger dan 25 graden Celsius is rood, en ertussenin groen.

Test je programma uit door even met je vingers over de kop van de temperatuursensor te wrijven. De robot zet dan vrij snel zijn leds op rood. Laat je de sensor los, dan neemt de temperatuur langzaam terug af en veranderen de leds in groen. Uiteraard kun je dit programma uitgebreider maken zodat je voor tussenliggende temperaturen allerlei tinten tussen blauw en rood krijgt.

Media has no description

© PXimport

Thermometer

Tot slot combineren we een aantal uitbreidingen zodat we een robot maken die we met de infrarood-afstandsbediening besturen en waaraan we kunnen vragen om de temperatuur te tonen. Zo hebben we eigenlijk een rijdende thermometer. We monteren daarvoor de ledmatrix vooraan de mBot en de rj25-adapter met de DS18B20-sensor achterop.

Het programma is wat langer dan wat we tot nu toe gedaan hebben. We definiëren (in Data&Blokken onder Scripts) een variabele snelheid. In het begin van het programma zetten we de snelheid op 84. Daarna herhalen we voor altijd een lus.

In die lus laten we de robot eerst naar voren bewegen met snelheid 0. Zo voorkomen we dat de robot de hele tijd blijft bewegen in de richting die je het laatst hebt aangegeven met de afstandsbediening. Je moet dus op dezelfde knop blijven drukken om de robot te laten bewegen.

Daarna komen er allerlei als ... dan-tests, voor elke knop één. Zo laten we de robot naar voren en naar achteren rijden en tegelijk een gezicht op de ledmatrix tonen. Bij het naar links en rechts rijden toont de ledmatrix de tekst L respectievelijk R.

De knoppen R0 tot en met R9 (overeenkomend met de knoppen met cijfers 0 tot en met 9 op de afstandsbediening) wijzigt de snelheid van 0 tot en met 252, telkens een meervoud van 28. Tegelijk tonen we op de ledmatrix ook het cijfer van de ingedrukte knop.

Als laatste als ... dan-blok testen we of je de instellingen-knop (met het tandwiel) indrukt. Als dat het geval is, lezen we de temperatuur van onze sensor in en tonen we die op de ledmatrix. We gebruiken daarvoor een hack: we kunnen normaal niet rechtstreeks getallen tonen op de ledmatrix. Maar mBlock kent wel een opdracht om de tijd te tonen: wijzig matrix display op Poort 1 10 uur : 20 min. We zetten Temperatuur op Poort 3 Slot 1 °C in het slot van het uur, kiezen als scheidingsteken een spatie en vullen bij de minuten niets in.

Het nadeel van deze aanpak is dat je nu bijvoorbeeld bij een temperatuur van 22°C op de ledmatrix 22 00 te zien krijgt. Maar het is eenvoudig te programmeren en als we een tweede sensor op de rj25-adapter zouden aansluiten (bijvoorbeeld een luchtvochtigheidssensor), kunnen we beide waardes gewoon met een dubbele punt (:) ertussen tonen op de ledmatrix.

Deel dit artikel
Voeg toe aan favorieten