Sterownik Domowy


8.33333
Ocena: None Średnia: 8.3 (3 głosujących)

Urządzenie to pierwotnie miało włączać żarówki w 6 pomieszczeniach. Obecnie sterownik zapewnia dodatkowo pomiar temperatury w każdym z pomieszczeń i wyświetlanie informacji na wyświetlaczu LCD. Układ działa w oparciu o mikrokontroler ATMEGA162 a w roli czujników temperatury pracują DS18B20. Urządzenie współpracuje z sześcioma Układami Wykonawczymi znajdującymi się w puszkach podtynkowych wyłączników sieciowych. Na płytce znajduje się miejsce na drugi mikrokontroler na którym można wykonać ściemniacz żarówek jednak ta wersja nie jest aktualnie oprogramowana.



Działanie:


Schemat ideowy sterownika przedstawia poniższy rysunek:

Sercem układu jest mikrokontroler U1 (ATMEGA162) wraz z elementami X1 (8MHz), C4 (22pF) i C5 (22pF). Drugi mikrokontroler U3 (ATTINY2313) współpracuje z rezonatorem kwarcowym X2 (16MHz) i kondensatorami C6 (22pF) i C7 (22pF). Na układzie U2 (7805) zbudowany jest zasilacz stabilizowany +5V. Kondensatory C1 (470uF), C2 (100uF) i C3 (100nF) a także mostek prostowniczy Br1 (1,5A) współpracują ze stabilizatorem U2. Potencjometr P1 (10k) służy do regulacji kontrastu wyświetlacza W1 (LCD 20x2) a rezystor R7 (22R) ogranicza prąd struktur led podświetlających wyświetlacz. Złącze prog wraz z rezystorami R13 - R16 (330R) umożliwia zaprogramowanie procesora U1. Przycisk S1 umożliwia wykonanie resetu mikrokontrolera w dowolnej chwili. Goldpin sw1 służy do podłączenia panelu sterującego złożonego z impulsatora i dwóch przycisków. Do Złącz wlamp1 (ARK3) i wlamp2 (ARK3) podłączamy przełączniki lamp w kolejnych pomieszczeniach. Zworką Ds_en (goldpin) można odłączyć magistralę 1-Wire od czujników umieszczonych w pokojach, co jest konieczne przy rejestracji nowego czujnika. Rezystory R1 - R6 (330R) ograniczają prąd optotriaków w układach wykonawczych podłączonych do złącz TR1 i TR2. Elementy R19 - R24 (330R) ograniczają prąd diod sygnalizacyjnych D1 - D6. Katodami diod sterują tranzystory T4 (BC547) i T5 (BC547). Prosty interfejs RS-232 zbudowany jest w oparciu o tranzystory T1 (BC558) i T2 (BC548) oraz rezystory R10 - R12 (10k)

Budowa:


Sterownik można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Płytka w odbiciu lustrzanym dostępna jest tutaj. Montaż należy rozpocząć od wlutowania zworek. W następnej kolejności od strony druku należy zamontować listwy goldpin sw1 i ds_en oraz złącze szufladkowe ds_reg. Złącze programujące można także zamontować od strony druku. Kolejność pozostałych elementów jest dowolna ale dobrze jest lutować elementy w kolejności od najmniejszych do największych. Pod mikrokontroler(y) należy zastosować podstawkę(i). Gdy sterownik ma pracować w wersji podstawowej to zamiast procesora U3 należy wykonać zworki kawałkami przewodów w podstawce tak aby kolejne wyprowadzenia procesora U1 od PC.0 do PC.5 były połączone z rezystorami R1-R6. Jeżeli mikrokontroler U3 będzie wykorzystany jako fazowy regulator mocy żarówek to konieczne będzie zastosowanie Układu Wykrywania Zera. Diody D1 - D6 należy przylutować na takiej wysokości aby wystawały troszeczkę ponad wyświetlacz LCD. Do złącza Zs doprowadzamy napięcie z transformatora o wartości ok 6-7V. Pomocą przy konstrukcji może okazać się schemat montażowy dostępny tutaj.

Wykaz Elementów:


5x Złącze ARK2
5x Złącze ZARK3
1x Listwa Gold Pin 1x6
1x Listwa Gold Pin 1x8
3x uSwitch
1x Impulsator

1x 22R
16x 330R
2x 1k
3x 10k
1x 10k Potencjometr Montażowy

4x 22pF
1x 100nF
1x 100uF Elektrolit
1x 470uF Elektrolit

1x Wyswietlacz LCD 20x2
1x Rezonator Kwarcowy 16MHz
1x 7805
1x ATMEGA162 + Podstawka
1x ATTINY2313 (nie konieczny w wersji podstawowej)
2x BC547B
1x BC548B
1x BC558B
6x Dioda LED 2 kolory
1x Mostek Prostowniczy 1,5A

Programowanie:


Fragmenty programu napisanego w języku BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/) przedstawione są poniżej:

Przerwanie Timera:

Prztimer0:
  Timer0 = 130
  Set Flaga_4ms
 
  Incr Licznik_mig
  If Licznik_mig = 100 Then
   Licznik_mig = 0
   Miganie = Not Miganie
  End If
 
  Incr Dzielnik
  If Dzielnik = 400 Then
    Dzielnik = 0
    Disable Interrupts
 
    1wreset
    1wwrite &H55
    Select Case Wyswietlany_pokoj
    Case 1:
     1wwrite Czujnik1(1) , 8
    Case 2:
     1wwrite Czujnik2(1) , 8
    Case 3:
     1wwrite Czujnik3(1) , 8
    Case 4:
     1wwrite Czujnik4(1) , 8
    Case 5:
     1wwrite Czujnik5(1) , 8
    Case 6:
     1wwrite Czujnik6(1) , 8
    End Select
    1wwrite &HBE
    Lsb = 1wread()
    Msb = 1wread()
 
    1wreset
    1wwrite &HCC
    1wwrite &H44
 
    Enable Interrupts
 
    Temp_aktualna = Msb * 256
    Temp_aktualna = Temp_aktualna + Lsb
    Temp_aktualna = Temp_aktualna / 16
    Temp_string(wyswietlany_pokoj) = Fusing(temp_aktualna , "#.##")
 
    Set Flaga_wysw_temp
 
  End If
Return

Obsługa Przycisków:

Przyciski:
 
  If W1 <> Stan_w1 Then
   Incr Licznik_w1
   If Licznik_w1 = 25 Then Stan_w1 = W1
  Else
   Licznik_w1 = 0
  End If
 
  If W2 <> Stan_w2 Then
   Incr Licznik_w2
   If Licznik_w2 = 25 Then Stan_w2 = W2
  Else
   Licznik_w2 = 0
  End If
 
  If W3 <> Stan_w3 Then
   Incr Licznik_w3
   If Licznik_w3 = 25 Then Stan_w3 = W3
  Else
   Licznik_w3 = 0
  End If
 
  If W4 <> Stan_w4 Then
   Incr Licznik_w4
   If Licznik_w4 = 25 Then Stan_w4 = W4
  Else
   Licznik_w4 = 0
  End If
 
  If W5 <> Stan_w5 Then
   Incr Licznik_w5
   If Licznik_w5 = 25 Then Stan_w5 = W5
  Else
   Licznik_w5 = 0
  End If
 
  If W6 <> Stan_w6 Then
   Incr Licznik_w6
   If Licznik_w6 = 25 Then Stan_w6 = W6
  Else
   Licznik_w6 = 0
  End If
 
  If Sw1 = 0 And Sw2 = 1 Then
   Incr Licznik_sw1
   If Licznik_sw1 = 250 Then
    Licznik_sw1 = 0
    Select Case Wyswietlany_pokoj
    Case 1:
     Inwersja1 = Not Inwersja1
    Case 2:
     Inwersja2 = Not Inwersja2
    Case 3:
     Inwersja3 = Not Inwersja3
    Case 4:
     Inwersja4 = Not Inwersja4
    Case 5:
     Inwersja5 = Not Inwersja5
    Case 6:
     Inwersja6 = Not Inwersja6
    End Select
   End If
  Else
   Licznik_sw1 = 230
  End If
 
 
  If Sw2 = 0 And Sw1 = 1 Then
   Incr Licznik_sw2
   If Licznik_sw2 = 250 Then
    Licznik_sw2 = 0
 
    Poz_menu = 1
    Cls
    Set Flaga_wysw_menu
    Ledg = 1
    Ledr = 1
    D1 = 0
    D2 = 0
    D3 = 0
    D4 = 0
    D5 = 0
    D6 = 0
   End If
  Else
   Licznik_sw2 = 230
  End If
 
Return

Fragment procedury sterującej diodami led i triakami (dalsza część analogiczna):

Sterowanie:
 Incr Multiplex_diody
 If Multiplex_diody = 7 Then Multiplex_diody = 1
 
 Ledg = 0
 Ledr = 0
 
 Select Case Multiplex_diody
  Case 1:
    D6 = 0
    If Stan_w1 = 1 Then
      If Inwersja1 = 0 Then
        Tr1 = 1
        Ledg = 1
      Else
        Tr1 = 0
        Ledr = Miganie
      End If
    Else
      If Inwersja1 = 0 Then
        Tr1 = 0
        Ledr = 1
      Else
        Tr1 = 1
        Ledg = Miganie
      End If
    End If
    D1 = 1
  Case 2:
    D1 = 0
    If Stan_w2 = 1 Then
      If Inwersja2 = 0 Then
        Tr2 = 1
        Ledg = 1
      Else
        Tr2 = 0
        Ledr = Miganie
      End If
    Else
      If Inwersja2 = 0 Then
        Tr2 = 0
        Ledr = 1
      Else
        Tr2 = 1
        Ledg = Miganie
      End If
    End If
    D2 = 1
  Case 3:
    D2 = 0
    If Stan_w3 = 1 Then
      If Inwersja3 = 0 Then
         ...
...

Pętla Główna:

Do
  Gosub Impulsator
 
  If Poz_menu = 0 Then
    Wyswietlany_pokoj = Wyswietlany_pokoj + Rezultat
    If Wyswietlany_pokoj = 0 Then Wyswietlany_pokoj = 6
    If Wyswietlany_pokoj = 7 Then Wyswietlany_pokoj = 1
 
    If Flaga_4ms = 1 Then
      Flaga_4ms = 0
      Gosub Sterowanie
      Gosub Przyciski
    End If
 
    If Rezultat <> 0 Then
      Rezultat = 0
      Locate 1 , 1
      Lcd Nazwa_pokoj(wyswietlany_pokoj)
    End If
 
    If Flaga_wysw_temp = 1 Then
      Flaga_wysw_temp = 0
      Locate 2 , 14
      Lcd Temp_string(wyswietlany_pokoj) ; Chr(0) ; "C"
    End If
  Else
    Poz_menu = Poz_menu + Rezultat
    If Poz_menu = 0 Then Poz_menu = 2
    If Poz_menu = 3 Then Poz_menu = 1
 
    If Rezultat <> 0 Or Flaga_wysw_menu = 1 Then
      Flaga_wysw_menu = 0
      Rezultat = 0
      Select Case Poz_menu
        Case 1:
          Locate 1 , 1
          Lcd "Rejestracja  DS18B20"
          Locate 2 , 1
          Lcd Nazwa_pokoj(wyswietlany_pokoj)
        Case 2:
          Locate 1 , 1
          Lcd "Stan lamp po resecie"
          Locate 2 , 1
          Select Case Menu_stan_poczatkowy
            Case 0:
              Lcd "tak jak wylacznik   "
            Case 1:
              Lcd "zawsze wlaczone     "
            Case 2:
              Lcd "zawsze wylaczone    "
          End Select
      End Select
    End If
 
    If Flaga_4ms = 1 Then
      Flaga_4ms = 0
      Gosub Przyciski2
    End If
 
  End If
Loop
End

Zdjęcia Projektu:

ZałącznikWielkość
Schemat100.65 KB
Płytka29.97 KB
Płytka (odbicie lustrzane)30.33 KB
Płytka (2 na stronie)58.87 KB
Montowanie42.27 KB
Kod źródłowy15.99 KB



Portret użytkownika sebeq

sterownik domowy - temperatura

Witam, teraz działa wyświetlana jest ujemna temperatura z minusem, drażni mnie tylko to że jak wyswietlana jest temp. np. 20 stopni to znaki stopni są prawidłowe. Gdy schodzi do jedności temp. to pokazywane są dwie literki "CC" na końcu natomiast jak temp. jest ujemna poniżej 9 to wogóle nie ma"C". Wiem że jest to spowodowane tym że zmienia się ilość wyświetlanych znaków przy przejściach temp. np. z jedności na dziesiątki i wtedy wszystko się przesuwa i zastanawiam się czy nie dałoby się jakoś na ifie albo case zrobić jakoś rozpoznawanie przedziału temp. i odpowiednie przesuwanie wyświetlanej temp. w którąś ze stron np "locate 2,15" jeżeli chodzi o temp. dodatnie w jednościach. ? Czy jest to możliwe ?

Portret użytkownika sebeq

sterownik domowy - temperatura

Może można byłoby sprawdzać wartość zmiennej Temp_aktualna i odpowiednio wyswietlać ?

Portret użytkownika mirley

Re: Sterownik

Flaga wyświetlająca jest tutaj:

If Flaga_wysw_temp = 1 Then
      Flaga_wysw_temp = 0
      Locate 2 , 14
      Lcd Temp_string(wyswietlany_pokoj) ; Chr(0) ; "C"
    End If

Trzeba sobie zrobić nową zmienna pozycja i modyfikować jej wartość:

If Flaga_wysw_temp = 1 Then
      Flaga_wysw_temp = 0
      pozycja = 14
      if Temp_aktualna < 10 then incr pozycja
      if Temp_aktualna < 0 then decr pozycja
 
      Locate 2 , 13
      Lcd "   "
      Locate 2 , pozycja
      Lcd Temp_string(wyswietlany_pokoj) ; Chr(0) ; "C"
    End If

potestuj ten kod i zobacz czy działa jak należy, bo tak na sucho to nigdy nie można być pewnym

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika sebeq

sterownik domowy - temperatura

Dzięki, teraz wszystko ładnie się wyświetla :) gdybyś mi nie pomógł długo bym dochodził do tego chodź to nie są trudne rzeczy:) na przyszłość już będę wiedział. W sumie to pierwszy raz coś takiego z mikrokontolerami wykonuję, jak skończę zaprezentuję wykonanie.Pozdrawiam ;)

Portret użytkownika marek

Kilka modułów!

Mirley!
Mam pytanie i prośbę. Czy dało by radę żeby to urządzenie sterowało oświetleniem w 6 pokojach, mierzyło temperaturę w nich, można sterować nim z jednego miejsca wszystkie pokoje?

Dodatkowo chciałbym żeby w każdym pokoju też było takie urządzenie może mniejsze z LCD która by sterowało tylko tym jednym pokojem (Czyli temperatura, oświetlenie wl/wyl, gniazdo,radio, inne - czyli np przekaźniki wl/wyl, data godzina, ew 1 przekaźnik z termostatem itp)

Mogło to być tak zbudowane żeby każdy z pokoi miał swój mikro kontroler i przesyłał do centrali informacje do głównego mikro kontrolera.

Czy dało by radę takie coś zrobić? Oczywiście zapłacił bym za pomoc...

Portret użytkownika mirley

Re: Sterownik C.O

Trzeba by było zrobić do każdego pokoju sterownik i potem wysyłać done do głównego sterownika. To jest dość złożona sprawa więc wykracza poza ramy tego układu. Pisz na maila w tej sprawie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika niki

Sterownik Domowy

Witam Zastanawiam się czy byłaby mozliwość uzupełnienia w/w sterownika o 6 termostatów do regulacji temperatury w pokojach. Mamy odczyt temperatury, a brak regulacji. Była by to bardzo użyteczna dodatkowa funkcja

Portret użytkownika mirley

Re: Termostaty

Można by tak zrobić ale projekt jest na tyle stary że nie warto w tej wersji wprowadzac modyfikacji..... Sam pomysł wielokanałowego prostego termostatu jest ciekawy więc mógłby się taki pojawić w formie dodatkowego urządzenia

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika niki

sterownik

Powstało by fajne urządzenie sterujące temperaturą (ogrzewaniem) w domu, myślę że wiele osób by było zainteresowane

Portret użytkownika poloxyt

grzanie sie sterownik

Z czystej ciekawosci zapytam: nie grzeje Ci sie 7805 w tym sterowniku?

Portret użytkownika mirley

Re: Sterownik

Trudne pytanie.... już nie pamiętam. Może się nagrzewać bo trochę ma podłączone na wyjściu. Przykręć kawałek blaszki

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika IMEX2

Rejestracja DS

Witam Mirku ponownie

Tak przeglądam kod i pytanko mam?

Na czym polega rejestracja DS-ów w projekcie jesli nie ma opcji wyboru danego DS-a do danego pokoju?

Pozdrawiam

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Sterownik

Mało z tego pamiętam bo to stary program, ale wydaje mi się że było to tak że czujnik się rejestrował do danego pokoju który aktualnie był wyświetlany na LCD

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Yozue

Rezonator

Głupie pytanie ze względu na brak umiejętności angielskiego
czy ATmega162 może chodzić z kwarcem 16MHz ?

Portret użytkownika mirley

Re: M162

Może chodzić na 16MHz

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika ciastek

sterowanie roletami

Czy w tym sterowniku jest możliwość sterowania, albo przerobienia tak, aby dało się sterować roletami? (Chodzi o sterowanie silniczkiem, serwomotorem, który będzie połączony z roletą)

Portret użytkownika mirley

Re: Sterownik

Nie ma niestety takiej funkcji, a ukłąd jest na tyle stary że nie warto go modyfikowac. Sprawdź inne moje projekty, np Prosty sterownik domowy i do niego próbuj dodać sterowanie silniczkiem

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.