Elektroda.pl
Elektroda.pl
X
Mitronik
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programowalny sterownik oświetlenia DC

Karol966 16 Maj 2010 12:00 11355 11
  • Programowalny sterownik oświetlenia DC
    Witam

    Chciał bym przedstawić sterownik, który poczyniłem kilka miesięcy temu. Sterownik posiada 6 kluczy tranzystorowych na napięcie 200V, prąd do 6A oraz 2 gniazda 230V sterowane przekaźnikiem o obciążalności prądowej do 10A. Zadaniem tegoż urządzenia jest sterowanie poziomem światła zachowującego się w sposób naturalny, zbliżony do trybu oświetlenia słonecznego. W konfiguracji sterownika ustawiamy miedzy innymi:

    - godzinę rozpoczęcia trybu rozjaśniania „wschód słońca”
    - wartość początkową poziomu światła ( podawana w [%])
    - czas między kolejnymi inkrementacjami/ dekrementacjami (podawany w [min])
    - krok inkrementacji/ dekrementacji (podawany w [%])
    - wartość końcową poziomu oświetlenia ( podawaną w [%])
    - godzinę rozpoczęcia trybu ściemniania „ zachód słońca”

    Sterownik umożliwia również sterowanie ręczne poziomem jasności po wejściu w MENU bądź bezpośrednio po naciśnięciu klawiszy +/-.
    W momencie osiągnięcia zerowego poziomu oświetlenia przekaźniki zostają rozłączone wyłączając zasilacze prądu stałego pierwotnie zasilające lampy. Zostają one załączone dopiero następnego dnia podczas rozjaśniania. Krótko pisząc są one włączone dla dowolnego poziomu jasności większego od 0 %)
    Generalnie ten sterownik jest przeznaczony właśnie do „wpięcia” między istniejący zasilacz DC a odbiornik będący w tym przypadku diodami LED 1W połączonymi po 40 sztuk szeregowo. Jednakże nie ma problemu w przerobieniu jego na regulator fazowy prądu zmiennego z triakiem jako elementem wykonawczym.


    Kilka fotografii:

    Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC Programowalny sterownik oświetlenia DC





    Z tego co pamiętam schemat nawet nie powstał. Czasami z lenistwa przy tak mało skomplikowanych urządzeniach od razu projektuje płytkę ;)

    Program niestety został napisane w BASCOM’ie. Jeszcze wtedy nie wiedziałem, że obsługa i2c jest równie prosta w C jak i w BASCOM’ie. Zajmuje on niemalże całą dostępną pamięć atmegi8 nawet przy włączonej optymalizacji kody także to był wystarczający demotywator do dalszego użytkowania tegoż ‘języka’. Reasumując, odradzam programowania w Bascomie na koszt [C] wszystkim osobom, które myślą o poważniejszym programowaniu. Sam sposób pisania w czystym [C] jest dużo przyjemniejszy od bascoma a wcale nie jest ciężki do nauki ;)
    Z powodu braku wolnej pamięci nie zdołałem dorobić obsługi termometru DS1820. Wydaje mi się, że wystarczyło by tej pamięci na obsługę LM35 jednakże nie podjąłem już takiej próby więc temperatura widoczna na wyświetlaczu LCD jest tylko tekstem.

    Kodu źródłowego nie chciał bym udostępniać jednakże w przypadku zainteresowania mogę dokładnie opisać działanie interesującej funkcji lub ewentualnie wkleić wybrane funkcje.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • Mitronik
  • #2 16 Maj 2010 15:38
    nico41
    Poziom 13  

    Urządzenie ciekawe. Wykonanie ok. Mogłeś tylko wyprowadzić złącza zamiast lutować kable w płytkę było by łatwiej podpinać.

  • Mitronik
  • #3 16 Maj 2010 17:14
    wojtek_cyru
    Poziom 11  

    Projekt super :) A mógł byś mniej więcej opisać jak zrobiłeś tryb ściemniania i rozjaśniania, chodzi mi zarówno o stronę programowa i wykonawczą

  • #4 16 Maj 2010 18:26
    Karol966
    Poziom 30  

    Proces rozjaśniania/ ściemniania rozpoczyna się w momencie zrównania czasu podanego przez użytkownika( oznaczonego odpowiednio T_on dla rozjaśniania oraz T_off dla ściemniania) z czasem zegara RTC. Następnie, z tego co pamiętam do zmiennych tymczasowych (dajmy na to h_tmp, m_tmp) przepisana są te wartości i dalej to one są sprawdzane. Wartość ich jest zwiększana/ zmniejszana w każdej chwili zrównania zmiennych pomocniczych z czasem zegara o wartość ustawioną w menu sterownika. Oto prosty przykład:

    Ustawiamy sobie czas rozpoczęcia rozjaśniania na godzinę 06:00, wartość inkrementacji/ dekrementacji 1% (wartosc) oraz czas między kolejnymi zmianami na np 5minut (zmienna np krok). Zmienne h, m,s odpowiadają za czas zegara a zmienne h_tmp, s_tmp to zmienne pomocnicze. Czas rozpoczęcia rozjaśniania znajduje się w zmiennych t_on_h oraz t_on_m.

    Code:

    if(t_on_h == h && t_on_m == m)
    {
       m_tmp = t_on_m+krok;
       h_tmp = t_on_h; // jezeli mamy np 59 minut i krok 5 to uzyskali byśmy czas 64 minuty więc oczywiście trzeba się przed tym zabezpieczyć i wówczas zwiększyć godziny
    }

    // dalej:

    if(h_tmp = h && m_tmp == m)
    {
       m_tmp +=krok;
       if(m_tmp>59) m_tmp -= 60;
       h_tmp++;  // tak ogólnie ;)

       PWM = PWM + wartość // ogólnie ;)
    }


    Dodano po 5 [minuty]:

    Ten kod jest tylko wyjaśnieniem ogólnej zasady działania i nie działał by prawidłowo choćby z uwagi na to, że pierwszy warunek był by spełniony przez całą minutę - trzeba się zabezpieczyć przed tego typu sprawami ;)

  • #5 16 Maj 2010 19:31
    farrix
    Poziom 17  

    Pisałeś że pisałeś w basicu a kod u góry jest w c?

    Jeśli pisałeś w basicu to napisz jak realizowana jest funkcja czasowa tzn. od godziny np. 8.00-16.00 jest dzień taka banalna rzecz a jestem w trakcie tworzenia ster. co i nie umiem dojśc do tak banalnej rzeczy.

  • #6 16 Maj 2010 21:28
    Karol966
    Poziom 30  

    Pisałem w bascomie, ten kod powyżej co prawda pisany w C ale napisałem go 'z marszu' tak aby wyjaśnić ideę działania tej funkcji.

    No fakt to banalne, chyba, że się nie rozumiemy:
    mamy znacznik dzien = 1 (TRUE) lub = 0 (FALSE)

    Code:

    If Godzina > 8 And Godzina < 16 Then Dzien = 1
    If Godzina < 8 Or Godzina > 16 Then Dzien = 0

  • #7 16 Maj 2010 21:40
    farrix
    Poziom 17  

    Dzięki, a ja pare dni nad tym mysle i mnie to dobijało chce zrobic sterownik który w dzięn bedzie utrzymywał większa temp. a w nocy mniejsza zeby nie trze chdzic o 3.00 nałożyć węgla:D:D

  • #8 17 Maj 2010 21:34
    zdarecki
    Poziom 11  

    Witam,
    przepraszam , że wtrace swoje 5gr.

    @karol966 pomyśl chwile.. jezeli już w pierwszym warunku sprawdzileś czy Godzina znajduje sie w przedziale 8-16 to po co kolejne sprawdzenie , czyzby byla inna możliwosc??
    no tak , faktycznie... twoje warunki pomijaja godzine 8 i 16, co sie wtedy dzieje?

    Dzien = Godzina >= 8 && Godzina <= 16 ? 1: 0 ;

    Pozdrawiam

  • #9 17 Maj 2010 21:42
    Karol966
    Poziom 30  

    Faktycznie, zapomniałem o warunku większy - równy, mniejszy - równy ;)
    Pytasz po co drugi warunek? Sam zrobiłeś to samo, ty leże w jednej linii oraz dodałeś warunek równości ;)

  • #10 17 Maj 2010 21:58
    zdarecki
    Poziom 11  

    to nie zupelnie tak, u mnie sprawdzany jest 1 warunek to dziala jak

    Code:
    if(Godzina >= 8 && Godzina <= 16) Dzien = 1;
    
    else Dzien=0;
    i to jest poprawna forma takiego sprawdzenia, wlściwie to bełdem jest pisanie takiej składni jak zaproponowałeś
    if(...)
    if(...)

    itd.
    powinno byc
    if(...)
    else if(...) lub else


    pozdrawiam

  • #11 21 Maj 2010 21:09
    Dik98
    Poziom 9  

    Projekt jest bardzo pomysłowy, ale czy dało by się do niego podłączyć jakieś bezprzewodowe sterowanie :?: