Gruppemedlemmer: Nikolaj, Simone og Mira

Vi fik til opgave at lave en solcelle robot, som skulle kunne følge solens bevægelse v.h.a 2 LDR, en motor, en arduino og en h-bro. Nedenfor vil vores tanker og færdige produkt blive gennemgået. Vi har navngivet vores robot “The Korona-Sun” da korona er det omrids der er om solen, som man med det blotte øje kun kan se ved en solformørkelse.

Stregtegning af The Korona-Sun

Vi har bygget i robotten i lag. Batterierne nederst derefter arduino og øverst er breadboard med LDR’er.

Robotten er bygget af lego, en lego motor, en arduino, 2 LDR, 6 q,5 v batterier som er sat sammen i en 9V batteri case, H-bro og en masse ledninger. Vi ville gerne have en robot som stod oprejst og havde lag af de forskellige hardware dele. Vi ville have en solid bund, så den står stabilt når motoren kører. Nederst i robottens opbygning er batterierne placeret for også at skabe tyngde i bunden og arduinoen er lagt ovenpå den med et lille lag lego imellem. Både studine og batteri ligger i spænd. Motoren er forbundet til arduinoen og er placeret ovenpå den. Det sidste lag af robotten er et breadboard med 2 photoresistorer/LDR, de er placeret på toppen for at de kan få mest sollys som muligt.

Vi har ikke lavet gearing da vi ikke har haft de nødvendige dele for at kunne lave det. Hvis vi kunne lave gearing ville vi lave en lav gearing. Vi ville sigte efter en 1:10 gearing så motoren skulle dreje 10 omgange for at dreje pladen med vores LDR en gang. Det ville give os mere præcision i placeringen af LDR’erne.

Motoren er placeret oven på arduinoen, men under de 2 LDR, dette fandt vi som den bedste placering da vi gerne ville have LDR’erne øverst. Dette var også bedst i forhold til at den skal kunne dreje med Breadboard på toppen.

Vi har bygget H-broen efter tegninger fra internettet og fra PE bogen s. 936. Se tegning for systemopbygning

Tegning af systemopbygning

Spændingsregulatoren er lavet med de 3 komponenter vi fik udleveret og opbygget det efter anvisninger fra underviser/instructor.

Til opbygning af systemet har vi benyttet os af 2 LDR sensorer, som er placeret på toppen af vores robot for at kunne opfange så meget lys som muligt.  Så har vi sat en papplade mellem de to LDR’er for at den skal stille sig mere lige på lyskilden.

Der har ikke været problemer med at opføre robotten andet en tanker om ledningsføringen op til breadboardet. Selve robottens opbygning har ikke ændret sig og det samme for placeringen af komponenter.

Problemer:

Vi har haft problemer med løse forbindelser i vores H-bro, og vores batterier har ikke haft nok strøm til at kunne starte motoren. Vores ene MOSFET har en løs forbindelse og dette har besværliggjort vores arbejde

Robottens opførsel er implementeret i koden. Den vil bevæge sig hen mod det punkt hvor værdierne for de to LDR’er er tættest på hinanden. Der er en “deadzone” i koden som er en minimumsværdi, hvor motoren ikke vil bevæge sig. Dette er gjort for at motoren ikke konstant skal være tændt og/eller bevæge sig
Den overordnede opførsel for robotten er at den vil bevæge sig efter lydkilden

Flow diagram af robottens opførsel

Koden

int LDRLeft = 1;
int LDRRight = 0;
const int IN1 = 2;
const int IN2 = 3;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(IN1, OUTPUT);
  pinMode(IN2,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  //reads the values from the photoresistor to the left and right variables
  int left = analogRead(A1); //left
  int right = analogRead(A5); //right
  

  Serial.println(left);
  Serial.println("/");
  Serial.println(right);

  if(left > (right + 10)){
    //code
    digitalWrite(2, LOW); //Establishes forward direction of Channel A
    digitalWrite(3, HIGH);   //Disengage the Brake for Channel A
    //analogWrite(3, 100);   //Spins the motor on Channel A at full speed
  
    delay(30);

    digitalWrite(3, LOW); //pin3
    Serial.println("STOP left");

  }

  if(right > (left + 10)){
    //code
    digitalWrite(2, HIGH); //Establishes forward direction of Channel A
    digitalWrite(3, LOW);   //Disengage the Brake for Channel A
  
    delay(30);
    
    digitalWrite(2, LOW); //pin2
    Serial.println("STOP right");
  }
  
  delay(100);
  
  //left = analogRead(LDRLeft);
  //right = analogRead(LDRRight);

}

Koden kigger efter hvilken LDR der har den højeste modstand og giver et signal til motoren om at dreje i den retning af LDR’en der har den højeste modstand i et kort interval. Derefter tjekker den igen.
Vi har kodet en “deadzone” som gør at hvis differencen på de to LDR’er analogRead værdier er for tætte på hinanden vil motoren slukkes og dermed ikke ryste frem og tilbage mellem to punkter.

Udfordringer i koden
Det er kode, det virker aldrig første gang. Som hovedregel har problemet ikke været vores koden, den har for første gang nogensinde virket i første forsøg. Problemet har ligger i hardwaren.

COVID-19 udfordringer:
Vi har ikke haft mulighed for at lave gearing, da vi ikke har haft tilstrækkelig mængde lego til rådighed, for at kunne bygge gearing i højden
Vi har problemer med vores MOSFET, da vi nåede frem til at den ene af dem har mindst en løs forbindelse og derfor virker vores H-bro ikke altid efter hensigten.
Problemer med batterier, da vi oplevede at de aflader hurtigt og vi har ikke mulighed for at oplade dem igen.

Konklusion:
Robotten løser sin opgave så godt som den nu kan i de omstændigheder verden befinder sig i.

Forbedringer:
En fungerende h-bro
Optimering af strømkilde, da batterierne hurtigt løber tør. Hvis blot et enkelt batteri er fladt vil motoren have svært ved at starte og køre. 
Der kan være problemer med den måde ledningsføring op til det øverste breadboard er lavet. Under testing kan det være problematisk da motoren nemt kan stikke af. Eftersom solen kun bevæger sig i en 180 graders vinkel er der ikke brug for at robotten kan bevæge sig i en større vinkel

Video af test