Navne på gruppemedlemmerne
Yrsa Damgaard Larsen, Velfærdsteknologi
Camilla Panduro Nielsen, Velfærdsteknologi
Systemets udseende
![]() |
Figur 1 – Robotten |
På billedet, Figur 1, ses systemet der består af en strømforsyning der leverer en spænding på 9V til at drive motoren. Motoren er placeret under breadboardet, som vist på Figur 2, der i opstillingen fungerer som solpanel. På breadboardet er opsat en spændingsdeler i hver ende. Spændingsdeler kredsløbet består af en almindelig modstand på 10 kΩ samt en lysfølsom modstand på 20 -100 kΩ. Hver af de to spændingsdelere bliver forsynet med en inputspænding på 5V fra Arduino motor shield, som selv forsynes fra en spændingskilde.
Desuden er der to kontakter i systemet, som sammen med pull-down modstande på 10kΩ hver sørger for at afbryde motorens kørsel når kontakterne lukkes.
![]() |
Figur 2 – Robotten med DC motoren synlig |
Fra hver af kredsløbene føres en spænding ud til en indgang på motor shieldet, således, at inputtet er et billede af den lysfølsommes modstand i øjeblikket, hvilket så kan bruges til at regulere solpanelets placering.
Hvorfor er systemet/robotten opbygget som den er ift. at løse opgaven?
Vi ønsker at kunne regulere solpanelets bevægelse efter lysindfaldet, således at panelet, i takt med solens vandring over himlen, hele tiden vender mod solen og dermed får et vinkelret lysindfald på solpanelet. Den lysfølsomme modstand har et range på 20kΩ til 100kΩ. Modstanden vil altså være lille når der er meget lys, og stor når der ikke er ret meget lys. For at få et udtryk for modstandens størrelse, og dermed lysindfaldet i sensoren, skal vi have konverteret modstanden i sensoren til en spænding. Ved at koble modstanden op som en spændingsdeler med en fast modstand, vil spændingen mellem de to modstande være relativ til den spænding den lysfølsomme modstand har, netop på det tidspunkt, hvor spændingen måles.
Her ses en spændingsdeler illustreret. Hvis der kun var en modstand i kredsløbet (fx vores lysfølsomme modstand), vil spændingsfaldet over modstanden altid være lig indgangsspændingen, uafhængigt at modstandens størrelse. Kobles derimod to modstande i serieforbindelse, vil spændingsfaldet over disse ændres relativt til modstandenes størrelse.
I det kredsløb der her er sat op, har vi sat den lysfølsomme modstand i serieforbindelse med en konstant modstand på 10kΩ. På denne måde vil det samlede spændingsfald over modstandene stadigvæk være lig inputspændingen, mens spændingsfaldet over den lysfølsomme modstand vil ændres afhængig af dennes modstand, som ændres relativt til lyspåvirkningen. Da de lysfølsomme modstande kan antage værdier mellem 20kΩ og 100kΩ, kan spændingsfaldet over den lysfølsomme modstand ifølge spændingsdelerformlen udregnes således:
Man kan altså bruge spændingen i den node der er mellem modstandene som et analogt input til Arduino Motor Shield, og herudfra regulere solpanelet.
Solpanelet bevæges når der opstår en spændingsforskel mellem den lysfølsomme modstand i den ene side af panelet og den i den anden side af panelet, der er større end 35 bitværdier, valget af dette samt betydningen af dette for anordningen vil blive beskrevet nærmere senere i rapporten.
![]() |
![]() |
Figur 3 – Robottens gearing set fra siden | Figur 4 – Robottens gearing set ovenfra |
Da det ønskes at solpanelet er i stand til at bevæge sig meget langsomt, har det været nødvendigt at tilføje en gearing til systemet. Gearingen består af 6 tandhjul som er forbundet som vist på Figur 3 og 4 herover. Gearingen består af et lille tandhjul på 8 tænder der drives direkte af motoren, dette indvirker på et stort tandhjul på 40 tænder. Gearingen mellem disse to tandhjul er lig:
Akslen der drives af dette 40 tænders tandhjul, driver samtidig endnu et lille tandhjul på 8 tænder. Dette betyder at når det store tandhjul har drejet en omgang vil det lille tandhjul ligeledes have drejet en enkelt omgang. Det andet lille tandhjul indvirker ligeledes på et 40 tænders tandhjul, hvilket igen giver en gearing på 0,2. Vi har nu fire tandhjul der har en samlet gearing på:
0,2*0,2=0,04
Akslen på det andet store tandhjul, driver et mellem tandhjul på 24 tænder, som igen driver det sidste store tandhjul på 40 tænder, som driver akslen solpanelet roterer omkring. Forholdet mellem de sidste to tandhjul er:
24/40=0,6
Vi har altså tre sæt tandhjul der indvirker på hinanden med gearingsforhold på henholdsvis 0,2, 0,2 og 0,6. For at få den samlede gearing ganges disse forhold sammen således at vi får en samlet gearing for hele systemet på:
0,2*0,2*0,6=0,024
Dette betyder at når det drivende tandhjul har drejet en enkelt omgang, vil det drevne tandhjul blot have drejet 2,4% af en hel omgang. Drejer motoren fx med en vinkelhastighed på 10 radianer pr sekund, vil udgangstandhjulet (og dermed solpanelet) dreje med en vinkelhastighed på 10 * 0,024 = 0,24 radianer pr sekund.
Motoren er placeret bag ved solpanelet, i en afstand så det passer med gearingen.
Hvordan er robottens hardware sammensat?
Følgende komponenter er brugt til at bygge robotten:
- Et breadboard
- Ledninger
- To lysfølsomme modstande (LDR) med en range på 20kΩ til 100kΩ. Modstanden falder jo kraftigere lyset er og stiger jo svagere det er.
- Fire 10 kΩ modstande
- To kontakter
- En Arduino Uno.
- Et Arduino Motor Shield, som kræver en ekstern spændingskilde på 5V til 12V.[1] Vi valgte en forsyningsspænding på 9V, som også forsyner Arduinoboradet. Arduino Motor Shieldet kan styre to motorer. Vi valgte at koble motoren til indgang A, og dermed er har nedenstående pins som udgangspunkt koblet til følgende funktioner:
D12: motoren drejer i en retning, når denne pin sættes til HIGH.
D9: motoren drejer i modsatte retning, når denne pin sættes til HIGH og D12 sættet til LOW.
D3: PWM – her kan motorens rotationshastighed styres. Ved Puls With Modulation kan man regulere, hvor stor en del af tiden signalet er tændt og hvor stor en del det er slukket. Den andel af tiden signalet er tændt kaldes en Duty Cycle. Når man kalder funktionen AnalogWrite() arbejder Motor Shieldet i et range mellem 0 og 225, hvor 225 betyder at signalet er tændt i 100% af tiden og har altså en Duty Cycle på 100%, og 0 betyder at signalet har en Duty Cycle på 05.[2] På den måde kan man ændre på den andel af tiden signalet er tændt og dermed på, hvor hurtigt motoren kører. - En DC motor.
- En legoanordning hvor motorendriver en gearing, som får en plade med breadboardet til at dreje rundt. Se Figur 7.
På nedenstående figurer (Figur 5A og 5B) ses et billede og et diagram over kredsløbets opbygning.
![]() |
![]() |
Figur 5A – Billede af kredsløbets opbygning | Figur 5B – Diagram over kredsløbets opbygning. Arduino Unoen er ikke medtaget i diagrammet. Motor Shieldet er sat oven på Arduino Unoen. |
På nedenstående Figur 6 og 7 kan legodelen af robotten ses:
![]() |
![]() |
Figur 6 – Prototype 1 | Figur 7 – Prototype 2 |
Robottens fysiske udformning har udviklet sig under hele forløbet. De første udfordringer opstod, da vi første gang forsøgte at få robotten til at køre, fordi motoren straks hoppede ud af legoanordningen. Det viste sig nemlig, at motoren havde svært ved at få gearingen til at køre rundt, ved den hastighed den som udgangspunkt var sat til. Vi fandt ud af, at hvis vi skruede op for motorhastigheden – altså for PWM – og desuden fastmonterede motoren i legoanordningen, kunne den godt trække gearingen.
Efter den første udgave af robotten fungerede, besluttede vi, at vi ønskede at breadboardet og dermed solpanelet kun skulle køre i en bane med en vinkel på . På den måde kan man sørge for, at robotten ikke utilsigtet kører længere end solens forventede bane. For at implementere det indsatte vi to kontakter placeret i en vinkel på til hinanden nær det tandhjul der får selve oslpanelet til at køre rundt. Kontakterne sørger for at motoren står stille, når de lukkes. Dermed bruger motoren heller ikke unødvendig strøm på at forsøge at køre længere end ønsket.
Samtidig med monteringen af de to kontakter blev det besluttet at prøve at lave en lavere gearing for at få panelet til at køre mere jævnt, dette blev gjort ved at skifte de tre tandhjul ud med seks, som beskrevet i forgående afsnit. På figur …. Ses den første prototype med en gearing med tre tandhjul, mens den anden prototype ses på figur … hvor den nye gearing er blevet implementeret sammen med de to kontakter der begrænser systemets bevægelse.
Hvordan er robottens opførsel implementeret?
Overordnet fungerer robotten således, at jo kraftigere lyset er på LDR’en des lavere bliver modstanden og des mindre er spændingsfaldet over modstanden også. I koden sammenlignes spændingsfaldet over de to lysfølsomme modstande, og hvis forskellen på de to spændingsfald er større end en bestemt følsomhedsmargin, sættes motoren til at dreje enten den ene eller den anden vej med en bestemt hastighed. Hvis forskellen på spændingsfaldene er mindre end følsomhedsmarginen, hvilket indikerer at boardet står nogenlunde vinkelret på solen, sættes motorens hastighed til 0, og boardet forbliver i samme position.
Hvis en af kontakterne lukkes, indikerende at solpanelet har kørt i den ene eller den anden retning, sættes motorens hastighed til 0, og solpanelet kører ikke rundt længere. Hvis spændingen over den modstand, der sidder i den modsatte side af breadboardet ift. den kontakt der er lukket, bliver mere end værdien af følsomhedsmarginen større end spændingen over modstanden i samme side som kontakten, vil motoren begynde at køre i retning mod den modsatte modstand igen.
De eksakte værdier af følsomhedsmarginen og motorhastigheden er fundet ved at vi har prøvet at ændre henholdsvis følsomhedsmarginen og hastigheden hver for sig indtil robotten opførte sig, som vi ønskede. Vi endte med en følsomhedsmargin på 35 bitværdier og en hastighed på 60.
Arduino Unoens AD-konverter har en opløsning på 10 bit, og det betyder at en outputværdi på 0 svarer til en spænding på 0V, og en outputværdi på 1023 svarer til en spænding på 5V. Dermed kan vi regne ud, hvad en outputværdi på 35 svarer til:
Det betyder altså at motoren sættes i gang, hvis forskellen i spændingsfaldene over de to lysfølsomme modstande er større end 0,17V.
En hastighed – eller PWM – på 60 betyder at signalet er tændt af tiden.
På Figur 8 ses et flowdiagram over kodens opbygning. Koden ses i Figur 9, og beskrivelsen af denne kan ses nedenfor.
[1] https://www.arduino.cc/en/Main/ArduinoMotorShieldR3, set d. 21.03.16
[2] https://www.arduino.cc/en/Tutorial/PWM, set d. 21.03.16