středa 16. ledna 2013

Hrátky s OLED displejem, vlhkostním čidlem a dalšími senzory

Na Ebay jsem asi za 6 USD koupil 0.96" 128x64px monochromatický OLED displej s řadičem SSD1306.
Je rozdělen na dvě části, první část je žlutý řádek 128x16px, poté následuje mezera, a zbytek pixelů je modrých.
OLED displej připájený na desku
Prvně jsem k vykreslování fontu a grafiky začal psát vlastní knihovnu (rychlost v řádu stovek FPS), bohužel asi v polovině psaní mě to omrzelo (neustále vymýšlet algoritmy pro kreslení kružnic, výplní apod. a hlavně jejich vektorové optimalizace), takže jsem na netu objevil open source knihovnu u8glib.

Tato knihovna je super v tom, že má kupu vlastních fontů, které jsem původně chtěl implementovat do vlastní knihovny. Ale zpětné inženýrství by mně zabralo příliš mnoho času.

Problém této knihovny je ten, že používá renderovací algoritmus pro snížení velikosti alokované RAM paměti (v tomto případě pouze 256B). Bohužel renderovací čas je asi 488 ms při použití 16 MHZ krystalu u AVR (odpovídá 16 MIPS). Ve skutečnosti tedy lze dosáhnout asi 2 FPS, což je naprosté plýtvání potenciálem OLED displeje!
Atmega32 nataktovaná na 32 MHz (už moc nestíhá FLASH paměť)
Rozhodl jsem se tedy přepsat tuto knihovnu a to tak, že jsem místo renderovacího algoritmu implementoval přímo celý obrazový buffer. Díky tomu není třeba přepočítávat kolize vektorů apod, a prostě se jednoduše kreslí do paměti. Řešení trochu sežere paměť (je potřeba 1kB RAM), což je dnes v každém MCU.
Když zvážím, že větší fonty berou klidně i 12 kB FLASH paměti, tak se stejně při použití grafického displeje použije větší MCU, které mívají RAM o velikosti 2-8kB. Navíc cenově nejsou o moc dražší než jejich menší kolegové.
15 FPS při 14 MHz + běží měřící algoritmus
Při 32 MIPS jsem dosáhnul přes 26 FPS (s upravenou knihovnou), a při standartním kmitočtu 14 MHz asi 16 FPS. A to se vyplatí :)
Součástky pro měřicí desku
Nakonec jsem si vyrobil testovací destičku s DS18B20 (čidlo teploty), DHT11 (senzor vlhkosti) a MQ7 a MQ5 - čidla pro měření koncentrace (ppm) CO a zemního plynu ve vzduchu. Podle jejich výstupní odporové charky lze měřit i koncentrace jinších plynů. Bohužel nejsou kalibrovaná, takže to někdy musím nakalibrovat ve škole.
Osazená měřicí deska
Deska se přímo zapichne do kontaktního pole a může se experimentovat s různými algoritmy.
Měřicí deska a deska s OLED displejem
Výše je vidě celá deska s OLED displejem. Je na ní 3.3V stabilizátor (používám totiž 5V napájení), přizpůsobovací rezistory a filtrační kondíky.

A proč vůbec všechno tohleto? Měřicí a řídicí technika je neuvěřitelná a drahá věda, tak zkouším levná řešení pro měřicí a řídicí aplikace (např. senzor vlhkosti na ebay vyjde asi na 2 USD a má přesnost +- 2 % RH). Ideální pro domácí meteostanici, případně inteligentní řízení domu (automatické vytápění, ventilace apod.). Senzor teploty DS18B20 je 12bitový s přesností +-0.5 °C na CELÉM jeho rozsahu. Jenom pro zajímavost - s kamarádem jsme ho proměřovali v teplotním rozmezí 16-42 °C (reference byl kalibrovaný rtuťový laboratorní teploměr) a odchylka nebyla žádná!

Nicméně s OLED displejem mám v brzké době plány - přívěskový přijímač motoalarmu a dálkové ovládání... Je na to ideální (nízká spotřeba, velikost a hlavně cena).

Žádné komentáře:

Okomentovat