Lavet af Alexander Jessen, Henrik Hansen og Mikkel Abildholt

Billede af færdigt setup

Kravene for opgaven var, at lave en solcelle styring der drejer en solcelle efter solens lys med en motor, for at optimere udnyttelsen af solens energi.

Måde vi gik til denne opgave, var ved at lave lidt research, om hvordan et solcelle styringssystem eventuelt kunne se ud. På baggrund af denne research, opstillede vi en løsning der opfyldte kravene for opgaven.

Planen, hvor solcellen skal ligge er vinklet på en ca. 30-45 graders vinkel. Den er vinklet således, da vi baseret på kravene fra opgaven var begrænset til kun en motor (DC eller Servo motor). Fordelen ved at have den vinklet sådan er, at solen har meget stor sandsynlighed for at stå direkte på, og vi kan derfor få mest ud af solcellen, ved at have den på en vinkel. Vi har valg kun at bruge 2 LDR-modstande til at registrere det bevægende lys. Imellem disse placerede vi et stykke pap, for at begge LDR-modstande ikke har samme input. Vi kan herudfra sammenligne de to outputs fra LDR-modstande og bestemme om solcelle planet skal drejes en bestemt vej. 

Motoren er placeret i bunden af prototypen. Grunden til at den er placeret der, er på grund af mangel på korrekte ressourcer. Da vi startede på opbygningen af prototypen, ville vi gerne have at motoren sad på siden af solcelle planet, men vi fandt hurtigt ud af, at vi manglede nogle ting til motoren, for at få den til at virke som vi først havde tiltænkt. På grund af dette mangel, måtte vi finde på en ny løsning, som endte med at vi skulle bruge vores servomotor, og placere den på bunden af prototypen.

Kredsløbet i Tinkercad

Robotten og delkomponenter

Hardware

Til opgaven, er disse komponenter benyttet:

  • 2x LDR-modstande
  • 1x 100 μF kondensator
  • 2x 10 kΩ modstand
  • 2x 1 kΩ modstand
  • 2x LED’er
  • Servomotor
  • Arduino

LDR-modstand

LDR-modstande, er en variabel modstand. Det vil sige, at den ændre sin indre modstand, afhængigt af hvor meget lyst den opfanger.

Da vores robot kun bevæger sig på en lineær akse, fra x til y, behøvede vi kun at bruge 2 LDR-modstande, for at kunne få robotten til at fungere. Her bliver hver LDR-modstands output sat til hver sin analog pin, for at kunne læse deres output. Vi benytter os af analog, og ikke digital, da vi skal aflæse værdier, som er andet end bare 0 eller 1.

Elektrisk kondensator

I vores kredsløb, har vi valgt at bruge en en Elektrisk kondensator/kapacitor, i forbindelse med servomotoren. Kapacitoren fungere således, at den kan have en bestemt elektrisk kapacitet. Den fungere lidt ligesom et genopladeligt batteri, men op- og aflader meget hurtigere. Vi har brugt den i vores kredsløb, for at udjævne spændingsniveauet igennem kredsløbet. 

Beregning af modstande til LED

Vi fandt i gennem et datasheet fra sparkfun.com at den anbefalede strømstyrke til vores LED’er er 16-18 mA, og dertil benyttede vi os af ohms lov til at beregne modstanden.

Det tætteste vi havde på dette var en 1k ohm modstand, hvilket vi valgte at bruge. Det betød at vores LED’er fik en strømstyrke på 5mA, hvilket medfører at lysniveauet på dem var lavere end det kunne være.

Flow diagram

Robottens opførsel er designet til at følge et lys, som bliver opfanget af de to LDR-modstande som er på planet, hvor solcellen ligger. Disse 2 LDR-modstande måler konstant lyset og sender et signal til servomotoren om, hvilken retning den skal justere solcelle planet. hvis den ene LDR-modstand får mere lys end den anden, bevæger robotten sig mod den LDR-modstand, som får mest lys.

Kode

#include <Servo.h>
Servo myServo;

int const ,ldrPinZero = A0, ,ldrPinOne = A1;
int const redLEDPin = 5, greenLEDPin = 6;
int ldrValZero, ,ldrValOne;
int angle;

void setup() {
  Serial.begin(9600);
  myServo.attach(3);
  pinMode(redLEDPin, OUTPUT);
  pinMode(greenLEDPin, OUTPUT);

  analogWrite(greenLEDPin, 1023);
  analogWrite(redLEDPin, 0);
}

void loop() {
  ldrValZero = analogRead(ldrPinZero);
  ldrValOne = analogRead(ldrPinOne);
  myServo.write(angle);
  Serial.print("ldr 0: ");
  Serial.print(ldrValZero);
  Serial.print(", ldr 1: ");
  Serial.print(ldrValOne);
  Serial.print(", vinkel: ");
  Serial.println(angle);
  delay(1000);

  if(ldrValZero < ldrValOne){
    angle = angle + 1;
  } else if (ldrValZero > ldrValOne){
    angle = angle - 1;
  }

  if(angle < 0){
    analogWrite(greenLEDPin, 0);
    analogWrite(redLEDPin, 1023); 
    angle = 169;
    myServo.write(angle);
    delay(1000);
    analogWrite(greenLEDPin, 1023);
    analogWrite(redLEDPin, 0); 
  } else if (angle > 179){
    analogWrite(greenLEDPin, 0);
    analogWrite(redLEDPin, 1023); 
    angle = 9;
    myServo.write(angle);
    delay(1000);
    analogWrite(greenLEDPin, 1023);
    analogWrite(redLEDPin, 0); 
  }
  
}

Testkørsel

Test 1 blev kørt i tidsrummet 12:00-13:15 og test 2 blev kørt mellem 13:45-15:00.

Den første test kørte mens der var mere eller mindre skyfrit og masser af sol. Dette medførte et pænere resultat af testen, da der ikke var den store variation i sensorernes værdi.

Den anden test kørte mens skyerne begyndte at bevæge sig ind over himlen, hvilket medførte flere spring i lyssensorernes værdi, og resulterede i en mere sporadisk adfærd.

Generelle udfordringer

Det største problem vi stødte ind i, under opbygningen af prototypen, var at vi ikke kunne sætte vores ledninger sammen med vores LDR-modstande, da vi manglede en loddekolbe for at kunne få dette løst. Her var vores umiddelbare løsning at benytte elektrikertape for at holde ledningerne sammen, dog medførte dette et problem da ledningerne er for stive for motoren at trække på. Det gjorde så at platformen som LDR-modstandene sad på, ikke kunne drejes. Derfor besluttede vi os at købe nogle nye male/female ledninger som ikke var solidt wires, så monteringen af sensorerne ville være nemmere, samt for at undgå at ledningerne ville gå hen og blive et problem for bevægeligheden af robotten.

Ud over dette, fandt vi også ud af, at vi ikke havde nogle 220 ohm modstande i vores kit, så vi måtte nøjes med at benytte os af 1k ohm modstande til LED’erne i stedet.

Konklusion

Robotten/prototypen løser opgavebeskrivelsen, da vi kun har brugt én motor og et par LDR-modstande. Ud over dette kan den også følge et lys, som bevæger sig fra øst til vest.

Robotten kan bla. forbedres, ved at tilføje en ekstra motor, og 2 ekstra LDR-modstande. Dette kan gøre robottens tracking af solen mere præcis, da den bedre kan registrere hvilke retninger den skal dreje, for at være parallel med med solen/lyskilden.

Timelapse af demo-video

Videoen vare 1 minut og 16 sekunder, og viser et timelapse over en test vi kørte

https://drive.google.com/file/d/1wv4sU_NtZx_L6DVVrobGlSg0Swo0r0N6/view?usp=sharing

Leave a Reply