AS-0.3200 Automaatio- ja systeemitekniikan projektityöt A11-03 USB-käyttöinen syvyysanturi 5op 13.9.2011-29.11.2011 Johan Backlund Ohjaaja: Johan Grönholm
Johdanto Projektin tavoitteena oli suunnitella ja toteuttaa sukeltavalle robotille lisälaite, jolla saadaan nopeasti mitattua robotin syvyys veden alla. Laitteen tulee jutella robotin kanssa USB-väylää pitkin. Lisäksi laitteelle pitää tehdä linuxissa toimiva ajuri ja c++ esimerkkiohjelma, jolla voidaan lukea laitteen antamia mittaustietoja. Oli myös tarkoitus lisätehtävänä lisätä laitteelle lämpötila-anturi, vuotoanturi sekä etäisyysmittari. Robotti on noin kenkälaatikon kokoinen ja muotoinen metallilaatikko jonka sisällä on ReadyBoard tietokone. Itse lisälaite tulee olemaan robotin sisällä ja sen anturit on ulkopuolella. Lisälaite ja kiinnityspaikat anturien johdoille.
Työn vaiheet Projektiin tarvittavat osat saatiin valittua ja tilattua vasta viikolla 39, eli 2 viikkoa kurssin alkamisen jälkeen. Projektiin tilattiin teensy++, kaksi paineanturia, lämpötila-anturi ja ultraäänietäisyysanturi. Teensy lukisi anturien antamia mittaustietoja ja lähettäisi ne edelleen robotille. Teensyn sain viikolla 40, ja muut osat saapuivat viikolla 41. Käytin jonkin aikaa vain Teensy:iin tutustumiseen, mutta pääsin kuitenkin kokeilemaan kunnolla sitä sen jälkeen kun olin saannut muut projektiin kuuluvat osat. Jotta olisi helpompaa kokeilla eri antureita ilman että niitä tarvitsisi juottaa kiinni, tein ensiksi demo boardin testailuja varten. Oli myös tarkoitus lisätä Teensy:lle 5v jännitereferenssi niin että sillä olisi ollut stabiili jännite paineanturin mittauksia varten. Vaikka käytin aika paljon aikaa siihen niin en sitä saannut toimimaan joten jätin sen kokonaan pois projektista, mutta näin jälkeenpäin katsottuna ei siitä olisi ollut paljon hyötyä muutenkaan. Lämpötila-anturia en saannut toimimaan, vaikka sen olisi pitännyt olla erittäin helppo käyttää teensyn kanssa. Mahdollisesti sain vain huonon anturin. Lämpötila-anturi ei kuitenkaan ollut tärkeä projektille niin en hankkinut toista anturia vanhan tilalle. Lopullinen levy teensylle ja anturien kaapeleille.
Paineanturi Paineanturi on analooginen absoluuttinen paineanturi jolla voi mitata 0 700kPa paine. Anturi antaa ulos 0.2v 4.7v jännitteen riippuen paineesta. Teensy muuntaa jännitteen digitaaliseksi (0 1023). Paineanturi oli jo vedenpitävä, siihen piti vain laittaa silikonimassaa anturin liittimille. Yhden jännitearvon muutos (esim. 160 -> 161) on noin 7,7cm veden alla. Eli jos haluaa saada tarkemman arvon, pitää laskea useamman arvon keskiarvo. 64 arvon keskiarvolla tarkkuus on noin 1cm, ja sen laskeminen kestää noin 300ms. Tätä tarkemmin ei saisi laskettua vaikka laskisi useammalla arvolla. Jos haluaa nopeamman laskun, voisi laskettavien arvojen määrä laskea esim. 32:teen (~150ms). Paineanturi ennen Paineanturi jälkeen. Anturi näyttää tuollaiselta siihen on lisätty muutama kondensaattori poistamaan kohinaa.
158 157,8 157,6 157,4 157,2 157 No avg 10 avg 64 avg 156,8 156,6 156,4 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 Tarkemman mittauksen saa tehtyä laskemalla usean arvon keskiarvo. Ultraäänietäisyysanturi Ultraäänietäisyysanturina toimii MaxSonar MB7067. Anturia ei ole tarkoitettu vedenalaisten mittausten tekemiseen, mutta olin lukenut että muutama muu henkilö oli saanut sen toimimaan veden alla ihan hyvin laittamalla silikonimassaa muutamaan kohtaan. Ilmassa voidaan mitata 1cm resoluutiolla 30 760cm etäisyys. Koska ääni kulkee vedessä ~4,3 kertaa nopeammin kuin ilmassa niin anturin mittaamat etäisyydet vedessä tulee myös olemaan ~4,3 kertaa ilmaan verrattuna, eli noin 120 3300cm. Alussa anturi näytti toimivan hyvin. Olin kokeillut sitä vedessä ja se näytti toimivan, mutta jotta voisin kokeilla sitä kunnolla piti anturia kokeilla yli 1,2 metrin syvyisessä vedessä, eli menin mökille testailemaan sitä paremmin. Anturi ei kuitenkaan toiminnut kunnolla. Vaikka vesi oli noin 8 metriä syvää, niin näytti se että siinä olisi vain 1,2 metriä syvää, eli anturi antoi etäisyydeksi minimietäisyyden jonka se voi mitat. Kun sain kokeiltua sitä vähän paremmin, huomasin että se kuitenkin joskus antoi oikean syvyyden, mutta vähän ajan kuluttua anturi antoi taas minimietäisyyden. Kun anturi alkoi antaa väärän etäisyyden, niin sen piti nostaa pois vedestä, ja kun sen laittoi taas veteen, se toimi hetken kunnes se taas antoi väärän etäisyyden. Yritin saada selville mikä siinä olisi mahdollisesti voinnut olla vikana mutta en sitä koskaan saanut selville. Anturi ennen
Anturi sen jälkeen kun siitä on tehty vedenpitävä Vuotoanturi Vuotoanturi toimii erittäin simppelillä periaatteella. Kaksi kaapelia jotka ovat noin 1cm toisistaan, yhdestä tulee jännite ja toinen kaapeli menee Teensy:iin. Jos robotin sisällä on vettä, niin kaapelien välillä syntyy yhteys, ja Teensy saa luettua jännitteen toisesta kaapelista. Vuotoanturi
Ajurin komennot int serial_init(const char* serialport); Luo yhteyden Teensy:iin. char* serialport on portti missä Teensy on kiinni. Esim. Ubuntussa sen on pitäisi olla /dev/ttyacm0. int serial_read(int fd, char* buf); Lukee Teensy:n lähettämän datan ja tallentaa sen char* buf:iin. int serial_write(int fd, const char* str); Voi lähettää dataa (const char* str) Teensy:lle jos sille on tarvetta. int parse_data(char* str, double* val1, double* val2, bool* sens1, bool* sens2, bool* sens3, bool* sens4); Tallentaa serial_read:in antaman datan oikeille arvoille. char* str on serial_read:in antama data, double* val1 on etäisyysdata, double* val2 on syvyysdata, bool* sens1 sens4 on vuotoanturien data (true jos vettä robotin sisällä). Kun ohjelma käynnistetään, tulee sille antaa referenssi painearvo, joko lukemalla nykyinen painearvo (jos anturi ei ole vedessä) tai antamalla sille käsin jokin arvo. Esimerkkiohjelmassa ohjelma ottaa ensin 10 mittausta ja laskee sitten näiden mittausten keskiarvon ja käyttää sitä referenssi painearvona.
Ajankäyttö Tehtävä Suunnittelu ja osien valinta Teensy:iin tutustuminen Demo boardin tekeminen Jännitereferenssi Paineanturi Ultraäänianturi Lämpötila-anturi Vuotoanturi Ajuri ja esimerkkiohjelma Osien siistiminen Raportointi Tunnit 5h 3h 3h 4h 10h 10h 3h 3h 8h 4h 6h