Close

Osvětlení akvaria Led pásky

Úvodní stránka Fórum Vaše projekty Arduino Osvětlení akvaria Led pásky

Aktuálně je na stránce zobrazeno 30 příspěvků - 1. až 30. (celkem z 63)
  • Autor
    Příspěvky
  • #5192
    vnouzirozbijsklo
    Úč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 second

    byte 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 osvetleni

    for (byte brightness = 255; den == 0 && sviti == 1 && brightness >= 0; brightness –) {
    analogWrite(svetlo1, brightness);
    jas = brightness;
    delay(3500);}
    if(jas < 1) sviti = 0;

    }

    #5229
    vnouzirozbijsklo
    Účastník

    změ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 second

    byte 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);}

    }

    #5676
    dragowasabi
    Účastník

    Zdraví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ěď.

    #5677
    Zbyšek Voda
    Účastník

    Dobrý 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…).

    #5678
    dragowasabi
    Účastník

    Dě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

    #5679
    Zbyšek Voda
    Účastník

    Je 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

    #5680
    dragowasabi
    Účastník

    Pokud 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.

    #5681
    Zbyšek Voda
    Účastník

    Na 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).

    #5682
    dragowasabi
    Účastník

    Dobř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

    #5683
    dragowasabi
    Účastník

    Dobrý 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:

    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

    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?

    http://www.ebay.com/itm/5V-4-Channel-LED-Indicator-Light-PLC-Relay-Module-Circuit-Board-Blue-for-Arduino-/321493316614?hash=item4ada7eb406:g:-RoAAOSwLVZVlcaA

    Děkuji za odpověď

    #5684
    Zbyšek Voda
    Účastník

    Dobrý 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…

    #5685
    dragowasabi
    Účastník

    Dě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.

    #5686
    Zbyšek Voda
    Účastník

    Není zač, držím palce 🙂

    #5704
    dragowasabi
    Účastník

    Zdraví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.:/

    #5709
    Zbyšek Voda
    Účastník

    Dobrý 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%3D111764492631

    Z 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!

    #5710
    dragowasabi
    Účastník

    Dobrý den. co jsem se bavil s elektrikáři v práci, tak mi říkali, že tento modul by to umět měl, protože tam má dodaný triaky, který právě dokážou regulovat tok napětí a tudíž i stmívání/rozednívání. takže toto mám již vyřešené. horší to bude s programem. z prvního příspěvku tady ve vlákně si jakžtakž dokážu odvodit kód pro časové spínání, ale nevím přes jaké příkazy zprovoznit změnu jasu přes tyto moduly

    #6222
    Breaker
    Účastník

    Dobrý den, mám v plánu osvětlení akvária led pásky a chtěl bych je řídin pomocí arduina – rozednívání , stmívání. Problem je v tom že jsem uplný začátečník a nevím si vůbec rady jak začít. Na osvětlení akvaria použiju asi 60w, ale takový příkon asi pwm výstup z arduina nezvládne. Proto bych chtěl pásek rozdělit na cca 5 sekcí a jen jednu z nich ovládat přes pwm. Ostatní by se připojovaly pomocí relátek.
    Potřebuji poradit ohledně typu arduina, které pro mě bude nejvhodnější, dále jaký vybrat obvod realného času a lcd display. Má představa je taková že bych mohl pomocí displaye a tlačítek nastavovat který den se má v kolik hodin rozsvěcet a zhasínat, abych v případě potřeby nemusel upravovat samotný program.
    Uvítám jakoukoliv radu.

    #6230
    posjirka
    Účastník

    z mého pohledu je mnohem efektivnější a hlavně BEZPEČNĚJŠÍ použít zdroj 12V, čímž oddělíme tu nebezpečnou část pro lajka od té bezpežné (stačí zdroj pro LED pásky), ten by napájel jak arduino tak LED. LED pásky bych spínal přes MOSFET tranzistor a máte 255 stupňové spínán, bez nebezpečí dotyku s 230V. Uvědomte si, že jste blízsko akvária a tam není prostor na hrdinství. Radši ať shoří zdroj, než aby to někoho zabilo.

    Není to finančně náročné a přitom relativně BEZPEČNÉ řešení.
    Když to shrnu finančně.
    zdroj 50VA cca 400kč, arduino 250Kč, univers.deska + mosfet cca 100 Kč, Ledpásek 200 Kč (dá se koupit i 5m za 150 Kč ale je to o štěstí). K tomu pár drátků, odpor, … celkem cca 950 kč.

    Pokud nejste elektrikář s pár lety praxe, NEPOUŠTĚJTE SE DO PRÁCE S NEBEZPEČNÝM ELEKTRICKÝM PROUDEM.

    #6232
    Breaker
    Účastník

    Dobrý den, děkuji za odpověď. Jsem elektrikář ale se slaboproudem nemám moc velké zkušenosti. S mosfet tranzistory jsem nikdy nepracoval. Co se týče arduina tak jsem absolutní začátečník, zvládnu čtení analogové hodnoty digitální spínání pinů, výppis údajů na display a další drobnosti. V arduinu vidím velký potenciál a tak bych ho chtěl využít pro to stmívání akvária jen si nevím rady jak přesně na to. Jak přesně by to fungovalo s tím mosfetem ? Pokud by bylo možné plynule regulovat jak celého osvětlení zároveň (60w) bylo by to super. Prosím o rozvedení myšlenky pro amatéra. Děkuji

    #6233
    posjirka
    Účastník

    jak říká kolega, MaR jsou nedostudovaní elektrikáři. Nezvládli víc než 24V 🙂
    měl jsem na mysli toto např.:
    http://2.bp.blogspot.com/-6SwMWGU5bNg/T1KLpEr6d_I/AAAAAAAAAUE/Jq26WyCZavw/s1600/pwm-mosfet.png

    Prostě výkonový tranzistor spíná LED pásek a pomocí PWM (pulzně šířková modulace) ti může regulovat výkon od 0 do 100% po 255 krocích. Linearita není ideální ale mnohem lepší než podobné řízení LED žárovek na 230V.

    Není to složité.

    Tady je základní tutorial jak to funguje:
    https://www.arduino.cc/en/Tutorial/Fade

    Vlastně ti periodicky bude pomalu rozsvěcet a zase zhasínat LED diodu.
    Když dáš delay na třeba 100 ms bude to od 0-100% trvat 25500ms = 25s.
    Tam už uvidíš jak to vypadý v jednotlivých krocích.

    MOSFET nebo obecně FET tranzistor se používá protože má nízký odpor v sepnutém stavu a tak nepotřebuje složité chlazení a nedochází ke zbytečným ztrátám.
    Jen pozor na statickou elektřinu. Ta jej může zničit. Takže nepájet trafopájkou ale mikropájkou, nebo dát do tišťáku patici/svorkovnici a do ní dát nožičky tranzistoru.

    #6243
    Jarda_1
    Účastník

    ale pozor na výběr Mosfetu, obvzláště při zapojení dle schématu z předchozího příspěvku, Mosfet potřebuje k plnému otevření a k tomu nízkému odporu nějaké napětí na Gate, toto napětí lze vyčíst z datasheetu příslušného tranzistoru, a většinou hodnoty bývájí udávány při napětí na Gate kolem 10V. Z výstupu PWM u Arduina bude maximálně 5V a dle uvedeného schématu ho navíc snížíte napěťovým děličem, takže důsledně vybrat Mosfet nebo zapojení upravit.

    #6249
    posjirka
    Účastník

    Souhlas, nicméně 60W na 12V = 5A.
    Při rozdělení na 2 sekce po 2,5A bude např.IRF530 využita na 15%.
    Jeho Ugs je 20V i přes to při napětí 5V má max. proud 20A.
    Jeho vnitřní odpor rozhodně nebude 1 Ohm ale i kdyby byly aby to výkonová ztráta 2,5W, na což stačí malý chladič ve tvaru U. Při chladiči 20K/W a okolí teplotě 30 st.C by mělo mít pouzdro teplotu max. 80 st C. To je k jeho max. 150 st.C hodně vzdálené :).
    Stačí při návrhu PCB počítat s malým chladičem, rozdělit to na 2-3 sekce v tu chvíli jde o minimální proud a tudíž i výkonovou ztrátu.

    Tahle potvůrka malá má 13,5K/W
    http://www.gme.cz/v4330n-p620-008

    max. teplota pouzdra při použití 2 sekcí (2 chladiče, 2 tranzistory) bude max. teplota pouzdra cca 63 st.C.
    A to je to drobek 3x2x1 cm …

    #6251
    vnouzirozbijsklo
    Účastník

    Já osobně to mám tak, že arduinem přes PWM řídím dva tranzistory, na něj jsou napojený 12V zdroj a led pásky celkem asi 2x 5 metrů. Doporučuji vysoce svítivé led pásky s čipy 5630.
    Nezapomenout je dostatečně chladit a jestli máte na akvátku krycí skla, určite bych nebral pásek zalitý do silikonu. Teplotou zežloutně až zčerná.

    #6252
    posjirka
    Účastník

    a po jake době zežloutne/zčerná?n Můžeš sem dát schéma a popis funkcí.
    Možná by to pomohlo v začátcích …

    #6254
    Jarda_1
    Účastník

    To: posjirka
    já bych tento tranzistor nepoužil a když tak s předřadným tranzistorem, cena bude menší než uvedený chladič který nebude potřeba a ušetří se i místo na desce.
    Určitě bych takové experimenty nedoporučoval začátečníkům, tranzistor nebude plně otevřen, bude se zbytečně hřát.
    A nevidím žádný důvod proč nevěnovat pozornost správnému výběru tranzistoru (označení : Logic-Level Gate Drive). Z dostupných s velkou rezervou např: IRL3803, v GME za 40,-Kč

    #6255
    Jarda_1
    Účastník

    Zapojení
    (oba odpory lze vynechat)

    Attachments:
    #6258
    posjirka
    Účastník

    koukám, že hexfety výrazně zlevnili. Pamatuju, že stáli přes 200 kč /ks.
    Proto jsem se jim vyhýbal. Za tu cenu je to super a plný souhlas, včetně zapojení.

    #6259
    Jarda_1
    Účastník

    ano, ceny jsou super a výběr velký, celý pásek lze spínat bez problémů jedním tranzistorem

    #7196
    letakp
    Účastník

    Dobrý den. Jsem akvarista amatér a toto téma mně chytlo a chtěl jsem vyzkoušet to stmívání a rozednívání LED pásků. Proto jsem otevřel toto téma a nahrál program do programu a projel test. Při tomto jsem zjistil pár drobných chybiček, ty jsem opravil a program mi v seriovém monitoru nezobrazuje aktuální čas a datum. vypisuje mi pouze tuto hlášku každou vteřinu: 45:165:85 165/165/165 Day of week:
    Chtěl jsem se zeptat, co mám špatně. Mám RTC DS3231 a klon NHduino UNO. Děkuji za odpověď.
    Pavel

    #7200
    posjirka
    Účastník

    Možná to nebyly chybičky ale jiná verze knihovny.
    Pošli sem tvuj program a uvidíme.

Aktuálně je na stránce zobrazeno 30 příspěvků - 1. až 30. (celkem z 63)
  • Pro reakci na toto téma se musíte přihlásit.