Porteføljeopgave 1

11-04-2018

Solcellerobot

 

Gruppemedlemmer: Jens Hesel, Lasse Hassel-Pflugh og Asger Nybo

 

Formål

Robottens formål er at rotere nogle ”solceller”, sådan de har den optimale vinkel ift. Solen og opfange mest muligt energi. Dette gør de, når de står vinkelret på solen. Robotten er styret af en Arduino, som modtager signaler omkring solens bevægelse fra det elektroniske kredsløb som bl.a. består af to photoresistor (lyssensor). Ud fra disse signaler vurdere Arduinoens software hvilken vej den elektriske motor skal rotere eller om den skal forblive i samme position.

 

Robottens opbygning

Tanken med opbygningen af robotten er at have en roterbar flade, der er delt i to af en ”væg”. På hver side af denne væg, skal der sidde en lyssensor. Hvis der måles forskellig lysstyrke på de to sensorer, skal robotten dreje fladen mod den kraftigste målte lysstyrke, indtil de er ens.

 

Der er brugt gearing to steder i opbygningen af robotten, med det formål at mindske hastigheden hvormed fladen med solcellen drejer. Første sted er fra det ”kørende” tandhjul et 8 tands, til det følgende tandhjul et 24 tands, hvilket gearer ned med en ratio 1:3. Herefter geares der yderligere ned med et orme tandhjul der sidder i forlængelse, og er forbundet med et 16 tands tandhjul. Ud fra reglen om gear ratio med orme tandhjul(https://en.wikipedia.org/wiki/Worm_drive), giver anden gearing en ratio på 1:16. Derudover bruges orme tandhjulet til at dreje den kørende akse med 90 grader.

De to ratios kan nu ganges sammen som brøker, for at give den samle gearing ratio:

(1/3)∙(1/16) = 1/48

Robotten har en samlet gearing på 1:48.

Motoren er placeret ude i siden af fundamentet, da der skal være plads til at lave gearing to gange.

Der er benyttet to lyssensorer LDR (http://kennarar.vma.is/thor/v2011/vgr402/ldr.pdf), de er placeret på hver sin side af væggen. De er placeret på denne måde, for at de kan holdes op i mod hinanden, og på denne måde sammenligne lysstyrken på de to sider.

Det problematiske ved at bygge robotten har ikke været sensor placering, da den har været den samme hele tiden dog har størrelsen af væggen ændret sig en enkelt gang. Det sværeste ved opbygningen var selve Lego-delen. Det tog tid at finde de rigtige dele, og det tog tid at eksperimentere med gearing og placering af klodser.

Robottens hardware

Robottens hardware, består af følgende:

  • Arduino
  • Elektrisk motor
  • Elektrisk kredsløb
    • To photo resistorer
    • To 1resistorer

I figur 1 vises en diagramtegning over det elektroniske kredsløb.

Kredsløbets inputspænding  er på 5 volt, som generes af Arduinoen. Selve kredsløbet består af to resistorer på  og to photoresistorer, som danner to spændingsdelere, også kaldet en wheatstone bridge. De to spændingsdelere generer to outputspændinger (V01 og Vo2), disse to spændinger er givet ved formel 1, som er spændingsdelerformlen:

De to photoresistorers modstande varierer alt efter hvor meget sollys/lys som de rammes af, desto mere lys, desto mindre modstand. Som det fremgår af formel 1, afhænger outputspændingen  af forholdet mellem de to modstande i serie, hvilket vil variere ift. Hvor meget lys som falder på de to photoresistorer.

Med udgangspunkt i ligning 1 og 2, kan der opstå 3 scenarier:

På den måde er photoresistorernes karakteristika udnyttet til at genere to variable outputspændinger, som afhænger af sollyset/lyset. Disse to outputspændinger, anvendes af Arduinoens software, til at vurdere hvordan Arduinoen skal rotere den elektriske motor.

Robottens opførsel

Robotten indlæser først og fremmest værdierne fra lyssensorene. Derefter sammenligner den værdierne og tænder motoren i den retning hvor sensoren med mest lys sidder. Motoren stopper når værdierne er ens (+-5). Når værdierne er ens antager vi at solcellen står vinkelret på solen, pga skyggepladen.

Robottens opførsel er beskrevet herunder i et flowdiagram:

Nedenunder ses den rå kode med beskrivelse til alle elementer.

int sensorPin = A0;// select the input pin for LDR
int sensorPin1 = A1; // select secound input pin for LDR 2  
int sensorValue1 = 0; // variable to store the value coming from the sensor
int sensorValue = 0; // variable to store the value coming from the sensor 
int const difference = 5; // Buffer to make a interval on +-5, where the sensorvalues are considered equal

void setup() { 
Serial.begin(9600); //sets serial port for communication 
pinMode(12, OUTPUT); //Initiates Motor Channel A pin
pinMode(9, OUTPUT); //Initiates Brake Channel A pin
} 

void loop() { 
sensorValue = analogRead(sensorPin); // read the value from the sensor
sensorValue1 = analogRead(sensorPin1); // read the value from the sensor

 if (sensorValue > sensorValue1-difference && sensorValue < sensorValue1+difference){
  digitalWrite(9, HIGH); //Engage the Brake for Channel A}
 } // Checks if the values are equal, and if so, stop the motor

  else if(sensorValue < sensorValue1-difference){
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  analogWrite(3, 50);   //Spins the motor on Channel A 
  } // Checks If the right sensor if larger than the left, if so, turn the motor right

  else{
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  digitalWrite(12, LOW); //Establishes backward direction of Channel A
  analogWrite(3, 50);   //Spins the motor on Channel A 
  } // Otherwise turn the motor left
 
Serial.print(sensorValue); //prints the values coming from the sensor on the screen
Serial.print(" ");
Serial.println(sensorValue1); 
delay(100); 
}

 

Den første kode vi fik skrevet fik motoren til at dreje den rigtige vej når den blev påvirket af lys, men den stoppede ikke igen. Den fortsatte rundt. Dette fik vi dog hurtigt rettet til.

 

Konklusion

Robotten løser opgaven i og med den kan følge en lyskilde rundt 360 grader.

Forbedringer:

Hvis lyskilden stod direkte bag robotten, drejede den sig ikke. Dette kunne man evt. løse ved at have en lyssensor bagpå, som registrerede hvis der var mere lys der end foran.

Man kunne også have taget 2 lyssensorer mere samt en motor mere, der kunne vurdere om hældningen på solcellerne var optimal. Dette kunne man gøre ved at sætte lyssensorende i en firkant og have en væg mellem dem alle sammen, hvor man så kunne sammenligne lysstyrken både vertikalt og horisontalt.

Ydermere kunne man have lavet konstruktionen mere stabil, samt lægge ledningerne smartere, så de ikke var i vejen, når solcellen drejede rundt.

For at gøre robotten mere præcis kunne man gøre væggen tyndere, og placere sensorerne tættere på væggen.

 

Video

Video 27-03-2018 09.23.25

 

Leave a Reply