Vejledere:
Bente Charlotte Weigelin & Jacob Nielsen

Gruppe:
Eva K. Nøhr Larsen, Jens H. Jakobsen, Nickolai Petersen.

Indledning

Systemet “Flower Power” er en simulering af et solcelleanlæg som er bygget til at simulere en blomst, blomsten, som i virkeligheden følger solens lys for at optage energi. I dette tilfælde har vi benyttet photoresistore som følger en hvilken som helst lyskilde.

Blomsten er monteret på hjørnet af en rummelig kasse der med fordel er blevet brugt til at indeholde systemet bestående af arduinoen.

Systemet er bygget op af to photoresistore på hver sin side af blomstens hoved, mellem kronbladene. Stilken med en 45º graders vinkel er sat på en micro servo, som styres fra arduinoen. Kassen har desuden en RGB-LED-diode som styret af arduinoen angiver hvilket stadie systemet er i, ud fra hvad photo-resistorerene registrere.

Beskrivelse af systemet:

Systemet indeholder:

  • To photoresistore med et ekstra udløb i henholdsvis A0 og A1
    • Pin til arduino ligger mellem fotoresisteren og modstanden.

  •  To forskellige modstande.
    • Værdierne fra de variable photoresistore bør angive ens værdier, hvis ikke kompenseres der for det ved hjælp af forskellige modstande.

  • Micro Servo med digital port (til port 3)
    • Servo har kun et spin på 180º.

  • RGB-LED-diode med ben i port 9-10-11.
    • Samt dertilhørende modstand.

Hvorfor er systemet opbygget som den er for at løse opgaven

Systemet er designet og bygget ud fra ideen om en blomst som går efter sollyset. Det vigtige i opgaven var at photosensorene stod i en fast position til at kunne opfange solen. Dette er grunden til at blomsten har en hældning på 45º, i forhold til solens position. Systemet kan bevæge sig mod højre eller venstre efter hvor der er mest lys, samt finde en nat position på micro servoens 45º mod syd-øst, hvis lysniveauet er tilpas lavt.

Tanker bag opbygningen.

Designet er opbygget efter et simpel princip som skal virke så virkelighedstro til en blomst med dets naturlige mulighed for at følge solen.


Illustration 1 – Jordens Hældning

Billedet ovenfor illustrerer at solens lys falder i en vinkel på 45º  ud for Danmark i forhold til jordens akse som ved jævndøgn er på 90º.


Illustration 2 – Fast Hældning

Billedet ovenfor illustrere hvorfor en fast vinkel på stilken bør være 45º, især omkring projektets afleverings dato der er tættest på forårs-jævndøgn.

B.S. Ingemanns “ I østen stiger solen op” og at det er varmes mod syd er gode husketeknikker, for at komme frem til hvilken vej systemet skal vende.


Illustration 3 – Systemets placering

Systemet skal vende ved en 90º graders position stik syd for optimal funktion. Herefter vil den røde lampe lyse når systemet bevæger sig mod øst og bevægelse mod vest vil indikeres af den grønne lampe.

Billede gennemgang af Tinkercad modeller i de forskellige stadier:

Herunder: Blåt lys fra RGB-LED-diode – Genstart af systemet, når begge photo resistorer registrere et niveau under værdien 300 antager vi at der er mørkt og servomotoren flyttes tilbage til nat position mod syd-øst, der er på de 45º grader, mellem syd og øst.


Illustration 4 – Start Position

Herunder: Rødt lys fra RGB-LED-diode: Systemet registrere mere lys fra venstre photo resistor og servomotor drejer mod venstre/øst.


Illustration 5 – Venstre Drej

Herunder: Grøn lys fra RGB-LED-diode: Systemet registrere mere lys fra højre photo resistor og servomotor drejer mod højre/vest.


Illustration 6 – Højre Drej

Arduinoen fungerer som systemets CPU. Værdierne som photo-resistorerne sender til arduinoen, bliver brugt som central værdier, de bestemmer hvordan de forskellige enheder skal reagere. Værdierne bliver sat i en venstre-værdi og i en højre-værdi, som bliver sat op mod hinanden.

Hvordan er gearingen og hvorfor?

Vi har anvendt servomotor, hvor det kun er muligt at opererer mellem 0 og 180 grader. Gearingen er inde den blå kasse i forlængelse af  motoren. Motoren kan bevæge sig begge veje ved hjælp af pulse signaler fra arduinoen sendt fra koden, i stedet for at ændre strømretningen.

Hvor er motoren placeret og hvorfor?

Motoren er placeret på undersiden af æskens låg, med et hul så stilken kan sidde på den roterende del af servomotoren.

Motorens roterende del stikker op fra kassens top og er placeret i hjørnet, så motorens kasse på undersiden ikke kommer i karambolage med arduino eller breadboard når kassen lukkes.

Hvordan er h-broen opbygget inkl begrundelser og beregninger?

Vi har i dette projekt ikke brugt H-broen, men en micro servo der kan ændre retning ud fra signaler i kodningen over arduinoen og pulse-output -og ikke ved at ændre strømretningen over H-broen til motoren.

Hvordan er spændingsregulator kredsløbet opbygget inkl begrundelser og beregninger?

Da vi kun bruger 5V udgangen på arduinoen og bruger derfor kun arduinoens indbyggede spændingsregulator, har vi ikke skrevet mere i dette afsnit, da vi også bruger en micro servo, som skal bruge de 5V.

Hvilke sensorer er benyttet og hvor er de fysisk placeret på robotten

Vi har benyttet to photoresistore, sensorerne er begge placeret på hver side af blomstens hoved, sådan at blomstens hoved altid vil være hvor der er mest direkte lys. De øjne der er placeret på blomstens hoved, sørger for at lysindfald fra en vinklet retning ikke vil lyse på begge fotoresistore samtidig og derved vil systemet bevæge sig mod lyset.

Har det været problemfrit at opbygge robotten eller har den ændret form/sensor-placeringer flere gange?

Da selve ideen til systemet var klarlagt var det derudfra nemt at designe udseendet, hvor enigheden var at systemet skulle ligne en blomst.

De to photo-resistorer viste i starten forskellige værdier trods samme modstand, men efter erkendelsen af at de to photo-resistorer kunne være variable, løste det sig at sætte forskellige modstande på hver af photo-resistorer, så de gav nogenlunde ens værdier.

Ydermere var der en meget kort overgang påtænkt at photo-resistorerne skulle sidde på kassens overside, men det passer ikke med hvordan koden er opbygget, da kassen ikke flytter sig efter lyset.

Hvordan robottens hardware er sammensat.

En diagramtegning:


Illustration 7 – Diagram Tegning

Billeder og beskrivelser på de enkelte delkomponenter


Illustration  8 -Systemets delkomponenter


Illustration 9 -Arduino: Arduinoen er udstyret med den microcontroller som vi har fortalt via kode, hvordan den skal reagerer med andre komponenter.


Illustration 10 -Photoresistor: Photoresistorer er en variabel resistor som ændre sin modstand baseret på mængden af lys som rammer den.

Illustration 11 – Micro Servo Motor: Dette er en gearet motor som kun kan roterer 180 grader. Den kontrolleres ved at sende elektriske impulser fra arduinoen som fortæller til hvilken position servomotoren skal flytte sig til.

Illustration 12 & 13 – RGB-LED: Kaldet Red-Green-Blue-Light Emitting Diode, er en halvleder diode som udsender et lys grundet den energiudladning der sker når fotoner springer fra anoden til kathodens reflekterende hul.

Det særlige ved denne diode er at alt efter hvilket ben arduinoen bruger, vil de bruge hver deres bølgelængde og dermed kan man frembringe stort set alle farver ved at skrue på intensiteten af de tre farver rød, grøn og blå, ved additiv farveblanding.

Illustration 14 – Modstande: Modstande modstår den strøm af elektrisk energi der gennemløber i et kredsløb. Modstande eller resistorerers værdi måles i ohm og de farvede bånd indikerer værdien på modstanden.

Illustration 15 – Mini Breadboard: Dette er et panel hvor nogle af de forskellige huller er forbundet. Her er det 1X5, altså de første 5 huller på første række og så fremdeles. Det gør at man hurtigt kan lave opstillinger til test og prototyper, uden at skulle lodde eller lave printplader.

Har der været nogle problemer ift. at få hardwaren til at virke?

Ja, der har været problemer. Problemet lå hovedsageligt i at vores fotoresistore ikke opfangede og dermed afgav de samme værdier. Dette betød at sensoren på vores højre side, havde en højere værdi på trods af at solen stod lige på systemet. Dette gjorde at systemet altid kiggede mere mod højre end venstre.
Løsningen blev at vores resistor på den venstre foto-resistor havde en 4,7k Ohm resistor i stedet for 10k Ohm. Dette var nok til at værdierne fra de to sensorer lå nogenlunde ens, når solen stod lige på robotten.

Ved de individuelle opbygninger af systemet har det ligeledes været nødvendigt først at sikre sig ens værdier fra fotoresistorene, ved hjælp af forskellige modstande.

Derudover har der været mindre fejl som at “stilken” på systemets blomst er faldet af servoens gearing, at batteriet er løbet tør eller at en ledning ryger ud af breadboardet hvis man åbner kassen for højt.

Hvordan er robottens opførsel implementeret.

Hvad er de overordnede opførsel/metoder for robotten?

Efter arduinoen er blevet tændt modtager den input fra de to sensorere. Koden sørger for at de to input sammenlignes og vurderes om, value et eller value to er højest -eller om de begge er under en fast værdi. Ud fra den sammenligning sender arduinoen impuls til servoen om at forøge eller formindske servoens værdier, alt efter hvilken fotoresistor værdi der er højest. 

Hvis værdi-1 er højst drejer serveren til venstre og omvendt i tilfælde hvis værdi-2 er højest. I tilfælde af begge sensorer registrerer en value under 300 sættes systemet til morgen position på 45º grader mod syd-øst, som er servoens værdi på 135.

Drejer systemet til venstre bliver der sendt et signal til RGB lampen om kun at bruge rødt lys, drejer den til højre, bruges kun grønt lys og ved morgen-position bliver bruges rent blåt lys.

Et flow-diagram, som beskriver robottens opførsel:


Illustration 16 -Flow Diagram

Inkluder kode + beskrivelse.

#include <Servo.h>
Servo myservo;

int pos = 0;
int redPin = 9;            // RGB-rødt ben i port 9.
int greenPin = 10;         // RGB-grønt ben i port 10.
int bluePin = 11;          // RGB-blåt ben i port 11.

int servoVar = 90;   int delta = 10;            // Forskel på 10 for at reducerer at systemet opdaterer position.

void setup() {
  myservo.attach(3);             // Micro Servo i port 3.
  Serial.begin(9600);            // Hvor hurtigt data sendes.

  pinMode(redPin,OUTPUT);        // Konfigurerer en specifik pin til at
  pinMode(greenPin,OUTPUT);      // være output.
  pinMode(bluePin,OUTPUT);      
}

void loop() {

  myservo.write(servoVar);

  int analogValue1 = analogRead(A0);  // Lysværdier i int, læses
  int analogValue2 = analogRead(A2);  // henholdsvis fra port A0 og A2.
  Serial.print(analogValue1);     // Værdier fra photoresistor 1 printes
  Serial.print(‘/’);              // i Serial Monitor.
  Serial.print(analogValue2);     // Værdi fra photoresistor 2.   Serial.print(‘/’);              // Separator.
  Serial.println(servoVar);       // Servo motorens værdi udskrives.
  delay(1200);


  if (analogValue1 >= analogValue2){// Hvis blomst skal dreje til højre.
    servoVar++;                     // Forøger servoens værdi.
    RGBcolor(0,255,0);              // Tænder RGB diode med grønt lys.
  }
  else if (analogValue1 <= analogValue2){// Hvis blomst skal dreje til          venstre.
    servoVar–;                     // Formindsker servoens værdi.
    RGBcolor(255,0,0);              // Tænder RGB diode med rødt lys.
  }
 
  if (analogValue1 <= 400 && analogValue2 <= 200){ // Ved manglende lys, sættes blomst til morgen-position.
    servoVar = 135;                  // Sætter servoen til værdien 135.
    RGBcolor(0,0,255);               // Tænder RGB diode med blåt lys.
  }
  if (servoVar > 180){ // Sikre servoVar’s værdier er mellem 0-180.
    servoVar = 180;
  } else if (servoVar < 0) {
    servoVar = 0;
  }
}
void RGBcolor(int redLight, int greenLight, int blueLight) // RGB farver opsættes.
{
  analogWrite(redPin, redLight);
  analogWrite(greenPin, greenLight);
  analogWrite(bluePin, blueLight);
}
 

Grafer for testkørsel med rigtig sol:

Forklaring af graf.

Grøn og rød linje er værdierne fra henholdsvis højre og venstre photoresister, farverne indikerer samtidig hvilken vej blomsten vil dreje alt efter hvilken værdi der er højest.

Blå linje er servoens værdier som stiger når den grønne linje har højeste værdier og falder når den røde linje har den højeste værdi.
Se bilag for resultater.

Funktionen med grafen

Grafen viser hvordan værdierne fra photoresisterne, har indflydelse på hvilken retning servomotoren drejer. Designet af systemet gør at den retning servoen drejer, får blomsterhovedet og derved photoresisterne til at vende mod solen.

Beskrivelse af forløb

Starten af grafen viser hvordan vores “hviletilstand” fungere. Værdierne på den røde og grønne photoresisterne er ikke til tilstrækkelig nok til at systemet gør noget, og derfor vil servoen stå ved 135 grader. (11:29:27 => 11:29:50).
Som lyset bliver stærkere, og værdierne på rød og grøn stiger, kan systemet skelne mellem de 2 værdier, ved at måle hvilken værdi er størst. I det første tilfælde er det er den grønne værdi højere end den røde, antaget at solen står op i øst. Derfor siger værdien i grader. Dette er dog kun til 180, da servoens maks værdi er 180. (11:29:51 => 11:30:23)
Senere sker der et skift i solens retning, og systemet opfanger dette ved at den røde værdi er højere end den grønne. Værdien i grader falder i dette tilfælde. Dette er dog kun til 0 grader er opnået, da servoen ikke kan dreje længere end dette. (11:30:24 => “The End”)

Servoens værdier i stik øst er 180 og i vest 0, derfor vil servoens værdi falde dagen igennem når blomsten bevæger sig fra øst til vest -og forventet stige i det tidsrum fra nat-venteposition til lyset er stærkt nok til at blomsten igen kan registrere lyset.

Hvilke udfordringer har der været ift. til at få koden til at virke?

Når man skal programmere til en robot, og denne robot skal bevæge sige ved hjælp at nogle specifikke enheder, er det ofte være udfordringer i robottens programmering.

En af udfordringerne var at koden sendte uendelige værdier og ikke var begrænset til de 180 grader som servoen kunne bevæge sig. Der gik alt for lang tid før servoen drejede modsat retning, efter at være nået ud i yderposition. Efter at se koden igennem et par gange gik det op for os at værdierne kunne være større eller mindre end 0-180 og fik derfor indsat følgende for at indsnævre værdierne.

if (servoVar > 180){

    servoVar = 180;

  } else if (servoVar < 0) {

    servoVar = 0;

Dette skabte dog et andet problem. Når solen står op igen skulle robotten bevæge sig fra 0 til 180º grader (vest til øst), som godt kunne tage tid og spilde tiden med sollys. Dette blev løs ved at lave en vent-på-morgensol-tilstand, som aktiveres når begge  photo resistorer input var tilstrækkelige lave. Dette ville starte en nattilstand, som sætter servoen tilbage på 45º grader eller stik syd-øst. Vi havde i starten sat denne position til 90º grader eller stik syd, men efter en dialog i gruppen, ændrede vi det til de 45º grader eller syd øst, da den østvendte photo resistor derved ville have nemmere ved at registrere morgenlyset en fra en 90 graders syd position.

Konklusion

Vi fik til opgave at konstruere en solcelle styring. Ud fra denne problemformulering byggede vi robotten “Flower Power”. Vi byggede konstruktionen ud fra to photoresistore som opfanger lys, samt en servo som drejer konstruktionen i den retning, hvor lyset kommer fra. Servoen er styret af en Arduino, som modtager input fra de to photoresistore.

Med arduinoens kode formåede vi også at få systemet til at følge solen med et delay, som gør at systemet ikke opdateres hvert millisekund. (se video 1)

Dertil er også en deltaværdi som der skal mere end 10 værdier i forskel mellem de to fotoresistore værdier før servoen skal dreje -og derved undgås det at systemet står og kompenserere positionen frem og tilbage.

Grundet vejrets omtændigheder har det været svært at lave en test i naturlige omgivelser, men heldigvis fandt vi en solopgang og solnedgang i solrigt vejr, samt lidt en tåget aften under en paraply.

Løser robotten opgaven ift. opgaveformuleringen?

Opgaveformuleringen lød på at konstruerer en solcelle styring og da systemet er opbygget til at reagerer efter fotorestistorenes højeste værdi og styre blomsterhovedet derefter, må dette krav være opfyldt.

Systemet bruger kun en servo motor og stilkens knæk er vinklet til de 45º grader så blomsterhovedet er således vinklet.

Når lysindfaldet er lavt over begge photoresisterne vil systemet sætte værdien på servomotoren sådan at blomsten drejer til en position mod syd-øst, så systemet kan opfange morgenens første solstråler.

Overvejelserne omkring valg af motor faldt på servomotor, da vi blandt andet ikke fandt det nødvendigt at skulle bruge en bredere vinkel end de 180º grader som servo motorens bevægelse er begrænset til.

Af enkeltheds hensyn er kun tilføjet en RGB-diode for lysindikation, dog kun med en modstand mellem diode og ground, da vi kun bruger de tre rene farver rød, grøn og blå.

Systemet er desuden testet og video dokumenteret i naturlige omgivelser samt en kort simulering hvor data er registreret og vist via en graf.

Det kan således konstateres at ud fra løsningen af ovenstående krav, løser robotten opgaverne fra opgaveformuleringen.

På hvilke punkter kan systemet forbedres? -og evt. hvordan?

En forbedring af systemet kunne være introduktionen til en solcelle. Dette ville gøre at at systemet ikke mister strøm så hurtigt og måske endda generere strøm til at flytte motoren.

En anden tilføjelse, ville være implementering en ekstra motor i knækket af blomsten. Denne implementering til et toakset system, ville kunne gøre at blomsten kunne ændre vinklen op og ned, så blomsterhovedet kunne vende mere vinkelret mod solen, trods fx et ujævnt underlag.

Derudover kunne der gennemtænkes mere energibesparelse, lave lysindikatoren mindre synlig ved at bruge højere modstande.

Eller sætte antallet af registreringer yderligere ned eller deltaværdien mellem de to photoresisterne værdier yderligere op, så der skal højere forskel til før systemet skal dreje.

Man kan også bruge en form for sleep-mode, som enten lukker dele af systemet ned i en given periode eller lukker hele systemet. Her skal der downloades et library og man kan derefter bruge Idle Sleep Mode og derigennem sætte hvor lang tid arduinoen skal bruge low power og hvornår den igen skal tændes på almindelig styrke.

Video

Første “time lapse” video er optaget med formål at vise systemets reaktion ved solnedgang. Under optagelsen sætter batteriet ud og bliver skiftet, vejret er meget gråt og regnfuldt, så blomsten bevæger sig meget tilfældigt, men kameraet løber tør for strøm inden det er helt mørkt.

Anden time lapse video viser at solen registreres korrekt, dog går stilken løs under optagelsen og derfor bevæger blomsten sig ikke.

Tredje time lapse video viser en fin solnedgang med skyggerne vandre over græsset, sidst på aftenen fanges refleksioner fra nærliggende huse og sidst flytter systemet sig til morgen-position -og derefter kan man se ved den manglende lysstyrke på RGB-dioden at batteriet igen er ved at løbe tør for strøm.

Demo-video.

Leave a Reply