PICAXE - Ultraäänisensori ja moottorinohjauspiiri

[b]Tässä artikkelissa jatkan Picaxe-mikrokontrollerin ominaisuuksien esittelyä aloittelijoille soveltuvilla esimerkeillä. Esittelen kaksi aihepiiriä.

  1. Ultraäänisensorin perusteet
  2. Kahden moottorin ohjaaminen L293D moottorinohjauspiirillä

Artikkelin ohjeita soveltamalla voi rakennella yksinkertaisen esteitä väistelevän robotin[/b]

boxirobo.JPG
[size=150]
Ultraäänisensori[/size]

Ultraääneen perustuvat sensorit ovat robotiikkaharrastelussa yleisin tapa mitata etäisyyttä. Sensorit ovat halpoja ja helppoja käyttää. Tässä artikkelissa käytetty malli HC-SR04 on halvin mahdollinen ultraäänisensori, ja samalla luultavasti halvin etäisyysmittari, niitä saa e-baysta halvimmillaan hintaan n. 3$! Toki kalliimmissa malleissa on paremmat ominaisuudet mutta omissa ja lukuisissa netissä esitetyissä arvioissa tämä malli on todettu kelpo värkiksi. Itse en eroa huomaa kalliimpaan tunnettuun SRF005 sensoriin joka toimii vastaavalla periaatteella.

Ultraäänisensorin hyviä puolia etäisyyden mittaukseen on sen riippumattomuusa valaistusoloista ja kappaleen väristä. Ne ovat myös parhaimmillaan aika tarkkoja ja niillä pystyy samalla sensorilla mittaamaan hyvin lähelle ja varsin kauas.

Huonoja puolia on äänen nopeuden riippuvuus lämpötilasta, huono heijastus kaltevista pinnoista ja pehmeistä kohteista ja mittauskiilan leveys ja epätasaisuus (tyypillisesti 15-30 astetta, joskus voi olla etukin) Etäisyyden ja esteiden havainnoin lisäksi niitä voi käyttää esim. nesteen suolapitoisuuden arvioimiseen, koska äänen nopeus muuttuu liuoksen mukaan.

HC-SR04 mittaa muutamasta sentistä parhaimmillaan noin 3 metrin etäisyydelle. Sen käyttö on helppoa, laitteeseen kytketään virta (5v) ja maa, trigger pinniin syötetään väh. 10 mikrosekunnin pulssi. Laite mittaa kauanko kaiku viipyy matkalla ja palauttaa keston pinniin echo, josta se voidaan lukea ja viive muuttaa matkaksi.

Alla olevassa kuvassa on kaavio kytkennästä picaxe 28 pinniseen projektilevyyn.

Komento pulsout saa numeron mukaisen output pinnin (m2 ja x2 sarjalla pitää käyttää c.0, b.0 etc.) antamaan pulssin joka pituus on 10 mikrosekunttia kerottuna komennossa annettu lukema kun mikrokontrollerin nopeus on 4mhz. (8mhz nopeudella pituus puolittuu jne.) Joskus näkee output pinnejä säästeltävän niin että pulssi otetaan servon pulssituksesta.

Kaiku luetaan pulsin komennolla 10 mikrosenkuntteina 4Mhz nopeudella. Alla on esimerkkikoodi. Äänen nopeuteen perustuvan keroimen voi muokata väliaineen ja lämpötilan mukaan.

[code]symbol pulssi = 0 ’ nimetään output pinni pulssin tuottamiseen
symbol kaiku = 0 ’ nimetään input pinni pulssin mittaamiseen
symbol matka = w1 ’ sanamittainen muuttuja etäisyyden laskemiseen

mittaus:
pulsout pulssi,2 ’ 20 uS mittainen pulssi, vähintään 10 uS
pulsin kaiku,1,matka’ mitataan sensorin palauttaman pulssin kesto alkaen nousevasta reunasta
pause 10
let matka = matka * 10 / 58 ‘ multiply by 10 then divide by 58
’ jos pulssin ja kaiun välinen kesto jaetaan 5.8 saadaan äänen
'kulkema matka senttimetreissä. Picaxe ei osaa desimaalilukuja joten siksi temppu
debug matka
pause 50
goto mittaus[/code]
[size=150]
Moottorien ohjaaminen[/size]

Jotta esmerkiksi robotti saataisiin liikuskelemaan, on yleinen tapa käyttää kahta molempiin suuntiin pyörivää moottoria. Tämä on picaxen 28 pinnisellä projektilevyllä erityisen helppoa, koska siinä on valmis paikka L293D moottorinohjauspiirille. Tällä piirillä voi ohjata kahta moottoria kahteen suuntaan, ja siinä on suojadiodit jotka varjelevat ohjaavaa piiriä. Piirillä voi ohjata vain varsin pieniä moottoreita. Huono puoli on myös se että moottorit saavat yli voltin alemman jännitteen kuin mitä siihen syötetään, joten picaxen 5v käyttöjännitteellä moottorit pyörivät aika laiskasti. Tämä on ratkaistavissa syöttämällä moottoreille korkeampaa jännitettä, joka kytketään artikkelissa olevassa projektilaudan kaaviokuvassa näkyviin v2 pinneihin projektilevyssä. Myös moottorin kytkentäpaikat on merkattu kuvaan.

Moottoreita ohjataan output pinneillä 4, 5, 6 ja 7 joita ei voi siis silloin käyttää muuhun. Toinen moottoreista kytketään A-pinneihin ja toinen B pinneihin. 4 ja 5 outputit ohjaavat toista moottoria ja 6 ja 7 toista. Moottorit pyörivät kun toinen pinni on high ja toinen low. Kun molemmat ovat low tai high moottorit pysähtyvät. Alla oleva koodiesimerkki selventää miten pyörimissuuntaa vaihdetaan.

[code]ajelu:

high 4 ’ molemmat moottorit eteenpäin
low 5
high 6
low 7

pause 2000

low 4 'pysäytys
low 5
low 6
low 7

pause 500

low 4 'molemmat moottorit taaksepäin
high 5
low 6
high 7

pause 2000

high 4 'toinen tapa pysäyttää
high 5
high 6
high 7

pause 500

high 4 'toinen moottori eteenpäin ja toinen taaksepäin
low 5 ’ robotti kääntyy siis paikallaan
low 6
high 7

pause 2000

goto ajelu[/code]

Kun osaa lukea etäisyyttä ja liikuttaa moottoreita, ovat robotin rakentamisen perusvaatimukset kasassa! Alla olevasta linkissä on videonpätkä pieneen kenkälaatikkoon rakennetusta vaeltelijasta. Vaeltelevassa laatikossa on lisäksi piezopiippari jolla se vinkuu kohdatessaan esteitä.
youtu.be/tnoZB9-3VMY

robosisus.JPG