Rakentelijan unelma. Arduinon käyttäminen



Samankaltaiset tiedostot
Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja.

LUMA SUOMI -kehittämisohjelma LUMA FINLAND -utvecklingsprogram LUMA FINLAND development programme Ohjelmointia Arduinolla

Mikro-ohjain µc harjoitukset - yleisohje

P I C A X E O H J E L M O I N T I

CEM DT-3353 Pihtimittari

Arduinon ohjelmointi. Sami-Petteri Pukkila. 6. helmikuuta 2017

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Peter Kronström

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Digikamera. Perustietoa digikamerasta ja kuvien siirtämisestä tietokoneelle

Harjoitustyö - Mikroprosessorit Liikennevalot

OMNIA OPINNÄYTETYÖ AMMATTIOPISTO. Diginoppa ICTP09SLG OMNIAN AMMATTIOPISTO

12. Javan toistorakenteet 12.1

1 Tarkistetaan että kaikki toimii

12. Javan toistorakenteet 12.1

WBelectronics. Infinity USB Phoenix - Käyttöohje

GSRELE ohjeet. Yleistä

S Elektroniikan häiriökysymykset. Laboratoriotyö, kevät 2010

Ohjelmoi Arduino Grovella

Python-ohjelmointi Harjoitus 2

Ohjelmoinnin perusteet Y Python

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Let Me Hack It -kurssilla tarvittavat ohjelmat ja välineet

Ohjelmoinnin peruskurssi Y1

Arduino ohjelmistokehitys

FullHD herätyskello-valvontakamera

2. Modeemi- ja ISDN-yhteyden käyttöönotto

Opas Logitech Harmony 525 asennusohjelmistoon

Puhelinnumeroiden lataaminen laitteesta tietokoneelle

11. Javan toistorakenteet 11.1

NOOX xperio herätyskello valvontakamera

MPCC-työkalua voidaan käyttää yhden laitteen valvontaan ja yhden tai useamman laitteen konfigurointiin (Modbus broadcast, osoite 0).

Tehtävä 5. ECIO dataloggeri lämpötila-anturilla

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

CUDA. Moniydinohjelmointi Mikko Honkonen

Ohjelmointiharjoituksia Arduino-ympäristössä

PIKAOPAS MODEM SETUP

Äänellä vauhtia robottiin

Ohjelmoinnin perusteet Y Python

Topfieldin sarjaporttipäivitystyökalun asennus(rs232)

UML -mallinnus TILAKAAVIO

SUMO-ROBOTTI. Tehtävä

PIKAOPAS MODEM SETUP FOR NOKIA Copyright Nokia Oyj Kaikki oikeudet pidätetään.

Micro:bit. Käyttöohje. Innokas verkosto Petja Pyykkönen, Saimaan mediakeskus Käyttöohje / 2016 Innokas

AALTO-VALVONTALAITE TST5102

Comet pysäköintimittarin asennus ja kytkeminen tietokoneeseesi (Windows XP) USB-kaapelilla.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

LUKUJA, DATAA KÄSITTELEVÄT FUNKTIOT JA NIIDEN KÄYTTÖ LOGIIKKAOHJAUKSESSA

Riistakameran käyttöohje

Ohjelmoinnin perusteet Y Python

13. Loogiset operaatiot 13.1

Taitaja semifinaali 2010, Iisalmi Jääkaapin ovihälytin

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Arduino. Kimmo Silvonen (X)

Android. Sähköpostin määritys. Tässä oppaassa kuvataan uuden sähköpostitilin käyttöönotto Android Ice Cream Sandwichissä.

Tähtitieteen käytännön menetelmiä Kevät 2009

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Test-Driven Development

Ohjelmoinnin perusteet Y Python

1 Asentaminen. 2 Yleistä ja simuloinnin aloitus 12/

1 Muutokset piirilevylle

Olet tehnyt hyvän valinnan hankkiessasi kotimaisen StorageIT varmuuskopiointipalvelun.

Ulkoiset laitteet. Asiakirjan osanumero: Tässä oppaassa kerrotaan lisävarusteina saatavien ulkoisten laitteiden käytöstä.

Sähköautoprojekti Pienoissähköauto Elektroniikan kokoonpano Moottoriohjain.

Option GlobeSurfer III pikakäyttöopas

NXT Infrapuna-sensori

Ohjelmoinnin perusteet Y Python

Teekkareiden Juomapeli

Scratch ohjeita. Perusteet

Kameravalvonta WEB kameroilla

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

Foscam kameran asennus ilman kytkintä/reititintä

Mirva Jääskeläinen Espoon kaupungin työväenopisto

SISÄLTÖ SISÄLTÖ. Esittely. Käyttövinkkejä. Digitaalinen yönäkö-monokulaari SISÄLTÖ DENVER NVI-500 DENVER NVI-500

Tervetuloa Kiitos, että valitsit Arlon. Pääset alkuun helposti.

Ohjelmoinnin perusteet Y Python

Ohjelmointi 1. Kumppanit

Kuvaruudun striimaus tai nauhoitus. Open Broadcaster Software V.20. Tero Keso, Atso Arat & Niina Järvinen (muokattu )

Pika-asennusohjeet Suomeksi

Karttaselain Paikannin J2ME

KSENIA GEMINO 4 GSM/GPRS-modeemi. Pikaohjelmointiohje

Käyttöohje. Sida 1. BRT-12 Battery Replacement Tool

Ohjelmoinnin perusteet Y Python

Asennusohje. EasyLine GSM

58131 Tietorakenteet ja algoritmit (syksy 2015)

KIITOS RICA OPTIMOINTIOHJELMAN VALITSEMISESTA

DumpDbox-ohjelmiston asennus- ja käyttöohjeet Sisällys

Windows. Valmistelut. Windows

Ohjelmoitava magneettivastuksellinen kuntopyörä. LCD-Näyttö BC-81295

Kuukauden kuvat kerhon galleriaan lähtien kuukaudenkuvaajan kuvagalleria on siirretty uudelle palvelimelle osoitteeseen:

////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ //-PID säätimellä. #include <EEPROM.h> #include <SoftwareSerial.h>

MP3 Manager Software for Sony Network Walkman

Videon tallentaminen Virtual Mapista

Ksenos Prime Käyttäjän opas

Asentaminen Android-laitteeseen

Ohjelmoinnin perusteet Y Python

Transkriptio:

Arduino TEKSTI, KUVAT JA KOODI: OLLI-PEKKA HEINISUO ALOITUSKUVA: JARI TOMMINEN Rakentelijan unelma Tekisikö mieli rakentaa vekotin, jota ei löydy kaupasta? Arduinosta voit tehdä melkein mitä vain. Kiinnostaisiko kauko-ohjattava kahvinkeitin, kukkien kastelumuistuttaja, lämpökamera tai kenties gps:llä itseohjautuva quadkopteri? Laite voi vaikka päivittää tilansa Twitteriin tai kertoa asiansa suoraan tekstiviestillä. Nämä kaikki laitteet voidaan toteuttaa täysin avoimella ja edullisella Arduinokehitysalustalla (www.arduino.cc), joka on villinnyt tee-se-itse-maailmaa jo muutamia vuosia. Arduinon avulla on helppo rakentaa omia vekottimia tai muokata jo olemassa olevia laitteita paremmiksi sekä omiin tarpeisiin sopivammiksi. Mikä Arduino on? Arduino on käytännössä piirilevy, joka pitää sisällään mikrokontrollerin ja muutamia ohjainpiirejä. Lisäksi levyllä on usb-liitin, virtaliitin sekä erilaisia pinnejä, joita käytetään ulkoisten laitteiden ohjaukseen. Kun Arduinon ympärille rakentaa jotakin, voitaneen puhua sulautetusta järjestelmästä. Sellaisia löytyy esimerkiksi kaukosäätimistä ja kaikista muistakin laitteista, joissa on sisäänrakennettuna monimutkaisempaa logiikkaa ja joita käytät todennäköisesti päivittäin. Näiden järjestelmien sydämenä sykkii mikrokontrolleri. Se on ohjelmoitava ic-piiri, jossa on usein nykymittapuulla naurettavan hidas prosessori sekä huvittavan vähän muistia. Arduinosta on olemassa useita eri versioita, mutta suosituimmassa Arduino Unossa tikittää Atmel AVR ATmega328P -mikrokontrolleri. Sen nopeus on 16 MHz ja sisäistä flash-muistia on 32 kilotavua. Arduinon eri variaatiot käyttävät Atmelin AVR -kontrollerien eri versioita. Arduino eroaa muista vastaavista alustoista helppokäyttöisyydellään, sillä se on helposti komennettavissa ja ohjelmoitavissa suoraan usb-liitännän kautta omasta kehitysympäristöstään windowsista, linuxista tai macista. Kyseessä on siis kokonainen valmis alusta ja ohjelmointiympäristö, ei pelkkä mikrokontrolleri. Arduinon etuna on myös monipuolisuus, sillä muun muassa ohjelmakirjastot kirjoitetaan lähes aina c++:lla. Tosin aivan kaikki kyseisen kielen ominaisuudet eivät ole tuettuja. Vielä suurempi valttikortti on valtava yhteisö, joka kehittää jatkuvasti uusia laitteita ja laajennoksia Arduinolle. Eikä loppua näy. Arduinon käyttäminen Tyypillisiä Arduino-projekteja ovat erilaiset ledeihin liittyvät rakennelmat, sensoreita eli tunnistimia hyödyntävät laitteet ja servoohjatut vekottimet. Näppärää rakentelijaa Arduinon lyhyt historia Italialaiset Massimo Banzi ja David Cuartielles käynnistivät vuonna 2005 projektin, joka tunnetaan nykyään nimellä Arduino. Tarkoituksena oli luoda opiskelijoille edullinen alusta, jonka avulla pystyisi luomaan ympäristön kanssa vuorovaikutuksessa olevia elektronisia laitteita nopeasti. Arduino pohjautuu avoimeen Wiring-alustaan, joka taas on kehitetty processing-kielen ja -kehitysympäristön pohjalta. Tämän vuoksi Arduinon ohjelmointiympäristö muistuttaa hyvin paljon processingin vastaavaa. Arduinosta on kehittynyt vähitellen tunnetuin ja käytetyin alusta harrastajien, opiskelijoiden ja muiden elektroniikasta ja rakentelusta kiinnostuneiden keskuudessa. Teese-itse-liike on nostanut päätään osittain juuri Arduinon ansiosta viime vuosien aikana huomattavasti. 30 MikroPC 10/2012 WWW.MIKROPC.NET

Juottamistaidot lisäävät Arduinorakentelijan mahdollisuuksia huomattavasti. WWW.MIKROPC.NET MikroPC 10/2012 31

Arduino Arduinon päälle voi pinota lisäkortteja eli shieldejä, joiden avulla laitteeseen saadaan lisätoimintoja, kuten nfc- tai ethernet-yhteydet. Valmiita shieldejä ajurikirjastoineen on olemassa satoja. Kuvan Arduino Uno on saanut selkäänsä lähiverkkoyhteydet mahdollistavan ethernet-shieldin. 32 MikroPC 10/2012 rajoitaa lähinnä mielikuvitus sekä ennen pitkää tietysti myös Arduinon laskentateho ja pinnien määrä. Internet on täynnä valmiita ohjeita ja neuvoja, kuinka jokin asia rakennetaan Arduinon ympärille. Yksinkertaiset ledijutut on hyvin helppo toteuttaa ohjelmoinnista ja elektroniikasta täysin tietämättömänkin, mutta vaikeusaste nousee melko jyrkästi eteenpäin mentäessä. Lisää komponentteja ja muita osia hankittaessa nousevat myös kustannukset. Arduino tarjoaa siis jokaiselle jotakin osaamistasosta riippumatta, vaikka sen alkuperäinen tarkoitus onkin ollut madaltaa kynnystä erilaisten ympäristön kanssa vuorovaikutuksessa olevien laitteiden rakentamiseen. Jotta aloittelija pääsee Arduinon ihmeelliseen maailmaan syvemmälle sisään, on hallittava ohjelmointia ja elektroniikkaa sillä tasolla, että ensimmäisen ehtolauseen tai vastuksen kohdalla asia ei mene yli ymmärryksen. Esimerkiksi pelkkä ledien vilkuttelu vaatii vastuksia, joten on myös hyvä ymmärtää, miten yksinkertaiset piirit toimivat virran, jännitteen ja muiden peruskäsitteiden osalta. Aloittelijan, ja miksei kokeneemmankin rakentelijan, on hyvä lähteä liikkeelle hankkimalla valmis komponenttikokoelma, Arduino Uno, koekytkentälevy, usb-kaapeli ja valitsemalla jokin helpohko projekti, jossa oppii käyttämään Arduinon ohjelmointiympäristöä sekä koekytkentälevyä. Sukua c++:lle Arduinon ohjelmointiympäristö käyttää kielenä c++:n johdannaista ja kyseinen kieli kulkee myös nimellä Arduino. Debuggaaminen eli virheiden etsintä tapahtuu ympäristön omassa sarjaporttimonitorissa, johon kaikki ohjelman tulostuskäskyt tulostuvat, jos ohjelmakoodissa on erikseen näin määritelty. Usb-liitännän kautta voi näin ollen myös lukea esimerkiksi sensoridataa kirjoittamalla vaikkapa pythonilla työkaluohjelman, joka tulkitsee ja järjestää Arduinon lähettämän datan mukavaan muotoon. Ohjelmointiympäristö sisältää valmiita koodiesimerkkejä ja kirjastoja. Ohjelman lataaminen ympäristöstä Arduinoon onnistuu nappia painamalla, mikäli kirjoitettu koodi kääntyy virheittä. Jos koodi ei käänny, virheet tulostuvat ympäristön alareunassa olevaan terminaali-ikkunaan. Arduinoa voi laajentaa niin kutsutuilla shieldeillä eli lisäkorteilla, jotka asettuvat Arduinon päälle. Niitä voi pinota käyttötarkoituksesta ja shieldistä riippuen useita päällekkäin. Mikä parasta, lähes kaikille shieldeille on olemassa valmiit koodikirjastot, jolloin aikaa ei tarvitse tuhlata omien rajapintojen tekemiseen. Esimerkiksi ethernet-shieldillä Arduinolla voi kytkeytyä internetiin. Lisäksi on olemassa muun muassa langattomaan tiedonsiirtoon kykeneviä sekä esimerkiksi nfc:llä varustettuja shieldejä. Shieldejä löytyy jo satoja erilaisia, joten pyörää ei tarvitse keksiä uudelleen. Käytännön sovellukset Arduinolla rakennetaan tyypillisesti prototyyppejä. Avoimuuden nimissä on suotavaa, että julkaisee netissä valmiin vekottimen lähdekoodin ja piirustukset, mutta se ei ole millään WWW.MIKROPC.NET

Intervalliajastimen prototyyppi kameraan kytkettynä. tasolla pakollista. Harrastelijat harvemmin viimeistelevät vekottimiaan kaupalliseen muotoon, mutta sekin on täysin mahdollista. Jos haluaa kaupallistaa tehdyn tuotteen, se vaatii todennäköisesti ainakin oman piirilevyn suunnittelun ja koteloinnin. Arduinossa on paljon ylimääräisiä komponentteja, joita ei tarvita enää valmiissa tuotteessa. Kunnolla viimeistellyssä tuotteessa ei ole oikeastaan mitään Arduinoon viittaavaa, sillä valmis ohjelma on mikrokontrollerissa sisällä ja kaikki ylimääräinen on karsittu pois. Harva kuitenkaan vie projekteja niin pitkälle. Intervalliajastimen rakentaminen Kuinka Arduinolla sitten oikeasti rakennetaan jotakin? Eräs mielenkiintoinen ja helposti eteenpäin kehitettävissä oleva käytännön sovellus on kameran intervalliajastin. Intervalliajastimia käytetään järjestelmäkameroissa valokuvien ottamiseen tietyin aikavälein, jonka jälkeen kuvasarjoista voidaan tehdä esimerkiksi timelapse-videoita. (Lisää aiheesta MikroPC 1/2012:ssa.) Ajastimet maksavat yleensä yli sata euroa, mutta miksi ostaa sellainen, jos voi tehdä omien mieltymysten mukaisen version halvemmalla? Rakentamiseen vaadittavat osat: Arduino Uno usb-kaapeli koekytkentälevy ja siihen hyppylankoja yksi 500 600 ohmin vastus yksi 4N35 optoerotin (tai vastaava, esimerkiksi 4N25) kameraan sopivalla liittimellä varustettu kaapeli, yleisin on 2,5 mm stereoplugi Kokoaminen Tärkein komponentti tässä esimerkissä on optoerotin. Kameralle ei saa viedä jännitettä, vaan se on eristettävä jollakin tavalla ohjaavasta virtapiiristä eli Arduinosta. Optoerotin toteuttaa tämän niin, että se välittää valolla signaalin toiselle virtapiirille. Kun optoerottimelle viedään jännite, sulkeutuu virtapiiri erottimen toisella puolella. Kun virtapiiri on suljettuna, kamera valottaa. Kun se on avoin, kamera ei valota. Optoerotin kytketään Arduinoon seuraavasti: kytke Arduinon pinnistä 13 hyppylanka 500 600 ohmin vastuksen kautta optoerottimen anodille. Anodin tunnistaa erottimen päällä olevasta pisteestä, sillä se on samassa kulmassa kuin anodi. Vastuksen tehtävä on varmistaa, että optoerottimelle ei vuoda häiriösignaaleja silloin, kun liitännän tila on nolla. Tämän takia vastusta kutsutaan alasvetovas- Esimerkkiprojekteja Arduinolla on rakennettu monia erilaisia pörrääviä, liikkuvia, lentäviä ja jopa äärimmäisen monimutkaisiakin laitteita: 3D-tulostin, jossa käytetään Arduinoa, MakerBot Thing-O-Matic: makerbot. com Noin sadan euron lämpökamera Arduinolla toteutettuna: hackaday. com/2011/03/09/arduino-thermo-cam Arduino-pohjainen baarimikko The Inebriator: www.theinebriator.com Quadkopterin autopilotti Arducopter: code.google.com/p/arducopter Arduinoa hyödyntävä avoin dna-analysaattori OpenPCR: openpcr.org Led-kuutio, jota ohjaa Arduino: hackaday.com/2011/03/18/512-led-cubeagain WWW.MIKROPC.NET MikroPC 10/2012 33

Arduino Rakentelua varten on hyvä hankkia valikoima peruskomponentteja, johtoa ja koekytkentälevy prototyypin virittelyyn. Varsinaista vimpainta varten tarvitset myös jonkinlaisen piirilevyn, tinaa ja juottimen. tukseksi. Anodin vieressä on katodi, kytke se Arduinon maahan. Kameran kytkeminen ei ole sen vaikeampaa, ensin on vain kuorittava käytössä oleva kaapeli toisesta päästä ja testattava, mikä johdoista on maa. Johtoja on kolme, joista yksi on maa ja kaksi muuta ohjaavat tarkennusta ja laukaisinta. Tarkennuksen voi kytkeä yhteen laukaisinjohdon kanssa, sillä tarkennus tehdään täysin manuaalisesti. Testaaminen onnistuu laittamalla piuha kiinni kameraan ja yhdistämällä johtoja kameran ollessa manuaalitilassa. Tämä on itse asiassa hyvin mielenkiintoista, sillä kameraa voi ohjata pelkällä johdonpätkälläkin. Jos ei halua uhrata johdon toista päätä, on ostettava stereojakki, johon voi kolvata esimerkiksi hyppylangat kiinni. Sen jälkeen johdon toisen stereoplugipään voi työntää jakkiin toisen mennessä kameraan. Kalliimmissa kameroissa käytetään joskus valmistajien omia erikoisliittimiä, mutta ne toimivat aivan samalla tavalla kuin halvempien mallien vastaavat. Maan voi kytkeä kaukaisimpaan kulmaan anodiin nähden ja laukaisimen sekä tarkennuksen maan vieressä olevaan jalkaan. Näiden järjestyksellä ei ole väliä, koska olemme luomassa pelkkää kytkintä. Kunhan käyttää kyseisiä jalkoja eikä sotke jännitettä missään vaiheessa kamerasta tuleviin johtoihin, kaikki on kunnossa ohjelmaosuutta varten. Ohjelmointi Ajastimen fyysisen osuuden rakentaminen ei ole ollenkaan vaikeata, mutta koodipuoli vaatii hiukan perehtymistä. Ohjelma koostuu muutamasta ehtolauseesta ja ikuisesti pyörivästä silmukasta. Ohjelman lähdekoodi on ladattavissa MikroPC.netistä: mpc.fi/71 Aluksi määritetään pinni, jota käytetään ohjaukseen. Optoerotin on kytketty pinniin 13, joten ohjelmassa määritetään #define:llä arvo, joka sijoitetaan koodin kääntövaiheessa kaikkiin niihin paikkoihin, joissa sitä tarvitaan. Lisäksi tarvitaan muutamia apumuuttujia ehtolauseita varten, jotta tiedetään, mikä vaihe milloinkin on kesken. Aikamuuttujaan tallennetaan aina kunkin intervallin aloitusajankohta. Intervalli- ja valotusmuuttujiin määritetään halutut ajat millisekunteina (1/1000 s), koska käytössä on Arduinon kirjastoissa oleva valmis millis()-funktio. Kyseinen funktio juoksee ajastimen tavoin millisekunnin tarkkuudella aina siitä hetkestä eteenpäin, kun sitä kutsutaan ohjelmassa ensimmäisen kerran. Arduinolla ohjelmointi muistuttaa hyvin paljon c++:aa. Suurimmat erot löytyvät ohjelmien rakenteesta: ne koostuvat setup()- ja loop()-rutiinista. Ensimmäiseen määritetään kaikki alustusarvot, kuten pinnien tilat. Setup()-rutiini ajetaan vain kerran; aina, kun Arduino käynnistyy. Loop()-rutiinia ajetaan uudestaan ja uudestaan ympäri loputtomasti, eli kaikki toiminnallisuus on sen sisällä. Setup():ssa avataan myös sarjaportti bugien etsimistä varten. Ohjelma tulostaa sarjaporttimonitoriin jokaisen vaiheen kohdalla sen, mitä tapahtuu ja mihin aikaan. Tämä selventää huomattavasti ohjelman toimintaa. Sarjaporttimonitori avautuu valikosta Tools > Serial Monitor, ja se toimii vain Arduinon ollessa kytkettynä usb-liitännällä tietokoneeseen. Valitse tiedonsiirtonopeudeksi (baud rate) monitorin vetovalikosta arvo 9600. Lopullisesta ohjelmasta kannattaa poistaa debuggaukseen käytetyt rivit, sillä ne vievät turhaan tilaa ja tehoa Arduinosta. Valotuksen ohjausta Ensimmäinen ehtolause tarkistaa, voiko intervallin ja valotuksen aloittaa. Jos voi, asetetaan kaikki tarvittavat arvot muuttujiin ja pinni 13 päälle eli sen looginen tila on ykkönen (kameran suljin avautuu). Seuraavan sekunnin aikana ei tapahdu yhtään mitään, ohjelma juoksee vain samaa silmukkaa ympäri, koska minkään ehtolauseen ehdot eivät toteudu. Seuraava tapahtuma on tasan sekunnin kohdalla, jolloin valotus lopetetaan toisen ehtolauseen ehtojen täyttyessä. Pinni 13 asetetaan pois päältä eli sen looginen tila on nolla (kameran suljin sulkeutuu). Tämän jälkeen on taas sekunti tyhjää, koska uutta intervallia ei voida vielä aloittaa. Intervalli aloitetaan vasta, kun kolmannen ehtolauseen ehdot täyttyvät. Tämä tapahtuu toisen sekunnin kohdalla, jolloin uuden intervallin aloituksen kieltävä muuttuja (voiko_valottaa) asetetaan taas tilaan (true), jossa ensimmäinen ehtolause voi aloittaa jälleen uuden intervallin ja valotuksen. Ohjelman voi todeta toimivan ilman kummempia kikkailujakin, sillä Arduinon pinni 13 on kytketty levyllä olevaan valmiiseen lediin. Se syttyy aina sekunniksi tai muuksi määritellyksi ajaksi, kun ohjelmaa ajetaan. Jatkokehitysmahdollisuuksia Ohjelma on karkea runko intervalliajastimelle. Käytettävyyden ja mukavuuden kannalta koodia kannattaa laajentaa siten, että lisää sinne aloitus- ja lopetusominaisuudet. Se vaatii toki myös fyysisten nappien lisäämistä ja mahdollisesti jopa näyttöä, jos haluaa kunnolla toiminnallisuutta. Koodin voi myös muokata toimimaan ilman täysin manuaalista tilaa, kuten aukon tai valotusajan esivalintatilassa. Arduinossa on myös sisäänrakennettu delay()-komento, jota käyttämällä ohjelmasta olisi saanut selkeämmän mutta huomattavasti hankalammin laajennettavan. Kyseinen komento pysäyttää koko ohjelman suorituksen, kun taas millisekuntilaskurilla ohjatut ehtolauseet eivät vaikuta ohjelman etenemiseen, vaan taustalla voidaan suorittaa muutakin. Nukkumiskomennon tapauksessa ei siis voi suorittaa muuta koodia silloin, kun Arduino nukkuu. 34 MikroPC 10/2012 WWW.MIKROPC.NET

Intervalliajastimen lähdekoodi // pinni, joka menee optoerottimelle bool voiko_valottaa = true; // boolean-muuttuja kertoo, // onko intervalliaika kulunut vai ei int intervalli = 2000; // aika kuvien ottamisen välillä, millisekunteja // valotusaika, millisekunteja int tila = LOW; // tilamuuttuja kertoo pinnin senhetkisen // tilan (HIGH tai LOW) unsigned long aika = 0; // muuttuja ajastimelle, unsigned tarkoittaa // positiivisia kokonaislukuja // asetetaan tarvittavat alustustiedot Mistä saa ja mitä maksaa? ARDUINO UNO maksaa noin 23 30 euroa kaupasta riippuen. Eri versiot Arduinosta vaihtelevat hinnaltaan, joten versiosta riippuen hintahaarukka asettuu noin 19 50 euron välille. Arduinon avoimen luonteen takia siitä on olemassa monenlaisia muitakin kolmannen osapuolen kehittämiä versioita, jotka saattavat olla halvempia tai kalliimpia. Arduinoa myyvät Suomessa useat eri verkkokaupat. Koska kaikki elektroniikan komponentit kulkevat Arduinon kanssa käsi kädessä, myös useilla komponenttiliikkeillä on Arduino valikoimissaan. Suomalaisia verkkokauppoja www.partco.fi paeae.com store.mansteri.com www.robomaa.com Elektroniikan komponentit www.vekoy.com www.spelektroniikka.fi www.bebek.fi Ulkomaisia www.sparkfun.com www.adafruit.com www.seeedstudio.com fi.farnell.com www.dealextreme.com void setup() { // asetetaan tila ulostuloksi Serial.begin(9600); // avataan sarjaportti debuggausta varten // pääohjelma, nimensä mukaisesti pyörii ikuista silmukkaa // ehtolausekkeet toteutetaan, mikäli niiden ehdot täyttyvät silmukan pyöriessä void loop() { // jos muuttuja voiko_valottaa kertoo intervalliajan täyttyneen, // voidaan valottaa -> avaa siis kameran sulkimen if (voiko_valottaa == true) { // tämä asettaa pinnin tilan päälle tila = HIGH; // muuttuja kertoo pinnin tilan aika = millis(); // tallennetaan ajastimen aika uuteen muuttujaan voiko_valottaa = false; // muuttuja kertoo nyt, että uutta valotusta ei // voida aloittaa ennen kuin nykyinen intervalli // on päättynyt tulostaa infoa sarjamonitoriin Serial.println(aika); // tämä lopettaa kameran valotuksen eli sulkee kameran sulkimen // jolloin myös toisen ehdon täyttyessä lopetetaan valotus else if ( millis() - aika >= valotus && tila == HIGH) { // asetetaan pinni pois päältä, // eli kamera lopettaa valotuksen tila = LOW; // asetaan myös tila vastaavaksi Serial.println( Lopetetaan valotus. ); Serial.println(millis()); // asettaa intervallin tilan, jos 2000 ms kulunut -> voidaan aloittaa uusi valotus else if ( millis() - aika >= intervalli) { voiko_valottaa = true; // kertoo, että uusi valotus voidaan aloittaa Serial.println( Intervallin loppu. ); Serial.println(millis()); Serial.println(); Lataa koodi netistä: mpc.fi/71 WWW.MIKROPC.NET MikroPC 10/2012 35