Je kunt met dure pakketten van Lego zelf aan de slag, maar je kunt ook de Raspberry Pi inzetten. Een betaalbaar alternatief voor educatief speelgoed.

Wim Dewijngaert

 
mannetje 2

Jonge kinderen die ’s avonds aan papa of mama komen vertellen dat ze met een Lego-robot hebben mogen stoeien in de klas, zijn vaak onbewust voor het eerst ondergedompeld in de wereld van bits en bytes. De Deense speelgoedfabrikant ontwikkelde speciaal hiervoor de educatieve Spike- en Mindstorms-pakketten, waarmee spelenderwijs met behulp van een eenvoudige instructietaal en een set van motoren en sensoren, kinderen kunnen leren programmeren.
Wie thuis zijn kroost nog wat verder wil laten knutselen met de Legomodules, moet helaas diep in de buidel tasten. Zowel de recente Spike Prime Set als de bijhorende Spike Expansion Set zijn vrij prijzig – reken op respectievelijk 370 en 120 euro. Het doelpubliek is dan ook duidelijk niet Jan Modaal. Toch kan er dankzij een samenwerking tussen Lego en de Raspberry Pi Foundation nu ook in de hobbykamer verder worden geëxperimenteerd.

inhoud 2 verpakking 2

De set komt met de Build HAT, twee motoren en een voeding

Alternatief
Om dit mogelijk te maken, werd de Build HAT ontworpen (HAT staat voor Hardware Attached on Top). Dit is een bordje dat op de 40-pins header van een Raspberry Pi kan geprikt worden. Alle modellen met 40 pins zijn compatibel, dus ook de Raspberry Pi Zero 2 W (voor de Pi 400 heb je een extra kabel nodig).
Op de uitbreidingsmodule, die wordt aangedreven door een RP2040 microcontroller, zitten vier LPF2-connectoren waarop Legomotoren en sensoren (voor afstand, kleur en kracht) kunnen worden aangesloten. De communicatie verloopt bidirectioneel, wat betekent dat bijvoorbeeld de stappenmotoren hun actuele positie kunnen terugsturen. 

          

Wat is
Visual Studio Code

Visual Studio Code - niet te verwarren met Visual Studio - is een source code editor gemaakt door Microsoft. De inmiddels zeven jaar oude tool is erg populair onder ontwikkelaars, onder andere door zijn snelheid en de mogelijkheid om extensies te installeren. Standaard ondersteunt VS Code een heel pallet aan programmeertalen, gecombineerd met een aantal interessante en gebruiksvriendelijke opties zoals source control en het gebruik van grafische thema’s.

Alle componenten zitten onderaan op de printplaat. Langs de bovenzijde is dus nog voldoende plaats om bijvoorbeeld een breadboard te plaatsen, of desnoods wat Legosteentjes. Onze Raspi hadden we oorspronkelijk voorzien van een koelvinnetje op de processor, maar die moest worden verwijderd omdat anders het bordje niet paste.
De Build HAT gebruikt GPIO-pinnen 0/1, 4, 14 en 15. GPIO 14 en 15 dienen voor de seriële communicatielijn naar de RP2040. Een eventuele tweede HAT die je bovenop wil plaatsen, mag deze pinnetjes niet zelf gebruiken. Twee Legobordjes stapelen om acht (of meer) motoren te bedienen, lukt dus niet, wat meteen ook één van de grootste zwaktes is van het systeem.
Er is een 8V-voeding nodig om zowel de Raspi als de motoren van voldoende stroom te kunnen voorzien. Zonder deze voeding kunnen alleen de krachtsensoren en de stand van de motoren worden uitgelezen. Eventueel kunnen ook 5 AA-batterijen of een 7.5V-batterij worden gebruikt, waardoor je bijvoorbeeld ook draadloze racewagentjes kunt bouwen.

Zonder hubs
Bij de Spike Prime Set hoort normaal gezien een Spike Prime Hub – een module waarmee via de Spike-programmeertaal eenvoudige commando’s kunnen worden gegeven en ontvangen. Dit gaat via het aan elkaar plakken van blokken, zoals in Scratch. Bij de Mindstorms-set zit een andere hub, die kan worden geprogrammeerd met Mindstorms-code. Wie de Build HAT samen met een Raspberry Pi gebruikt, heeft deze hubs en de bijhorende programmeertalen niet meer nodig. Het coderen gebeurt dan in Python, waardoor complexere programma’s kunnen worden ontworpen. Om de motoren en sensoren te besturen, staat een library ter beschikking. Voor wie zich wil inlezen, de uitgebreide documentatie hiervan is te vinden op https://buildhat.readthedocs.io/en/latest

RPI BUILD HAT 2    
De Lego Build HAT module  

De Build HAT kost in de winkel 27 euro. Goedkoop, maar zonder extra Legocomponenten waardeloos. Voor thuisgebruik biedt de Raspberry Store een starterspack aan met daarin de Build HAT, een 12V-voeding, een ‘medium’ motor (type 45603) en een ‘large’ motor (45602). Dit voordeelpakket gaat over de toonbank voor 160 euro. Wie nog wat losse Lego heeft liggen, kan dan snel aan de slag. Speciaal voor de lezers van PC-Active loopt er overigens een actie – meer daarover op onze website.

Aan de slag
Hoe krijgen we onze Raspi zo ver om de twee motoren uit het pakket aan te sturen? We beginnen met het plaatsen van het Raspberry OS op een sd-kaart. Voor Windowsgebruikers lukt dit het makkelijkst met de Windows Raspberry Pi Imager (https://www.raspberrypi.com/software/). Plaats een sd-kaart in je Windowscomputer en start het programma. Kies bij OS voor Raspberry Pi (other) en vervolgens Raspberry OS Lite (32-bit). Bij Storage kies je voor de driveletter van de sd-kaart. Klik daarna op het instellingswieltje. Selecteer enable SSH, kies als gebruikersnaam pi en een willekeurig paswoord. Vink Set locale settings aan en kies Europe/Amsterdam. Wil je een wifiverbinding gebruiken, selecteer dan Configure wireless lan en vul hier de gegevens in van je wifinetwerk. Ten slotte kies je voor Save en Write.
Als het schrijven klaar is, plaats je de sd-kaart in je Raspberry Pi. Schuif de Build HAT op de Raspi, sluit de twee motoren uit het pakket aan op de C- en D-ingangen, en verbind de voeding met de HAT. Daarna start je alles op. Je hebt straks ook nog het IP-adres van de Raspi nodig. Met de applicatie Fing op je mobiele telefoon kun je dit makkelijk terugvinden.

vscode 2

Programmeren van de motoren in VS Code

Programmeren
Het programmeren van de Raspi kan op verschillende manieren. Vaak zijn de standaard werkinstrumenten WinSCP en Putty. Deze keer gaan we aan de slag met Visual Studio Code (VS Code) van Microsoft (te downloaden op https://code.visualstudio.com/Download). Let op, want deze methode werkt niet op een Pi Zero.
Na de installatie van VS Code start je het programma op. Kies in de linkerbalk het icoontje Extensions en zoek naar de module Remote Development van Microsoft. Na een druk op de Install-knop wordt de extensie toegevoegd. Druk nu Ctrl+Shift+P op Linux of Windows (of Cmd+Shift+P op macOS). Zoek en selecteer Remote SSH: Connect Current Window to Host. Kies Configure SSH hosts om je Raspi toe te voegen. Als configuratiefile kies je de eerste mogelijkheid uit het menu. Er wordt nu een bestand geopend. Na Host tik je een willekeurige naam voor je Raspi, bijvoorbeeld Lego. Bij HostName zet je het IP-adres van je Raspi en bij User vul je pi in. Sluit het venster af. Als je daarna opnieuw Ctrl+Shift+P tikt en zoekt naar Remote SSH, verschijnt de connectie die je net hebt aangemaakt in het lijstje. Klik er op. Kies daarna Linux als wordt gevraagd wat voor besturingssysteem je wil gebruiken. Bij de vraag over de vingerafdruk kies je Continue en vervolgens geef je het paswoord van je Raspi.
Onderaan rechts in beeld merk je dat er in de achtergrond een aantal bestanden op je Raspi worden geïnstalleerd. Van zodra dit klaar is, komt er in het linker venster een knop Open Folder in beeld. Klik hierop, en hou de standaard /home/pi aan. In sommige gevallen moet je nu nogmaals je paswoord opgeven en expliciet aangeven dat je de verbinding vertrouwt.
Visual Studio Code opent standaard het bestand newfile.py. Je krijgt eerst de melding dat dit bestand nog niet bestaat. Klik hier op Create File. Bij de vraag of je de extensies voor Python wil installeren, kies je Yes.

          

De Marker Plate

Wie graag zijn Raspi volledig wil integreren in een Lego project, weet uiteraard dat de standaard steentjes niet compatibel zijn met de schroefjes waarmee je het bordje normaal vastmaakt. Hiervoor ontwierp Lego de Marker Plate, maar merkwaardig genoeg is deze enkel verkrijgbaar als onderdeel van de Spike Prime Expansion Set. Je kunt ‘m gelukkig ook zelf uit een 3D printer laten rollen (zie https://www.thingiverse.com/thing:5064470).

 
Bibliotheek installeren
We gaan nu de Build HAT bibliotheek installeren voor de Raspi. Ga in de menubalk bovenaan naar Terminal en kies dan New Terminal.
Op de command prompt tik je:

sudo apt update
sudo apt-get upgrade (bevestingen met Y)
sudo apt install python3-pip (bevestigen met Y)
pip3 install buildhat


Tot slot tik je sudo raspi-config, ga je naar Interfacing Options en activeer je de seriële poort (bij Would you like a login shell to be accessible over serial? mag je No kiezen). Bij het verlaten van het configuratieprogramma zal de Raspi worden gereset. Wacht even tot de connectie is hersteld. Er zal automatisch opnieuw om je paswoord worden gevraagd.

Tik rechts in VS Code, waar newfile.py is geopend, de volgende code in:

mannetje 2from buildhat import Motor
from time import sleep
from random import randint

motor_1 = Motor(‘C’)
motor_2 = Motor(‘D’)

motor_1.run_to_position(0, 100)
motor_2.run_to_position(0, 100)

while True:
    angle = randint(-180, 180)
    motor_1.run_to_position(angle, 100)
    print(motor_1.get_position())
    angle = randint(-180, 180)
    motor_2.run_to_position(angle, 100)
    print(motor_2.get_position())
    sleep(0.3)


Let hierbij op de spaties in het while- gedeelte van de code, want bij het minste foutje draait je programma niet. In Python gebruiken we immers geen accolades of afsluitende constructies om blokken code aan te duiden, maar spaties.
Met CTRL-S bewaar je het bestand op je Raspi. Er komt nu de melding dat de Formatter autopep8 niet is geïnstalleerd. Hiermee kunnen we onze code mooi vormgeven zonder veel inspanningen, dus we kiezen hier voor Yes.
In het Terminal window tik je nu: python3 newfile.py
Als alles goed gaat, draaien beide motoren willekeurig rondjes, en worden de standen van de motoren op het scherm getoond. Verantwoordelijk hiervoor zijn de commando’s run_to_position (met als parameters de hoek en de snelheid) en get_position (om de huidige positie van de motor te tonen).

Tot slot
De mogelijkheden van de Build HAT gaan uiteraard veel verder dan het besturen van motoren.
Voor wat meer diepgang verwijzen we je naar https://projects.raspberrypi.org/en/projects?hardware[]=build-hat. Daar kun je allerlei leuke projecten vinden, zoals een Legoplotter, een datadashboard, een robotgezichtje en een op afstand bestuurbare auto.