Navn på robot:

DNF

Gruppemedlemmer:

Anders Christiansen, Malte Borges og Miki Nguyen.

Robotbillede:

Opbyggelsen:

Robotten er bygget op som en firkant med fire hjul og tre sensorer. Vægten af robotten er placeret der hvor de to store hjul er og hvor motorerne befinder sig, for at gøre det lettere for robotten at køre.  Det meste af vægten på vores robot består af batterierne, derfor ligger de omkring motorerne og hjulene.

Robotten har fire hjul: to store hjul med dæk på, som kører på motoren. Og to små hjul, som bruges til at støtte robotten. De to store hjuls placering har fået den placering at der er en mellem stor mellemrum mellem dem, som gør at der skal lidt til for at dreje robotten.

Lego motorerne på vores robot er placeret omkring midten af robotten, bruges til at trække resten af robotten med, når den skal køre på banen.

Vi har også benyttet gearing på vores robot, da den ellers ville køre for hurtigt. Vores gear består af et lille gear der sidder på motoren og et stort gear på hjulet. Gearingen gør at der skal flere omdrejninger til at få hjulet til at køre, og dermed kommer robotten til at køre langsommere.

De sensorer vi har benyttet på robotten er to lyssensorer(CNY70), der er placeret omkring forhjulene med et stykke mellemrum i mellem dem. De bruges til at få robotten til at følge den sorte streg på det hvide papir, hvor den her vil kunne måle når en eller begge af sensorerne kører ind over stregen. De to lyssensorer er placeret sådan at den sorte streg skal kunne være i mellem dem, så det bliver lettere at programmere robotten i forhold til hvad de forskellige motorer skal gøre, ved de forskellige målinger vi får fra sensorerne. Derudover skal lyssensorerne også placeres tæt på jorden, idet ifølge dens(CNY70) datasheet, kan den bedst foretage målinger når afstanden mellem det den måler, er omkring 0.5 mm.  Vi har derudover også en distance sensor(SRF02), der er placeret foran robotten, bruges få robotten til at opfange når den møder en forhindring på banen, hvor den så skal udføre noget kode.

Hardware:

Robottens hardware består af:

  • To lyssensorere(CNY70)

  • En distance måler (SRF02)

  • Modstande til lyssensorerne og deres dioder.

  • To Lego motorer

  • Arduino UNO og Motorshield

Vi har valgt at lade vores hardware været forbundet vha. en breadboard, da vi havde nogle problemer med at få en af vores lyssensorer til at virke, hvor vi tidligere havde loddet systemet sammen. Her fandt vi så senere ud af at det var fordi en af vores lyssensorer der ikke virkede, hvor vi så byttede den med en anden lyssensor.

Diagram tegning:

Hvordan er robottens opførsel implementeret:

Måden robotten agere på:

Vores kodning af robotten er en eventhandler der undersøger for hvilken egenskab robotten skal bruge.

Der menes med dette at vi har programmeret mulige håndteringer af hvordan robotten skal gøre i de forskellige situationer den bliver udsat for.

Vi tog udgangspunkt i de ting som vi kunne se ved opgavebeskrivelsen der ville opstå som problematikker for vores robot, hertil kom at vi testede om disse problemer kom til udtryk.

De problemer vi kom frem til var:

– robotten skal kunne køre efter stregen

-venstre og højre

– robotten skal kunne køre udenom 9*9 blok

Herunder er vist med et flow chart, hvordan vi ville komme uden om de forskellige problematikker.

Flow chart:

Kode:

int readpin = A3;
int readpin2 = A2;

int irpin = 2;
int irpin2 = 7;

int a = 0; 
int b = 0;

int a2 = 0;
int b2 = 0;

int speed = 50;
int ulcounter = 0;

boolean leg1 = true;
boolean secread = false;

#include <Wire.h>

void setup()
{
  //cny70
   Serial.begin(9600);
  pinMode(irpin, OUTPUT);
  pinMode(irpin2, OUTPUT);

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

  //Setup Channel B
  pinMode(13, OUTPUT); //Initiates Motor Channel A pin
  pinMode(8, OUTPUT);  //Initiates Brake Channel A pin

  //srf02
  Wire.begin();                // join i2c bus (address optional for master)
  Serial.begin(9600);          // start serial communication at 9600bps
}

int reading = 0;

void loop()
{
  //cny70 
  //Tænder for infrarød på lyssensoren
  digitalWrite(irpin, HIGH);
  digitalWrite(irpin2, HIGH);

  //analogt signal fra lyssensor
  a = analogRead(readpin);
  a2= analogRead(readpin2);
  digitalWrite(irpin, LOW);
  digitalWrite(irpin2, LOW);
  b = analogRead(readpin);
  b2= analogRead(readpin2);

  //Udskrift til seriel monitor under tests
  Serial.print("Aktiv: ");
  Serial.print(a);
  Serial.print(" Passiv: ");
  Serial.print( b);
  Serial.println();
  Serial.print("Aktiv2: ");
  Serial.print(a2);
  Serial.print(" Passiv2: ");
  Serial.print(b2);
  Serial.println();
  //delay(500); 

  //srf02
  //starter ultralydssensor
  Wire.beginTransmission(112); 
  //Sensor måler i tommer                               
  Wire.write(byte(0x00));      
  Wire.write(byte(0x50));

  //Ultralydssensor stopper med at sende  
  Wire.endTransmission();      

  //Venter på at modtage signal
  delay(70);                   

  Wire.beginTransmission(112); 
  Wire.write(byte(0x02));      
  Wire.endTransmission();      

  // Leder efter ekkosignal
  Wire.requestFrom(112, 2);    /

  // Sættes til sand hvis sensoren modtager 2 bytes og sætter "reading" lig med modtaget sensorværdi
  if(2 <= Wire.available())    
  {
    reading = Wire.read();  
    reading = reading << 8;    
    reading |= Wire.read(); 
    Serial.println(reading);  
  }

  //hvis lyssensor værdi for begge sensorer er over 400 kører begge motorer i samme retning
  if ((a2 > 400) && (b > 400)){
      digitalWrite(12, LOW); 
      digitalWrite(9, LOW);   
      analogWrite(3, speed);   

      digitalWrite(13, LOW);  
      digitalWrite(8, LOW);   
      analogWrite(11, speed); 

  }else if (b < 400){

  //motoerne kører i hver sin retning når den en sensorværdi kommer under 400  
  digitalWrite(12, HIGH); 
  digitalWrite(9, LOW);   
  analogWrite(3, speed);
  digitalWrite(13, LOW);  
  digitalWrite(8, LOW);   
  analogWrite(11, speed); 

  }else if (a2 < 400){
    digitalWrite(13, HIGH);  
  digitalWrite(8, LOW);   
  analogWrite(11, speed); 

  digitalWrite(12, LOW); 
  digitalWrite(9, LOW);   
  analogWrite(3, speed);

  }

  // ikke virkende kode til ultralydsensoren
  if (reading < 15){
    ulcounter ++;

  }

  if ((ulcounter == 1) && (secread == true)){
    ulcounter = 0;
    secread = false;
  }

    if (ulcounter == 1 ){
      secread = true;
  }

  if (ulcounter > 2){
    leg1 = false;
  }

  if ((reading < 15) && (leg1 == false)){

    leg1 = true;
   }

}

 

Konklusion:

Vi fik ikke løst problemet, som blev opstillet i opgaveformuleringen. Vores robot kunne kun gennemføre banen uden klodsen. Vi havde problemer med at få konfigureret ultralydssensoren ordentligt og vi tiden løb ud før vi kunne få testet robotten. Vi havde dog ingen problemer med at bruge vores lyssensorer, efter vi fik erstattet en defekt sensor, og robotten kørte fint igennem banen. Vi havde dog lidt problemer med at hastigheden på robotten skiftede drastsik i forhold til hvor afladte vores batterier var. Vi spildte en masse tid på at finde den defekte sensor som nævnt tidligere, tid som vi kunne have brugt bedre.Vi lærte at det er en del mere kompliceret at skulle arbejde med analoge agenter, fremfor ren software og at der kan fremkommer mange udforudsete komplikationer. Så alt i alt er vi godt rustede til fremtidige hardware projekter.

 Gruppe6Robot

Leave a Reply