Sterownik Domowy

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łącznikRozmiar
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

termoregulator

Czy zbudowanie termoregulatora na atmega i z wyświetlaczem LCD jest bardzo skomplikowane i czy mógłbyś pomoc w budowie?

termoregulator

portret użytkownika mirley

Ma to być układ termostatu pracujący włącz wyłącz, czy może bardziej złożony układ regulatora grupowego itp? Czym dokładnie ma sterować ten układ? Bez problemu pomogę w budowie o ile mi tylko czas pozwoli :)

Ps. O nowych pomysłach i urządzeniach prosze pisać używając formularza kontaktowego (Link kontakt na górze strony)

termoregulator

Ma on włączać grzałkę w akwarium. Obciążenie max to ok 100W. Powinien tez mieć możliwość ustawienia histerezy.

termoregulator

portret użytkownika mirley

Czy w urządzeniu musi być LCD? Może być LED? Czy ma to znaczenie?. Zrobiło by się dwa projekty za jednym zamachem bo była już prośba o termometr z liczeniem średniej itp.

Pomoc w budowie sterownika

Witam.
Oglądam Twoją stronę od pewnego czasu. Spodobał mi się ten projekt. Chciałbym zbudowac podobny ale zupełnie nie znam się na programowaniu. Czy mógłbyś mi w tym pomóc? Zrobiłem cały schemat na którym widac jaki port procesora będzie obsługiwał dany element. Chciałbym aby procesor obsługiwał trzy optotriaki, jeden czujnik temperatury DS18B20, jeden przekaźnik i zmianę koloru diód RGB. Widziałem to wszystko w Twoich projektach i myślę że poradziłbyś sobie z tym wyzwaniem. Jeśli masz odrobinę chęci to proszę, napisz do mnie na gadu-gadu: 2712747. Pozdrawiam i z góry dziękuję.

Budowa sterownika

portret użytkownika mirley

Chęci do robienia przerożnych projektow i urzadzeń zawsze mam ale akurat ostatnio mam strasznie mało czasu. Wiele osob prosi ostatnio o wszelkiego rodzaju sterowniki, ulepszenia programow itp. a czasami nawet nie dam rady odpisac na pytanie na stronie a co dopiero coś zaprojektować. Odkładam tą prośbę do kolejki razem z innymi i napewno się tym zajmę jednak nie mogę obiecać kiedy dokładnie. Proszę wysłać, korzystając z formularza kontaktowego (u gory strony) krotki opis urządzenia, do czego ma służyć i jak działać

Powered by Drupal - Design by artinet