Dans robot project met de Intel Edison als Arduino emulator. Algemeen Het doel van dit project was mijn kleinkinderen voor het spelen met robots te interesseren. De opzet moest in de eerste fase zo eenvoudig mogelijk zijn, maar toch zo dat doorgroei naar draadloos programmeren en monitoring mogelijk is. Daarom koos ik voor een modulair systeem, dat aansloot bij LEGO Technics, om de hardware op te bouwen en voor de besturing- software, een Arduino gebaseerd ontwikkelingssysteem. Daarom was ik ook geïnteresseerd in de Intel Edison, die voor deze toepassing wel te vergelijken is met een kanon om op een mug te schieten, doch wel mogelijk maakt om eenvoudig met Arduino te beginnen, maar in de toekomst met Python via WiFi of Bluetooth draadloos te werken en aldus met het “Internet of things” mee te zijn. Hier volgt de beschrijving van de eerste fase. Anders dan een bestuurbaar speelgoed, dat al vlug gaat vervelen, gaat de aantrekkingskracht hier uit van een slechts gedeeltelijk voorspelbaar en voortdurend veranderende interactie tussen twee robots zonder menselijke tussenkomst
Hardware
Deze bestaat uit twee robots, waarvan een met een zelf “gerolde” Arduino Uno die met een seriële interface is uitgerust, waarop de hardware en software werd uitgetest. Deze robot werd weinig origineel Robi genoemd. Alles is dan gekopieerd naar een tweede robot, Edi , die gebruik maakt van de Intel Edison op een Arduino breakout board. Alhoewel beide robots praktisch identiek zijn is het uiteraard deze laatste die in het volgende beschreven wordt. Bij de voor de wedstrijd geleverde onderdelen zat ook een Grove Starter Kit met een zeer handige “Base Shield” waarmee alle verbindingen naar de verschillende onderdelen van de robot werden gemaakt. Op bijgevoegde foto’s kunnen de verschillende onderdelen worden herkend:
1. De bodemplaat met twee motoren, met ingebouwde vertraging, die de wielen aandrijven. In de eerste fase is afgezien van een zelf balancerend systeem en is gewoon een derde zwenkwieltje toegevoegd.
2.
De motoren zijn met twee lusterklemmen met steekpennen aan een motor driver printje verbonden dat hierdoor kan losgenomen worden. Het hoofdonderdeel hiervan is een geïntegreerde vermogensregelaar L293. Deze bevat vier vermogensversterkers waarvan er twee per motor worden gebruikt in een H-brug, waardoor de motoren vooruit of achteruit kunnen draaien afhankelijk van de aansturing met digitale signalen uit de Arduino. Bescherming van de IC tegen motor “spikes” gebeurt door vier beveiligingsdiodes waarvoor een gewone bruggelijkrichter gebruikt is.
3. Aan de voorzijde is een microschakelaar met zijn contacthefboom op de bodemplaat geschroefd en de behuizing aan een metaalplaatje bevestigd, zodat het geheel als aanrakingsdetector fungeert. 4. Twee LEGO accu packs zijn met LEGO onderdelen aan de voorzijde bevestigd, en werden in serie geschakeld om de nodige spanning (7V) voor het Arduino breakout board te leveren.
5.
De Intel Edison met het Arduino breakout board is met enkele “parker” schroefjes aan de achterzijde van de LEGO constructie bevestigd. Het bord is voorzien van het Grove “Base Shield”, met de bijgeleverde standaard kabeltjes voor alle connecties.
6. IR sensoren printje dat een 49kHz signaal genereert met een halve timer 556 IC. Een gelijkaardig signaal van de andere robot wordt door een commerciële IR detector, gesloopt uit een oude VCR of CD speler gedetecteerd. Alhoewel het 49kHz signaal door de Arduino kan gegenereerd worden is hier gekozen voor een hardware oplossing omdat in de eerste robot wat “identiteit problemen” ontdekt werden en dit oorspronkelijk via timing opgelost werden. Om te vermijden dat een robot zichzelf met zijn partner verwart door gereflecteerd IR licht van zichzelf te detecteren, werden niet enkel de zend- en ontvangst diodes met plastic kokertjes afgeschermd, maar werd ook door de ene een korte puls bursts uitgezonden, en door de andere een lange. Hierover meer in de software beschrijving.
7. Boven op de constructie werd nog een draaiende“disco bol” uit de speelgoeddoos geplaatst om het geheel wat visueel aantrekkelijk te maken. Deze start telkens wanneer de danspartner ontdekt wordt. Hiervoor werd de relais module uit de Grove Starter Kit gebruikt, om geen problemen met het ingebouwde motortje te krijgen. Gezien slechts één bol beschikbaar was werd de andere robot met een “solid state” bol uitgerust aangestuurd door zijn Arduino, het enige wezenlijke verschil tussen de twee robots.
Software voor de Arduino Beide robots gebruiken ongeveer dezelfde code, die na initialisatie van de nodige input- en output pinnen een eenvoudig scenario doorloopt: 1. Zoeken van de partner door te draaien en te testen of een IR straal van de andere gevonden is. Hiervoor worden de motors telkens even gestopt om storingen door spanning-dips waaraan vooral Robi zeer gevoelig is, te vermijden. Dankzij de spanning stabilisatie op de Edi is dit hier niet nodig, doch dit geeft een veiligere detectie. Na detectie wordt in de Edi 500µs gewacht en dan opnieuw getest, om zo te maken dat hij enkel een lange burst ( > 750µs) zoals die door Robi uitgezonden wordt, detecteert. Edi zelf zend een korte burst uit (<200µs), zodat hij zijn eigen reflectie niet kan zien. Deze identificatie gebeurt door gebruik te maken van een PWM signaal dat voor “analoge” output gegenereerd wordt, en dat een repetitie frequentie heeft van 1kHz en een pulsbreedte afhankelijk van de meegegeven parameter. Dit signaal wordt hier gebruikt om de hardware timer te moduleren via de reset ingang. Deze identificatie is gekozen boven b.v. het moduleren met een seriële code, die veel gevoeliger is voor misvorming door de draaibewegingen. Om debug redenen werd ook een break uit de loop voorzien door het aanraken van de micro schakelaar (contactP). 2. Na positieve detectie van de partner wordt hier naar toe gereden, tot contact gemaakt wordt, waarna gedurende enige tijd achteruit gereden wordt, waarna dit heen en weer nog twee maal herhaald wordt; Tijdens heel deze fase wordt de “disco bol” aangestoken ten teken van “exitement”. 3. Daarna volgt een solo dans, waarbij 20 maal random, alle mogelijke bewegingen uitgevoerd worden. Hierna wordt terug met 1 gestart. Door heel de code zijn “Serial.println” ingevoegd die toelaten het verloop van het programma te volgen.
Opmerkingen over het gebruik van de PC omgeving en Arduino IDE De installatie van de FTDI drivers was geen probleem doch de Intel website was wel aangepast vergeleken met de versie beschreven in het “getting started…” boek. Ook het opladen van de Yocto image was anders, doch wel sterk geautomatiseerd door de image upload tool van Intel. Het enige grote probleem dat ik ondervond, was het niet automatisch opstarten van de Arduino sketch na een succesvolle upload, na het af- en terug inschakelen van de voeding. De oplossing hiervoor, zoals beschreven in het boek , waarbij enkel de “permissions” van de sketch.elf file in de Edison aangepast worden werkte niet met de nieuwe image. Na heel wat zoekwerk op het internet heb ik dan een oplossing gevonden in de vorm van een soort “autoexec.bat” file equivalent in een voor mij vreemde wereld van Linux, zie https://software.intel.com/enus/blogs/2015/08/01/procedure-to-autostart-the-arduino-sketch-on-edison-0 Na enige dagen kwam er ook antwoord op de Intel gebruikers werkgroep website, doch hier werd aangeraden een aantal files uit de laatste build terug te stappen, doch gezien ik dan reeds een werkende oplossing had, heb ik deze patch niet uitgevoerd, maar verwacht dat dit in een volgende build zal aangepast zijn.
Algemeen kan ik zeggen dat emulatie van de Arduino door de Edison verder zeer geslaagd is, alhoewel onevenredig complex voor simpele toepassingen zoals deze, en waarvoor de Arduino gewoonlijk ingezet wordt. Verder was ik zeer aangenaam verrast door de elegante connectie van modules met de Grove Starter Kit, waarvan ik in de toekomst zeker meer gebruik zal maken. Ik ben er mij van bewust dat dit project nog voor veel aanpassingen en verbeteringen vatbaar is, en wens iedereen die hieraan wil verder bouwen nog veel knutselplezier, hou me op de hoogte! Paul De Pauw
[email protected]