Opgaven

Følgende blog er min løsning på porteføljeopgave 3 på 4. semester på studiet Oplevelses- og Læringsteknologi.
Opgaven bestod i et lave en række robotter der i sammenspil skulle transportere et objekt fra punkt A til B. Min Robot var den tredje i rækken. Dens opgave bestod i at modtage objektet fra fra robot 2 og overføre den til robot 4. Nærmere beskrivelse af opgaven findes her.

Robottens opbygning

I min opgave var der lagt op til at robotten er stilstående og ikke skal bevæge sig rundt, som den forrige robot jeg byggede.

Robot 3 skulle modtage objektet, en rød kugle, fra robot 2 og aflevere den til robot 4.
Robot 2 transporterede objektet i en form for klo, forrest på robotten. Den mest oplagte løsning har derfor været at lave en lift objektet kunne køres ind i. Se billedet nedenfor:

Arduino lift robot with flexsensor and DC 9V motor
Robot 3 set fra oven

Hvorefter liften løftede objektet op i en skinne, hvor bolden kørte over i en ‘kurv’, der hang på robot 4, der skulle transportere objektet fra gulvet op på et bord.

Robot 3 er bygget meget simpelt. På en måde virkede det næsten for nemt og jeg var fristet til at give den flere funktioner, men vidste at det ikke var nødvendigt for at den kunne gennemføre opgaven.

Som det kan ses består robottens opbygning af en simpel lift, der løfter bolden op i en skinne, der fører bolden ned i kurven til robot 3. Det er en simpel opbygning, men den opfylder kravene til opgaven.

Valg af Sensorer og Actuator

Robot 3 har to sensorer. Den første der bliver brugt er meget simpel og består af to ledninger der rører hinanden, når bolden ligges i liften.
Se nedenstående billede:

Sensorer

Robot 3 med sensorer og motor

Sensor 1 Består af to ledninger, der når bolden ligges i liften kommer i kontakt med hinanden.

Sensor 2 er en flex-sensor, der reagere på at blive bøjet. Det er en analog sensor, der når den bøjes sender en værdi til arduinoboardet.

Actuatoren er en DC 9V motor der aktiveres af Sensor 1. Når bolden leveres i liften fra Robot 2, aktivere den Actuatoren via Sensor 1, der så løfter liften. For at liften ikke skal blive ved med at køre, er Sensor 2 tilføjet, der registrere at bolden er løftet op i ‘slisken’ der fører bolden ned i ‘skålen’ der tilhører Robot 4. For nærmere beskrivelse af hvordan opsætning af motoren er udført, se min første blog her!

Opsætning af hardware

Opsætningen af hardware ser således ud:

sketch1

 

På billedet ses en der en rød knap. Princippet med at to ledninger får kontakt er det samme, som det en almindelig knap består af. Der blev også forsøgt med en knap til at starte med. Den kraft der skal til for at trykke den i bund, er dog for stor, set i forhold til vægten af bolden. Derfor blev løsningen en hjemmelavet ‘knap’ bestående af to ledninger.

Robotten i aktion

Selve udførslen af opgaven er en blanding af sammenspil med omgivelser, altså den fysiske verden og det program der er lagt i robotten.

Hvordan et sådant program er bygget op i setup() og funktioner() vil jeg ikke komme ind på. Det står der mere om her.

Som i forrige opgave har jeg valgt at dele koden op i så mange funktioner som muligt, da det gør det lettere at arbejde med forskellige løsninger.
De to funktioner som jeg bruger denne gang ser ud som følgende:

void liftUp(){
  digitalWrite(liftDir, HIGH);
  analogWrite(liftSpeed, 200);
}

void liftFinish(){
  digitalWrite(liftDir, LOW);
  analogWrite(liftSpeed, 0);
}

liftUp() er den funktion der eksekveres når Actuator 1 modtager bolden i liften.
liftFinish() eksekveres når liften har lagt bolden i rammen, der føre bolden ned i kurven til robot 4. Her rammer bolden flexsensoren og stopper motoren, så robotten ikke ender med at ødelægge sig selv.

De to funktioner ser således ud i void loop():

void loop(){

  int liftStopVal = analogRead(liftStop); 
  Serial.println(liftStopVal);

  int starttime = millis();
  int endtime = starttime;

  liftState = digitalRead(liftStart);

  if(liftState == HIGH){
    delay(5000);
      liftUp();
    }else if(liftStopVal < 24){
      liftFinish();
    }

}

 

Her ses en test af robotten:
http://www.youtube.com/watch?v=S8aAKcq8NeU

Konklusion

Robot 3 udførte sin opgave præcis som den skulle. Den er simpel i sin opbygning, men dette giver udemærket mening ifølge Rolf Pfeifer’s 7 designprincipper til robotter, skal en robot ikke have flere sensorer eller funktioner end nødvendigt.

I forhold til at levere bolden videre til Robot 4 kunne adaptiviteten godt forbedres. Den gule ‘slisk’ hvor bolden føres ned i ‘skålen’ til Robot 4 kan justeret via et tandhjul under ‘slisken’. Dette skal dog gøres manuelt som robotten ser ud nu. I en forbedret version, kunne to lys-sensorer have været anvendt til at ‘sanse’ mere præcist hvor ‘skålen’ står. Det kunne gøres gennem samme princip som Robot 1 anvender til at finde Robot 2.

Samlet set fungerede robot 3 som den skulle.

Leave a Reply