Navne på gruppemedlemmerne

Peter BrændgaardPebra18@student.sdu.dk
Malte BukrinskiMabuk18@student.sdu.dk
Jajoe18@student.sdu.dkJajoe18@student.sdu.dk

Hvorfor er systemet/robotten opbygget som den er ift. at løse opgaven.

  • Hvilke tanker ligger bag ved opbygningen

System er opbygget omkring en servomotor SG90 1PC, som bliver styret af en arduino UNO R3. På Motoren er montoreret en drejearm hvor der er tapet et V formet stykke pap på.
I hver ende af pappet er der montoret et stykke LDR-modstand til at detekterer sollysets retning.
Ideen bagen vores kode, er at vi får et input fra begge vores LDR modstande, i tilfælde af at der er en difference mellem de to tal, ved vi at de ikke modtager lige meget sollys, og der derfor skal sendes et signal ud til servo motoren om at den skal roterer.

  • Hvor er motoren placeret og hvorfor dér?

Motoren er placeret i bunden, i midten af det V-formet pap, sådan at en 1 grads rotation på motoren resulterer i en graders rotation af systemet.

  • Hvordan er h-broen opbygget inkl begrundelser og beregninger?

Der benyttes ikke H-bro da der benyttes servo-motor.

  • Hvordan er spændingsregulatorkredsløbet opbygget inkl begrundelser og beregninger?

Vi har en 10k ohms modstand i forlængelse af vores photoresistor, for at lave en spændingsdeler af de to dele. Det resulterer i den største spændingsforskel når resistor modstanden ændre sig. 

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

Der er benyttet to photoresistorer, som sidder på hver side af robotten med et stykke pap imellem for at få større forskel imellem dem.

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

Vi havde den udfordring at forskellen mellem de to sensorer, var svær og sporer, løsningen på dette problem var at opsætte et stykke pap i mellem de to sensorer.

Hvordan er robottens hardware sammensat?

  • Lav en diagramtegning

  • Tag et billede af robotten og sæt pile og beskrivelser på de enkelte delkomponenter
  • Har der været nogle problemer ift. at få hardwaren til at virke?

Der var udfordringer med at måle forskelle mellem photoresitorerne inden der blev sat et stykke pap imellem dem, da de svingede meget.

Hvordan er robottens opførsel implementeret

  • Hvad er de overordnede opførsler / metoder for robotten

Robotten drejer til højre eller venstre alt efter forskellen i modstanden på de to photoresistorer. Når den når enden af servomotoreren, i.e. 0 eller 180 grader, så kører den tilbage. 

  • Lav et flow-diagram, der beskriver robottens opførsel.
  • Vis grafer for testkørsel med rigtig sol.
  • Hvilke udfordringer har der været ift. til at få koden til at virke?

Vi skulle lige have fundet ud af hvordan servomotoren virkede og hvilke gradantal den kunne tage.

Konklusion

  • Løser robotten opgaven ift. opgaveformuleringen?

Robotten kan bevæge sig efter solen uden problemer.

  • På hvilke punkter kan den forbedres og evt. hvordan?

Robotten kunne godt have en bedre evne til at placere sig rigtigt til at fange solen når den står op. Den kunne eventuelt huske sidste dags start position eller have en måde at konfigurere startpositionen på, så den kunne tilpasses forskellige breddegrader.

Video

Denne video viser hvordan den følger lyset rundt.
Denne video er et kort timelapse over ca. 2 timer.

Setup:

Code:

#include <Servo.h>

Servo servo;

int currentPosition = 10;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  servo.attach(3);
   pinMode(10, OUTPUT);
    pinMode(11, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  int lightLevelLeft = analogRead(A0);
  int lightLevelRight = analogRead(A1);



  int difference = lightLevelLeft - lightLevelRight;
  Serial.println("Difference: ");
  Serial.println(difference);
  if(difference > 2){
    servo.write(++currentPosition);
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
  }else if(difference < -2){
    servo.write(--currentPosition);
    digitalWrite(11, LOW);
    digitalWrite(10, HIGH);
  }else{
   digitalWrite(11, LOW);
   digitalWrite(10, LOW);
 }
  Serial.println("Currentposition:");
  Serial.println(currentPosition);

  if(currentPosition > 179){
    currentPosition = 0;
  }else if(currentPosition < 1){
    currentPosition = 180;
  }

  delay(1000);
}

Leave a Reply