Gruppemedlemmer: Phillip Larsen, Maria Dyremose, Daniel Rose

Solcelle opsat indenfor

Robottens system og opbyggelse: 

Robotten er bygget af lego technic- og standard LEGO system komponenter. Robotten er opbygget således at den på bedstevis kan opfange hvorvidt lyset kommer fra højre eller venstre side af robotten, og derfor blev der sat en skillevæg imellem de to lyssensorer, der skygger for lyset på den anden side. Motoren er placeret bagved lyssensorerne, og centralt på robotten, da de øvrige komponenter er en tilbygning til den. Motoren måtte også placeres i nærheden af lyssensorer platformen, da en længere afstand ville resultere i at der måtte tilkobles flere tandhjul, hvilket overbelastede motoren. Tandhjulene fungerer som gearing på solartracker prototypen. Størrelsen på de forskellige tandhjul og anordning af dem i forhold til hinanden er placeret som følge; et lille tandhjul drejer et større tandhjul, hvilket gør, at det større drejer meget langsommere, eftersom det skal dreje flere takker, før det har nået en hel omgang. Det var fordelagtigt at robotten drejede langsomt, eftersom at den skulle tilpasse sig solens lys, som også flytter sig langsomt. Solcellen er opbygget af to 2×4 og to 1×8-System-plader, samt. en 2×8-plade med huller mellem nopperne, og er uafhængigt af det forbundne tandhjul. Der er anvendt lyssensorer på robotten som er placeret på robottens arm/platform, for at skelne mellem om lyset kommer fra højre eller venstre side. Imellem lyssensorerne sidder der en skillevæg, der skygger for lyset fra den modsatte side. Lyssensorerne var nødsaget til at blive placeret på platformen, da den kan rotere i lysets retning. Processens komplikationer – Motoren blev overbelastet da der var anvendt for mange tandhjul. – Robotten havde komplikation ift, at virke i rigtig sollys, da sensorerne opfangede det samme input fra begge sider.

Gearing:

Robottens gearing består af et par 8-tands-tandhjul og to 24 tands-tandhjul. Motoren er direkte forbundet med et 8-tands-tandhjul som får et andet 8-tands-tandhjul til at køre rundt. For enden af det sidste 8-tands-tandhjul sidder et 24-tands-tandhjul. Når DC motoren og de 8-tands-tandhjul har kørt 3 omgange, har det 24 tands-tandhjul roteret en gang rundt.

Kredsløb:

Kredsløbsdiagrammet nedenunder viser hvordan solcellens kredsløb er opbygget. Ovenpå arduino’en er der placeret et motor shield. Motor shield’et er forbundet til DC motoren sådan at man at let kan ændre retningen af strømmen. På den måde er det muligt at få motoren til at dreje i begge retninger. Arduino’ens 5V pin er forbundet til to ”Light Detecting Resistor” (LDR) som er forbundet til to 10k Ohm resistorer som derefter fører tilbage til ground (GND). Mellem LDR’erne og resistorerne er der placeret to ledning, en for hver LDR, der er forbundet til analog pin 0 og 2 som tillader arduino’en at aflæse lysniveauet fra lyssensorerne.
Vi har ikke beregninger på spændingen igennem kredsløbet da det ikke har været nødvendigt. Vi har dog placeret to 10k Ohm resistorer efter LDR’erne for at strømmen ikke løber uændret igennem kredsløbet. Dette er udelukkende for at skåne Arduinoen og 1k Ohm resistorer eller mindre ville også være nok. LDR’erne har en max voltage på 70 volt, så derfor har det ikke været nødvendigt at beregne spændingsfaldet på dem, da Arduinoen ikke kan producere den mængde strøm.

Robottens opførsel:

Robottens opførsel afhænger af lysets vinkel, på vores solpanel. Solpanelet vil følge solen, og på den måde kunne få den mest optimale solenergi. Solpanelet bliver roteret, ved brug af tandhjul som er bygget fast på en DC motor. Når motoren roterer, vil tandhjulene rotere rundt, og få solpanelet til at dreje. Dette output, forekomme ved brug af lyssensorernes input. Hver lyssensor er placeret på hver sin side af solpanelet, og kan ud fra en ændring i spændingen give information omkring hvor lyset kommer fra, og kan altså herefter dreje mod solen. Robottens platform skulle have haft en hældning, hvilket projektgruppen desværre opdagede for sent. En skrå platform kunne have præciseret robottens vinkel bedre i forhold til solen.

Solcelle udenfor med tekst

Motor:

Robotten roterer ved brug af en DC motor. En DC motor er en analog motor – vi kan kun sende strøm signaler igennem for at få dem til at køre. Den består af en plus og en minus ledning. Når flere DC motorer tilsluttes spænding vil de rotere kontinuerligt i den samme hastighed, som typisk har en høj RPM – Rotationer per minut. Spændingen bestemmer hastigheden i en DC motor, og derfor bør man skrue ned for spændingen hvis man ønsker at DC motoren skal roterer langsommere. Forskellen på en DC motor og en Stepper motor er, at modsat en DC motor kan en stepper motor køre med position signaler, hvilket vil sige at man altid ved hvor motoren er positioneret. Fordi at positionen på stepper motoren er kendt, kan man lave gentagelser af motorens placeringer, da start og slut positionen kendes.

Koden:

Koden, får input fra lyssensorerne (LDR) og drejer motoren i den rigtige retning, består af en if-else-statement. Først i koden bliver input og output sat op. Derefter bliver loop metoden kaldt og input fra LDR’erne bliver gemt i to variabler. Input fra den ene LDR er øget lidt, da de to LDR’er ikke er fuldstændig ens. Input fra den anden LDR bliver delt op i et interval så værdierne ikke behøves at være fuldstændig ens for at motoren stopper med at dreje. Efter værdier er læst og ændret i, begynder if-statement. Det første der bliver tjekket, er om det mørkt. Dette bliver gjort ved at se om begge værdier fra LDR’erne er mindre end 300, som vil indikere at meget lidt lys rammer LDR’erne. Hvis værdierne er mindre end 300 vil motoren stoppe og derefter rotere lidt tilbage så den er klar til solopgang. Derefter kommer der to else if-statements som tjekker hvilken LDR der får mest lys. Hvis LDR analog 0 får mest lys vil motoren dreje sådan at LDR analog 2 vil få en lignende mængde lys og omvendt. Til sidst er der placeret en else-statement som vil kører vil ingen af de forrige if-statements kørte. Den sørger for at stoppe motoren hvis LDR’ernes værdier ikke afviger for meget fra hinanden.
En af problemerne som vi havde med koden, var at få den til at registrere mørke og dreje tilbage til startposition en enkelt gang og ikke konstant når det er mørkt. Problemet blev løst ved hjælp af en boolean som holder styr på dagen og kun drejer motoren til startposition når dag ændrer sig til nat. Et andet problem vi havde var med at få solcellen til at stoppe når LDR værdierne var ens. Solcellen ville ikke placere sig over lyskilden men fortsætte med at dreje lidt mere før den stoppede. Vi rettede problemet ved at ændre værdien fra den ene LDR så begge LDR’er ville give samme værdi ved samme lysstyrke. Vi opsatte også et interval så værdierne ikke behøves at være præcis ens for at motoren stopper.

const int sensorPin0 = 0; // Forbinder sensor til analog input 0
const int sensorPin2 = 2; // Forbinder sensor til analog input 2
boolean day = true; // Sætter en boolean for at holde styr på dag og nat

void setup() {
  
  //Setup Channel A
  pinMode(12, OUTPUT); // Instantierer motor kanal A pin
  pinMode(9, OUTPUT); // Instantierer bremse kanal A pin
  
}

void loop() 
{
  int input0 = analogRead(sensorPin0); // Læser analog input 0
  int input2 = analogRead(sensorPin2); // Læser analog input 2
  
  input0 = input0 * 1.1; // Forøger værdien af input 0 for at udligne de to inputs (LDR'erne er ikke fuldstændig ens)

  int intervalLow = input2 * 0.95; // begge inputs ikke behøves at være forstændig ens for at solcellen stopper
  int intervalHigh = input2 * 1.05; // Bruger værdien fra input 2 til at lave et interval så værdierne fra 

  if (input0 < 300 && input2 < 300) { // If-statement som tjekker om input værdierne er mindre end 300 (mørke)
    
    if (day == true) {
      
      day = false; // Sætter dagen til at være slut for solcellen 
      digitalWrite(9, LOW); // Stopper bremsen for kanal A
      digitalWrite(12, HIGH); // Vælger fremadrettet vej for kanal A
      analogWrite(3, 200); // Drejer motoren på kanal A ved "200" hastighed
      delay(1000); // Venter indtil solcellen er ved startposition
      
    }

    digitalWrite(9, HIGH); // Starter bremsen for kanal A
    analogWrite(3, 0); // Drejer motoren på kanal A ved "0" hastighed (stopper den)
    
  } else if (intervalLow > input0) { // Else if-statement som tjekker om input 0 er mindre end den lave ende af intervallet

    day = true; // Sætter dagen til at være startet for solcellen 
    digitalWrite(9, LOW); // Stopper bremsen for kanal A
    digitalWrite(9, LOW); // Stopper bremsen for kanal A
    digitalWrite(12, HIGH); // Vælger fremadrettet vej for kanal A
    analogWrite(3, 200); // Drejer motoren på kanal A ved "200" hastighed
    delay(200); // Venter 0.2 sekund før at den gentager loppet
    
  } else if (intervalHigh < input0) { // Else if-statement som tjekker om input 0 er større end den høje ende af intervallet

    day = true; // Sætter dagen til at være startet for solcellen
    digitalWrite(9, LOW); // Stopper bremsen for kanal A
    digitalWrite(12, LOW); // Vælger fremadrettet vej for kanal A
    analogWrite(3, 200); // Drejer motoren på kanal A ved "200" hastighed
    delay(200); // Venter 0.2 sekund før at den gentager loppet
    
  } else {
    
    digitalWrite(9, HIGH); // Starter bremsen for kanal A
    analogWrite(3, 0); // Drejer motoren på kanal A ved "0" hastighed (stopper den)
  }
}

Flowchart:

Nedenunder kan et flowchart af robottens opførsel ses. Chartet visualiserer hvordan koden tjekker værdier fra LDR’erne og bevæger motoren.

Test af solcellen udenfor:

Efter færdigbygningen af vores solcelle, ville vi afprøve den i praksis, da vi undervejs kun havde testet den med en lommelygte. Vi satte som kan ses på billedet oven over, vores solcelle på en bænk, med udsyn til solen. Da vi tændte for den første gang, reagerede solcellen ikke, og vi tænkte derfor at intervallet var  for småt. Vi ændrede intervallet og afprøvede den igen. Det lykkedes heller ikke her at få en reaktion fra solcellen. Solcellen blev avprøvet i en halv time udenfor, det var derfor svært at konkludere om det var fordi lyssensoren ikke kunne opfange lyset, eller om det var fordi sensoren ikke blev testet i lang nok tiden udenfor. Dette er noget vi kan tage til efterretning.

Solcelle udenfor

Konklusion:

Slutresultatet var en solcellerobot der drejede i den retning hvor det største lys-input var at fange. Robotten får inputtet igennem 2 LDR modstande som er placeret på robottens roterende platform. Platformen roterer gennem en DC motor, og er programmeret gennem et program til Arduino mikrocontrolleren. Det eneste punkt hvor produktet ikke helt er i overensstemmelse med det forventede produkt, er en designfejl. Platformen burde – for at opnå størst muligt input fra solen – have været bygget i en skrå vinkel, hvor vores beklageligvis har en 180 graders vinkel. Hvis lysinputtet er for lille, vil platformen dreje tilbage til 180 grader horisontalt, da robotten skal rotere tilbage til start, hvis solen er gået ned. Gruppen kunne have optimereret produktet ved at bygge platformen i en skæv vinkel. Yderligere forbedringer kunne være at robotten kunne bevæge sig i flere akser for at finde det største sollysinput, mere præcist.

 

Leave a Reply