Valid XHTML 1.0 Transitional

Projekti Arttu-2

Päivitetty viimeksi 24.11.2019


Perusasiat

Tämän projektin tarkoituksena on saada aikaan liikkuva olio, robotti, jonka nimi on Arttu-2. Arttu viittaa Arduinoon, mikä muodostaa laitteen 'aivot', ja numero 2 siihen, että tämä on toinen versio Arttu-1:stä.

Arttu-2 on viereisen kuvan näköinen. Arttu-2

Artun rakenne on periaatteessa yksinkertainen: edessä on pienehkö vapaasti kääntyvä pyörä (kuten mm. toimistotuoleissa) ja takana on kaksi isompaa kumipintaista pyörää, joita pyrittävät tavalliset sähkömoottorit (Arttu-1:ssä ympäri kääntyvät servot). Sähkömoottoreilla on mahdollista saavuttaa suurempi nopeus kuin servoilla. Arttu-2:n tavoitteena onkin olla mahdollisimman nopea.

Artulla on kolme ultaräänisensoria, joiden avulla Arttu mittaa etäisyyttä eteenpäin ja molemmille sivuille. Arttu mittaa etäisyydet yhden senttimetrin tarkkuudella.

Arttu joka odottaa komentoa käyttäjältä tai suorittaa valmiiksi määriteltyä tehtävää. Komentojen käsittelystä tarkemmin jäljempänä. Valmiina tehtävänä Artulla on yksinkertainen missio: saatuaan aloituskomennon (komentojen antamisesta Artulle tarkemmin jäljempänä) Arttu käynnistää molemmat moottorit, jolloin Arttu alkaa liikkua suoraan eteenpäin. Koko ajan liikkuessaa Arttu mitaa etäisyyttä edessä olevaan seinään tai muuhun esteeseen. Kun este tulee liian lähelle niin Arttu pysähtyy.

Seuraavaksi Arttu mittaa etäisyyttä molemmille sivuille ja kääntyy siihen suuntaan, missä on enemmän 'tilaa' eli este (seinä tms.) on kauempana. Seuraavaksi Arttu sitten käynnistää moottorit ja alkaa liikkua valittuun uuteen suuntaan.

Liikkumisen aikana Arttu mittaa etäisyyttä myös sivuille. Jos Arttu joutuu liian lähelle sivuseinää, niin se tekee pinen korjausliikkeen sivuseinästä poispäin. Näin Arttu yrittää pysyä suurin piirtein kulkuväylän keskellä.

Arttu pysähtyy pysähtymiskomennolla. Komentojen antamisesta on tarkemmin jäljempänä.

Artun 'äly' on sen ohjelmistossa, jota suorittaa Artun 'aivoina' toimiva Arduino Uno -mikrokontrolleri. Periaattessa Arttu-2:n ohjelmisto on sama kuin Arttu-1:ssä, tosin sähkömoottorien ohjaus eroaa servojen ohjauksesta, ja muutenkin Arttu-2:n ohjelma on 'edistyneempi'.


Arduino

Tietoja Arduino-mikrokontrollerista löytyy projektin Arttu-1 kohdalta.


Arttu-2:n rakenne

Viereisessä kuvassa on esitetty Arttu-2:n sähköinen kytkentäkaavio.Arttu-2 kaavio Kumpikin sähkömoottori on liitetty moottoriohjausmoduliin ja se edelleen Arduinon output-portteihin, joilla ohjataan moottorien pyörimistä.

Etäisyyksien mittaamiseen käytetyt ultraäänisensorit (HC-SR04) liitetään kukin neljällä johdolla Arduinoon. Kaksi jodoista ovat virransyöttä varten (+5V ja maa eli 0V) ja kaksi varsinaista sensorin toimintaa varten. Trigger-johtimella käynnistetään mittaus (testiäänen lähetys) ja echo-johtimella saadaan tieto kaiun saapumisesta. Kaiun saapumiseen kuluva aika on sitten verrannollinen kaiun aiheuttaneen esteen etäisyyteen.

Arttu voisi toimia itsenäisesti alkaen suorittaa sille ladattua ohjelmaa heti virran kytkemisen jälkeen. Monipuolisemman toiminnan mahdollistamiseksi Arttuun on lisätty langattoman yhteyden tarjoama XBee-moduli, joka liitetään Arduinon 'päälle' XBee-sovitinta (shield) käyttäen. Kun vaikka PC:hen liitetään toinen XBee-sovitin (XBee USB -moduli), niin niiden välille saadaan langaton yhteys, ja Arduino ja PC-ohjelma voivat lähettää ja vastaanottaa viestejä keskenään. Tätä hyödynnetään Artun ohjaamisessa, katso jäljempänä. XBee:n lisääminen ei vaadi mitään lisäkytkentöjä Arduinossa. XBee-modulissa on pieni kytkin, jolla valitaan, käyttääkö Arduino viestimiseen USB-liitäntää vaiko XBee:tä. Arduinon ohjelmassa molemmat tavat näkyvät samoina, nimittäin sarjaliikenteenä (PC:ssä COM-porttina).


Artun ohjelma

Arttu-2 -ohjelman nykyinen versio (v0.1) löytyy täältä Arttu-2 ohjelma. Arduino-ohjelman tiedostotunniste (extension) on .ino ja ohjelmakoodia voi tarkastella melkein millä vain tekstiohjelmalla, esim. Notepad, Wordpad, Notepad++. Seuraavassa tarkastellaan lyhyesti ohjelman perustoimintaa.

Kaikki Arduino-ohjelmat muodostuvat kahdesta metodista: setup(), joka suoritetaan kerran heti virran kytkemisen jälkeen, ja loop(), jota kutsutaan jatkuvasti setup():n suorittamisen jälkeen. Setup():ssa tyypillisesti alustetaan muuttujat, asetetaan porttien tilat(input/output), käynnistettään sarjaliikenne ja suoritetaan yms. kerran tehtäviä toimia. Loop():ssa taasen tapahtuu varsinainen toiminta, Artussa esim. kaikki moottorien ohjaukset, etäisyysmittaukset ja komentojen vastaanotto sekä käsittely. Seuraavassa tarkastellaan lyhyesti Artun loop()-metodin toimintaa.

Ensimmäiseksi loop():ssa tutkitaan, onko sarjalinjan (XBee tai USB) kautta tullut merkkejä. Jos on niin jokaisen merkin kanssa kutsutaan Artun omaa metodia (aliohjelmaa) processCommand(), joka käsittelee merkin (komennon) ja suorittaa sen edellyttämät toimet.

Kun sarjalinjan kautta ei enää ole käsittelemättömiä merkkejä niin ohjelma tutkii, onko tapahtumajonossa (event queue) tapahtumia, joiden suorituksen ajankohta on koittanut. Jos on, niin ao. tapahtuma aktivoidaan ja poistetaan jonosta. Jos ei ole niin poistutaan metodista loop(). Tämän jälkeen Arduino käynnistää uudestaan loop()-metodin, eli edellä kuvattu toiminta jatkuu 'ikuisessa loopissa'.

Kun Arttu saa esim. komennon 'kulje eteenpäin 1000 ms ajan' (eli merkkijonon 1000F), niin processCommand()-metodissa käynnistetään molemmat moottorit kulkemaan eteenpäin ja tapahtumajonoon lisätään tapahtuma niin, että se 'laukeaa' 1000 ms kuluttua ja kutsuu metodia, joka pysäyttää molemmat moottorit. Samalla periaatteella toimivat myös muut aikaan liitetyt komennot.

Kun mennään labyrinttitilaan (komento G, katso jäljempänä), niin Arttu käynnistää molemmat moottorit eli lähtee kulkemaan eteenpäin. Lisäksi ohjelma laittaa tapahtumajonoon tietyn ajan kuluttua laukeavat mittaustapahtumat, jotka mittaavat etäisyyttä eteen ja sivuille. Jos ollaan sivusuunnassa liian lähellä sivua, niin tehdään korjausliike. Jos taas edessä este on liian lähellä, niin pysähdytään, mitataan etäisyydet sivuille ja käännytään siihen suuntaan, missä esteen (seinän) etäisyys oli suurempi. Sitten jatketaan eteenpäin kuten aiemmin.

Tarkemmin ohjelman yksityiskohdat selviävät tutkimalla oheista ohjelmakoodia.


Artun ohjaaminen (komennot)

Käynnistyttyään Artun ohjelma odottaa komentoja sarjalinjan kautta (siis USB:n tai XBee:n kautta). Komennon (merkkijonon) saavuttua ohjelma tutkii komennon ja alkaa suorittaa sen vaatimia toimia. Arttu-2:n komnennot ovat pääosin samoja Arttu-1:n kanssa. Eroavuudet on kerrottu jäljempänä (päivitys kesken). Periaatteessa Arttu-1 toimii Arttu-2:n komennoilla, mutta Arttu-2 ei välttämättä kaikilta osin Arttu-1:n komennoilla. Toki olisi mahdollista tehdä yhteinen ohjelma, joka tunnistaisi, onko se ladattu Arttu-1:een vaiko Arttu-2:een ja toimisi sen mukaisesti. Tähän ei kuitenkaan ole suoranaista tarvetta (?).

Arttu-2:n komennot, jotka poikkeavat Arttu-1:n komennoista:

xxVyyT - mittaa ultraäänisensorilla etäisyyden, xx=trigger pin, yy=echo pin

xxVZ - asettaa zeroSpeedPeriod-muuttujan arvoksi xx (ms)

D - debuging ON/OFF; kun ON, niin lähettää yksityiskohtaisia tietoja toiminnoista

! - lähettää tiedot Arduinon ohjelmaversiosta


PC-ohjelma Controller.exe

Tässä yksinkertainen PC-ohjelma Windows-ympäristöön komentojen lähettämiseksi Artulle ja viestien vastaanottamiseksi Artulta pc_program.

Ohjelman voi ladata täältä Controller-ohjelma PC:lle. Ohjelma on .exe-muotoinen ja sen voi ajaa suoraan ilman erillistä asentamista. Tietoturvaohjelmat eivät välttämättä ole tuosta riemuissaan.

Ohjelman käynnistyttyä ensiksi pitää valita käytettävä COM-portti niiden listasta. Tämän jälkeen voidaan lähettää komentoja. Komentoa mahdollisesti edeltävä numeerinen arvo valitaan listasta 'Value' (tai none, jos numeroarvoa ei tarvita). Seuraavaksi valitaan haluttu komento listasta 'Command' ja lopuksi painetaan painiketta ' Send val+cmd', jolloin ohjelma lähettää komennon Artulle. Lähetetty komento näkyy listalla 'Sent/rcvd' kuten myös Artun lähettämät viestit. Lähetetyn komennon edessä näkyy merkintä '->', joka ilmaisee kyseessä olevan lähetetty komento. Listan voi halutessa tyhjentää painikkeella 'Clear'.

Kenttään 'Free command' voi kirjoittaa haluamansa komennon, jos vaikka 'Value' ja 'Command' -listoista ei löydy tarvittavaa yhdistelmää, tai jos haluaa lähettää useampia komentoja yhdellä kertaa. Tämä komento lähetetään painikkeella 'Send free cmd'.


Muuta

Viereisessä videossa Arttu-2 selvittää yksinkertaisen labyrintin (puuttuu vielä). Arttu-2 The Movie

Jos Sinulla on kysyttävää Artusta tai Arduinosta yleisemmin tai muuta kommentoitavaa, niin voit lähettää viestiä osoitteeseen cpo miukumauku funnyimagination piste com. Laita aiheeksi Arttu-2 (tai vain Arttu). Tuota postia ei seurata kovin aktiivisesti, joten vastaus voi kestää. Kärsivällisyyttä !