Programovanie teplotného protokolu pomocou Arduino Uno - časť 2
V poslednom návode na Arduino sme postavili displej pre teplotu a vlhkosť. Teraz sa rozširuje o ukladanie údajov na SD kartu; pre každé meranie sa zaznamená aj príslušný časový okamih. Novinkou sú štít na SD kartu a hodiny v reálnom čase. Displej môže zostať na Grove-Shield. Ak chcete prevádzkovať záznamník dát bez displeja, môžete ho jednoducho odpojiť.

Vhodné pre: Pokročilé
Potrebný čas: asi 1,5 hodiny
Rozpočet: asi 30 eur
Čo potrebuješ: 1x Arduino - hodiny reálneho času Grove - RTC, 1x štít Arduino - karta SD V4, 1x batéria pre hodiny reálneho času Grove, 1x karta SD
Možno rozšíriť pomocou:-
Čo sa vyžaduje: Pripojenie na internet, počítač s prehliadačom, napájanie Arduina
Štít SD
Popis a inštalácia
Záznamník ukladá svoje údaje na štandardnú kartu SD, SDHC alebo MicroSD (potom s adaptérom). K tomu existuje štít, ktorý je zapojený medzi Arduino a základný štít - základný štít zostáva hore kvôli konektoru.
Knižnice potrebné pre štít SD sú už súčasťou Arduino Studio, takže sa nemusia inštalovať samostatne. Dokumentáciu nájdete v referencii Arduino:
Zápis údajov - ahoj svet
Prvé údaje na kartu zapíšeme nasledujúcim programom:
Definované sú prvé dve premenné: SELECTED_CHIP určuje, ktorý hardvér sa použije pre štít SD. Hodnotu je možné získať od výrobcu štítu SD. Premenný počet sa používa iba na počítanie procesov nepretržitého zápisu, aby sa číslo zapísalo na kartu.
V nastavení () sa najskôr vytvorí sériové pripojenie na ladenie, až potom sa pripojí na kartu SD. Metóda SD.begin () vracia, či bolo možné pripojenie nadviazať úspešne.
Linka sa vytvorí v loop () a potom sa zapíše na SD kartu pomocou writeToSD (). Používame na to triedu String, ktorá umožňuje flexibilnú prácu s reťazcami. Operátor + spojí dva reťazce, takže počet premenných sa najskôr prevedie na reťazec s reťazcom (počet). Hodnota počtu sa zvýši o jednu a nakoniec čaká jednu sekundu.
Zápis sa deje v writeToSD (). Súbor sa tam najskôr otvorí alebo vytvorí pomocou súboru SD.open (), ak ešte neexistuje (dôležité: názov súboru nesmie mať viac ako 8 znakov). FILE_WRITE označuje, že súbor by sa mal otvárať zapisovateľným spôsobom.
Ak bolo otvorenie úspešné, súbor obsahuje objekt triedy File, ktorým píšeme riadok zložený do loop (). Potom súbor opäť zatvoríme. Takto je zabezpečené, že sa súbor nepoškodí, ak dôjde k odstráneniu karty medzi zápismi alebo výpadku napájania. Pre ladenie tiež vypisujeme hodnotu riadku na sériové rozhranie.
Ak bolo otvorenie neúspešné (napríklad z dôvodu chýbajúcej SD karty), je súbor prázdny a na sériové rozhranie sa zobrazí chybové hlásenie.
Hodiny reálneho času
Popis a inštalácia
Na rozdiel od PC nemá Arduino zabudované hodiny, pretože nie je potrebné pre mnoho aplikácií. Pre záznamník dát preto používame modul Grove RTC, ktorý obsahuje hodinový čip DS1307.
Hodiny reálneho času si vyžadujú ďalší zdroj napätia vo forme 3V tlačidlovej bunky (CR1225), aby sa nastavený čas zachoval, aj keď samotné Arduino nemá napájanie. To naopak znamená, že hodiny v reálnom čase nepracujú správne bez batérie - takže sa bez nich nezaobídete, aj keď je Arduino trvale pripojené k zdroju napájania. Komunikácia prebieha prostredníctvom systému zbernice I²C, je možné použiť akékoľvek pripojenie I²C.
Pre hodiny reálneho času ako pre displej musí byť nainštalovaná knižnica:
Stiahnite si knižnice a potom ich nainštalujte pomocou ponuky „Skica“ → „Zahrnúť knižnicu“ → „Pridať knižnice .ZIP ...“.
Pre všetky knižnice existujú ukážkové programy v časti „Súbor“ → „Príklady“.
Nastaviť a prečítať čas
Na nastavenie času použijeme v konečnom programe namiesto metódy setup () náš vlastný náčrt. V opačnom prípade by sa čas resetoval pri každom spustení Arduina:
V nastavení () najskôr otvoríme pripojenie k sériovému portu, aby sme mohli poslať čas na kontrolu PC. Pripojenie k hodinám sa potom otvorí pomocou clock.begin (), pripraví sa dátum, čas a deň v týždni a nakoniec sa odošle do hodín v reálnom čase pomocou clock.setTime () (vopred nahraďte hodnoty aktuálnym časom;-)).
V cykle loop () je najskôr vygenerovaný čas a potom existuje čakacia doba jednej sekundy. V Arduino Studio sa výstup zobrazuje v časti „Nástroje“ → „Sériový monitor“.
Dôležité: Odoslanie programu do Arduina trvá niekoľko sekúnd, takže je ťažké presne nastaviť čas. Pre túto aplikáciu to nie je problém - ak sa nameraná hodnota zaznamenáva každých pár minút, aby sa zaznamenal priebeh nameraných hodnôt v priebehu dňa, potom odchýlka niekoľkých sekúnd nemá žiadny rozdiel.
Definitívny program dataloggerov
Keď raz otestujeme všetky časti, môžeme program rozšíriť z posledného tutoriálu:
Čo je nové v tomto programe, je to, že existujú dva procesy s rôznymi frekvenciami hodín. Displej by mal byť aktualizovaný niekoľkokrát za sekundu pre aktuálne zobrazenie a plynulé farebné prechody. Na zápis nameraných hodnôt na kartu však stačí každá minúta. Jednoduché pauzy s oneskorením () preto už nie sú možné.
Riešenie: Funkciu millis () je možné použiť na dopyt po milisekundách, ktoré uplynuli od spustenia Arduina. V parametroch lastDisplayUpdate a lastWrite sa posledná aktualizácia obrazovky alebo zápis do SD karty uloží. Pri každom spustení časovej slučky () sa vykoná porovnanie, či je rozdiel medzi týmito hodnotami a millis () väčší ako hodnoty DISPLAY_UPDATE_INTERVAL alebo WRITE_INTERVAL a až potom sa vykonajú príslušné akcie. Premenné lastWrite a lastDisplayUpdate sa inicializujú s dĺžkou príslušného intervalu, takže tieto dve akcie sa uskutočnia okamžite po spustení programu.
V loop () sú hodnoty nakoniec načítané zo senzora a skontrolované. Ak sa vyskytli problémy so zhromažďovaním hodnôt, zobrazí sa chyba a v tomto okamihu sa ukončí vykonanie cyklu () a začne sa znova od začiatku (t. J. Hodnoty sa načítajú znova zo senzora).
Potom skontroluje, či je čas znovu aktualizovať displej. To je prípad, ak je rozdiel medzi aktuálnym časom a parametrom lastDisplayUpdate väčší ako DISPLAY_UPDATE_INTERVAL. Potom sa opäť určí farba a údaje sa odošlú na displej. Kvôli čitateľnosti je teraz k dispozícii metóda updateDisplay (). Potom je lastDisplayUpdate nastavený na aktuálny čas.
To isté sa stane s zápisom údajov na SD kartu. Ak je čas posledného procesu zápisu dlhší ako WRITE_INTERVAL, aktuálny čas je určený hodinami reálneho času, dáta sa zapíšu na SD kartu a lastWrite sa nastaví na aktuálny čas.
Čas je určený metódou getTime (), ktorá zisťuje čas z hodín reálneho času a vytvára reťazec s dátumom a časom. Operátor + = pripojí hodnotu pravého reťazca k ľavému.
vyhodnotenie údajov
Údaje sa zapisujú do súboru s názvom datalog.csv a dajú sa na analýzu importovať do programov Excel, LibreOffice Calc alebo Google Spreadsheets.
Jednoducho vyberte SD kartu z Arduina a prečítajte si ju na počítači.