Esteitä väistelevä robotti

Johdanto

Kehitetään edellisessä tehtävässä rakennettua robottia fiksummaksi: lisätään kytkentään etäisyysanturi ja ohjelmoidaan robotti väistelemään esteitä!

Tarvikkeet

Mehackit boardin (tai Arduinon), USB-johdon, koekytkentälevyn ja johtimien lisäksi tarvitset seuraavat komponentit.

OsaKuvaKuvaus
Pyörillä ajeleva robottiKatso ohjeet robotin kokoamiseen tämän luvun harjoituksesta Pyörillä ajeleva robotti.
Etäisyyssensori (infrapuna tai ultraääni) Maker kitistäsi löytyy näistä etäisyysantureista jompi kumpi. Ylempi anturi toimii infrapunan ja alempi ultraäänen avulla.
Kolmipaikkainen terminal block.Jos Maker kitistäsi löytyy tällainen, infrapunalla toimiva etäisyysanturi on helpompi liittää koekytkentälevyyn sen avulla.

Infarpunasensori koekytkentälevyyn

Jos Maker kitissäsi on infrapunalla toimiva etäisyyssensori, löydät alta vinkkejä sen liittämiseen koekytkentälevyyn. Jos sinulla on ultraäänellä toimiva etäisyyssensori, voit siirtyä eteenpäin ohjeissa.

Jos Maker kitistäsi löytyy kolmipaikkainen sokeripala ja talttapäinen ruuvimeisseli, ruuvaa etäisyyssensorin johtimien päät sokeripalan sisään ja paina sokeripala koekytkentälevyyn. Varmista, että johtimet on työnnetty oikealle puolelle sokeripalaa eli sinne, missä on isommat reiät. Varmista tukeva kiinnitys vetämällä piuhoja kevyesti, jolloin niiden pitäisi pysyä paikallaan.

Jos Maker kitissäsi ei ole sokeripalaa, vuole saksen terällä varovasti johtoa ytimen ympäriltä pois siten, että saat taitettua noin 1 cm pätkän johdinta ulos. Pyöritä varovasti johtimen säikeet yhteen sormenpäittesi välissä.

Kytke johtimen päät koekytkentälevyyn. Mustan ja punaisen johtimen voit kytkeä levyn vaakariveille ja keltaisen johtimen pystyriville. Voit vahvistaa kytkennät sinitarralla tai teipillä, kuten alla olevassa kuvassa. Näin johtimet eivät varmasti irtoa kovassakaan käytössä!

Virtapiiri

Katso moottoreiden kytkentäohjeet tämän luvun aiemmasta harjoituksesta Pyörillä ajeleva robotti. Alla olevissa virtapiirikaavioissa neuvotaan vain etäisyysantureiden kytkentä.

Kaavio 1: Infrapunasensori

  • Kytke infrapunasensori analogiseen porttiin, 5V-jännitteeseen ja maahan.
  • Varmista, että et kytke sensoria 6V ulkoiseen jännitteeseen, johon olet kytkenyt moottorit. Sensoria ei saa käyttää yli 5V jännitteellä.

Kaavio 2: Ultraäänisensori

  • Kytke etäisyyssensorin VCC-pinni 5V-jännitteeseen, Trig-pinni porttiin 5, Echo-pinni porttiin 6 ja GND-pinni maahan.
  • Varmista, että et kytke sensoria 6V ulkoiseen jännitteeseen, johon olet kytkenyt moottorit. Sensoria ei saa käyttää yli 5V jännitteellä.

Ohjelman tavoite

Robotti kulkee jatkuvasti eteenpäin. Kun se havaitsee etäisyysanturin avulla esteen, arvotaan, kääntyykö robotti oikealle vai vasemmalle. Robotti kulkee käännöksen jälkeen taas eteenpäin, kunnes havaitsee uuden esteen.

Tuttuja komentoja:

Infrapunasensorin lukemia luet komennolla analogRead(portti)

Ultraäänisensorin käyttämiseen tarvitset seuraavia komentoja

Ohjelmointi - Infrapunasensori

Jos käytössäsi on infrapunasensori, käytä tämän sivun ohjelmointiohjetta. Jos käytössäsi on ultraäänisensori, siirry seuraavaan kohtaan.

Harjoituksessa Pyörillä ajeleva robotti tehty ohjelma sopii pienin muutoksin pohjaksi esteitä väistelevälle robotille.

  • Käynnistä ensin sarjaliikenne setup-osassa:
 void setup() {     
  // Tähän tarvittavat porttien määrittelyt.
  // Käynnistetään Serial-liikenne
  Serial.begin(9600);
}
  • Muuta seuraavaksi loop-osaa:
void loop(){
  int sensorValue = analogRead(0);
  // Tulosta sensorValue serial monitoriin
  // jos sensorValue on alle 400
  // arvo kumpaan suuntaan robotti kääntyy: toiminto = random(3,5);
  // muuten
  // määrää robotti kulkemaan eteenpäin 
  if (toiminto == 1) { 
    // Tähän toiminnon moottoreita ohjaavat komennot

    delay(40); // Korvataan aiempi viive lyhyellä 40ms viiveellä. 
    		   // Näin robotti on jatkuvasti valmis kääntymään tarvittaessa.
  }
 
  // Toiminto 2 eli kulku taaksepäin voidaan poistaa.

  if (toiminto == 3) { 
    // Tähän toiminnon moottoreita ohjaavat komennot
  }
  if (toiminto == 4) { 
    // Tähän toiminnon moottoreita ohjaavat komennot
  }
}
Tehtävä
Syötä ohjelma Arduinolle. Seuraa etäisyysanturin lukemia Serial monitorista ja muuta ehtolauseen arvoa tarvittaessa!

Ohjelmointi - Ultraäänisensori

Jos käytössäsi on ultraäänisensori, seuraa näitä ohjeita. Liikkuvan robotin aikaisempi ohjelma sopii pienin muutoksin pohjaksi esteitä väistelevälle robotille.

  • Luo muuttujat duration ja distance ohjelman ylälaidassa.
  • Serial-liikenne setup-osassa:
int duration;
int distance:

 void setup() {     
  // Tähän tarvittavat porttien määrittelyt.
  // Käynnistetään Serial-liikenne
  Serial.begin(9600);
}

Muuta seuraavaksi loop-osaa.

  • Kopioi loop-osan alku.
  • Lisää mukaan if-lause, joka tarkistaa onko distance alle 30. Jos on, robotin tulisi kääntyä. Lisäohjeita on kommenteissa!
void loop(){
  //Aluksi nollataan pulssin lähettävä portti .
  digitalWrite(5, LOW);
  delayMicroseconds(2);
   //Seuraavaksi lähetetään portista 12 kymmenen mikrosekunnin pulssi ultraääntä.
  digitalWrite(5, HIGH);
  delayMicroseconds(10);
  digitalWrite(6, LOW);
  //Seuraavaksi tallennetaan muuttujaan "duration" se aika, joka kaikua vastaanottavalla portilla 13 kestää havaita ultraäänipulssi.
  duration = pulseIn(6, HIGH);
  //Seuraavaksi muunnetaan mikrosekunneissa oleva aika senttimetreiksi, 
  //ja tulostetaan tämä arvo.
  distance= duration*0.034/2;   
  Serial.print("Distance: ");
  Serial.println(distance);

  // jos distance on alle 30
  // arvo kumpaan suuntaan robotti kääntyy: toiminto = random(3,5);
  // muuten
  // määrää robotti kulkemaan eteenpäin

 if (toiminto == 1) { 
    // Tähän toiminnon moottoreita ohjaavat komennot

    delay(40); // Korvataan aiempi viive lyhyellä 40ms viiveellä. 
    		   // Näin robotti on jatkuvasti valmis kääntymään tarvittaessa.
  }

  // Toiminto 2 eli kulku taaksepäin voidaan poistaa.

  if (toiminto == 3) { 
    // Tähän toiminnon moottoreita ohjaavat komennot
  }
  if (toiminto == 4) { 
    // Tähän toiminnon moottoreita ohjaavat komennot
  }
}
Tehtävä
Syötä ohjelma Arduinolle. Seuraa etäisyysanturin lukemia Serial monitorista ja muuta ehtolauseen arvoa tarvittaessa!