Darkmeter

Tu bude popísaný kompletný postup merania minima a maxima pomocou fotorezistora a deličky napätia. Údaju budú ukladané do EEPROM v Arduine. Na druhý deň budú vytiahnuté a prevedené do podoby grafu. Výsledok poslúži na navrhnutie hranice medzi svetlom a tmou, kde bude Arduino v kuchyni samé zapínať a vypínať LED osvetlenie.

Čo sa snažíme dosiahnuť

Zmyslom tohoto merania je získať hodnotu, pri ktorej je treba zapínať LED osvetlenie v našej kuchyni. Ako jednoduchý rozoznávač toho, či je už dostatočná tma poslúži delička napätia, ktorá je vytvorená z fotorezistora a rezistora. Na hodnotách oboch rezistorov v tomto prípade až tak nezáleží, pretože potrebuje akurát určiť hranicu, kedy je podľa nás tma. Nemeriame presnú hodnotu osvetlenia, ktorú by bolo potrebné ďalej nejako spracovať.
Súčasne tento projekt poslúži na otestovanie práce s internou EEPROM, ktorej má Arduino UNO 1 kB. Do nej si budeme zapisovať namerané hodnoty a neskôr si ich z Arduina vytiahneme a spracujeme do podoby grafu.

Zaznamenávanie údajov

Keďže Arduino UNO má k dispozícií 1 kB internej EEPROM, rozhodol som sa údaje zaznamenať tam. Meriam počas 10 minút minimum a maximou zo senzora a potom výsledok uložím. Následne sa začína ďalšia desaťminútovka. Údaje sú zaznamenané do štruktúry.

struct MinMax
{
int minimum;
int maximum;
};
Táto štruktúra zaberá 4 bajty, takže máme teoreticky k dispozícií 1024/4=256 záznamov. Ak je jeden záznam na 10 minút, môžeme zaznamenať 256*10=2560 minút, čo je 42 hodín. Ja som meral len 24 hodín, takže miesta v pamäti bolo dostatok.

O lepšom spôsobe ukladania údajov do internej EEPROM si môžete prečítať v článku s technikami ukladania údajov do EEPROM. Zdrojové kódy na tejto stránke sa toho úplne nedržia, pretože tu sa snažíme uložiť celé pole identických údajov a postupne prepíšeme celú EEPROM.

Stiahnutie a spracovanie údajov

Na priloženom obrázku je výstup z programu eeprom_reader.ino. Zobrazuje poradové číslo, minimum a maximum, navzájom oddelené čiarkami. Ak si tieto údaje skopírujeme do súboru s príponou CSV, môžeme ich vtiahnuť do Excelu alebo iného tabuľkového programu, ktorý z tých údajov vytvorí graf.
Na nasledovnom obrázku je takýto graf vytvorený. Začal som merať večer okolo 21:30 a skončil som na druhý deň približne v tom istom čase. Na grafe je pekne vidno, kedy som zapaľoval v kuchyni veľké stropné svetlo (veľké hodnoty okolo 200), ktoré bolo priamo nad Arduinom so senzorom, kedy som zapaľoval LED osvetlenie (malé hodnoty okolo 30), ktoré nesvietilo priamo na senzor a kedy bol deň a kedy bola noc. Dokonca tam aj vidno, ako cez deň kolísala úroveň osvetlenia, čo spôsobovali asi prechádzajúce mraky popred okno.
V programe nie sú použité žiadne špeciálne funkcie. Iba som podľa postupu na stránke http://playground.arduino.cc/Code/EEPROMWriteAnything vytvoril hlavičkový súbor EEPROMAnything.h a uložil ho do adresára eeprom. Potom bolo pomocou šablónovej funkcie jednoduché čítať z EEPROM ľubovoľné údaje. Je potešujúce, že aj taký miniatúrny kompilátor, ako používa Arduino, podporuje šablóny.
ċ
Robo Ulbricht,
5. 12. 2013, 12:00
ċ
eeprom_reader.ino
(0k)
Robo Ulbricht,
5. 12. 2013, 12:00
ċ
lcd_darkmeter.ino
(2k)
Robo Ulbricht,
5. 12. 2013, 12:00
Comments