Artikel top billede

(Foto: Computerworld)

Byg en robot med et Arduino kit

Alle taler om robotter og om, hvordan de vil ændre hverdagen og arbejdslivet for alle os almindelige mennesker. Men hvad kræver det at bygge en robot? I denne og en kommende artikel vil vi bygge en lille robot og derigennem lære de mest basale principper at kende.

Af Kenneth Geisshirt, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Der findes mange slags robotter. Industrirobotters mange typer er f.eks. defineret i ISO-standarden 8373. I virkeligheden er langt de fleste robotter blot avancerede, forprogrammerede maskiner, som kun kan udføre en funktion. De er langt fra science fiction-filmenes “kunstige” mennesker.

I denne og den kommende artikel vil vi forsøge at bygge en autonom robot. En autonom robot er en robot, som er i stand til at løse opgaver uden indgriben fra en operatør. Det betyder, at robotten skal være i stand til at tilpasse sig til skiftende miljøer, navigere i et landskab samt løse opgaver. Uden at afsløre for meget, kan det nævnes, at baggrundsbelysningen kan give en robot store udfordringer.

Nu skal vores robot ikke kunne løse enhver opgave. Den er begrænset til at kunne løse opgaver i en af de mange robot-konkurrencer, som afholdes. I First LEGO League skal en autonom robot løse 15-18 opgaver på tid, hvor operatørens opgave er at trykke på startknappen. Robotten bygges vha. LEGO Mindstorm og programmeres i LEGOs udviklingsmiljø.

Robotten, som vi skal se på her, kan bruges i en anden konkurrence, f.eks. DTU Robocup (se infoboks “DTU Robocup”). Også her skal robotten være autonom. Det vil sige, at den skal finde vej, klare udfordringer og løse opgaver på egen hånd.

DTU RoboCup

DTU har gennem mange år været vært for en konkurrence for robotbyggere. Den er åben for alle, og der er ingen begrænsninger på, hvordan robotten er bygget.

Det betyder, at der både er LEGO-robotter og helt hjemmebygget robotter. Banen er
12 x 17 meter og består af en række porte. Der gives point for hver port, som passeres. Det lyder nok let, men i realiteten er det en svær konkurrence, og mange robotter når aldrig at passere mere end to porte. Det er ikke ualmindeligt at underlag og baggrundslys driller robotterne.

At bygge en robot lyder måske ikke voldsomt kompliceret.

Men det er det! Det kræver indsigt i flere discipliner på samme tid. Der er både mekanik, elektronik, elektriske systemer samt programmering involveret. Især autonome robotter er udfordrende at bygge, da de skal kunne håndtere en ikke altid perfekt verden.

Hvad består en robot af?

Inden vi kommer for godt i gang med at bygge en deltager til en robotkonkurrence, er det en god idé at se på, hvad en robot egentlig består af.
Som det første har vi valgt en robot som skal køre. Det betyder, at den skal have hjul og motorer til at trække hjulene. Måske oplagt, men nødvendigt at nævne, så er robotten eldrevet. Motorerne er med andre ord elmotorer, og robotten skal have et batteri.

Vi vil omtale motorer, hjul, batteri samt chassis som en kørende platform. På chassiset vil vi montere alle de nødvendige komponenter.
Eftersom robotten skal være autonom, må vi have en eller anden form for computer. En hel pc er ikke nødvendig og også upraktisk (vægt og batteri). Der findes mange små computere, f.eks. Raspberry Pi og Arduino.

Vi skal bruge en del sensorer, så vores robot kan finde vej. Arduino er et godt valg, da der findes mange lettilgængelige sensorer.

Robotdele

Med en sonar kan robotten “se” forhindringer.
Undervognen med motorer og hjul.

Kørende platform

Den kørende platform er fundamentet for selve robotten. Platformen består af en akrylplade, hvor hjul og komponenter kan monteres. Det er naturligvis muligt at designe sin egen plade, men der findes en del plader, som kan indkøbes. For at gøre det lettere er en plade indkøbt til formålet smart.

Som en del af pakken, indeholder akrylpladen også to motorer, hjul samt skruer. Pladen er ca. 21 x 15 cm. De to motorer er gearmotorer, hvilket betyder, at det er muligt at styre både hastighed og retning. Det gør det muligt at kunne dreje robotten ved at køre med forskellige hastigheder på de to hjul (på samme måde som en kampvogn eller en gravemaskine) og bakke. Endvidere er der et passivt hjul, som placeres i modsatte ende af pladen.

Kernen i en robot er dens microcontroller.

Det er allerede nævnt, at valget er faldet på Arduino. Men der findes mange forskellige Arduinoer. En vigtig parameter for at vælge den rette Arduino er, hvor mange I/O-porte den har. Robotten kommer til at have en del sensorer, så mange porte er et krav. Funduino Mega 2560 er et Arduino-kompatibelt board med hele 54 digitale porte og 16 analoge porte!

At Funduino-boardet er Arduino-kompatibelt betyder, at der er mulighed for at bruge et af de mange Arduino shields. Et shield er for Arduino hvad pci-kort er for pc’ere. Overholder Arduino-boards og shields en fastlagt standard, er det muligt at kombinere boards og shields frit.

Test af motor

#include <Ardumoto.h>

Ardumoto Moto;

void setup() {
Moto.begin();
}

void loop() {
Moto.setSpeed(’A’,100);
Moto.setSpeed(‘B’,100);
}

Hvad har shields med vores robot at gøre?

Det er ikke let at styre motorer direkte fra et Arduino-board. En motor styres typisk med signaler med en spænding, der drives ved en anden spænding. For at gøre det lettere at styre motorer, findes der shields med denne funktionalitet. Valget er faldet på Ardumoto L298P Motor Driver shield. Dette shield kan styre to motorer og bruger fire I/O-porte.

Batterier til robotter er en videnskab for sig.

Der er store mængder af både videnskabelig og uvidenskabelig litteratur om, hvordan batterier aflades. Det perfekte batteri kan levere ensartet spænding/strømstyrke over tilpas lang tid. Varierer spændingen for meget, vil det betyde, at motorerne ikke vil køre ensartet. Det gør det svært at skrive et styreprogram til robotten.

Det er let at bruge 9V-batterier, men de aflades hurtigt, så de leverer for lidt strøm. 1,5V AA-batterier er ofte bedre, men der skal til gengæld flere batterier til med en højere vægt til følge. Og vægt har betydning, da motorerne må arbejde mere ved højere vægt – og aflade batterierne hurtigere. Samtidig har batteriers afladeprofil også en temperatur-afhængighed, og det kan være svært at styre omgivelsernes temperatur. Med andre ord, batterier skal der eksperimenteres med.

Det er ikke svært at samle/montere den kørende platform. For en fingersnild person tager det omkring et kvarter.

Sensorer

Robotten er autonom. Med andre ord, den skal selv finde vej. Det er programmet, som kører på microcontrolleren, der skal tage beslutningen, om robotten skal køre lige ud eller dreje. Beslutningerne skal tages på baggrund af, hvordan robottens omgivelser er. Sensorer gør det muligt for robotten at sanse omgivelserne.

DTU Robocups bane er bygget på en lysplade, men har en række sorte striber. Disse striber er banens “veje”. En lyssensor er i stand til at se, om underlaget er lyst eller mørk. Ved at starte robotten på en stribe, kan den følge striben rundt, komme forbi de mange porte og finde hjem til mål.

At følge en stribe rundt på en bane omtales oftes som en “line following” blandt robotbyggere. Det vil vi se nærmere på i næste artikel.
Baggrundslyset har her stor betydning for, hvad en lyssensor omfatter som lyst og mørkt. Det er muligt at kalibrere robottens styreprogram lige inden konkurrencen, men desværre kan lysforholdene ændre sig, mens robotten er på banen.

En bedre strategi er at bruge en lyssensor med indbygget lys. Når det er mørkt, kan en diode tændes, og kontrasten mellem striben og underlaget vil står mere tydeligt.

I princippet er en lyssensor nok, men med to lyssensorer er det muligt at følge striben mere præcist. Men to sensorer bruger mere strøm, og microcontrolleren skal bruge mere cpu-tid på at udregne ruten. Endvidere bruger en enkelt lyssensor op til fire porte.

Robotdele

En lyssensor er meget nyttig, når robotten skal finde rundt ved at følge banens striber. En lyssensor er meget nyttig, når robotten skal finde rundt ved at følge banens striber.
Microcontrolleren er robottens kerne. Funduino Mea 2560 har mange I/O-porte, som gør den ideel til robotter.

Komponenter

37-in-1 Smart Car Chassis Kit for Arduino: http://eud.dx.com/product/37-in-1-smart-car-chassis-kit-for-arduino-black-yellow-844151814

Funduino Mega 2560: http://www.nexuscyber.com/funduino-mega-2560-r3-atmega2560

Ardumoto L298P Motor Driver Sheild: http://eud.dx.com/product/ardumoto-l298p-motor-driver-shield-for-arduino-844163089

Lyssensor: http://eud.dx.com/product/light-sensor-photoresistor-module-for-arduino-blue-844152409

Afstandsmåler: http://eud.dx.com/product/hc-sr04-ultrasonic-sensor-distance-measuring-module-844133696

På DTU Robocups bane er der forhindringer, som kan stå i vejen for robotten.

Det kan derfor være meget nyttigt, hvis robotten kan se, om der er en forhindring foran. Et kamera er en mulighed, men en enklere løsning er at bruge en sonar. En sonar udsender en lyd med en meget høj frekvens (ultralyd – højere end 20 kHz).

Ved at måle hvor lang tid det tager for lyden at komme tilbage, er det muligt at udregne, hvor langt væk et objekt er. Der er dog et par ulemper ved at bruge sonar som en HC-SR04-baseret sensor. For det første kræver det, at lyden udsendes vinkelret mod objektet. Hvis objektet står skævt i forhold til robotten, kan robotten godt overse objektet.

Endvidere kan det kræve så meget strøm at udsende lydbølgen, at microcontrolleren resettes. Sker det, kan robotten miste orientering og begynde at køre den forkerte vej.

Udviklingsmiljø

Som allerede nævnt er valget af microcontroller faldet på Arduino. Der findes et glimrende udviklingsmiljø (IDE) til Arduino. Du kan downloade det til alle de gængse platforme (Windows, OS X og Linux) fra hjemmesiden https://www.arduino.cc/en/Main/Software. Programmeringen af en Arduino sker i et programmeringssprog, som mest minder om C. Der findes mange Arduino-entusiaster rundt om i verden, og de skriver en del biblioteker (libraries).

Aduino

I udviklingsmiljøet til Arduino kan du skrive kode, oversætte og uploade til dit board. Du har også adgang til mange biblioteker.

Eftersom afviklingen af programmerne sker på en microcontroller, som typisk ikke er forbundet med din pc, er der ikke mange muligheder for at debugge. Når din Arduino er tilsluttet vha. et USB-kabel, kan du sende meddelelser fra boardet og se dem i Serial Console.

I infoboks “Test af motorer” finder du et lille program, som lader robotten køre fremad og ligeud hele tiden. Funktionen setup() kaldes kun een gang – når programmet starter op. Her kan du sætte robotten op. I funktionen loop() finder du ud af, hvad robotten gør. Når engang funktionen når slutningen, begynder den forfra. Med andre ord, programmet udfører det samme i uendelighed.