Hardware Og Robotteknologi pf2

Kørende Robot med LEGO og Arduino

STD (Speedy Turtle Device) Robot

Lavet af:

Jake Sølberg, Kristian Sondrup og Frederik Devantier.

Afleverings dag.

Bedste konkurrence tid: 180 sek.

 

I denne opgave skal gruppen konstruere en autonom kørende Arduino LEGO-robot, dvs.    der skal konstrueres et Arduino-board, der kan styre 2 LEGO-motorer (udleveres) via Motor-shieldet med gruppens Arduino-Box, samt et LEGO-køretøj, der kan bære denne + batterier. Lego robotten skal vha. Arduino-styringen bl.a. kunne følge en mørk streg på et lyst gulv.

Opgavebeskrivelse:

Portefølje opgaven består i at gruppen skal lave en kørende robotbil, som skal kunne gennemføre en forhindrings bane. I den første del af banen, skal robotten følge en sort linje ved brug af to IR sensorer. Den næste del af forhindringen skal robotten køre rundt om en mur. Til porteføljeopgaven skal der blive lavet en skriftlig tutorial som et blogindlæg.

Intro

I denne portefølje har denne gruppe lavet en lille robot, som kan benytte nogle sensorer til at manøvrere igennem en bane med nogle udfordringer. Denne robot er bygget op af Lego og et Arduino kredsløb. I denne rapport har gruppen lavet en tutorial på, hvordan andre kan lave denne robot, og hvordan robotten er opbygget både fysisk og elektronisk.

Komponentlisten

Listen over alle de komponenter som er blevet brugt til at lave robotten.

  • 2x IR transmitter/receiver
  • Arduino Uno
  • Arduino Motorshield
  • Ultrasonisk sensor.
  • 2x DC motorer
  • Switch
  • Lego
  • Batteri 9 volt

Teknologien bagved STD (Speedy Turtle Device)

Til denne opgave har gruppen valgt at benytte tre sensorer. To Line breaker sensorer, som benytter en IR transmitter og en IR receiver hver, og en ultralydssensor som benytter lydbølger og modtager de tilbagekastede lydbølger for at kunne omdanne disse til en digital værdi. Valgene for disse sensorer bliver begrundet med, at gruppen skulle gennemføre to forskellige scenarier igennem den opstillede bane.

Det første scenarie består af, at en sort linje er blevet opstillet på banen, hvoraf en sensor som kan registrere denne linje vil kunne hjælpe med at navigere bilen igennem. Her har gruppen dog fået mulighed for at få to sensorer, som kan benyttes til at holde bilen på den sorte streg mellem disse to sensorer.

Ultralydssensoren er blevet valgt for at navigere bilen rundt om muren. Begrundelsen for dette valg udmunder i, at det er nemt at benytte ultralydssensoren lydbølger for at kunne finde afstanden til væggen fra robotten og benytte denne værdi til at navigere robotten.

Line breaker sensorer

I dette afsnit vil der blive forklaret om de forskellige delopgaver, som robotten forlanger af gruppen.

Gruppen har fået tildelt to IR transmitter- og receivers til den første udfordring. Igennem disse ‘Photo diodes’ kan robotten følge linjen. Nedenunder kan der ses et figur-eksempel på, hvordan sensoren fungere.

Billede 1

På figuren ses der hvad der sker når ‘Photo dioderne’ rammer en hvid overflade

Billede 2

På figuren ses der hvad der sker når ‘Photo dioderne’ rammer en sort overflade

Billede eksemplerne her viser, hvordan sensorerne fungerer ud fra hvilken overflade de møder. Hvis overfladen er hvid, laver den en kraftigere refleksion af IR-lyset, som sensoren sender ud. Hvis overfladen er sort, så optager overfladen mere af lyset, hvilket formindsker refleksionen. Det er denne forskel der gøres brug af i denne tutorial, til at guide robotten igennem den første del af banen.

Det her billede viser hvordan systemet er opbygget. Sensorer får et input fra omverden. som bliver sendt til Arduinoen. Her bliver inputtet behandlet, hvor der så kommer et output til motorerne.

Her ses hvordan robotten opfører sig når den bevæger sig på den sorte linje. Hvis der ikke er noget sort under den, så vil den køre lige ud. Hvis der er sort under den ene, men ikke den anden, vil den prøve at sørge for de begge ikke har noget sort. Hvis de begge har sort under sig, vil robotten stoppe denne opførelse.

Ultrasonisk Sensor

Den ultrasoniske sensor benytter lydbølger sendt fra sensoren, og disse lydbølger bliver sendt tilbage efter at de har ramt et objekt. Sensoren er opbygget med 4 ben: VCC, Trigger, Echo og Gnd. Disse ben har hver deres funktion. VCC og Gnd er de ben som strømkilden sidder på. Trigger-benet er det ben på sensoren, hvor lydbølgerne bliver sendt ud fra sensoren. Disse lydbølger, som bevæger sig med lysets hastighed, bliver sendt ud for at finde det nærmeste objekt.

I denne opgave er det gældende objekt en mur, som robotten skal bevæge sig rundt om for at kunne komme videre til slutningen af banen. Når disse lydbølger rammer et objekt, vil de kolliderende lydbølger tilbagekastes, og de vil herefter blive sendt tilbage til sensoren. De tilbagekastede bølger vil blive opfanget af Echo-benet og denne data bliver omdannet til en værdi som man kan læse. I portefølje vil gruppen gerne vide distancen til muren i form af centimeter (cm). Da lydbølgerne normalt bliver læst for begge retninger, væk fra sensoren og tilbage igen, har gruppen omdannet den tilbagevendende data til kun at tage højde for den halve distance. Gruppen begrunder dette ved at man i dette tilfælde kun behøver at vide hvor langt der er til objektet og ikke hvor langt der ville være til objektet og tilbage igen til sensoren. distancen beregnes ved at tage højde for hvor lang tid sensorens trigger-ben er tændt for at sende en gruppe lydbølger, hvor hurtigt disse lydbølger bevæger sig og derefter halvere denne værdi, således:

Distance = Tid * lydens hastighed / 2

 

Samspil mellem Mekanik, Elektronik og Software

Da denne robot skulle laves, var det vigtigt at sørge for at robotten kunne følge banen, som gruppen var blevet givet til rådighed. Dette skulle kunne lade sig gøre ved, at robotten både skulle køre hurtigt og have sensorer, som kunne regulere på retningen af robotten. Disse rettelser skulle også variere ud fra, hvor robotten var på banen.

Mekanik.

Robottens mekanik indbefatter hovedsageligt de to DC motorer, som gruppen fik til at løse opgaven. Disse motorer er sat til hvert deres hjul, sådan at gruppens motorer kører med hvert deres hjul alene. Dette valg begrundes med at lave et simpelt design med så få dele som muligt, for at holde robotten i en bestemt størrelse og bredde. motorerne er forbundet med et Arduino Motor Shield, så de kan blive styret gennem gruppens software. En batteriholder med fire AA batterier, er sat inden for rammen af robotten og sat til kredsløbet sammen med en switch. Denne switch agerer som en tænd/sluk kontakt til når robotten skal kunne køre selv ude på banen.

Oven på robotten er placeret en masse små klodser som fungerer som stopklodser der sørger for at de forskellige komponenter, batterier og Arduino ikke glider af robotten under kørsel.

Elektronik.

Gruppen har monteret to Line-Break sensorer, som indeholder en IR transmitter og en IR receiver hver.  IR transmitteren benytter et infrarødt lys og sender dette lys ud i sine omgivelser. IR receiveren holder øje med refleksionen af IR lyset. Hvis en overflade reflektere IR lyset tilbage, så vil receiveren reagere med et binært signal. I denne opgave, er robotten sat til at køre fremad så længe værdierne af sensorerne er ens. Når en af sensorerne er forskellig fra den anden, så vil robotten dreje, i en retning baseret af programmet, indtil begge værdier er ens igen. Denne metode bliver benyttet for at få robotten til at manøvrere igennem den del af banen, hvor der er opsat en sort linje som guide.

Gruppen benytter LED’er til at vise, hvilken retning robotten drejer når ultralydssensoren bliver benyttet. robotten vil lyse grønt når den går imod venstre, rødt når den går imod højre og begge LED’er vil lyse når robotten bevæger sig ligeud. De værdier som afgør retningen er baseret på ultralydssensorens input fra sine lydbølgers tilbagekaldelse. Disse værdier konverteres om til en cm-værdi for at kunne relatere til en kendt fysisk måleenhed (cm).  Denne del af elektronikken er med til at styre den del af banen hvor vi ikke har nogen sort linje til at guide robotten igennem udfordringerne.

Gruppen har opsat et diagram for, hvordan opbygningen af det elektriske på denne robot er opsat igennem programmet “Fritzing”:

Breadboard

Kredsløb skematik:

 

Software.

Gruppen har opdelt Arduino programmet i tre dele. første del (Line Breaker) består i at få robotten til at følge linjen. Anden del (Wall follower) består i at få robotten til at følge muren. tredje del består i at få samlet programmerne, så robotten vil køre uafhængigt.

Line Breaker (første del)

‘LineBreaker’ programmet styrer robotten når den skal følge linjerne i den første del af banen.

Her opsættes der de forskellige ben, som skal blive benyttet af Arduinoen. I ‘setup’ bliver de forskellige ‘INPUT’ og ‘OUTPUT’ defineret.

I Loop funktionen, begynder gruppen at opsætte de ‘if’ statements som der kommer til at styre programmet. Det som der sker, er at når begge sensorer ikke er oven på en streg, skal robotten køre ligeud. Hvis det kun er den ene sensor der rammer den sorte streg, vil robottens motor køre hurtigere end den anden motor. Det omvendte sker med den anden sensor.

Wall follower (Anden del)

Wall follower programmet blev lavet sideløbende med Line Breaker programmet, da de to programmer ikke er afhængige af hinanden. Wall follower er det program som skal køre, efter Line Breaker programmet. Programmet gør at robotten vil følge muren hele vejen rundt indtil robotten når emnet.

Gruppens variabler bliver opstillet her.

Det her i ‘Setup’ funktion gør at ultralydssensoren sender data ud i cm, og at der kan blive læst fra den.

De her if ‘statements’ er hvad der sørger for at bilen holder sig tæt på muren. afstanden bliver tjekket, ud fra afstanden tager robotten valget om den skal til højre eller venstre.

Hele programmet

Når både Wall follower og Line breaker programmerne virker, kan arbejdet med at samle dem påbegynde.

For at sørge for at Wall follower funktionen ikke køre imens Line breaker funktionen køre, har gruppen opsat en parameter, som først bliver sand, efter line breaker funktionen er færdig.

Her vil robotten forsøge at dreje rundt om hjørnet, efter det sætter den ‘turnOne’ en op. det sørger for at statementet ikke bliver kaldt igen.

Perspektivering

Gruppen tænkte på at opbygge robotten på den måde, at der skulle bruges en motor til at dreje robotten, og den anden skulle bruges på at køre robotten fremad. Dette blev dog ikke til en realitet, idet at gruppen ikke kunne opbygge en måde hvorpå hjulene kunne dreje skarpt nok, og fandt en nemmere løsning ved blot at sætte en motor på hvert hjul og ændre på pwm signalet så det ene kører hurtigere end det andet.

Det blev på et tidspunkt diskuteret at bruge en tryksensor eller en lyssensor som kunne sættes på en pind foran robotten. Disse sensorer skulle bruges til at registrere hvornår robotten ville være tæt på muren enten ved at tryksensoren rørte ved væggen, eller lyssensoren kommer ind i væggens skygge og dermed fungerer som trigger for at robotten skal foretage et 90 grader sving for derefter at køre wall follow delen af sit script.

Der har tidligere i processen været en simpel gearing på robotten. Gearingen var designet til at nedsætte hastigheden hjulene drejer med af 2 grunde. Jo langsommere robotten kører i forhold til motorens rotation, jo mere kraft kommer der på den endelige fremdrift, dermed spiller friktion en mindre rolle og motoren får nemmere ved at køre fremad. Den anden grund til at bruge gearing var for linje sensorernes skyld. Hvis robotten kører for hurtigt, kan sensorerne ikke nå at reagere på at de kører over en linje og derved kommer til at køre over på den anden side af linjen så den kommer så meget ud af kurs at den ikke vil kunne finde tilbage på sporet.

Motoren gik direkte til et lille tandhjul med 8 takker som er forbundet med et større tandhjul med først med 40 takker som senere blev ændret til 24 takker. Dette tandhjul var så direkte forbundet med hjulene, dette var ens på begge sider af robotten.

Gearings faktoren kan derfor udregnes ved at skrive 40/8=5 og senere med det andet tandhjul 24/8=3 og vi kan derfor sige at motoren skal dreje først 5 omgange og senere 3 omgange før hjulene drejer en omgang, hvilket giver os en gearingsfaktor på 0,2 og senere 0,333 gentagende.

Gearingen blev senere fjernet efterhånden som koden blev optimeret da det ikke længere var nødvendig og gjorde kun at vores robot kørte langsommere hvilket ikke var hensigtsmæssig i forhold til opgaven.

Som tidligere nævnt, havde denne gruppe prøvet at lave en Wall-follower funktion, som skulle benytte en ultralydssensor til at styre robotten med. På afleveringsdagen, virkede denne del af programmet dog ikke som forventet, og banen blev derfor ikke gennemført optimalt. Dette ville dog kun ændres i et fremtidigt forsøg ved at finjustere nogle af hastighedsvariablerne og distanceværdierne i de forskellige “if” statements for robotten bevægelse. Gruppen har dog en video med bevis på, at “wall follower” koden kan fungere.

Konklusion

Lego opbygningen af robotten skaber en god stor overflade med plads til de forskellige komponenter på Breadboard, Arduino, samt batterier. Det bagerste hjul giver god mulighed for at robotten kan dreje med minimal friktion. De ekstra klodser på toppen var en fin løsning på at holde fast på disse dele og sørge for at de ikke rutsjer af robotten under kørsel.

Gruppen kan konkludere at linebreaker funktionen virker rigtig godt. robotten følger linjen ganske fint og kommer rundt igennem banen uden at afvige fra linjen som opgaven kræver.

Wall followerfunktionen har været en del mere vanskelig for gruppen at skrive, på selve afleveringsdagen virkede koden stadig ikke på trods af mange timers arbejde.

Gruppen har dog planer om at arbejde videre på robotten efter deadline og forhåbentligt have en video klar til eksamensdagen hvor det kan ses at gruppen har fået koden til at virke.

Robotten virker godt på den første del af banen. Den kører lidt langsomt men den kommer igennem linje læsningen konsistent hver gang. der har som nævnt været problemer med wall follower koden hvor gruppen har været nødsaget til at gøre brug af hardcoding nogle få steder.

Leave a Reply