Arduino Nano 33 IoT -kehitysalustassa on sisäinen sensori, inertiaalimittayksikkö (IMU), joka on rakennettu LSM6DS3-piiristä. Tämä sensori sisältää sekä kiihdyttimen että gyroskoopin, ja se on kytketty Arduinoon I2C-väylän kautta. Tämän luvun aikana tutustumme siihen, kuinka pääsemme käsiksi IMU-sensoriin ja luemme sekä kiihdytintä että gyroskooppia. Tässä vaiheessa on myös hyödyllistä ymmärtää, kuinka käytämme Arduino-ohjelmointia sensoreiden tietojen lukemiseen ja visualisoimiseen sarjaportin kautta.
Arduino Nano 33 IoT:ssä oleva IMU-sensori on liitetty I2C-väylän kautta, mikä mahdollistaa tiedonsiirron mikro-ohjaimen ja ulkoisten komponenttien välillä. I2C-väylän avulla Arduino voi kommunikoida monien laitteiden kanssa samanaikaisesti, ja se on yksi keskeisistä välineistä, kun työskentelemme erilaisten antureiden kanssa. LSM6DS3-piiriin liittyviä tarkempia teknisiä tietoja voi lukea valmistajan datasheetistä, mutta tässä vaiheessa riittää, että ymmärrämme sen tarjoamat mahdollisuudet kiihdyttimen ja gyroskoopin osalta.
Ensimmäinen askel on IMU-sensorin käyttöönotto. Tätä varten meidän täytyy asentaa Arduino IDE:ssä käytettävä LSM6DS3-kirjasto. Kirjaston asennus tapahtuu avaamalla Arduino-ohjelmointiympäristön "Library Manager" ja hakemalla kirjastoa nimellä "arduino_lsm6ds3". Kun kirjastot on asennettu, voimme aloittaa sensorin käytön ohjelmoinnissa.
Kiihdyttimen käyttö
LSM6DS3-sensorissa oleva kiihdytin mittaa liikettä kolmessa akselissa (x, y, z) ja sen arvot vaihtelevat välillä -4 ja 4. Kiihdyttimen käyttöön tarvitaan LSM6DS3-kirjasto, ja sen avulla voimme lukea sensorin tuottamat arvot. Esimerkkinä seuraavassa ohjelmassa käytämme IMU.begin()-komentoa sensorin alustamiseen ja IMU.readAcceleration()-komentoa kiihdyttimen datan lukemiseen.
Ohjelma voi näyttää esimerkiksi tältä:
Tässä ohjelmassa aloitamme kiihdyttimen näytteenotolla, ja sitten jatkuvassa silmukassa luemme sensorin arvot. Tiedot tulostetaan sarjaporttiin. Kiihdytin mittaa laitteemme liikettä kolmiulotteisessa tilassa, joten voidaan helposti havaita, kuinka laite liikkuu ja kuinka nopeasti se kiihdyttää tai hidastaa liikettään.
Gyroskoopin käyttö
Gyroskooppi puolestaan mittaa laitteen kulmanopeutta eli sitä, kuinka nopeasti laite pyörii omassa akselissaan. Tämä sensori on erityisen hyödyllinen, kun haluamme mitata laitteiden orientaatiota, kuten roboteissa tai erilaisissa kulkuneuvoissa. Arduino Nano 33 IoT:n gyroskooppi on rakennettu samaan LSM6DS3-piiriin, ja sen käyttö on samanlaista kuin kiihdyttimen kanssa.
Seuraava ohjelma demonstroi, kuinka lukea gyroskoopin dataa:
Tässä ohjelmassa luemme gyroskoopin tuottamat arvot ja tulostamme ne sarjaporttiin. Gyroskoopin arvot kuvaavat laitteen pyörimisnopeuksia kolmessa akselissa: x, y ja z. Arvot voivat olla sekä positiivisia että negatiivisia riippuen siitä, pyöriikö laite myötäpäivään vai vastapäivään.
Yhteenveto
Arduino Nano 33 IoT:n sisäinen IMU-sensori tarjoaa monipuoliset mahdollisuudet kiihdyttimen ja gyroskoopin lukemiseen. Kirjastojen käyttö yksinkertaistaa ohjelmointia ja mahdollistaa sensoridatan suoran käsittelyn. Kiihdytin mittaa liikettä kolmiulotteisessa avaruudessa, ja gyroskooppi puolestaan pyörimisnopeutta. Näiden sensoreiden avulla voidaan toteuttaa monenlaisia sovelluksia, kuten liiketunnistusta, kulkusuunnan mittausta ja stabilointijärjestelmiä.
On kuitenkin tärkeää muistaa, että sensorien tarkkuus ja luotettavuus voivat vaihdella ympäristöolosuhteista riippuen. Esimerkiksi lämpötila ja laitteiston asento voivat vaikuttaa mittaustuloksiin, joten on suositeltavaa kalibroida sensorit ennen käyttöönottoa. Lisäksi, vaikka ohjelmointi onkin suhteellisen yksinkertaista, on hyvä ymmärtää myös I2C-väylän ja sen rajojen toiminta, sillä useamman laitteen käyttäminen samassa väylässä voi aiheuttaa häiriöitä, jos osoitteet eivät ole oikein määritelty.
Mikä on ohjelmoinnin peruslogiikka Arduino Nano 33 IoT -levyllä?
Arduino Nano 33 IoT -kehitysalustalla ohjelmointi perustuu yksinkertaisiin, mutta tehokkaisiin rakenteisiin, joiden avulla voidaan suorittaa erilaisia laskentatehtäviä ja syöttöjen käsittelyä. Yksi yleisimmistä ja yksinkertaisimmista esimerkeistä on peruslaskutoimitusten suorittaminen ja tulosten näyttäminen sarjaportin kautta.
Kun luodaan ohjelma Arduino Nano 33 IoT:lle, käynnistämme sen aluksi kirjoittamalla koodin, joka määrittelee muuttujat ja suorittaa matemaattisia operaatioita. Esimerkiksi seuraava koodinpätkä laskee kahden muuttujan summan ja tulon:
Tässä ohjelmassa määrittelemme kaksi muuttujaa, a ja b, ja laskemme niiden summan sekä tulon. Tulokset tulostetaan sarjaporttiin käyttämällä Serial.print() ja Serial.println() -komentoja, jotka näyttävät viestejä käyttäjälle. Kun ohjelma on ladattu Arduinoon, sarjaporttiin tulostetaan seuraavat arvot:
Ohjelman tulos voidaan tarkistaa suoraan Arduino IDE:stä käyttämällä "Serial Monitor" -työkalua, joka näyttää sarjaportista tulevat tiedot. Tässä tapauksessa näkyvät laskutoimitusten tulokset. Jos viestejä ei näy, voi olla tarpeen nollata Arduino, jolloin ohjelman suoritus käynnistyy uudelleen.
Arduinon perusohjelmointi perustuu usein juuri setup()- ja loop()-funktioiden käyttöön. setup()-funktiossa määritellään aloitusasetukset, kuten muuttujien arvot ja sarjaportin asetukset, kun taas loop()-funktiossa toistetaan koodia jatkuvasti, jos sitä on.
Eri operaattorit ja niiden käyttö
Ohjelmoinnissa käytetään laajasti erilaisia operaattoreita matemaattisten laskutoimitusten ja vertailujen suorittamiseen. Esimerkiksi, +, -, *, ja / ovat aritmeettisia operaattoreita, joita käytämme laskutoimituksissa, kuten summassa tai tulossa. Tässä esimerkissä laskimme myös jäännöksen %-operaattorilla, mutta sitä ei tässä koodissa käytetty.
Boolean-operaattorit, kuten && (logiikka-AND), || (logiikka-OR) ja ! (logiikka-NOT), mahdollistavat ehtojen testaamisen ja päätöksenteon ohjelmassa. Näiden avulla voidaan ohjata ohjelman kulkua ja suorittaa tiettyjä toimintoja vain, jos tiettyjen ehtojen arvo on tosi.
Ehtolauseet ja ohjelman logiikka
Ehtolauseet mahdollistavat ohjelman toiminnan säätämisen dynaamisesti. Ne voivat tehdä päätöksiä eri tilanteiden perusteella, kuten seuraavassa esimerkissä, jossa tarkistetaan, onko satunnaisesti generoitu num_a suurempi kuin toinen satunnaisesti luotu num_b. Tässä ohjelmassa käytetään if-lausetta:
Tässä ohjelmassa arvot num_a ja num_b generoidaan satunnaisesti, ja niiden arvot tulostetaan sarjaporttiin. Sen jälkeen ehtolausetta käyttämällä tarkistetaan, onko num_a suurempi kuin num_b, ja tulostetaan tulos.
Ehtolauseiden rinnalla voidaan käyttää myös switch-lauseita, jotka tarjoavat tehokkaamman tavan valita vaihtoehtoja useista mahdollisista arvoista. Esimerkiksi seuraavassa esimerkissä arvioidaan satunnaista arvoa num_a:
Tässä ohjelmassa luodaan satunnainen arvo num_a, joka voi olla yksi arvo välillä 0–4. switch-lauseessa tarkastellaan tätä arvoa ja tulostetaan sen mukainen viesti.
Tärkeää ymmärtää
Kun ohjelmoimme Arduino-levyllä, on tärkeää ymmärtää ohjelman rakenteet ja niiden vaikutus laitteiston toimintaan. Erityisesti se, että ohjelma suoritetaan setup()-funktiossa vain kerran, kun taas loop()-funktio pyörii jatkuvasti ja mahdollistaa toistuvat toiminnot. Tämä antaa mahdollisuuden reagoida ympäristön muutoksiin dynaamisesti.
Yksinkertaisimmat ohjelmat, kuten aritmeettisten operaatioiden suorittaminen ja muuttujien vertailu, voivat vaikuttaa yksinkertaisilta, mutta niiden ymmärtäminen on olennaista myöhempien, monimutkaisempien ohjelmien rakentamisessa. Lisäksi on tärkeää, että ohjelmoija ymmärtää, kuinka sarjaportti ja sen käyttö liittyvät Arduino-levyn ja ulkoisten laitteiden välisten tietojen siirtoon. Tietoisuus siitä, kuinka ohjelma ja laitteet kommunikoivat, on keskeinen taito Arduino-kehityksessä.
Miten hallita värejä ja kommunikoida laitteiden välillä Arduino Nano 33 IoT:lla?
Arduino Nano 33 IoT on monipuolinen laite, jonka avulla voidaan toteuttaa monenlaisia projekteja, joissa yhdistetään laitteistokomponentteja ja ohjelmointia. Esimerkiksi RGB LEDin ohjaaminen eri väreillä ja laitteiden välinen kommunikaatio voivat olla keskeisiä osia projekteissa. Tässä käsitellään yksityiskohtaisesti, kuinka käyttää Arduino Nano 33 IoT:ta värejä tuottavan RGB LEDin ohjaamiseen ja kuinka hyödyntää yleisiä kommunikointiprotokollia, kuten SPI ja I2C, laitteiden välisessä tiedonsiirrossa.
RGB LEDin ohjaaminen Arduino 33 IoT:lla perustuu yksinkertaiseen ohjelmointitekniikkaan, jossa määritetään kolme perusväriä: punainen, vihreä ja sininen. Värit muodostetaan muuttamalla näiden kolmen värin kirkkausasteita 0–255 välillä. Tässä esimerkissä käytetään kolmea digitaalista pinniä, jotka on määritetty PWM-pinneiksi (pulse-width modulation), jotta saadaan aikaiseksi sujuvaa väreihin perustuvaa valaistusta. Tässä ohjelmassa LED syttyy eri väreillä sekunnin välein ja ohjelma tulostaa värit myös sarjamonitoriin, jotta käyttäjä voi seurata ohjelman tilaa.
Kun ohjelma on ladattu Arduinoon ja sen suoritus alkaa, se vaihtaa värejä seuraavasti: punainen, vihreä, sininen, keltainen, violetti ja akvaväri. Jokaisen värin aikana ohjelma tulostaa kyseisen värin nimen sarjamonitoriin. Tämä perusohjelma on hyvä alku väriympäristön hallintaan, mutta sen pohjalta voi luoda monimutkaisempia visuaalisia efektejä ja interaktiivisia sovelluksia. Värien sekoittaminen mahdollistaa lähes rajattoman valikoiman sävyjä, mikä tuo lisää luonteenomaisuutta ja muokattavuutta projekteihin.
Seuraavaksi tutustumme siihen, kuinka Arduino Nano 33 IoT voi kommunikoida muiden laitteiden kanssa. Sarjaliikenne (Serial Peripheral Interface, SPI) on synkroninen tiedonsiirtoprotokolla, joka vaatii neljä liitäntää: MOSI (Master Out Slave In), MISO (Master In Slave Out), SCK (Serial Clock) ja SS (Slave Select). Arduino Nano 33 IoT:lla on SPI-liitäntä, ja sen avulla voidaan lähettää ja vastaanottaa tietoa muiden SPI-yhteensopivien laitteiden kanssa. Esimerkiksi lämpötila-antureiden, näytöille ja muille laitteille voidaan helposti lähettää ja vastaanottaa dataa.
SPI-laitteen yhteydessä voidaan käyttää SPI.transfer()-funktiota, joka mahdollistaa datan siirron yhdensuuntaisesti. Yksinkertainen esimerkki, jossa Arduino lähettää satunnaista dataa ja vastaanottaa vastauksen, voisi näyttää tältä:
Tässä ohjelmassa Arduino lähettää satunnaisia lukuja toistuvasti SPI-liitännän kautta ja tulostaa lähettämänsä sekä vastaanottamansa arvot sarjamonitoriin. Tällaiset ohjelmat voivat olla perusta monimutkaisempien laitteiden ja antureiden hallintaan, ja ne tarjoavat erinomaisen alustan kommunikointiin erilaisten laitteiden välillä.
I2C-protokolla (Inter-Integrated Circuit) on toinen suosittu tiedonsiirtoprotokolla, jota käytetään erityisesti silloin, kun useat laitteet, kuten anturit, tarvitsevat yhdistää vain kahdella johdolla. I2C mahdollistaa useiden laitteiden kommunikoinnin samassa linjassa, ja se käyttää kahta johtoa: SDA (serial data) ja SCL (serial clock). Arduino Nano 33 IoT:lla I2C-liitännät löytyvät pinneistä A4 (SDA) ja A5 (SCL). I2C-liitännän käyttö on erityisen kätevää, kun tarvitaan laajennettavuutta ja useita laitteita, sillä jokaisella laitteella on oma yksilöllinen I2C-osoite.
Esimerkiksi PCF8591 AD/DA -muunninmoduuli voi olla käytössä I2C:n avulla. Tämä moduuli käyttää I2C-osoitetta 0x48, ja se voi lukea arvoja analogisista antureista, kuten termistorista, fotovastuksesta ja potentiometristä. Liittäminen Arduinoon on yksinkertaista, ja se mahdollistaa arvojen lukemisen ja käsittelyn helposti.
I2C ja SPI tarjoavat erilaisia etuja ja haasteita, ja niiden käyttö riippuu projektin vaatimuksista. I2C on monesti parempi silloin, kun on useita laitteita, mutta SPI voi olla nopeampi ja luotettavampi, kun tarvitaan suurempaa tiedonsiirtonopeutta.
Arduino Nano 33 IoT tarjoaa erinomaisen alustan eri laitteiden välisten kommunikointien toteuttamiseen, ja ymmärrys SPI- ja I2C-protokollista on välttämätöntä, jotta voidaan hyödyntää laitteiston koko potentiaalia. On tärkeää huomata, että molemmat protokollat tarjoavat erityyppisiä ratkaisuja laitteiden väliseen yhteyteen, ja oikean valinta riippuu projektin erityispiirteistä ja vaatimuksista. I2C:n yksinkertaisuus ja kaapelointiväheneminen tekevät siitä houkuttelevan vaihtoehdon pienissä projekteissa, kun taas SPI tarjoaa paremman suorituskyvyn laajempaan tiedonsiirtoon.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский