A hőmérsékleti napló programozása az Arduino Uno készülékkel - 2. rész
Az utolsó Arduino útmutatóban a hőmérséklet és a páratartalom kijelzőjét építettük. Ez most kibővült az adatok SD-kártyán történő tárolásával; az egyes mérésekhez a megfelelő időt is rögzítik. Az új kiegészítések az SD-kártya és a valós idejű óra pajzsai. A kijelző a Grove-Shielden maradhat. Ha kijelző nélkül szeretné működtetni az adatgyűjtőt, egyszerűen húzza ki a hálózati csatlakozót.

Alkalmas: Fejlett
A szükséges idő: kb. 1,5 óra
Költségvetés: körülbelül 30 euró
Amire szükséged van: 1x Arduino - Grove valós idejű óra - RTC, 1x Arduino Shield - SD kártya V4, 1x akkumulátor a Grove valós idejű órához, 1x SD kártya
Bővíthető:-
Ami szükséges: Internet kapcsolat, számítógép böngészővel, tápegység az Arduino számára
Az SD pajzs
Leírás és telepítés
Az adatgyűjtő egy SD, SDHC vagy MicroSD kártyára menti adatait (majd adapterrel). Ehhez van egy pajzs, amely az Arduino és az alap pajzs közé van dugva - az alap pajzs fent marad a csatlakozó miatt.
Az SD pajzshoz szükséges könyvtárak már szerepelnek az Arduino Studio-ban, ezért nem kell külön telepíteni őket. A dokumentáció megtalálható az Arduino referenciában:
Adatok írása - szia világ
Az első adatokat a kártyára írjuk a következő programmal:
Az első két változó meghatározása: A SELECTED_CHIP határozza meg, hogy melyik hardvert használják az SD-pajzshoz. Az érték az SD pajzs gyártójától szerezhető be. A változószámot csak a folyamatos írási folyamatok számlálására használják, hogy a számot a kártyára írják.
A setup () alkalmazásban először soros kapcsolat jön létre a hibakereséshez, majd az SD-kártyához. Az SD.begin () metódus megadja, hogy a kapcsolat sikeresen létrejöhet-e.
A vonal a ciklusban () épül fel, majd az writeToSD () segítségével beíródik az SD kártyára. Ehhez a String osztályt használjuk, amely rugalmas húrokkal történő munkát tesz lehetővé. A + operátor két karakterláncot kapcsol össze, így a változó száma először String (count) karakterlánccá alakul. A számlálás értéke eggyel nő, és végül egy másodpercet várt.
Az írás a writeToSD () fájlban történik. A fájl először ott nyílik meg vagy jön létre az SD.open () segítségével, ha még nem létezik (fontos: a fájlnév nem lehet hosszabb 8 karakternél). A FILE_WRITE azt jelzi, hogy a fájlt írható módon kell megnyitni.
Ha a nyitás sikeres volt, akkor a fájl a File osztály egy objektumát tartalmazza, amellyel a ciklusba () írt sort írjuk. Ezután ismét bezárjuk a fájlt. Ez biztosítja, hogy a fájl ne sérüljön meg, ha a kártyát az írás közben eltávolítják, vagy ha az áramellátás megszűnik. A hibakereséshez a sor értékét is kiadjuk a soros interfészen.
Ha a megnyitás sikertelen volt (például azért, mert hiányzik az SD-kártya), akkor a fájl üres, és hibaüzenetet ad ki a soros interfész.
A valós idejű óra
Leírás és telepítés
A PC-vel ellentétben az Arduino nem rendelkezik beépített órával, mert sok alkalmazásra nincs rá szükség. Ezért a Grove RTC modult használjuk az adatrögzítőhöz, amely egy DS1307 órajel chipet tartalmaz.
A valós idejű órához további feszültségforrásra van szükség egy 3 V-os gombelem (CR1225) formájában, hogy a beállított idő megmaradjon akkor is, ha maga az Arduino nincs áram alatt. Ez fordítva azt jelenti, hogy a valós idejű óra akkumulátor nélkül nem működik megfelelően - anélkül sem lehet, ha az Arduino tartósan csatlakozik egy áramforráshoz. A kommunikáció az I²C buszrendszeren keresztül zajlik, bármilyen I²C kapcsolat használható.
A valós idejű órához könyvtárat kell telepíteni, mint a kijelzőn:
Töltse le a könyvtárakat, majd telepítse őket a „Vázlat” → „Könyvtár beillesztése” → „.ZIP könyvtárak hozzáadása…” menüben.
Az összes könyvtár esetében találhatók mintaprogramok a „Fájl” → „Példák” részben.
Állítsa be és olvassa el az időt
Az idő beállításához a saját vázlatunkat fogjuk használni a végső program setup () metódusa helyett. Ellenkező esetben az Arduino minden indításakor az idő visszaáll:
A setup () -ben először megnyitjuk a kapcsolatot a soros porttal, hogy az időt PC-re küldjük ellenőrzésre. Ezután az órához való csatlakozás megkezdődik a clock.begin () paranccsal, előkészítik a dátumot, az időt és a hét napját, végül elküldik a valós idejű órának a clock.setTime () elemre (előzőleg cserélje ki az értékeket az aktuális időre;-)).
A ciklusban () az idő először kimenet, majd egy másodpercig várni kell. Az Arduino Studio kimenete megjelenik az „Eszközök” → „Soros monitor” alatt.
Fontos: A program elküldése az Arduinóba néhány másodpercet vesz igénybe, ezért nehéz pontosan beállítani az időt. Ez az alkalmazás nem jelent problémát - ha néhány percenként mért értéket rögzítenek a mért értékek napközbeni lefutásának rögzítésére, akkor néhány másodperces eltérés nem tesz különbséget.
A végleges adatgyűjtő program
Miután egyszer teszteltük az összes alkatrészt, kibővíthetjük a programot az utolsó oktatóanyagból:
A program újdonsága, hogy két különböző órajelű folyamat létezik. A kijelzőt másodpercenként többször frissíteni kell az aktuális kijelző és a sima színátmenetek érdekében. Azonban egy perc elegendő ahhoz, hogy a mért értékeket a kártyára írja. A késleltetéssel () való egyszerű szünetek ezért már nem lehetségesek.
A megoldás: A millis () függvény segítségével lekérdezhetjük az Arduino kezdete óta eltelt milliszekundumokat. A lastDisplayUpdate és a lastWrite programban a kijelző utolsó frissítésének vagy az SD-kártyára történő írásának a mentésekor. Minden egyes időkeret () futtatásakor összehasonlítást végeznek azzal kapcsolatban, hogy ezek az értékek és a millis () közötti különbség nagyobb-e, mint a DISPLAY_UPDATE_INTERVAL vagy a WRITE_INTERVAL értéke, és csak ezután hajtják végre a megfelelő műveleteket. A lastWrite és lastDisplayUpdate változókat a megfelelő intervallum hosszával inicializáljuk, hogy a két művelet a program indulásakor azonnal megtörténjen.
Végül a ciklusban () az értékeket először lekérjük az érzékelőből és ellenőrizzük. Ha problémák merültek fel az értékek összegyűjtésével, akkor hiba lép fel és a ciklus () végrehajtása ezen a ponton befejeződik, és az elejétől kezdődően újrakezdődik (vagyis az értékeket újra lekérjük az érzékelőtől).
Ezután ellenőrzi, hogy ideje-e újra frissíteni a kijelzőt. Ez akkor áll fenn, ha az aktuális idő és a lastDisplayUpdate közötti különbség nagyobb, mint a DISPLAY_UPDATE_INTERVAL. Ezután ismét meghatározzuk a színt, és az adatokat elküldjük a kijelzőre. Az olvashatóság érdekében most megvan az updateDisplay () metódus. Ezután a lastDisplayUpdate beállítása az aktuális idő.
Ugyanez történik az adatok SD-kártyára történő írásakor. Ha az utolsó írási folyamat ideje hosszabb, mint a WRITE_INTERVAL, az aktuális időt a valós idejű óra határozza meg, az adatokat az SD-kártyára írja, és a lastWrite az aktuális időre állítja be.
Az időt a getTime () módszer határozza meg, amely lekérdezi az időt a valós idejű óráról, és létrehoz egy stringet a dátummal és az idővel. A + = operátor a jobb oldali karakterlánc értékét hozzáfűzi a balhoz.
az adatok értékelése
Az adatokat a datalog.csv nevű fájlba írják, és elemzés céljából importálhatják az Excelbe, a LibreOffice Calcba vagy a Google Spreadsheets-be.
Egyszerűen vegye ki az SD-kártyát az Arduino-ból, és olvassa fel a számítógépen.