Anders Bjørn Øbro, Anubr19

Rasmus Bundsgaard, Rabun19

systemet/robotten opbyggning

Målet med robotten er at måle sollysets indfaldsvinkel for derefter at reagere på lyset. Ved at placere 2 photoresistorer/LDR på hver side af solcellen bliver det muligt at bestemme hvilken en af de to LDR der modtager mest lys, for derefter at bevæge solcellen hen imod den LDR, for at optimere soludbyttet. Vi har derfor placeret de 2 LDR på en servomotor, for at kunne ændre vinklen og måle solens position løbende. Hvilket betyder at solcellen bevæger sig mod solen, så der hele tiden måles på solens lys. Hvis de var fast placeret havde det ikke været muligt.  Motoren har til funktion at rykke pladen med solcellen og LDR og den er derfor placeret fast vinkelret på en plade med bunden nedad, så den har mulighed for at rotere solcellen mod solen. En servomotor er blevet brugt da denne giver mulighed for præcis styring, i modsætning til en DC motor der ville kræve et gearingssystem for at få samme mængde kontrol. 

Vi har benyttet 2 photoresistorer/LDR (model KLS6-3537), som er placeret midt på ‘solcellen’ med en skærm imellem. Vi startede med at placere LDR-sensorerne i hver sin side af solcellen, uden en skærm imellem, men efter få minutters test observerede vi en minimal ændring i målingerne. 

Vi vurderede dette skyldtes den minimale forskel der er på lyset over så kort afstand, og placerede derfor en skærm imellem, således at lyset ville skygge på den ene LDR-sensor hvis de ikke var placeret helt vinkelret mod lyset. Vi observerede med en markant forbedring efter ændringen.

Robottens hardware

 

Vi forsøgte først at bygge en H-bro til en DC-motor, uden at bruge L293D motor driveren. Dog blev dette for kompliceret til os, og vi havde svært ved at få adgang til lego-dele eller en 3D printer som kunne lave gearing. Derfor valgte vi at bruge servomotoren. 

Vores største ulempe ved dette valg, er motorens 180° begrænsning, som har betydet vi skulle være meget opmærksomme på opsætningen af motoren inden test, for at sikre den havde nok bevægelighed til at følge solen. Til gengæld kunne vi få en meget præcis feedback om motorens vinkel, grundet motorens indbyggede infrarøde målinger.

Ud fra resultaterne af vores endelige test kan der påpeges en mulig problematik i balanceringen af top-delen på servomotoren. På trods for at vi forsøgte at være omhyggelige med balanceringen, observerede vi en hældning på top-delen ved testens afslutning, som har ændret sig siden starten af testen. Dette kan være med til at forklare nogle markante forskelle i målingerne af servomotorens vinkel, eftersom den muligvis skulle dreje lidt mod solens retning, for at tilpasse LDR-sensorernes vinkel på solen.

Robottens opførsel

#include <Servo.h> 

Servo tracker; // servo vinkel

// LDR - lys dioder som peger mod øst og vest
int eastLDRPin = 1;
int westLDRPin = 0;
// variabler med lys diodernes værdier
int eastLDR = 0; 
int westLDR = 0;

int difference = 0; // lysdiode forskel
int trackerPos = 90;    //gem servomotors placering

// dioder som indikerer motorens 'state'
int green = 8;
int yellow = 7;
int greenLED = 0;
int yellowLED = 0;

// efter ~1min skal den kun logge hvert 3min
int minutteCounter = 0;

void setup() 
{
  Serial.begin(9600);
  tracker.attach(5);  // attaches the servo on pin 11 to the servo object
  
  pinMode(yellow, OUTPUT);
  pinMode(green, OUTPUT);
} 
 
 
void loop() 
{ 
  // mål LDR værdier
  eastLDR = analogRead(eastLDRPin);
  westLDR = analogRead(westLDRPin);
  difference = eastLDR - westLDR;

  // tjek om der er forskel (med en lille buffer, for en sikkerheds skyld)
  if(difference>10 || difference<-10)
  {
    // gul lys tænder - indikerer den bevæger sig
    yellowLight();

    // tjek hvilken retning motoren skal dreje, og om den kan dreje
      // drej mod øst 
    if(difference>10 && trackerPos<=160)
    {
      trackerPos++;
      tracker.write(trackerPos);
      
    } 
      // drej mod vest
    else if(difference<-10 && trackerPos>20)
    {
      trackerPos--;
      tracker.write(trackerPos);
    }
    
  } else {
    // der er ikke nogen forskel, derfor skal grøn pære tænde - indikerer ingen bevægelse
    greenLight();
  }

  // hvis LDR værdier er X er det nat, og tracker skal bevæge sig mod øst (start pos)
  if(eastLDR<15 && westLDR<15)
  {
    resetSolar();
  }

  // skriv værdier i Serial monitor hvert 3. minut
  if(minutteCounter >= 180) {
    logState();
    // reset minutteCounter
    minutteCounter = 0;
  } else {
    minutteCounter += 1;
  }
  delay(900);
}

void yellowLight() {
  digitalWrite(yellow, HIGH);
  digitalWrite(green, LOW);
}

void greenLight() {
  digitalWrite(yellow, LOW);
  digitalWrite(green, HIGH);
}

void resetSolar() {
  if(trackerPos <= 140) {
    trackerPos++;
    tracker.write(trackerPos);
  }
}

void logState() {
  Serial.println(trackerPos);
  Serial.print(eastLDR);
  Serial.print(" ");
  Serial.println(westLDR);
  Serial.println(" ");
}

På nedenstående graf ses værdierne fra vores endelige test, som blev foretaget d. 15. marts, fra kl. 11:09 til kl. 15:52. Vi valgte at logge værdier i Serial monitoren hvert 3. minut, for at undgå for mange ens værdier. Vi valgte at printe værdierne for servomotorens vinkel, den østlige- og vestlige LDR. 

Nedenstående ses graferne hver for sig.

Grafen over servomotorens værdier indikerer en tydelig tendens, med en gradvis øgning af vinklen, hvilket svarer til en gradvis drejning mod øst. Da robotten er placeret spejlvendt, er øst og vest byttet rundt, og derfor bevæger den sig fysisk mod vest, med i koden bekrives det som øst.

Der kan tilføjes den information, at det begyndte at regne fra kl 13 til kl 14.

https://www.dmi.dk/vejrarkiv/

læse ud fra tallene

LDR-værdierne og servomotorens vinkel har ikke nødvendigvis en lineær sammenhæng, hvilket også kan ses på graferne som er sat sammen. Dette skyldtes at LDR-værdierne ikke behøver at ændre sig, hvis styrken fra lyskilden ikke ændrer sig. Dog skal de skal de sørge for at at ændre servomotorens vinkel, således at LDR-sensorerne har samme værdier. 

Derfor kan de store udsving i LDR-grafen skyldtes skyer, eller skiftende vejr, som også kan påvirke servomotorens vinkel. Generelt set ligger LDR-værdierne mellem 600 og 700, med en gradvis lille stigning. På servomotoren kan der dog aflæses en tydelig ændring af servomotorens vinkel, som har en markant gradvis øgning. 

Der kan derfor aflæses en relativ ens lysstyrke fra solen, med rimelig tydelig ændring af lyskildens placering over tid.

Under udarbejdelsen af koden har vi primært brugt tid på at balancere en difference mellem øst- og vest LDR. Eftersom vi startede med at placere LDR-sensorerne i hver sin side, uden en skærm, har vi haft svært ved at finde en tilstrækkelig difference som var præcis nok til at få servomotoren til at rykke sig. Efter vores ændring af LDR placering og tilføjelse af skærm løste vi denne problematik. 

Konklusion

Robotten formår at rotere solcellen mod lyskilden ved hjælp af LDR, og som det kan ses på grafen formår robotten at følge med solen, dog med udsving. Samtidig formår robotten at signalere hvilket stadie den er i. På baggrund af dette mener vi at robotten fungere som den bør, og at den løser problemformuleringen. Vi har valgt den mere simple løsning ved ikke at bruge DC-motoren, men robotten fungere stadig som den skal. Dog har den kun mulighed for at dreje 180 grader og det giver visse udfordringer i placering af robotten i forhold til solen. Vi har konstrueret en struktur som gør at solens lys bør ramme vinkelret ind på solcellen på visse årstider, men robotten giver ikke mulighed for at skifte vinkel på vertikalt plan. Dette var dog ikke med i problemformuleringen. Robotten tager også hensyn til om det er mørkt, ved at bevæge sig mod startposition, så den er klar til det bliver dag. Med alt dette i mente konkluders det at robotten løser problemformuleringen. 

En mulighed for forbedring ville være at robotten selv ville kunne bestemme hvilken vinkel solen havde på toppen af solcellen. Solen har forskellig indgangsvinkel alt afhængigt af årstiden. Derfor ville det være fordelagtigt hvis robotten kunne tage højde for dette. Dette kunne på samme måde som med solens retning, måles med PCR, og en motor ville derefter skifte vinkel på solcellen. 

Video

Leave a Reply