mBot-tutorial: uitbreidingen installeren

Inhoudsopgave

  1. Inleiding
  2. Lees verder op pagina 2

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.

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.

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.

Geschreven door: Koen Vervloesem op

Category: Workshop, Programmeren

Tags: robot, raspberry pi, knutselen, mbot