Tobias Ilsøe Jensen, Mathias Rose, Mathias Autzen og Christopher Christensen

Formål

Konstruere en solcelle styring, der drejer en solcelle efter solens lys med en motor for at optimere udnyttelsen af solens energi.

Suncatcher

Gearing og motor

Til gearing har vi opbygget det således at mellem motor og solcelleopbygningen er der benyttet en snekkegearing. Den sørger for at solcellerne ikke kører for hurtigt rundt, og samtidigt at den ikke kan blive styret af andet end motoren. Det vil sige at hvis der kommer meget vind på solcellerne og skubber til dem, så vil de ikke kunne dreje rundt, da de bliver stoppet af snekkegearingen.

Motoren er placeret på en fast grund under lyssensorerne. Det gør at den er mere stabil imod vind.

Der er benyttet 2 lyssensorer, det virker sådan, at når solen bevæger sig fra øst, til syd og så til vest, så vil suncatcher følge med solen rundt.
Udover dette er der benyttet et potentiometer. Potentiometeret tillader, at når suncatcher er endt i vest, så vil den automatisk dreje over til øst og gøre sig klar til, at der kommer lys den næste dag. Dette ville kunne gøres hele året rundt.

Vi fandt hurtigt en ide med hvordan robotten skulle opbygges, så de to sensorer var adskilt fra hinanden. Dertil skulle der være en gearing, der gjorde at toppen ville dreje langsomt, men at motoren ville kunne have flere omdrejninger, dette gør at det ville være mere præcist, når Suncatcher bliver belyst og den drejer rundt.
Vi havde nogle problemer med at tandhjulene hakkede en smule, men det blev løst ved at lave opsætningen en smule om og finde et nyt tandhjul.
Det næste problem kom da potentiometeret skulle sidde fast. Det mest optimale ville måske have været at 3D-printe noget, der fik den til at sidde fast i vores bund. Så løsningen blev mindre optimal, ved at sætte potentiometeret ind i et dæk og sætte dækket i spænd mellem noget andet lego. Det gjorde at potentiometeret var tæt på urokkeligt og dermed gjorde løsningen acceptabel.

Det er lige nu sat til et breadboard og til arduinoen, som ikke er beskyttet for vand fra regnvejr, derfor er denne del heller ikke optimal, men princippet i opstillingen virker, selvom det ikke er perfekt.


Robottens Hardware

Robotten er opbygget af lego, rundt om motoren som er placeret i centrum. Via tandhjul på motoren og tandhjul på et snekkegear, kan motoren nemmere styre farten på solcellerne. Under solcellerne sidder et potentiometer, som holder styr på hvor langt systemet har drejet, og sørger for at det aldrig kommer længere rundt end 180 grader. Her har vi 3D printet en adapter, så vi kunne forbinde potentiometeret til snekkegearingen og dermed vide hvor meget solcellen har drejet.

Hardware diagram tegning
Oversigts tegning

Motor-shieldet har en indbygget h-bro der gør det muligt at sende strømmen gennem motoren den vej man vil. Derved kan man i koden vælge hvilken retning motoren skal dreje.

Hvis vi kun brugte arduinoen kan vi kun få motoren til at køre en vej og stoppe igen, da vi kun kan tænde og slukke for en pin.

Her har vi et billede af en motor med en H-bro. Hvis vi får strømmen til at løbe gennem S1 og S4, så vil motoren køre en vej og hvis strømmen løber gennem S3 og S2 så vil den køre den modsatte vej.
Ved at skifte i koden mellem high og low kan vi styre om det skal være fremad eller tilbage. Der er også en pin til brake, som så kan initialisere bremsen.

Problemer med hardware

Det har taget tid at finde holdbare løsninger, der gør at det ikke er skrøbeligt, og de enkelte dele i vores hardware fungerede også godt. Et af problemerne var dog, at der var en overseelse i forhold til hvordan motoren og motorshieldet fungerede sammen, hvilket gjorde at selvom vores kode logisk set virkede, så kunne systemet ikke finde ud af at bremse. Dette kostede meget tid, da det ikke bare var at sætte bremsen til high. Det vi også skulle var at sætte analogwrite til 0 og derefter virkede systemet og kunne bremse, når lyset var fordelt omtrent lige meget på begge sider.

Et andet problem vi stødte på, var da vi testede systemet udendørs. Indenfor havde vores modstande på 10k ohm virket fint, og givet gode værdier, men da vi testede den udenfor fik vi meget højere værdier end forventet, dette gjorde at systemet ikke virkede udendørs. Dette løste vi ved at sætte mindre modstande i systemet, når den blev brugt udendørs, så vores aflæsninger blev mindre og dermed ville der være en signifikant forskel, når solen lyste mere på den ene lyssensor end den anden.

Robottens 2 solceller i toppen er adskilt fra hinanden med en skillevæg, som virker for at skygge for hinanden. Når solen er på en side af solcellerne vil den ene opfange mere belysning end den anden, hvilket får motoren til at rotere anordningen indtil der er cirka samme mængde sol på begge sensorer. Når solcellerne når et punkt som er cirka 180 grader efter startpunktet, vil den automatisk rotere sig selv tilbage til sit startpunkt, så den er klar til næste dag.

Flowdiagram af rotation fra Suncatcher
int ldrAnalogPin = 2; // grå lego
int ldrAnalogPin2 = 3;//blå hvid lego
int potPin = 1;
int ldrReading2;
int ldrReading;
int val = 0;

void setup(void)
{
  Serial.begin(9600);
  pinMode(12, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop(void)
{
  val = analogRead(potPin); //Værdien på potentiometer
  Serial.println(val);

  ldrReading = analogRead(ldrAnalogPin); //Værdien på LDR
  Serial.print("nr 1 ");
  Serial.println(ldrReading);

  fsrReading2 = analogRead(ldrAnalogPin2); //Værdien på LDR2
  Serial.print("nr 2 ");
  Serial.println(ldrReading2);
  delay(200);

  if (ldrReading - ldrReading2 > 100)  //Hvis LDR får mest lys og har en værdi over 100, så kør denne kode
  {
    digitalWrite(9, LOW);
    digitalWrite(12, HIGH);
    analogWrite(3, 100);
  }

  else if (ldrReading - ldrReading2 < -100)  //Hvis LDR2 får mest lys og har en værdi under -100, så kør denne kode
  {
    digitalWrite(9, LOW);
    digitalWrite(12, LOW);
    analogWrite(3, 100);
  }

  else // stå stille
  {
    digitalWrite(9, HIGH);
    analogWrite(3, 0);
  }

  if (val >= 700) // Når solcellen har drejet til max værdien, så køre den tilbage start position. 
  {
    while (val > 100)
    {
      val = analogRead(potPin);
      Serial.println(val);
      digitalWrite(9, LOW);
      digitalWrite(12, LOW);
      analogWrite(3, 100);
    }
  }

}

Vores største udfordring når det kom til at få koden til at virke, var at stoppe motoren i at dreje. Den metode vi havde fundet til at stoppe motoren virkede ikke som forventet, og motoren blev ved med at køre rundt indtil der kom mere lys på den anden side.

Konklusion

Suncatcher robotten kan følge solens gang over himlen og nulstiller sig selv tilbage til startposition når solen når horisonten. Derved er den i position, når solen står op igen næste dag. Opgaven er løst med styring og gearing i tankerner og der er taget forbehold for at nulstille robotten.  

Suncatcher kan forbedres i forhold til at gøre det mere praktisk, så den er beskyttet over for regnvejr, ledningerne er en lille smule løst sat sammen i forhold til breadboardet og burde loddes fast til en test PCB strip eller lave et PCB board, hvis projektet skulle realiseres i virkeligheden. Over tid vil bevægelsen af ledningerne slide dem op, og i løbet af tid vil de knække. Vi har dog sørget for at opstillingen ikke kan dreje rundt og sliddet på ledningerne er derfor minimalt. Hvis det skulle ske de knækkede ville det være nemt at lodde nye ledninger fast, der igen formentligt ville holde nogle år.

Leave a Reply