Af Bjarke Mejlvang, Jeppe Bukh & Jacob Bauer

 

Systemets opbygning

På billedet ses opbygningen at vores solcellestyring.

Systemet består af:

 

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:

 

 

Leave a Reply