Anturityö, Tomi Pulli Työn tavoite Työssä tutustutaan analogi- ja digitaalianturien käyttöön Arduino-mikrokontrollerin kanssa. Työssä opastetaan, kuinka erityyppiset anturit kytketään mikrokontrolleriin ja kuinka antureita luetaan mikrokontrollerin avulla. Samalla tutustutaan signaalien keskiarvoistamiseen ja antureiden kalibrointiin. Esimerkkiantureina käytetään analogista 3-akselista kiihtyvyysanturia ADXL335 (valmistaja Analog Devices), analogista ultraäänietäisyysanturia LV-MaxSonar-EZ1 (valmistaja Maxbotix) sekä digitaalista lämpötila-anturia DS18B20 (valmistaja Dallas Semiconductor). Tarvikkeet Arduino Uno (tai vastaava) Analog Devices ADXL335 Maxbotix LV-MaxSonar-EZ1 Dallas Semiconductor DS18B20 4,7 kω vastus Kytkentälevy ja johtoja USB-kaapeli 1. Kiihtyvyysanturi Kiihtyvyysanturi mittaa kappaleen kiihtyvyyttä suhteessa vapaassa pudotuksessa olevan tarkkailijan kiihtyvyyteen. Näin ollen pudotetun anturin mittaama kiihtyvyys on ideaalisessa tapauksessa 0 m/s 2, kun taas paikallaan olevan anturi mittaa noin 9.8 m/s 2 :n kiihtyvyyttä ylöspäin. Kallistetun paikallaan olevan anturin lukema on verrannollinen kallistuskulmaan suhteessa painovoiman voimavektoriin. Työssä tutustutaan Analog Devicesin ADXL335-kiihtyvyysanturin käyttöön. Anturin pääkomponentti on jousitettu kappale, joka liikkuu anturia käännettäessä. Liikkuvaan kappaleeseen kiinnitetty levy muodostaa yhdessä anturin kiinteän levyn kanssa levykondensaattorin, jonka kapasitanssi on verrannollinen anturin kallistuskulmaan (tai yleisemmin kiihtyvyyteen). ADXL335 mittaa kiihtyvyyttä kolmen akselin suhteen, joten levykondensaattoreita on anturin sisällä useampia. Kapasitanssien vaihtelu muunnetaan lopulta jännitevaihteluiksi anturin kolmessa ulostulossa. Anturin kytkentä 1. Kiihtyvyysanturin ADXL335 käyttöjännitteen tulee olla välillä 1,8 3,6 V, joten et voi käyttää Arduino Unon 5 V:n jännitelähtöä. Kytke Arduino Unon 3.3 V:n jännitelähtö (POWER 3.3V) kiihtyvyysanturin käyttöjännitteeksi (Vin tai VCC). Kytke kiihtyvyysanturin GND-liitin maapotentiaaliin. (Huom. Mikäli käyttämässäsi mikrokontrollerissa ei ole 3.3 V:n ulostuloa, voit käyttää esimerkiksi 5 V:n käyttöjännitettä ja 3.3 V:n regulaattoria. Kytkentäohjeen löydät regulaatorin tietolehdestä.) 2. Kytke kiihtyvyysanturin X-, Y- ja Z-liittimet Arduinon ANALOG IN -liittimiin (A0, A1 ja A2).
3. Tarkistettuasi kytkennät, kiinnitä Arduino USB-kaapelilla tietokoneeseen. Kuva 1: Kiihtyvyysanturin ja mikrokontrollerin välinen kytkentä. Anturin käyttö 1. Käynnistä Arduino-sovellus. Varmista, että ohjelma tunnistaa mikrokontrollerin. Avaa mittausohjelma kiihtyvyysanturi File > Sketchbook > Projects > kiihtyvyysanturi. 2. Tallenna tiedosto uudella nimellä File > Save As > kiihtyvyysanturi_r<ryhmän numero>. 3. Silmäile ohjelmakoodi läpi. 1. Ohjelman ensimmäisessä osiossa määritellään ajon aikana käytettävät muuttujat. Varmista, että pinninumerot (xpin, ypin, zpin) vastaavat kytkentääsi. 2. Ohjelman setup-osion Serial.begin(9600)-komento muodostaa sarjaporttiyhteyden mikrokontrollerin ja tietokoneen välillä. Yhteyden avulla anturin arvot voidaan lukea tietokoneella. 3. Ohjelman loop-osion koodia ajetaan toistuvasti kunnes Arduinon virta katkaistaan. Kommenttirivit alkavat merkeillä //. Pitkät kommentit alkavat merkeillä /* ja päättyvät merkkeihin */. Kommenttiriveillä olevaa ohjelmakoodia ei ajeta. 4. Kun olet tutkinut ohjelmakoodia tarpeeksi, varmista koodin oikeellisuus klikkaamalla vasemman yläkulman Verify-painiketta. Tämän jälkeen voit lähettää ohjelmakoodin mikrokontrollerille painamalla Upload-painiketta. Mikäli ohjelmakoodin lähetys mikrokontrollerille epäonnistuu, ota yhteys assistenttiin. 5. Tarkkaile sarjaliikennettä klikkaamalla ohjelman oikean yläkulman Serial Monitor -painiketta. Mikrokontrolleri syöttää sarjaporttiin rivejä muodossa Arvot: 0,0,0. Merkkijonon kolme numeroa ovat verrannollisia kiihtyvyysanturin X-, Y- ja Z-ulostulojen jännitearvoihin. Arduino Unon analogi-digitaalimuuntimen resoluutio on 10 bittiä ja referenssijännite on 5 V. Näin ollen digitaalisana 0 vastaa 0 V:n jännitettä, kun taas 1023 vastaa 5 V:n jännitettä. Tarkkaile numeroarvojen muuttumista käännellessäsi anturia. 6. Kiihtyvyysanturin ulostulo on tyypillisesti melko vähäkohinainen. Toisin sanoen anturin ollessa paikallaan ei ulostulon lukuarvotkaan juuri muutu. Kohisevia ja häiriöherkkiä antureita käytettäessä kannattaa mittaustuloksia usein keskiarvoistaa tavalla tai toisella. Kommentoi loop()-osion alun kolme analogread()-riviä pois asettamalla // merkit koodirivien alkuun. Poista tämän jälkeen /* ja */ seuraavan koodipätkän ympäriltä. Lataa ohjelmakoodi mikrokontrollerille ja käynnistä Serial Monitor uudelleen. Vaikuttiko keskiarvoistus mihinkään? Voit halutessasi kokeilla keskiarvoistettavien mittapisteiden määrän (nave) lisäämistä ja vähentämistä. (Huom. Esimerkkikoodissa esitetty keskiarvoistustapa ei ole kovin elegantti, mutta helposti luettava ja toimiva. Parempi tapa on käyttää juoksevaa keskiarvoa: arduino.cc/en/tutorial/smoothing )
7. Kiihtyvyysantureita käytetään yleisesti kallistuskulman mittaamiseen esimerkiksi kännyköissä ja taulutietokoneissa. Tarkkojen jännitearvojen sijaan olemme kiinnostuneita kutakin digitaalisanaa vastaavasta kulmasta. Jotta Arduinon lukema raakadata voidaan muuttaa kulmiksi, pitää anturille suorittaa alkeellinen kalibrointi: 1. Käännä anturi -90 asteen kulmaan x-akselin suhteen. Kirjoita x-akselin lukema ohjelmakoodin alkuosan xmin-muuttujaan. 2. Käännä anturi +90 asteen kulmaan x-akselin suhteen. Kirjoita x-akselin lukema ohjelmakoodin alkuosan xmax-muuttujaan. Mikäli xmax-muuttujan arvo on pienempi kuin xmin-muuttujan arvo, vaihda arvot keskenään. 3. Poista kommenttimerkit /* ja */ ennen ja jälkeen map()- ja print()-koodirivejä. 4. Lataa ohjelmakoodi mikrokontrollerille ja käynnistä Serial Monitor uudelleen. 8. Mikrokontrolleri lähettää sarjaporttiin nyt raakadatan lisäksi kutakin arvoa vastaavat kallistuskulmat. Kääntele anturia ja seuraa arvojen muuttumista. Käännä anturi -90 ja 90 asteen kulmiin y-akselin suhteen. Toimiiko x-akselin suhteen tehty kalibrointi y-akselille? Tee tarvittaessa uusi kalibrointi y-akselin suhteen (luo arvot ymin sekä ymax ja päivitä map()- komento). Toimiiko lineaarimuunnos (map()-komento)? Miksi z-akselin arvot eivät käyttäydy samalla tavalla kuin kahden muun akselin? (Vinkki: Pohdi kuinka kiihtyvyysanturi mittaa kulmia.) 2. Digitaalinen lämpötila-anturi Lämpötilan mittaamiseen on kehitetty lukuisia eri menetelmiä. Lämpötilan mittauksessa voidaan käyttää hyväksi esim. materiaalien lämpölaajenemista (nestepohjainen lämpömittari, kaksoismetallilämpömittari), resistanssin muutosta lämpötilan funktiona (PT100 platinavastuslämpötila-anturi, termistori), lämpösähköistä ilmiötä (termopari) ja lämpösäteilyä (infrapunakamera). Dallas Semiconductorin DS18B20-lämpötila-anturi muuttaa lämpötilan suoraan digitaaliseen muotoon. Anturin toiminta perustuu oskillaattoriin (värähtelijään), jonka värähtelytaajuus riippuu voimakkaasti lämpötilasta. Anturin elektroniikka laskee kuinka monta pulssia toinen, lähes lämpötilariippumaton oskillaattori ehtii tuottaa voimakkaasti lämpötilariippuvaisen oskillaattorin määräämänä aikana. Lämpötilan kohotessa lämpötilariippuvaisen oskillaattorin jaksonaika suurenee, ja näin myös mittausjaksolle (verrannollinen jaksonaikaan) mahtuvien pulssien määrä kasvaa. DS18B20-lämpötila-anturi ottaa vastaan komennot (esim. lämpötilakysely) ja lähettää vastaukset (esim. lämpötila tai virheilmoitus) digitaalisessa muodossa. Anturin käyttöönotto Arduinon kanssa on selvästi hankalampaa kuin esimerkiksi edellisen työn analogisen kiihtyvyysanturin käytön aloittaminen. Toisaalta digitaalisuudesta on monissa sovelluksissa myös paljon etua. Työssä käytettyjä lämpötilaantureita voi esimerkiksi kytkeä sarjaan, jolloin laajahkon lämpötila-anturiverkon hallintaan riittää yksi signaalijohdin. Kullakin anturilla on oma uniikki osoitteensa, jonka avulla sarjaan kytketyt lämpötilaanturit voidaan helposti yksilöidä. Työssä käytettyä lämpötila-anturia (kuten myös monia muita digitaalisia antureita) varten löytyy internetistä valmis koodikirjasto ja lukuisia Arduino-esimerkkejä. Pyörää ei siis tarvitse keksiä uudelleen.
Anturin kytkentä 1. Lämpötila-anturin käyttöjännitteen (VDD tai +) tulee olla välillä 3,0 5,5 V. Voit siis käyttää Arduinon 3.3 V tai 5 V lähtöjä (POWER-osio). Kytke GND (tai -) maapotentiaaliin. 2. Kytke anturin dataliitin (DQ tai S) Arduinon DIGITAL 2 -liittimeen. 3. Lämpötila-anturi vaatii ylösmenovastuksen. Kytke 4.7 kω vastus dataliittimen (DQ tai S) ja käyttöjännitteen (3,3 V tai 5 V) välille. 4. Tarkista kytkentä huolellisesti. Väärin kytkettynä lämpötila-anturi kuumenee voimakkaasti. Kiinnitä Arduino USB-kaapelilla tietokoneeseen. (Huom. DS18B20-lämpötila-anturia voi käyttää myös ilman erillistä käyttöjännitettä, jolloin anturi saa tarvittavan virran signaaliliittimen kautta. Tämä kuitenkin hidastaa anturin lukemista jonkin verran. Vaihtoehtoinen kytkentä löytyy anturin tietolehdeltä.) Kuva 2: Lämpötila-anturin ja mikrokontrollerin välinen kytkentä. Anturin käyttö 1. Käynnistä Arduino-sovellus. Varmista, että ohjelma tunnistaa mikrokontrollerin. Avaa mittausohjelma kiihtyvyysanturi File > Sketchbook > Projects > lampoanturi. 2. Silmäile ohjelmakoodi läpi. 1. Ohjelman ensimmäisessä osiossa määritellään ajon aikana käytettävät muuttujat. Varmista, että pinninumero (tpin) vastaa kytkentääsi. 2. Ohjelman setup-osiossa muodostetaan jälleen sarjaporttiyhteys mikrokontrollerin ja tietokoneen välille. Ohjelman loop-osion koodia ajetaan toistuvasti kunnes Arduinon virta katkaistaan. 3. Ohjelmakoodin viimeinen osio määrittelee gettemp-funktion. Saako valmiista koodista selvää? Kun funktiota kutsutaan (esim.) komennolla temp = gettemp() ohjelmakoodin setup- tai loop-osiossa, funktio käskee anturia mittaamaan lämpötilan ja lähettämään tuloksen mikrokontrollerille. Yksikkömuunnoksen jälkeen funktio palauttaa lämpötilan celsius-asteina ja tulos tallennetaan muuttujaan temp. (Huom. Esimerkissä käytetty gettemp-funktio olettaa, että käytössä on vain yksi anturi. Esimerkkejä useamman lämpötila-anturin käytöstä sarjassa löydät internetistä.)
3. Kun olet tutkinut ohjelmakoodia tarpeeksi, tarkistuta koodi klikkaamalla Verify-painiketta. Lähetä koodi tämän jälkeen mikrokontrollerille painamalla Upload-painiketta. Kun lähetys on valmis, avaa Serial Monitor. 4. Onko lämpötila-anturin lukema mielestäsi järkevä vai tulisiko se kalibroida? Vertaa anturin lukemaa toiseen lämpömittariin, jos sellainen on saatavilla. Miten kalibroisit lämpötila-anturin? Onko anturi kohinainen? Lämmitä anturia esimerkiksi koskemalla sitä sormellasi. Kuinka nopeasti anturi reagoi lämpötilan muutoksiin? Kuinka kauan lämpötilan tasaantuminen kestää? 5. Tutki lämpötila-anturin tietolehteä (datasheet). Millä lämpötila-alueella anturi toimii? Entä mikä on luvattu tarkkuus? 6. Mitä hyötyä anturin digitaalisuudesta on verrattuna analogianturiin? Entä mitä haittaa? 3. Analoginen etäisyysanturi Etäisyysmittari voidaan toteuttaa esimerkiksi lasereiden, infrapunaledien tai ultraäänianturin avulla. Maxbotix LV-MaxSonar-EZ1-etäisyysanturi mittaa kuinka kauan laitteen lähettämältä 42 khz taajuiselta ultraäänipulssilta kestää heijastua takaisin anturille. Kun edestakaiseen matkaan kulunut aika ja äänennopeus ilmassa tiedetään, on kohteen etäisyys helppo selvittää. Anturissa on analoginen, digitaalinen ja pulssinleveysmoduloitu ulostulo. Alla olevassa esimerkissä käytetään anturin analogiulostuloa. Anturin kytkentä 1. Ultraäänietäisyysanturin LV-MaxSonar-EZ1 käyttöjännitteen tulee olla välillä 2,5 5,5 V. Kytke Arduino Unon 5 V:n jännitelähtö (POWER 5V) anturin käyttöjännitteeksi (+5). Kytke etäisyysanturin GND-liitin maapotentiaaliin. 2. Kytke etäisyysanturin analoginen ulostulo (AN) Arduinon ANALOG IN -liittimeen (A3). 3. Tarkistettuasi kytkennät, kiinnitä Arduino USB-kaapelilla tietokoneeseen. Kuva 3: Etäisyysanturin ja mikrokontrollerin välinen kytkentä. Anturin käyttö 1. Käynnistä Arduino-sovellus. Varmista, että ohjelma tunnistaa mikrokontrollerin. Avaa mittausohjelma kiihtyvyysanturi File > Sketchbook > Projects > etaisyysanturi. 2. Tallenna tiedosto uudella nimellä File > Save As > etaisyysanturi_r<ryhmän numero>. 3. Silmäile koodi läpi ja tarkistuta se klikkaamalla Verify-painiketta. Lähetä koodi tämän jälkeen mikrokontrollerille painamalla Upload-painiketta. Kun lähetys on valmis avaa, Serial Monitor. 4. Anturin antamat etäisyydet eivät pidä paikkansa. Muokkaa koodin riviä uvalcm = niin, että etäisyys tulostetaan senttimetreinä. Katso vinkit ohjelmakoodin kommenteista.
5. Liikuta kättä pystysuunnassa anturin yläpuolella ja tarkkaile lukuarvojen muuttumista. Onko anturin lukema tarkka? Mikä on pienin etäisyys, jolla etäisyysanturi näyttää järkeviä lukuarvoja? Liikuta kättäsi vaakasuunnassa anturin yläpuolella esim. 40 cm:n korkeudella anturista. Mitä huomaat? 6. Tutki anturin tietolehteä (datasheet). Millä alueella anturin luvataan toimivan? Mikä on laitteen resoluutio?