Close

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 6 měsíci.
Aktuálně je na stránce zobrazeno 15 příspěvků - 1. až 15. (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
    Správce

    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
    Správce

    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
    Správce

    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
    Správce

    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
    Správce

    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
    Správce

    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!

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