Tehtävä
Syötä ohjelma Arduinolle. Seuraa etäisyysanturin lukemia Serial monitorista ja muuta ehtolauseen arvoa tarvittaessa!
Kehitetään edellisessä tehtävässä rakennettua robottia fiksummaksi: lisätään kytkentään etäisyysanturi ja ohjelmoidaan robotti väistelemään esteitä!
Mehackit boardin (tai Arduinon), USB-johdon, koekytkentälevyn ja johtimien lisäksi tarvitset seuraavat komponentit.
Osa | Kuva | Kuvaus |
---|---|---|
Pyörillä ajeleva robotti | Katso 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. |
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ä!
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
Kaavio 2: Ultraäänisensori
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
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.
void setup() {
// Tähän tarvittavat porttien määrittelyt.
// Käynnistetään Serial-liikenne
Serial.begin(9600);
}
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
}
}
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.
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.
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
}
}