Porteføljeopgave 1 – Solcellestyring

Navn på robotsystemet: Ilios (græsk for Sol)

Navne på gruppemedlemmerne: Ling Siu Chang, Katja Nanche Aagaard Christensen og Peter Gissel Christensen – 4. semester Lærings- og oplevelsesteknologi

Systemets udseende

 

Systemets opbygning

Systemet er opbygget kompakt. I bunden har vi breadBoarded, derefter har vi til højre Arduino Motor-Shield. Over breadBoarded sidder LEGO motoren, denne er placeret lodret for at gøre det svært for tandhjulene at “hoppe” når den køre. Over motoren sidder gearingen. Vi har en samlet gearing fra 1:5. Ledningerne fra breadBoarded fortsætter op gennem drejeskiven og op til fladen hvor LDR (Light dependent resistor) sensorerne er placeret. Vi har forlænget ledningerne på LDR, således at sensorerne kan sidde øverst på overfladen og breadBoarded sidder nedenunder således at det sidder stationært. Vi har valgt denne opbygning for at undgå en fjeder effekt, da ledningerne er stive. På fladen er der sat afskærmer mellem sensorerne for at skygge sensorerne for solen, hvis solen bevæger sig i en anden retning. Og en afskærmer foran en af sensorerne for når at solen står op vil den dens stråler ikke komme ind bagfra og aktivere begge sensor.

Systements hardware

 

Diagramtegning

Billeder af systemet med pile og beskrivelser på de enkelte delkomponenter

Problemområder

Vi har ændret vores system 4 gange under opbygningen af systemet.

 1: Ved første opbygning placerede vi breadBoarded på fladen med sensorerne på, dette gjorde at toppen/fladen var for tung, at LEGO motoren kunne ikke klare det og den derfor ikke kunne rotere fladen.

2: Ved anden opbygning var der for meget modstand i ledningerne fordi de var for stive, hvilket gjorde at når vi slukkede lego motoren så ville fladen springe tilbage til den position den var til at starte med.

3: Vi løste forrige problem ved at sætte en gearing på, således at lego motoren blev mere kraftig og kunne klare de stive ledninger.

4: Efter forrige opbygning fandt vi ud af at LEGO motoren ikke passede ikke ind pga tandhjulene. Dette løste vi ved at vende LEGO motoren 90 grader.

De udfordringer der har været ift. at få koden til at virke var at kun at få motoren til at skulle køre i den rigtige retningen i forhold til sensorerne. I forhold til hvorvidt det skulle være HIGH og LOW, afhængeligt af input fra sensorerne.

Systemets opførsel

Systemets opførsel er implementeret efter ”if og else” statements alt efter hvad den skal gøre. Hvis arduino registrere en værdi der er under 200 så stopper LEGO motoren. Hvis den registrere en værdi over 200 så drejer motoren sig i den retning som lyset rammer en af sensorerne. Hvis begge er over 200 så stopper LEGO motoren.

Flow-diagram

Kode

const int motor1 = 9; //output pin for moterens bremser
const int motor2 = 12; //output pin for moterens omdrejning

const int redSensorPin = A0; // Rød sensor fra input A0
const int greenSensorPin = A1; //Grøn sensor fra input A1

int redValue = 0; // rød start værdi
int greenValue = 0; // grøn start værdi

int redSensorValue = 0; // rød sensor start værdi
int greenSensorValue = 0; // grøn sensor start værdi

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // opretter serielforbindelse

  pinMode(motor1, OUTPUT); // fortæller Arduino det er et output
  pinMode(motor2, OUTPUT); // fortæller Arduino det er et output
}

void loop() {
  // put your main code here, to run repeatedly:
  redSensorValue = analogRead(redSensorPin); // læser værdi fra rød sensor
  delay(100); // forsinker loop med 100 milisekunder. 
  greenSensorValue = analogRead(greenSensorPin);//læser værdi fra grøn sensor
  delay(100); // forsinker loop med 100 milisekunder.

// udskriver til serial monitor
  Serial.print(" Raw Red: ");
  Serial.print(redSensorValue);
  Serial.print(" Raw Green: ");
  Serial.println(greenSensorValue);

  redValue = redSensorValue;
  greenValue = greenSensorValue;

  Serial.print(" Mapped Red: ");
  Serial.print(redValue);
  Serial.print(" Mapped Green: ");
  Serial.println(greenValue);

  
 if (redValue >= 200 && greenValue >= 200) //bremser når der er lys på begge sensor
  {
    digitalWrite(12,HIGH); //Retning
    digitalWrite(9,HIGH); //Bremsen
    analogWrite(3,0); //Hastigheden
  }
  
  else  if (redValue <= 200 && greenValue <= 200) //bremser når der ikke er lys på begge sensor
  {
    digitalWrite(12,HIGH); //Retning
    digitalWrite(9,HIGH); //Bremsen
    analogWrite(3,0); //Hastigheden
  }

  else if (redValue <= 200 && greenValue >= 200) // lys fra venstre - rød
  {
    digitalWrite(12,HIGH); //Retning
    digitalWrite(9,LOW); //Bremsen
    analogWrite(3,255); //Hastigheden
  }

  else if (redValue >= 200 && greenValue <= 200) // lys fra højre -grøn
  {
    digitalWrite(12,LOW); //Retning
    digitalWrite(9,LOW); //Bremsen
    analogWrite(3,255); //Hastigheden
  }
}

 

Konklusion

Vi kan hermed konkludere at vi har opbygget en solcellestyring, der drejer efter solens lys med en motor for at optimere udnyttelsen af solens energi. Vi har benyttet os af to LDR-modstande, LEGO, en LEGO-motor og Arduino Motor-Shield. Robotten virker således at den rotere efter solens lys og stopper når solen er gået ned. Og når solen står op igen, rotere den sig i den retning solen står op.

 

Forbedringer

Forbedringerne vi kunne have lavet ved systemet er fx. at gøre systemet mere følsom for lys. Og at den skal kunne dreje 180 grader for at kunne følge solen mere når dagene er længere, Derudover kan gearingen geares mere ned så den er mere stabil og mere præcis.

 

Video

Leave a Reply