18. tammikuuta 2011

Arduino ja BluetoothBee

Tilasin ennen joulua itselleni Kiinasta XBee-kantaan käyvän Bluetooth-moduulin käytettäväksi Arduinon kanssa erilaisissa projekteissa. Tarkoituksena on lähinnä tutustua Bluetooth-teknologiaan ja selvittää mihin kaikkeen se soveltuu. Yksi sovelluskohde mitä olen miettinyt on käskyjen välittäminen GPS-robottiautolleni. Testirautana on Arduino Duemilanove, Xbee Shield, BluetoothBee. Tässä jutussa kerron miten yhdistin Arduinon puhelimeni kanssa.

Seeedstudio BluetoothBee
BluetoothBeen ohjelmointi
Ensimmäisenä moduuli pitää tietenkin ohjelmoida. Sitä varten tarvitaan ensinnäkin ohjelma, jolla voi helposti lukea ja kirjoittaa sarjaliikenneporttiin. Oli suorastaan käsittämättömän vaikeaa löytää kätevä graafinen ohjelma Linuxille. Loputtomalta tuntuneen googlauksen löysin Ohjelman nimeltä CuteCom mikä oli juuri sellainen kuin mitä olin etsimässä.

Seuraavaksi sitten piti keksiä miten komennot saa välitettyä BluetoothBeelle. Asiaa tutkittuani selvisi, että sarjaportin kautta saa komennot menemään moduuliin laittamalla XBee shieldin ns. USB-moodiin. Käytännössä se tarkoitti kahden jumpperin siirtämistä ja mikrokontrollerin irroittamista Arduinosta. 

Sen jälkeen, kun asetukset CuteComissa olivat kohdillaan, alkoi moduuli vastaamaan käskyihin. Huomioitavaa Linux-käyttäjille on se, että jokainen komento aloitetaan ja päätetään DOS-tyyppisellä rivinvaihdolla, eli carriage return ('\r') ja line feed ('\n') on lähetettävä molemmat. Komennot ovat hyvin selostettuna datalehdellä. Itse asetin Bluetooth-moduulin slave-moodiin, nimeksi Arduino, asetin PIN-koodin sekä laitoin sen automaattisesti käynnistyessä yhdistämään siihen laitteeseen mihin se on viimeksi ollut yhteydessä. Ennen jokaista komentoa pitää lähettää yksi tyhjä DOS-tyyppinen rivinvaihto.
+STMOD=0
+ STNA=Arduino
+STPIN=1234
+STAUTO=1
Yhteyden luominen ja testaaminen
Arduinon yhdistäminen puhelimen kanssa aiheutti myös hieman päänvaivaa. Aluksi moduuli pitää laittaa inquiry-tilaan, jotta se näkyisi muille laitteille. Se tapahtuu komennolla
+INQ=1
GetBluen kuvaruutukaappaus
 Sen jälkeen puhelimesta Bluetooth päälle ja skannataan kuuluvuusalueella olevat laitteet. Listassa komeili Arduino-niminen laite, joten käskin puhelimen yhdistämään laitteeseen. Seuraavaksi piti näppäillä moduulin PIN-koodi ja sen jälkeen laitteiden parittaminen oli tehty.

Nyt puhelimen Bluetooth-laitteiden listassa näkyi Arduino, jonka kohdalla luki tarkenteena "Paired but not connected". Yritin käskyttämällä moduulia saada yhteyttä aikaiseksi, mutta joka kerta moduuli palautti "CONNECT:FAIL". Google-fu tuotti tulosta, kun moduulin valmistajan forumilla joku mainitsi, että yhteyttä ei voi luoda, ellei puhelimessa ole softaa mikä pystyy sellaisen avaamaan. Androidin sovelluskaupasta löytyi ohjelma nimeltä GetrBlue, jonka avulla alkoi bitti liikkumaan Androidin ja Arduinon välillä. Tein Arduinoon pienen ohjelman, mikä luki Bluetoothin kautta merkkejä ja palautti ne niin, että jokaisen merkin arvoa oli kasvatettu yhdellä. Ennen sitä piti tietenkin laittaa Arduinon mikro-ohjain takaisin paikalleen.

Mitä seuraavaksi?
Seuraavana on ohjelmassa tehdä oma Android-ohjelma, joka osaa avata yhteyden Arduinoon ja lähettää esimerkiksi sensoridataa sille. Hieno tavoite voisi olla tehdä ohjelma, mikä toimii robottiauton langattomana rattina. 

Ei kommentteja:

Lähetä kommentti