Mads Kildegaard Kristjansen & Lucas Brynk Jensen

Da vi overvejede hvordan systemet skulle opbygges, anskuede vi opgaven lidt som en fabrik; Der er et system, altså en masse objekter der skal arbejde sammen for at udfylde en opgave. Derfor valgte vi at skabe vores system så det minder om en ”mini fabrik”.

Da opgaven lød på at lave en robot som skulle følge solen hele vejen rundt og få så meget ud af sollyset som muligt, valgte vi at lave den lidt ligesom en vindmølle. For at opnå dette, byggede vi en ”vindmølle” ud af lego. Til at få selve ”huset” til at dreje rundt, benyttede vi en Lego Mindstorm motor, satte den i forbindelse med et gearingshus bestående af 3 gear og en spindel, som har til formål at sløve motoren ned, da ”huset” ville køre alt for hurtigt uden. På den anden side af gearingen sidder så ”huset” som drejer med solen rundt, når motoren kører.

Vi valgte at placere motoren for enden af ”fabrikken” da dette gav mest mening ift. hvordan byggemulighederne er med Lego. Gearingen består som sagt af 4 gear. Via den trækaksel som er påsat motoren sidder det første gear, som er en spindel (Se billedet nedenfor).

Spindlen består af 6 vendinger. I forlængelse af denne spindel er sat et gear. Dette gear består af 24 tænder. Her for vi den første gearing. Den trækaksel som sidder fast på gear nr.2 går op til et nyt gear der består af 11 tænder, og i forlængelse af dette gear sidder det sidste gear, som består af 22 tænder.

Ratioen mellem gear 1-2 og 3-4 giver så en udveksling på hhv. 24-1 og 3-1. Mellem gear 2-3 er en udveksling på 1-2. Det giver en samlet ratio på 36:1. Hvis vi går ud fra at Lego Mindstorm motor har en stabil 151.1 RPM vil dette komme ned på en stabil 4.2 RPM.

Da der er 360 grader i en cirkel kan vi beregne at med 60 sekunder pr minut divideret med 4.2RPM = 14.2857 sekunder pr runde. Dette divideret med 360 grader (gange 100) giver 3.97 grader pr sekund.

(Beregningerne er lavet af denne Gear Ratio Calculator: http://gears.sariel.pl/?fbclid=IwAR2mOe9JteP2ZcClZraDeEaEWSdaTRSM-0M7siCVtgRmYwnFx3Nt1gpw8QE)

Med den gearing kan vi styre systemet til at dreje 2 grader, med et delay på 500ms. Dette virker som en passende hastighed for vores system, i forhold til hvor hurtigt solen bevæger sig. Da solen bevæger sig 15 grader i timen over himlen betyder det, at vores system kan rykke sig 7.5 gange i timen for at følge solen. Omsat til noget man kan forstå, vil det svare til at vores SolarFriend vil gå glip af ca 2kWh pr år, hvis man går ud fra at det solcellepanel der sidder på (i dette eksempel Greenmatch), kan levere 3400kWh per år, ved opfangning af sol på 40 grader om dagen. (info Link: https://www.greenmatch.co.uk/solar-energy/solar-panels)

Til at styre elektronikken i SolarFriend benyttede vi en Arduino Uno samt et Shield. Som det kan ses, på billedet nedenfor, har vi sat motoren til vores Shield, som er forbundet til Arduino Uno. Arduinoen er sat til en power supply som tilføre den nødvendige spænding (hertil 5V).

Systemet skal kunne opfange lys, derfor er LDR-sensorer benyttet til denne opgave. Vi har på vores system valgt at benytte en sensor da vi mente at dette ville være nok til at klare opgaven. LDR-sensoren er placeret i toppen af ”Huset”.

Diagramtegning

Koden

int grader = 0;
int maxGrader = 180;

int motor1 = 12;
int motor2 = 9;

int sensorPin = A2;
int sensorValue = 0;

bool daytime = false;

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

void loop() {
   sensorValue = analogRead(sensorPin);
   Serial.println(sensorValue);
   delay(500);

   if(grader == 0 && sensorValue >= 1000)
   {
      daytime = true; 
   }

   if(sensorValue <= 1000 && grader != maxGrader && daytime == true)
   {
      digitalWrite(12, HIGH);
      digitalWrite(9, LOW);
      analogWrite(3, 125);
      grader++;
      grader++;
   }
   else
   {
      analogWrite(3, 0);
   }

   if(grader == maxGrader && sensorValue <= 1000)
   {
     daytime = false;
   }

   if(daytime == false && grader !=0)
   {
      digitalWrite(12, LOW);
      digitalWrite(9, HIGH);
      analogWrite(3, 125);
      grader--;
      grader--;
   }

   if(grader == 0 && daytime == false)
   {
      analogWrite(3, 0);
   }
}

I koden har vi angivet to variabler som indikatorer for start- og slutpunkt. Eftersom vi vil have den til at køre fra øst til vest, har vi angivet start som værende nul grader, og slut værende 180 grader (en halv rotation). Desuden har vi en bool ”daytime” for at indikere om det er dag eller nat, således den ikke fortsætter rundt, og vi kan vende den tilbage til startpunkt. Vi starter med at måle om der er en lyskilde (solen). Hvis der er en lyskilde, sensorValue er over en bestemt værdi fra lyskilden, og vi er i startposition, så må vi antage at det er dag (daytime = true). Med dette er programmet ”i gang”.

Så længe senorValue er over den angivet værdi, så må lyskilden være lige på, og der er ingen grund til at rotere. Idet sensorValue falder under den angivet værdi, så må lyskilden have flyttet sig, og motoren vil rotere indtil lyskilden endnu en gang er lige på sensoren. Når systemet har kørt sin fulde omgang, altså 180 grader fra øst til vest, og sensorValue falder under den angivet værdi, så må vi antage at solen er gået ned og dagen er slut (daytime = false). Hvis daytime er lig med false, og grader ikke er lig med 0, altså ikke tilbage i startpunkt, så vender vi om på polariteten og kører sensoren tilbage til startpositionen. Herefter har vi sat motoren til at stoppe indtil en ny dag starter.

Konklusion

Efter den angivet opgavebeskrivelse opfylder SolarFriend alle punkter, undtagen en H-bro i kredsløbet. Dette har vi indført i Arduino koden ved at vende om på polariteten på motoren når den nulstilles.
SolarFriend venter på det bliver lyst nok. Når dette er opfyldt venter den på at der er for lidt lys (solen bevæger sig). Så kører motoren indtil der igen er lys nok på LDR-sensoren, ect. Når solen går ned (altså når SolarFriend har nået solens nedgangspunkt) kører ”huset” hele vejen tilbage til udgangspunktet hvorefter den atter venter på at det bliver lyst.

Video test

Leave a Reply