Gruppemedlemmer: Else og Frederikke

  • Hvorfor er systemet/robotten opbygget som den er ift. at løse opgaven?
  • Tanker inden opstart:
    Vores første tanke, var at vi ville have vores robot til at tage en omgang hvor den måler over det hele, for derefter at køre hen til det sted hvor den målte den højeste lysstyrke, men vi havde glemt at tage forbehold for at der selvfølgelig sidder to og måler lysstyrken, og at det nok er bedre at den måler og drejer, alt efter hvilken af de to tal der er størst. Vi var også nervøse for hvordan vi skulle løse ledningsproblemerne, der evt. kunne opstå ved at den kører. Vi tænkte fra starten af, at motoren skal sættes nederst, da den på den måde har omdrejningen det rigtige sted.Da vi byggede robotten, blev vi nervøse for hvordan vi skulle få kredsløbet over i robotten. Vi endte med at sætte breadboardet i robotten, vinklet mod siden, for bedre at kunne opfange lys fra solen. Vi endte også med at ændre i vores kredsløb for at opnå bedre resultater.
  • Vi troede umiddelbart at robotten kunne laves uden gearing, men motoren mister kraft hvis man sætter hastigheden for drejningen ned. Så på den måde er det det smarteste at have gearing med.Hvis man ikke bruger gearing i robotten vil den også dreje med en for hurtig kraft i forhold til at den skal følge solen over længere tid.
  • Motoren er placeret nederst for at omdrejningen fungerer sammen hvor lyssensorerne er placeret. Der er den også placeret, da det var den nemmeste måde for os at konstruere vores gearing.
  • På robotten er der placeret to sensorer, som er lyssensorerne (LDR). De er blevet placeret øverst på robotten, med en skrå vinkel, så den måler mod solen.
  • Vi er endt ud med en lidt anderledes robot, end hvad vi havde i tankerne da vi startede. Vi fandt ud af at robotten skulle have en gearing, hvilket udseendemæssigt ændrede robotten fra start til slut.
    Det har ikke været problemfrit at bygge robotten, da gearingen blev kompliceret ved at skulle finde de rigtige stykker lego og få dem til at passe sammen.
  • Sensorerne har ikke rykket placering, vi valgte at sætte breadboardet på robotten, da vi synes det ville være den nemmeste løsning. For at sætte breadboardet på robotten fik vi lavet en smart holder øverst i robotten.
  • Hvordan er robottens hardware sammensat
    • Vi startede med at lave kredsløbet, sådan her:

pop01_1

På den måde kunne vi teste om det fungerede og så vi kunne få os et billede af hvordan kredsløbet skulle sættes ind i vores robot.

Da vi fik sat robotten sammen, kunne vi godt se at vi var nødt til at lave nogen ændringer på vores breadboard.
Lyssensorerne stod alt for tæt på hinanden, og robotten ville fungere bedre hvis der kom mere afstand mellem sensorene.

Billede af det endelige kredsløb:

pop02

Vi valgte at sætte lyssensorerne, på hver deres side af breadboardet, da det ville passe bedre med at sætte den på robotten og da det ville give et pænere resultat, både udseendemæssigt og i forhold til at følge solen mere præcist.

  • Billede af vores robot, med dets delkomponenter:

sætdenind

  • Hardwaren har ikke været svær at få til at virke, da vi allerede har haft lavet en lignende opgave med en lyssensor. Vi startede med at bygge kredsløbet før vi begyndte på robotten. Da vi fik kredsløbet til at fungere, begyndte vi på robotten og fik robotten til at tilpasse sig til størrelsen på breadboardet. Vi lavede en lukkemekanisme, der gjorde at vi flyttede resistor, LDR og ledninger længere ned på breadboardet.
    Det var dog svært at lave gearingen, men det var hovedsageligt pga. vi ikke kunne finde de rigtige Lego stykker.
  • Hvordan er robottens opførsel implementeret?
    • Den overordnede opførsel for robotten, er at den tjekker om der er sol, hvor solen er, så den kan pege mod solen. Når solen går ned skal den gå hen til det prædefinerede startpunkt, der er ca. hvor solen står op om morgenen, så den kan registrere solen igen og følge den.
  • Flowdiagram over robottens opførsel:

flowchart

  • Koden
const int ledPin = 13; // LED connected to digital pin 13
const int sensorPin1 = A2; // connect sensor to analog input 0 = porten man har sat ledningen i
const int sensorPin2 = A3; // connect sensor to analog input 0 = porten man har sat ledningen i

void setup(){
  //Vigtig for at kunne kommunikerer med computeren! :
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT); // enable output on the led pin

  //Setup Channel A
  pinMode(12, OUTPUT); //Initiates Motor Channel A pin
  pinMode(9, OUTPUT); //Initiates Brake Channel A pin
}


void loop(){
  //Sensor 1:
  int rate1 = analogRead(sensorPin1); // read the analog input
  digitalWrite(ledPin, HIGH); // set the LEDon
  digitalWrite(ledPin, LOW); // set the LED off
  
  //Skriver det ud:
  Serial.println("Sensor 1: ");
  Serial.println(rate1);


  //Sensor 2:
  int rate2 = analogRead(sensorPin2); // read the analog input
  digitalWrite(ledPin, HIGH); // set the LEDon
  digitalWrite(ledPin, LOW); // set the LED off
  
  //Skriver det ud:
  Serial.println("Sensor 2: ");
  Serial.println(rate2);

  //Motorstyring:
  //Hvis lyset måles til under 100 på begge sensorer:
  if (rate1 && rate2 < 100){
    
    //kør 180 grader, tilbage til startpunktet øst:
    digitalWrite(12, LOW); //Port A og kører baglæns
    digitalWrite(9, HIGH);   //Disengage the Brake for Channel A
    analogWrite(3, 255);   //Spins the motor on Channel A at full speed
    //I 40 sekunder:
    delay(40000);

    digitalWrite(9, HIGH); //Eengage the Brake for Channel A
    
    //Venter i x antal timer med at måle igen
    delay(5000);
    
  } else {
      //Hvis mest lys på den ene sensor:
      if (rate1 - rate2 > 50){
        digitalWrite(12, LOW); //Port A og kører fremad
        analogWrite(3, 255);   //Port 3 og Hastigheden
        
      //Eller hvis mest lys på den anden sensor:
      } else if (rate2 - rate1 > 50) {
        digitalWrite(12, HIGH); //Port A og kører baglæns
        analogWrite(3, 255); //Port 3 og Hastigheden
        }
        
      //Hvis sensorer måler lige meget, stå stille:
      else {
        analogWrite(3, 0); 
      }
  }
  
}

 

  • I forhold til koden har der været udfordringer i, hvad vi ville have robotten til at gøre og det at få det konverteret over i koden.
    De problemer vi stødte ind i bl.a. at robotten pludselig drejede modsat af hvad vi havde sat den til, fik vi hurtigt løst, så det har ikke taget ekstra tid.
    Vi fik aldrig gjort det sådan at vi kunne få robotten til at virke med vores batterier, sådan så den kunne fungere uden computeren.
  • Konklusion
    • I forhold til opgaveformuleringen løser vores robot opgaven, den følger lyset fra solen og når solen er væk, går den til et startpunkt.Vi kunne ikke sætte et startpunkt på robotten, så i stedet for fik vi programmeret koden således at når der ikke er noget lys, roterer den tilbage i 40 sekunder, da det svarer til at robotten drejer ca. 180 grader.
  • Vores solcellestyring kan forbedres ved at teste den bedre i solen/naturlige omgivelser, vi har ikke fået nok data fra testingen til at den ville kunne fungere optimalt i alle slags vejr fx hvis det er skyet osv.
    I forhold til når solen går ned, ville vi indstille den med en timer, sådan så robotten kunne gå på standby og spare på strømmen.
    Ved videre arbejde ville vi få robotten til at fungere med batterier i stedet for at den er sat til en computer.
  • Video

Leave a Reply