Af Bjarke Mejlvang, Jeppe Bukh & Jacob Bauer
Systemets opbygning
På billedet ses opbygningen at vores solcellestyring.
1x Arduino – bruges til at programmere, hvornår motoren skal køre og stoppe ud fra værdierne modtaget fra lyssensorerne.
1x Arduino Motor Shield – bruges til at sammenkoble Lego motoren med Arduinoen.
1x Lego motor – bruges til den fysiske rotation af solcellestyringen.
2x LDR – bruges til at detektere lysindfaldet på opstillingen og sende værdier videre til Arduinoen.
?x tandhjul – bruges til gearing
+ diverse legoklodser – til opbygningen omkring motoren og lyssensorerne.
+ ledninger – imellem Arduinoen og Lego motoren, og ledninger imellem Arduino og LDR
Inden vi begyndte at bygge vores solcellestyring, testede vi alle komponenterne enkeltvis for at bekræfte, at de virkede.
Tankerne bag opbygningen
En LDR-modstand er en lys-afhængig modstand. Det er en elektronisk komponent indrettet så den elektriske modstand gennem komponenten afhænger af hvor meget lys der falder på den – jo mere lys, desto mindre modstand. Dette bruger vi til vores solcellestyring – to lyssensorer (LDR), placeret på solcellestyringens sensorflade, måler hvor meget lys, de hver især rammes af. De er forbundet til Arduinoen, som modtager og behandler signalet, således at hvis der forskel på lysstyrken, programmeres motoren til at dreje imod den sensor, som rammes af det kraftigste lys. Når sensorerne rammes af samme belysning, inden for et interval vi har sat, stoppes motoren igen.
Direkte på motorakslen har vi sat et lille horisontalt tandhjul, som er koblet til et vertikalt lidt større tandhjul. På den måde får vi ændret rotationen fra motoren til en rotation vi kan bruge til vores solcellestyring. Det at vi går fra et lille tandhjul til et større tandhjul giver os mindre hastighed og mere kraft.
Motoren er placeret i bunden af opstillingen, og det har to funktioner. For det første er motoren den tungeste del af solcellestyringen, og ved at placere den i bunden, opnår vi bedre stabilitet i vores opstilling. Desuden kommer motoren heller ikke til at stå i vejen for drejefunktion, når den er placeret i bunden.
Til opstillingen har vi, som nævnt tidligere, benyttet to LDR modstande. Disse sensorer er placeret på en plade i toppen af vores opstilling, så vi undgår at vores solcellestyring skygger for dem. Desuden er de placeret på en plade med en vinkel, for at opfange solens stråler bedst muligt. Imellem sensorerne er der placeret en skillevæg, der vil skabe skygge på den ene sensor, når jorden roterer i forhold til solens placering.
De største problemer vi har haft, under opbygningen af robotten, er ledningerne der går fra sensorerne til Arduinoen. I flere tilfælde har de været for tæt på gearene eller skabt for meget modstand til at motoren kunne dreje.
Sammensætning af robottens hardware
Her er et overblik over hvordan vores hardware er sat sammen:
Modstand:
Der er valgt modstande på 10 kΩ i forbindelse med de to LDR, som den faste modstand i spændingsdelingen. Mellem modstanden og LDR’en tages en analog spændingsmåling for begge serier. Denne måling bruges i software delen til at justere hvilken retning motoren kører.
Gearing:
Vi har 8 tænder på det lille tandhjul og 24 tænder på det store, og det giver en 1/3 gearing.
Hardware problemer:
Vi startede med en Arduino, som var defekt. På et tidspunkt havde vi problemer med at vores motor ikke modtog nok strøm, så motoren var ikke længere stærk nok til at dreje solcellestyringen. Vi prøvede at ændre gearingen, men fik stadig ikke nok kraft. Herefter blev vi mistænksomme og fandt ud af, at problemet skyldes, at den tablet vi brugt ikke kunne levere den samme mængde strøm, som de batterier vi havde brugt tidligere.
Robottens opførsel
Arduinoen modtager, afhængigt af belysningen, et digitalt signal mellem 0 og 1023 fra sensorerne. Den sammenligner herefter de to værdier, og drejer i retningen af den sensor med højest værdi. Hvis belysningen er under grænseværdien for natbelysning drejer solcellestyringen tilbage til startpositionen.
Flowdiagram:
Kodningen af solcellestyringen var umiddelbart ligetil.
const int LDRright = A3; // connect sensor to analog input 3 const int LDRleft = A2; // connect sensor to analog input 2 int valueRight = 0; int valueLeft = 0; int MotorSpeed = 3; int drive = 12; int brake = 9; int sensorThreshold = 30; bool reset=true; void setup() { Serial.begin(9600); pinMode(LDRright, INPUT); //erklærer LDR1 til at være input pinMode(LDRleft, INPUT); //erklærer LDR1 til at være input pinMode(MotorSpeed, OUTPUT); } void loop() { int valueRight = analogRead(LDRright); int valueLeft = analogRead(LDRleft); Serial.print("Right = "); Serial.println(valueRight); // skriver værdien på den højre sensor i konsollen Serial.print("Left = "); Serial.println(valueLeft); // skriver værdien på den venstre sensor i konsollen if (valueLeft<150&&valueRight<150&&reset==true){ // Tjekker om det er mørkt, og tjekker om der er blevet nulstillet - Ellers drejer den tilbage. digitalWrite(brake, LOW); analogWrite(MotorSpeed, 30); digitalWrite(drive, HIGH); delay(1000); digitalWrite(brake, HIGH); analogWrite(MotorSpeed, 0); reset=false; } else if (abs(valueRight - valueLeft) < sensorThreshold) { //hvis forskellen er mindre end vores Threshold, skal motoren stå stille digitalWrite(brake, HIGH); analogWrite(MotorSpeed, 0); }else if (valueLeft < valueRight-sensorThreshold) { //hvis vauleLeft er størst, drej den ene vej digitalWrite(brake, LOW); Serial.println("Dette er LOW");// bruger vi i konsollen digitalWrite(drive, LOW); analogWrite(MotorSpeed, 40); reset=true; } else if (valueRight < valueLeft-sensorThreshold) { //hvis valueRight er størst, drej den anden vej digitalWrite(brake, LOW); Serial.println("Dette er HIGH"); // bruger vi i konsollen digitalWrite(drive, HIGH); analogWrite(MotorSpeed, 30); } delay(10); }
Konklusion
Vores robot løser opgaven udmærket. Den kan dreje de 180grader og tager hensyn til, hvad der skal ske når det er nat. Den kunne forbedres med en servomotor, så den kunne justeres præcist, og man ved præcist hvor motoren står. Desuden kunne man sætte en motor mere på og styre vinklen i forhold til hvor højt solen står på himlen. Da solen ikke bevæger sig særligt hurtig hen over himlen, mener vi at vores solcellestyringen har en for høj dreje-hastighed. Dette kunne løses ved hjælp af gearing, som ville kunne opnå en lavere dreje-hastighed.
Video: