Přihlaste se a využijte web naplno RYBICKY.NET »

Arduino v akváriu :-)

 

Články » Arduino v akváriu :-)   Vytisknout tuto stránku 

Arduino v akváriu :-)

Publikováno: 27.02.2019 • Autor: © Oldass • Rubrika: Technika

Začátkem letošního roku (2019) jsem se rozhodl, že si zkusím postavit malé "pasivní" krevetárium. Bez topení, bez filtrace, jen s LED osvětlením. Když jsem přemýšlel nad řízením LEDek, zalíbila se mi možnost plynulého řízení jejich jasu a simulace východu a západu slunce. Plynulé ovládání svitu jsem bral jako výbornou možnost, jak ideálně nastavit úroveň osvětlení, a pomoci tak s docílením rovnováhy v akváriu. Na větším akváriu mě vždy vadila nemožnost snížit jas osvětlení při použití zářivky. Chvíli mi trvalo, než jsem se zorientoval v nabídce RGB LED a možnostech jejich řízení, no nakonec mě cesta zavedla až k mikrokontroleru Arduino, který mě do té doby zcela míjel. (jaká škoda :) ) Arduino skýtá ohromné možnosti pro takový projekt, stejně jako 3D tisk, o kterém bude také řeč.

F


Za pár dní jsem "šel na nákup".

1 ks Arduino UNO R3
1 ks RTC Hodiny reálného času DS3231 (přesné, teplotně stálé)
1 ks I2C Displej OLED 0.91" 128 x 32 bodů - bílý
1 ks teplotní čidlo DS18B20 - vodotěsné - (přesné, nerezové pouzdro)
1 ks spínaný zdroj MEAN WELL RS-25-12, (12 V, 25 W)
1 ks membránová klávesnice 1 x 5
1 ks RGB LED modul pro Arduino STM32 AVR (řízení RGB LEDek)
3 ks 4k7 rezistor
1 ks modul s LM2596 DC-DC (mění napětí z 12 V na 5 V)
Arduino propojovací kablíky (různé kombinace)

(lze koupit v ČR, ale mnohem levněji v Číně)

1 m LED pásek červený/zelený/modrý STRIP 5050 OPSB/RGB
1 ks zástrčka síťová KES 1/ST 
1 ks pojistkové pouzdro PTF 5030
1 ks pojistka skleněná T0,5 A
2 m vícežilového kablíku AWG 28-34F
9 ks svorkovnice CPP 3.5/3BU
2 m dvoužilový kabel CYH 2 x 0,75 mm 2/2-0
1 ks univerzální plošný spoj TA-ECL/2
smršťovací bužírky

1 m hliníkový LED profil Mikro 21 m difuzor (matný)
4 ks koncovky LED profilu

vteřinové lepidlo
tavná pistole

(zakoupeno v ČR) 


Arduino - hardware

Z koupených dílů jsem na stole postavil změť kabelů a modulů, tedy propojil modul hodin, ovládání LED, klávesnici a OLED display s 
Arduinem (schéma níže). Arduino jsem zatím napájel přes USB kabel s počítače. LED pásky napájel spínaný zdroj 12 V/25 W.

F F

 

Arduino - software

Po sestavení všech modulů začala práce na vývoji software. Ovládací program jsem si rozdělil na několik částí: - řízení LED - čtení a konfigurace klávesnice - správa MENU (uživatelské nabídky)

Pro práci s hardware jsem využil již existující knihovny: 
FastLED (obsluha RGB LED pásků)
U8glib (obsluha OLED display)
OneWire a DallasTemperature (obsluha teploměru)
DS3231 (obsluha hodin reálného času)

(najdete buď přímo v Arduino IDE a nebo na Github)

Nejnáročnější bylo programování menu, od něhož jsem chtěl možnost snadného rozšíření o další položky, lokalizaci, schopnost nastavení různých hodnot jako číslo, čas či datum. Protože je Arduino UNO docela omezované velikostí programové paměti, bylo třeba psát kód s rozvahou - šetřit každý bajt. Úvodní obrazovku jsem rozdělil na záhlaví, kde se zobrazuje aktuální teplota vody a čas. A hlavní část, kde se zobrazují stavové ikony a položky menu. Pozici v menu poté v zápatí znázorňuje tzv. progress bar.

Software nyní hlídá několik událostí, které lze konfigurovat. Pokud některá z událostí nastane, display se probudí a zobrazí patřičnou ikonu.

- dosažení minimální teploty
- dosažení maximální teploty
- den údržby

Program také umožňuje následující (viz. obrázek)

- nastavit automatické zapínání/vypínání osvětlení
- noční osvětlení
- nastavit jas LED osvětlení
- nastavení hodin
- nastavení dne údržby atd.

Jak už bylo uvedeno výše, při programování je třeba šetřit každý bajt, takže např. fonty je třeba ořezat o nevyužívané znaky. Tím se dá ušetřit i několik kB. Já nakonec skončil u dvou upravených a ořezaných fontů, ke kterým jsem dokreslil stavové ikony (programem Fony). (pro převod fontů do formátu, který využívá knihovna U8glib použijte program bdf2u8g_101.exe)

F F



Ostatní hardware

Akvárium, které jsem pro projekt použil mělo rozměry 32 x 16 x 23 (cm) a jednalo se o obyčejné skleněné akvárium bez jakéhokoliv příslušenství. Proto bylo nutné nejdříve navrhnout horní kryt s držákem LED pásků. Poté následoval návrh vedení kabelů, které jsou schovány v otevíratelných lištách, klipy LED pásků, držák teploměru, kryt displaye, krabička pro napájecí zdroj a samotné Arduino s ostatní elektronikou. Vše jsem navrhoval v primitivním starém programu 123D. (viz. obrázky)

F F F F F F

Navržené díly jsem vytiskl na 3D tiskárně (v mém případě Creality Ender 3D - mimochodem vynikající levná tiskárna). Vše z materiálu PLA (snad zvládne kontakt s vodou) krom držáku teploměru a klipů pro LED pásky, ty jsou z PETG pro lepší pevnost a pružnost. Některé díly je nutné tisknout ze dvou částí a poté slepit. Buď z důvodu složitého tvaru (držák teploměru) a nebo velikosti (víko akvária).

F F F F

Po vytištění všech dílů jsem začal s montáží LED pásků. Pro mé akvárium stačily 2 x 20 cm pásky. Ty jsem umístil do hliníkových profilů (chlazení) a nacvakl do předem přilepených klipů ve víku akvária. (viz. obrázek) Zatím je nemám ve smršťovací bužírce, ale až bude akvárium založené, bude to vhodné, aby se k páskům nedostala voda. Difuzor na hliníkový profil jsem zvolil matný, aby lépe spojil světelné záření RGB LEDek, i když je třeba počítat se ztrátou světla (cca 20 %, čirý bere asi 5 %).

F F

Lišty pro vedení kabelů jsem přilepit oboustrannou lepící páskou.

F F F F


Pro připojení všech externích zařízení k Arduinu a rozvod napájení jsem použil univerzální plošný spoj a několik svorkovnic. (viz. obrázek) Pro napájení je třeba osadit modul redukující vstupní 12V napětí na 5V. (Ten ještě na obrázku chybí, napájení zatím obstarává 
USB kabel z PC)

F F F F F



Závěr

Nyní je samozřejmě důležité vše vyzkoušet na založeném akváriu. Jestli bude zvolené osvětlení dostatečné, jestli PLA výtisky vydrží kontakt s vodou atd. Každopádně jsem se výrobou docela bavil a doufám, že článek bude inspirací pro ostatní. RGB LED osvětlení má nízkou spotřebu, která velmi hrubě odpovídá zvolené úrovni jasu v menu. 100 jednotek odpovídá cca 100 mA proudu (při 12 V). 255 jednotek je pak cca 300 mA. Tzn., že na maximum LEDky berou cca 3 W.

Spotřeba celku při maximálním jasu osvětlení je: ?? (bude doplněno)
Spotřeba celku při vypnutém osvětlení je: ?? (bude doplněno)


Hodně zábavy s Arduinem!

 

Video ukázka: https://youtu.be/d_QfHKmU05U

 

 

F

F

 

Za správnost informací zodpovídá autor článku, dotazy směřujte na autora. Hodnocení článku hvězdičkami provádí redakce. K článku se vyjádřete pomocí palců (líbilo se / nelíbilo se).

Hodnocení
*****

Líbilo se: 29x Nelíbilo se: 0x Zveřejněno: 27.02.2019 Upraveno: 27.02.2019 Přečteno: 677x

Schválili: vaclav ***** 27.02.19 • romant ***** 27.02.19 • ctibum ***** 28.02.19

Související články
Žádné související články
Další články z rubriky Technika
23.05.2011*****CO2 difúzor do miniakvária-fotonávod3199x
14.09.2012*****Slepá hladina - Dennerle Turbo-Skimmer1510x
03.05.2013*****DIY skimmer1552x
09.02.2014*****Zkušenosti s filtry TetraTec EX 700 a TetraTec EX1200862x
06.08.2012*****Chladenie očami amatéra292x
09.12.2014*****Drop checker do mini akvária578x
20.02.2018*****Výroba krytu z lehčeného PVC1000x
28.03.2013*****EHEIM Test hlučnosti vzduchovacích motorků.632x
02.02.2011*****Vzduchovací motorek - oprava1126x
07.06.2009*****Nádržka na nítěnky3034x

Komentáře návštěvníků
Celkem: 15 záznamů přidat komentář Funkce je dostupná pouze pro přihlášené uživatele

Reagovat na tento komentář [15] Oldass® 26.04.19 08:03   Re: snejky 23.04.19 08:58
Díky mrknu na to!
U LowTech akvária, pro které jsem Arduino prvně stavěl mě to logování dat nezajímá, ale pro šedesátku možná zauvažuji nad něčím větším. Buď Arduino Mega a nebo třeba ten ESP32.

Na druhou stranu, málo paměti je výhoda, aspoň člověk nepíše kód jako čuně :-) a snaží se. Zatím jsem vždy našel kde ušetřit. I když furt atakuju 99%. :-)
i.imgur.com/…

Reagovat na tento komentář [14] snejky® 23.04.19 09:00
Dále pak můžete použít platformu Blynk! Přes kterou můžete vše dostat online do telefonu, včetně grafů a ovládacích prvku.

Reagovat na tento komentář [13] snejky® 23.04.19 08:58
Ahoj. Doporučuji opustit hardware platformu arduino a přejít například na ESP32(nebo nižší esp8266). O moc více nestojí a problémy s pamětí se stanou minulostí. Jako bonus wifi, BT, touch senzory a mnoho dalšího. Můžete programovat v Arduino IDE, takže jen přepájíte vodiče, překompilujete a hotovo. :-)

Reagovat na tento komentář [12] Oldass® 09.04.19 09:30   Re: patko226 08.04.19 20:27
patko226: zatím ne, ještě furt ladím ...
automatické změny času (letní/zimní) jsem neřešil, měním manuálně

Reagovat na tento komentář [11] patko226® 08.04.19 20:27
dobry den. mate tento projekt zverejneny aj na githube?
Momentalne rozsvecujem a zhasinam plynule ledky, v plane mam pridat snimanie teploty, regulovanie ohrievania, wifi a displej :)
akurat som riesil automaticku zmenu casu po prechode na letny cas, ale nakoniec som to nastavil len natvrdo.


Reagovat na tento komentář [10] Oldass® 12.03.19 12:39
honcka: Nejvíc využívám datum údržby. Funguje tak, že pokud nastane den údržby, zobrazí se odpovídající ikona a display svítí neustále, aby člověk nezapomněl. Po provedené údržbě si uživatel datum údržby posune dál.
Zapnout či vypnout noční přisvícení se také někdy hodí. Ale samozřejmě se do menu neleze furt. Není důvod.

Reagovat na tento komentář [9] honcka® 11.03.19 13:44
Pěkný, já se svým ovládám ledky přes LDD moduly s postupným 30min rozsvěcením/zhášením a mám to jako backup termostat, kdyby odešel na topítku napájím to ATX zdrojem z PC, na ovládání jsem se vyprdl, když chci změnit nějakou hodnotu, tak to změním ve zdrojáku, zatím to bylo potřeba udělat za cca 3x. Co jsem tak zjistil, tak to má něco do sebe, že když to ovládání je znadno po ruce, tak člověk do toho má tendenci pořád šťourat a to není moc dobře.

Reagovat na tento komentář [8] lukasbc® 05.03.19 12:25
Chlapi paráda, smekám. Ovšem toto je už úplně jiná akvaristika než je tuning bublifuku :-). To řízení intenzity svitu podle cílově země :-) to je masakr.
To už pro mě není, ale fandím vám - palec nahoru

Reagovat na tento komentář [7] Oldass® 04.03.19 09:56
Včera jsem opravil chyby timeoutů, které používám pro zhášení OLED, vypínání menu po delší době nečinnosti apod., do rána vše fungovalo správně, tak už to bude snad bez chyb. Dříve jsem používal millis(), ale při přetečení to pak dělalo potíže. Nyní uchovávám reálný čas.

Doprogramoval jsem sunrise, sunset, ale zatím neotestoval. Moc si nevěřím ;).
Musím si připravit ještě jedno Arduino pro testy, abych nemusel ladit "v ostrém prostředí" :-)).

Reagovat na tento komentář [6] Oldass® 03.03.19 13:01
jandy: "východ/západ" slunce se mi zadrhnul na celém objektovém modelu, bodlo by mi kdyby Arduino podporovalo události, ale standardně nepodporuje.
Našel jsem na githubu třídu, která události definuje, ale už se nevejdu do paměti Arduina UNO :). V UNU musím hrozně šetřit, každý bajt. I jsem musel zrušit některé položky v menu, aby bylo místo na ty důležitější.

Musím také řešit zásahy uživatele (změny nastavení v menu), když zrovna dochází ke zhášení či rozsvěcení. Jakmile člověk pustí uživatele k datům, je to složitější. :)
Tzn., můj problém nyní není spočítat průběh jasu v čase, ale vyřešit všechny scénáře, které mohou při sunset a sunrise nastat.

p.s.: do toho se v průběhu času ukazují nějaké chyby, které průběžně ladím. Dřív mi soft běžel jen v řádu hodin, ale když to nyní běží nonstop na funkčním akváriu, ukazují se chybky :).

Reagovat na tento komentář [5] jandy® 02.03.19 18:24
Oldass: Ja mam stmivani vyreseno takhle. Nevyhoda tohoto reseni, je ze "sun_rs_step[4]" musi byt 255, 127, 85, 63, 51 - jinak rozsvecovani neni plynule. Dalo by se to vyresit aproximaci na primku, ale na to jsem moc liny ;-)

divstep = 255/sun_rs_step[4];
sun_set_target_in_min = sun_set_in_min - sun_rs_step[4];
sun_rise_target_in_min = sun_rise_in_min +sun_rs_step[4];

if(current_time_in_min < sun_rise_in_min || current_time_in_min > sun_set_in_min){target_pwm = 0;}
if(current_time_in_min >=sun_rise_in_min && current_time_in_min <= sun_rise_target_in_min){target_pwm = (current_time_in_min - sun_rise_in_min)*divstep;}
if(current_time_in_min > sun_rise_target_in_min && current_time_in_min < sun_set_target_in_min ){target_pwm = 255;}
if(current_time_in_min >= sun_set_target_in_min && current_time_in_min <= sun_set_in_min ){ target_pwm = 255-((current_time_in_min - sun_set_target_in_min)*divstep);}

Takze v menu by ti stacilo nastavit "sun_rs_step[4]"....
Treba ti to pomuze ;-)

Reagovat na tento komentář [4] Oldass® 02.03.19 16:07
Sakyn: To už je vyšší level, svítit dle aktuální meteo situace :-) Super.
WiFi modul jsem objednal, ale zatím spíš na hraní. Logovat data u tak malých akvárií jako mám doma nemá smysl, zatím pro to nemám využití.
V létě jen dodělám spínání chlazení, ventilátoru.
Každopádně lze s Arduinem postavit spoustu vychytávek, to jednoznačně.

Reagovat na tento komentář [3] Sakyn® 02.03.19 12:03
Hezké :-) Já takto "automatizoval" své původní akvárium, ale kromě světla to řešilo i topení (+-0,2°C) a krmítko, kdy jsem rozebral obyč čínské. Měl jsem to místo Arduina postavené na ESP-8266 kvůli WIFI a komunikovalo to pomocí MQTT což jsem pak pomocí Mosquita přeposílal realtime na dashboard skrze WebSockety. Výkonově jsem pak světla řídil přes MOSFETy pomocí PWM. Hlavní rozdíl byl ale v řízení osvětlení, napojil jsem se na meteorologická data (API) a každých 30s jsem řídil osvětlení dle intenzity slunce v cílové zemi (Jižní amerika), takže to kopírovalo i jestli bylo jasno, nebo zamračeno :-)

Reagovat na tento komentář [2] Oldass® 01.03.19 23:10
jandy: Ahoj a díky!
Original Arduino zvládne 20V, ale tato verze z Číny jen 9V (Geekcreit® UNO R3 ATmega328P). Zdroj mám 12V (kvůli LEDkám), musím jít proto ještě dalším měničem na 5V.

Modul řízení LED: Ano, máš pravdu, zapomněl jsem na něj, zkusím v článku opravit schéma a přidám do něj ten chybějící modul pro LED řízení. Je zapojen na digital PINy 11 a 12. Pak mu stačí jen 5V napájení a 12V pro LEDky.

Kód zatím veřejný není.

LED stmívám plynule (pár vteřin), ale ještě jsem nedodělal stmívání např. v půlhodinovém intervalu - simulace západu slunce. (brzy snad dodělám, teď si stavím laboratorní zdroj ...)

DS18B20 jsem koupil v ČR, byla to dražší nerezová verze, uvidíme jak dlouho vydrží.

Reagovat na tento komentář [1] jandy® 28.02.19 19:17
Ahoj, super prace, hlavne co se tyce 3D tisku, je videt, ze jsi si s vykresy pohral.

Co se elektroniky tyce, podle me neni potreba v tomto pripade pouzit DC-DC menic na 5V, protoze vse potrebne ti utahne LDO, ktery je soucasti desky arduina a na jeho vstupu je podle datasheetu pripustnych 20 V. (Pokud tedy nepouzivas 5V lED pasek)

Pak jsem si vsiml, ze ve schematu nemas pripojen LED modul.
Kdyz jsem tohle resil ja, tak jsem se po otestavni rozhodl jit cestou vlastni desky plosnych spoju a LED ridim pomoci MOSFET transistoru. Kdy mam 3 kanaly pro RGB a dva kanaly pro denni sviceni, kde je mozno pouzit dva druhy pasku a pro kazdy zvolit uroven sviceni.|

Co se mi libi moc, je display, ktery jsi pouzil a menu co jsi vytvoril. Rad bych se podival na tvuj kod, pokud neni tajny.
Nikde jsem si nevsiml, pouzivas plynule stmivani anebo tvrde ON/OFF?

Zkousel jsem taky vodotesne cidla DS18B20, bohuzel byly moje z ciny a vzdy po cca mesici prestali fungovat. Chtel jsem totiz pomoci arduina ridit i topeni, ale kvuli spolehlivosti jsem to neuvedl do provozu.

Další články tohoto autora
Žádné další články



© RYBICKY.NET - http://rybicky.net/clanky/1779-arduino-v-akvariu-: