Navn på robotsystemet

Systemets navn er Skinfaxe. Systemet er navnebror med den hest, der i nordisk mytologi trækker dagen over himlen.

Gruppemedlemmer

Mathias Christian Clausen, Mathias Kloch og Anna Puggaard Klemen Sørensen

Hvordan ser systemet ud?

Tanker bag opbygningen

Skinfaxe opbygget med en større bund af lego. Motoren er sammen med arduinoen inklusiv motorshield placeret på bunden og stripboardet med LDR-sensorer er placeret højt. Pladen med LDR-sensorer er vinklet og mellem de to sensorer er placeret en plade, der har til opgave at skygge mere for den sensor placeret længst fra solen. Pladen er forbundet med bunden af en stang, der er monteret på et dreje-potentiometer, der anvendes til at holde styr på pladens retning. Potentiometeret er fastmonteret på bundpladen. Den roterbare stang følger bevægelsen fra den øverste plade.

Motoren er placeret i bunden for at undgår for meget vægt på den øverste plade. Dette medfører dog noget stress på ledningerne, der hver dag drejes 180 grader frem og tilbage. Det er dog vurderet, at det både er nemmere og billigere at udskifte slidte ledninger ift. at skifte nogle af de større komponenter.

Systemet er gearet af en snekkegearing, der er valgt med henblik på en nem og jævn styring af den roterende del af skinfaxe robotten. Opbygningen sikre derudover en nem vinkling af den rotaterende bevægelse fra motoren.

Ændringer i Skinfaxes opbygning har primært drejet sig om motorens placering. Den har været forsøgt placeret både oppe og nede. Derudover har det været udfordrende at sætte potentiometeret ordentligt fast og at få samlet det med stangen, der bærer den øverste plade. Dette har krævet nogle mere kreative løsninger, men er lykkes til sidst.


Robottens hardware

Nedenstående viser en tegning og et kredsløbsdiagram over de benyttede komponenter hvordan de er sat til motorshieldet på Arduinoen

Tegning over elektriske komponenter
Kredsløbsdiagram

Hvad sidder hvor?

DC motoren er tilsluttet Arduino Motorshieldet, som via dens indbyggede H-bro styrer hvilken vej motoren skal køre. Akslen på motoren driver et snekkegear som får potentiometeret til at dreje. Et 9 Volts batteri er tilsluttet motorshieldets ekstern strømforsyning.

På stripboardet er 2 LDR-sensorer sat i hver deres spændingsdeler med en 5K Ohms modstand. Spændingen i hver af de 2 spændingsdelere bliver aflæst på analog pin A1 og A2.

På analog pin A0, bliver spændingen over potentiometeret læst.

Som man kan se på tegningen er række 1 og 10 på stripboardet tilsluttet henholdsvis Vin og ground.

Robottens overordnede opførsel

Robotten anvender først potentiometerets værdi til at vurderer, dens posistion. Det er ved test fundet ud af, at 180 grader svarer ca. til en værdi på 767 fra pinnen forbundet med potentiometeret. Hvis robotten ikke er nået over 180 grader, sammenlignes differencen mellem de to LDR-sensorer og en referenceværdi. Det vil sige, at robotten først vil bevæge sig, når den venstre LDR-sensor viser over 10% højere end den højre, svarende til mere lys på den venstre side -> solen har flyttet sig nok til, at det vurderes at robotten skal drejes. Dette gøres ved at etablere motoren retning, slå bremsen fra og så sende spænding ud på motoren, så den starter.  Hvis der ikke er stor nok forskel på differencen og referencen på 10% skal motoren slukkes og bremsen slåes til.

Hvis positionen er over de 180 grader fra maximum, testes der om det er mørkt. Hvis det er mørkt, stoppes motoren ført. Til at teste for mørke bruges et treshold på 50, der er bestem ud fra få tests. Retningen etableres til venstre -> højre og motoren kører så indtil positionen = 0. Det er altså først når robotten har drejet 180 grader og det er mørkt, at den vil dreje tilbage igen. Dette afhjælper problemet med overskyet vejr, men giver muligvis et problem, hvis solens bane er i en retning, der ikke “tvinger” robotten alle 180 grader.

Det største problem med koden har været at finde en løsning til solnedgange, hvor det kunne undgås, at robotten ikke pludseligt, bevægede sig til udgangspunktet, fordi det blev mørkt. Derudover er både reference for difference mellem de to LDR sensorer og treshold for mørke bestemt ud fra intuition og meget få tests.

Flowdiagram

Flowdiagram over robottens opførsel

Kode

//LDR
int lightPin1 = A1;
int lightPin2 = A2;
int lightInput1, lightInput2, suminput;
double LeftPercent, RightPercent, diff;
const int treshold = 50;


//Motor
int dirPin = 12;
int brakePin = 9;
int PWM = 3;
int maxPos = 767;

//Position
int pos = A0;
int posInput, posInputOld;
bool reset = false;

void setup() {
  
  // LDR
pinMode(lightPin1, INPUT);
pinMode(lightPin2, INPUT);


  //Motor
pinMode(dirPin, OUTPUT);

  //Position
pinMode(pos, INPUT);
Serial.begin(9600);

}

void loop() {

//read postition

posInput = analogRead(pos);

//read Light sensors(LDR)

lightInput1 = analogRead(lightPin1);
LeftPercent = map(lightInput1, 0, 1023, 0, 100);
lightInput2 = analogRead(lightPin2);
RightPercent = map(lightInput2, 0, 1023, 0, 100);

diff = LeftPercent - RightPercent;

Serial.print(diff);
Serial.print(" ");
Serial.print(lightInput1);
Serial.print(" ");
Serial.println(lightInput2);
Serial.println(posInput);
delay(500);


if(posInput < maxPos){
  if(diff < -10){
    digitalWrite(dirPin, HIGH);
    digitalWrite(brakePin, LOW); 
    analogWrite(PWM, 60);   
  }
  else
  {
    analogWrite(PWM,0);
    digitalWrite(brakePin,HIGH);
  }
}
else if(lightInput1 < treshold && lightInput2 < treshold && posInput > maxPos){
    analogWrite(PWM,0);
    digitalWrite(brakePin,HIGH);
    
    while(posInput > 0) 
    {
    digitalWrite(dirPin, LOW);
    digitalWrite(brakePin, LOW);
    delay(300);
    analogWrite(PWM, 60);
    posInput = analogRead(pos);
   }
   }
}

Konklusion og diskussion

Skinfaxe opbygget med en større bund af lego. Motoren er sammen med arduinoen inklusiv motorshield placeret på bunden og stripboardet med LDR-sensorer er placeret højt. Pladen med LDR-sensorer er vinklet og mellem de to sensorer er placeret en plade, der har til opgave at skygge mere for den sensor placeret længst fra solen. Pladen er forbundet med bunden af en stang, der er monteret på et dreje-potentiometer, der anvendes til at holde styr på pladens retning. Potentiometeret er fastmonteret på bundpladen. Den roterbare stang følger bevægelsen fra den øverste plade.

Motoren er placeret i bunden for at undgår for meget vægt på den øverste plade. Dette medfører dog noget stress på ledningerne, der hver dag drejes 180 grader frem og tilbage. Det er dog vurderet, at det både er nemmere og billigere at udskifte slidte ledninger ift. at skifte nogle af de større komponenter.

Systemet er gearet af en snekkegearing, der er valgt med henblik på en nem og jævn styring af den roterende del af skinfaxe robotten. Opbygningen sikre derudover en nem vinkling af den rotaterende bevægelse fra motoren.

Ændringer i Skinfaxes opbygning har primært drejet sig om motorens placering. Den har været forsøgt placeret både oppe og nede. Derudover har det været udfordrende at sætte potentiometeret ordentligt fast og at få samlet det med stangen, der bærer den øverste plade. Dette har krævet nogle mere kreative løsninger, men er lykkes til sidst.

Demovideo

Leave a Reply