Miten voi kutsua itseään robottiharrastelijaksi tai edes roboteista innostuneeksi, ellei ole rakentanut itse yhtäkään robottia? Tämä asia on painanut mieltä jo melkoisen pitkään ja nyt joululomalla yritän korjata tilanteen askartelemalla pienen viivanseuraajarobotin. Viivanseuraajarobotti rullaa lattialla, pöydällä tms. pinnalla ja seuraa jotain viivaa, joka erottuu pinnasta yleensä värinsä perusteella -- vaalealla lattialla reitti on hyvä merkata vaikkapa mustalla sähköteipillä. Tällaisessa aiheessa on paljon asioita jotka voi tehdä yksinkertaisesti tai monimutkaisesti, ja ajattelin olla ainakin menemättä sieltä mistä aita on matalin, jolloin projekti saattaa perinteisesti vähän venyä.
Yksinkertainen temppu (jota en siis halua tehdä) olisi se, että robotissa olisi kaksi moottoria ja kaksi anturia -- yksi kumpaakin viivan kummallakin puolella. Anturi näkisi allaan viivan tai ei viivaa. Kun vasemmanpuoleinen anturi huomaisi viivan, käännettäisiin robottia vasemmalle kunnes viivaa ei näy. Sitten ajeltaisiin tasaisesti suoraan kunnes oikea anturi huomaa viivan jolloin käännyttäisiin vastaavasti vähän oikealle. Tässä riittäisi hyvin yksinkertainen tarkastelu antureilta ja moottoreita voi ohjata joko päälle tai pois nopeudensäätöä sen tarkemmin huomioimatta ihan analogielektroniikalla -- pari trankkua vaan. Tällaisen robotin liike olisi kuitenkin varsin rumaa nykimistä mitä juuri tahdon välttää. Laajennusvara olisi myös aika kankea.
Antureina on hyvä käyttää fototransistoreita, joilla nähdään pinnan tummuus siitä heijastuvan valomäärän perusteella -- tällaisiin yleensä yhdistetään ledi tai useampi valaisemaan pintaa tasaisesti. Jonkin (kokeellisesti määritettävän) kynnysarvon perusteella saataisiin binäärinen tieto siitä, että joko viiva on tai ei ole. Hienommin voidaan lukea transistorilta kirkkausarvo kynnystämättä mitään ja käsittelemällä sitä tarkemmin, jolloin käpistellään softalla jotain magiaa ja robotti liikkuu paljon sulavammin.
Suunnitelmani toistaiseksi on käyttää useampaa anturia rinnakkain, jolloin saadaan histogrammi viivan ympäristöstä josta voidaan tulkita miten kaukana ideaalisesta kohdasta viiva on -- haluttaisiin, että se olisi robotin (ja samalla anturin) keskikohdassa. Tämän sijaintitiedon perusteella syötetään PID-säädintä jonka ulostulo syötetään suunta- ja nopeustiedoksi moottoreille. Nopeussäätö menee lähinnä sen mukaan, että suoralla kannattaa ajaa täysillä ja tiukissa mutkissa kannattaa hidastaa vähän. Demoamistarkoituksiin mukaan tulee myös radiolinkki nrf-lutikoista jolla voi lukea antureita ja vaihdella pid-säätimen parametreja lennossa ja vaikka vaihtaa käsiohjaukseen koko käkättimen. Voipi testata varmaan eri säätöalgoritmeja ihan pc:llä langattomasti kun robotti puskee isännälle tietoa viivan ulkonäöstä ja takaisin lähtee nopeuskäskyjä moottoreille. Latenssi riittänee.
Enivei, jouluna vanhemmilla lojutessa tuli hahmoteltua liikkumislogiikkaa ja itse koodiakin aika pitkälle ja nyt pitäisi nikkaroidakin. Joo, näin päin, olen softamiehiä... Ostin sparkfunista niitä ja näitä osia ajat sitten ja tätä projektia silmällä pitäen shoppailin samalla viisi paria IR-ledejä ja -transistoreita. Infrapuna on siitä kivaa ettei ihmisen silmä huomaa sitä eikä siis anturi tuota massiivista valopalloa häiritsemään. Hahmottelin vähän sopivia etäisyyksiä ja kolvailin osat verolevylle vastuksineen.
Ledeille on sadan ohmin etuvastukset (syöttelen näillä näkymin viidestä tai 3,3 voltista) ja transistorien kollektorit ovat 10 kilon vastuksilla käyttöjänössä, jolloin kollektorilla näkyvä jännite vaihtelee kivasti valoisuuden mukaan. Ledit valaisevat muuallekin kuin tuon kotelon pinnalla olevan pallukan suuntaan, ja siispä ledien ja trankkujen väliin on työnnettävä mustaa teippiä tms. niin että signaaliin vaikuttaa vain tarkasteltavasta pinnasta heijastuva valo. Kuvassa näkyvä musta teippi vähän aaltoilee ja jos sitä käyttää niin pitää tukea teippi vaikka pahviin, jotta anturit olisivat mahdollisimman samanlaisia. Ei nappaisi kalibroida noita erikseen vastaamaan toisiaan.
Ulos anturilevystä tulee käyttöjänö, maa ja viisi sensoridataa. Kytkin vimpaimen atmega8:aan kiinni (josta tullee robotin aivot) ja näppäilin piirin juttelemaan mittausarvoja pc:lle sarjaportin yli testailun ja debuggailun vuoksi. Ihan ok:lta näyttää: heijastus valkoisesta paperista antaa lukua 50 ja täysin tumma on yhdeksänsadan paikkeilla, kun mittausväli on 0-1023. Mikrokontrollerin puolella luetaan A/D-muuntimelta arvoja ja pusketaan ne sarjaporttiin; pc-puolella taas pythonpätkä kuuntelee sarjaporttia ja printtaa arvot komentoriville sekä plottaa kuvaajaa näytölle Qwt:n avulla. Kun musta teippi on kahden anturin välissä, molemmilta tulee lukemaa kivasti valkoisen ja mustan väliltä. Koodarina ajattelen tämän puolen suht itsestäänselväksi, mutta laitetaan nyt kuvien tueksi vähän koodia: AVR-puoli: analogreader.c (vaatii joskus aikoinaan kötöstetyn usart.h:n), PC-puoli: analogreader.py ja analogreader_scope.py -- pc-koodi on jaettu kahtia, toinen pätkä lukee sarjaporttia ja toinen plottaa niitä ruudulle:
Seuraavaksi pitäisi mietiskellä muuta runkoa ja samalla ohjausrakennetta. Differentiaaliajo eli kaksi erikseen ohjattavaa pyörää viivan eri puolille olisi varmaan näppärin. Raaoista moottoreista suoraan tunkkaamalla olisi aika työlästä nakertaa kun taas pienistä rc-servoista olisi helppo kyhätä nopeussäädettävä sopivalla välityksellä oleva voimanlähde. Rungonkin voisi ottaa jostain valmiista autoa edes muistuttavasta lelusta jolloin toisaalta voisi käyttää sen moottoria ja ohjauspyöriä valmiiksi. Robotit perinteisesti ovat kovin rumia ja kasattu esim. piirilevyistä, niin voisi tehdä jotain tyylikästäkin vaihteeksi. Tilailin dx:stä kauan sitten parit miniservot ja leluautot, mutta ne näin joulun ja uudenvuoden puitteissa luultavasti jumittavat Kiinan postissa pari viikkoa ja robolla olisi eräs päämäärä olla muutaman viikon päästä valmis, katsotaan nyt mihin päädytään.
0 kommenttia
Oma kommenttisi
Mielipide tämän sivun asiasta? Kirjoita toki. Älä raapusta kuitenkaan ihan asiattomia juttuja.
Jos on yksityisempää asiaa, tarkkaa kysyttävää tai aihetta pidemmälle keskustelulle, käytä yhteydenottolomaketta kommentoinnin sijaan.
Hölmöt kommentit saatetaan moderoida pois jälkikäteen.