Osvětlení akvaria Led pásky
Úvodní stránka › Fórum › Vaše projekty › Arduino › Osvětlení akvaria Led pásky
- Toto téma obsahuje celkem 62 odpovědí. Do diskuze (9 diskutujících) se naposledy zapojil uživatel Nasranek a poslední změna proběhla před 7 roky a 11 měsíci.
-
AutorPříspěvky
-
17.11.2015 v 21:58 #5192vnouzirozbijskloÚčastník
Zdravim a zároveň prosím o radu.
Na úvod bych chtěl uvést, že nejsem žádný programátor, a tohle je můj první projekt, takže prosím o schovívavost.Cílem bylo vytvoření řízení osvětlení akvaria pomocí arduina a časem řízeným DS 3231.
Nastavení času rozvícení a zhasnutí. Přes tranzistor pak postupné stmívání a rozednívání. V tom nebyl zas takový problém. V 9 hodin by se akva rozednilo během 15 minut a od 21 by zase postupně zhaslo.
Problém nastal, když jsem si chtěl pojistit případ vypnutí proudu a restart. Jakmile by totiž bylo více než 9, akva by se nerozsvítilo. Snažil jsem se to vyřešit složenými podmínkami, ale stejně to nefunguje tak jak má. OD 9-21 svítí bez problémů. při vypnutí proudu se opet rozední v jakoukoliv denní dobu a v 21 postupně zhasne. po zhasnutí ale dojde opět k plnému rozsvícení a pozvolnému zhasínání . Dokola. Určitě to jen jenom prkotina ale už i moje mysl se zacyklila:)díky za pomoc
přikládám kod:
`#include „Wire.h“
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
int svetlo1 = 9;
int sviti = 0;
int den = 0;
int jas = 0;byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
void setup()
{Wire.begin();
Serial.begin(9600);
// set the initial time here:
// DS3231 seconds, minutes, hours, day, date, month, year
//setDS3231time(30,27,19,7,15,11,15);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=pondeli, 7=nedele)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());}
void displayTime()
{
;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
// send it to the serial monitor
Serial.print(hour, DEC);
// convert the byte variable to a decimal number when displayed
Serial.print(„:“);
if (minute<10)
{
Serial.print(„0“);
}
Serial.print(minute, DEC);
Serial.print(„:“);
if (second<10)
{
Serial.print(„0″);
}
Serial.print(second, DEC);
Serial.print(“ „);
Serial.print(dayOfMonth, DEC);
Serial.print(„/“);
Serial.print(month, DEC);
Serial.print(„/“);
Serial.print(year, DEC);
Serial.print(“ Day of week: „);
switch(dayOfWeek){
case 7:
Serial.println(„nedele“);
break;
case 1:
Serial.println(„pondeli“);
break;
case 2:
Serial.println(„utery“);
break;
case 3:
Serial.println(„streda“);
break;
case 4:
Serial.println(„ctvrtek“);
break;
case 5:
Serial.println(„patek“);
break;
case 6:
Serial.println(„sobota“);
break;
}
}
void loop()
{pinMode(svetlo1,OUTPUT);
displayTime(); // display the real-time clock data on the Serial Monitor,
delay(1000); // every secondbyte s, m, h, dvt, dvm, mesic, r;
readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);if (h >= 9 && h < 21) den = 1; // nastaveni intervalu sviceni
else den = 0;
for (byte brightness = 0; den == 1 && sviti == 0 && brightness < 255; brightness ++) {
analogWrite(svetlo1, brightness);
jas = brightness;
delay(3500);
}
if(jas > 0) sviti = 1; // zjisteni stavu osvetlenifor (byte brightness = 255; den == 0 && sviti == 1 && brightness >= 0; brightness –) {
analogWrite(svetlo1, brightness);
jas = brightness;
delay(3500);}
if(jas < 1) sviti = 0;}
18.11.2015 v 21:19 #5229vnouzirozbijskloÚčastníkzměna void loop. ted to vypada slibně…opět
{
pinMode(svetlo1,OUTPUT);
displayTime(); // display the real-time clock data on the Serial Monitor,
delay(1000); // every secondbyte s, m, h, dvt, dvm, mesic, r;
readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);if (h >= 9 && h < 21) den = 1; // nastaveni intervalu sviceni
else den = 0;
for (byte brightness = 0; den == 1 && sviti == 0 && brightness < 255; brightness ++) {
analogWrite(svetlo1, brightness);
if(brightness == 255) sviti = 1;
delay(3500);
}for (byte brightness = 255; den == 0 && sviti == 1 && brightness > 0; brightness –) {
analogWrite(svetlo1, brightness);
if(brightness == 0) sviti = 0;
delay(3500);}}
6.1.2016 v 18:22 #5676dragowasabiÚčastníkZdravím. Mám na vás dotaz. Přibližně něco podobného bych chtěl vytvořit i ve svém akváriu-teráriu. Moje představa je taková, ze mám tři žárovky a ty by se mi v průběhu dne postupně rozsvěcovaly a zhasinaly. Tzn., že ráno se postupně rozsvítí první – krajní žárovka, v poledne se postupně rozsvítí druhá – prostřední žárovka a ta první se bude postupně zhasínat a to samé se bude dít i s třetí žárovkou navečer s tím, ze pak postupně zhasne. Tím bych chtěl vytvořit simulaci postupu slunce. Mé dotazy jsou takové: Lze pro arduino použít klasické žárovky na 220V a další je takový, jestli by jste mi prozradil, co všechno bych potřeboval za komponenty. Děkuji za odpověď.
6.1.2016 v 18:28 #5677Zbyšek VodaSprávceDobrý den, to by mělo jít.
Budete potřebovat ke každé žárovce SSR relé (elektromechanické by rozhodně nezvládlo plynulou regulaci jasu) a nějaký zdroj času (ať už například RTC, nebo modul pro připojení ke zdroji času přes internet – ESP8266/Ethernet shield…).6.1.2016 v 18:45 #5678dragowasabiÚčastníkDěkuji za rychlou odpověď. Nevíte náhodou jaký typ toho rele a kde by se dal koupit. Popřípadě bych byl rád za podrobnější popis zapojeni všech součástek. Pokud je to možné. Děkuji
6.1.2016 v 19:50 #5679Zbyšek VodaSprávceJe celá řada různých relé: http://www.gme.cz/products/search?term=ssr
Zapojení je popsáno v dokumentaci každého.Nakonec asi nejjednodušší by ale bylo koupit nějaký již hodový modul – například tento: http://www.sainsmart.com/sainsmart-4-channel-5v-solid-state-relay-module-board-omron-ssr-avr-dsp-arduino.html
6.1.2016 v 20:30 #5680dragowasabiÚčastníkPokud to chápu správně, tak by mi stačil ten modul z druhého odkazu na ty tři žárovky a ještě by mi zbyl jeden výstup k dobru, třeba pro noční svícení. A měl bych ještě dotaz, jaký typ arduina byste mi doporučil? Mam v planu dodat do akvária ještě vodotěsný teploměr a k tomu displej.
6.1.2016 v 23:45 #5681Zbyšek VodaSprávceNa to by mělo stačit i UNO.
Chcete-li mít ale jistotu, sáhněte po Mega a neuděláte chybu.
Obzvlášť pokud použijete LCD s více piny (a ne například s I2C řadičem, kterému stačí tři piny).7.1.2016 v 1:00 #5682dragowasabiÚčastníkDobře, takže budu potřebovat ardiono, rtc modul, modul s relé, eventuelně teploměr a displej. Mělo by to být vše nebo mi chybí ještě nějaké součástky? Každopádně vám děkuji za vaší ochotu a čas. Docela bych vás někdy chtěl vidět při praci. To musí byt koncert
7.1.2016 v 10:07 #5683dragowasabiÚčastníkDobrý den. trochu jsem se porozhlédl po netu a našel jsem toto video:
je k tomu i odkaz na koupení toho ovládacího modulu na ebayi, takže jsem hledal i vetší a našel jsem toto:
Jen nevím jestli tento relé dělá to samé jako ten, co jste mi doporučil vy a který je levnější.
Respektive mohl bych použít třeba tento relé modul?Děkuji za odpověď
7.1.2016 v 10:37 #5684Zbyšek VodaSprávceDobrý den,
ten poslední modul (http://www.ebay.com/itm/5V-4-Channel-LED-Indicator-Light-PLC-Relay-Module-Circuit-Board-Blue-for-Arduino-/321493316614?hash=item4ada7eb406:g:-RoAAOSwLVZVlcaA) má na sobě již zmiňovaná mechanická relé – takže u nich byste mohl ovládat maximálně vypnuto-zapnuto.Ten předchozí modul by měl jít použít (http://www.ebay.com/itm/4CH-AC-LED-Light-Dimmer-Module-Controller-Board-ARDUINO-RASPBERRY-Compatible/121752461158?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20131003132420%26meid%3D24efa532ac8b4d51b2ccc92ea32c4c1d%26pid%3D100005%26rk%3D3%26rkt%3D5%26sd%3D111764492631).
Budete potřebovat ArdUino, RTC modul, modul s relé, teploměr a displej
Dále také potenciometr k displeji (k nastavení kontrastu – ne u všech je ale potřeba). Potom možná pár rezistorů – třeba u 1-Wire sběrnice, kterou se připojuje teploměr DS18B20 potřebujete 4.7 kohm rezistor. Komponenty kolem ale hodně závisí na použitém typu modulu/displeje/teploměru…7.1.2016 v 11:19 #5685dragowasabiÚčastníkDěkuji za vyčerpávající opověď. Porozhlédnu se po netu na nějaké slušné ceny. Teď už si jen hrát s programováním. to bude také zážitek.
7.1.2016 v 11:28 #5686Zbyšek VodaSprávceNení zač, držím palce 🙂
7.1.2016 v 17:21 #5704dragowasabiÚčastníkZdravím. Bavil jsem se s elektrikáři v práci a ti jsou na pochybách ohledně toho modulu s relé. Tvrdí,že umí jen zapínat a vypínat,ale ne stmivat a rozednivat. Doporučili mi spse tyristory. Tak teď opravdu nevím.:/
9.1.2016 v 21:59 #5709Zbyšek VodaSprávceDobrý den,
bavíme-li se o tomto modulu: http://www.ebay.com/itm/4CH-AC-LED-Light-Dimmer-Module-Controller-Board-ARDUINO-RASPBERRY-Compatible/121752461158?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20131003132420%26meid%3D24efa532ac8b4d51b2ccc92ea32c4c1d%26pid%3D100005%26rk%3D3%26rkt%3D5%26sd%3D111764492631Z jeho popisu mi vyplývá, že by měl stmívání umět. Když se ale dívám na videa s ukázkami, vypadá to spíše na opak. Je to zmatečné.
Každopádně… pokud máte na blízku někoho, kdo se elektronikou živí, rozhodně bych dal spíše na jeho radu 🙂 Já jsem taky jenom amatér!
Přes tyristory to také určitě půjde!
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.