Czasowy Sterownik Pompy


5
Ocena: None Średnia: 5 (1 głosujący)

Ten sterownik umożliwia ustawienie dwóch niezależnych przedziałów czasu w których ma pracować pompa. Możliwe jest także ręczne włączenie lub wyłączenie pompy. Urządzenie działa nieprzerwanie już kilka lat uruchamiając dwa razy dziennie fontannę, pompę do filtra i lampe UV, czyli podstawowy sprzęt do oczka wodnego. Układ może z powodzeniem sterować pracą dowolnego innego odbiornika zasilanego z sieci energetycznej. Sterownik posiada zasilanie bateryjne do podtrzymywania liczenia czasu po zaniku napięcia zasilającego, przez co pompa (odbiornik) działa w poprawny sposób zaraz po powrocie zasilania.



Działanie:


Schemat ideowy płytki sterującej przedstawia poniższy rysunek:

Sercem układu jest mikrokontroler U1 (AT89C2051) wraz z rezonatorem kwarcowym X1 (12MHz), kondensatorami C4 (10pF) i C5 (33pF) oraz trymerem C6 (4...40pF). C6 daje możliwość ustawienia częstotliwości pracy procesora aby wynosiła dokładnie 12MHz. Ma to wpływ na dokładność odliczania czasu. Mostek Br1 (1A) prostuje napięcie z transformatora przyłożone do złącza Zas. Elementy C0 (1000uF), C1 - C3 (22uF) oraz D1 (1N4007) i D2 (1N4007) współpracują ze stabilizatorami U0 (7812) i U2 (7805) dostarczając napięć do zasilania całego obwodu.

Rezystor R1 (10k) i przycisk S1 umożliwiają reset mikrokontrolera w dowolnej chwili. Tranzystor T0 (BC547) wraz z elementami R2 (100k) i R3 (20k) wykrywa zanik napięcia zasilającego. Złącze Sw zapewnia połączenie sterownika z przyciskami. Tranzystor T10 (BC547) i rezystor R20 (1k) zapewniają poprawne działanie dodatkowych diod led podczas multipleksowania wyświetlacza. Elementy R4 (470R) i R5 (220R) wraz z optotriakiem OPT2 (MOC3042) i triakiem Tc (TIC226) stanowią typowy układ wykonawczy uruchamiający pompę. Rezystory R6 (100k) i R7 (100k) podciągają wyprowadzenia mikrokontrolera do plusa zasilania. Kostka U3 (4028) zamienia kod binarny na stan aktywny na jednym ze swoich wyjść i współpracując z buforem U4 (4504), dzięki tranzystorom T1 - T6 (BC547) umożliwia multipleksowanie wyświetlacza. Układ scalony U5 (4543) jest dekoderem kodu BCD na kod wyświetlacza siedmiosegmentowego i dzieki buforowi inwerteowi U6 (ULN2803) zaświeca poprawnie cyfry. Rezystory R8 - R15 (100R) ograniczają prąd wyświetlaczy. Złącza GP2 (goldpin) i GP3 (goldpin) zapewniają połączenie z płytką wyświetlacza.

Na rysunku poniżej przedstawiono schemat ideowy wyświetlacza:

Budowa:


Sterownik można zbudować korzystając z płytki drukowanej dostępnej tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż sterownika nie jest trudny ale za to dość pracochłonny ze względu chociażby na bardzo dużą liczbę zwór. Kolejność montażu jest dowolna ale należy zwrócić uwagę na fakt że niektóre elementy leżą pod układami scalonymi. Pod wszystkie układy scalone zalecam zastosować podstawki a pod procesor jest ona bezwzględnie konieczna. Stabilizatory należy wyposażyć w radiator. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.

Wyświetlacz można zmontować posługując się płytką drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montowanie należy rozpocząć od zworek. Pod wyświetlacze dobrze jest zastosować kawałki podstawek DIP40. Złącza GP2 i GP3 najlepiel wlutować od strony druku i/lub w ich miejsce zastosować przewody taśmowe bezpośrednio lutowane w płytkę. Pomocą przy budowie może okazać się schemat montażowy dostępny tutaj.

Po uruchomieniu całego urządzenia należy, jeżeli zajdzie taka potrzeba, skorygować błąd odliczania czasu za pomocą trymera C6. Po dokładnym ustawieniu według fabrycznego zegara i kilkukrotnej korekcie za pomocą C6 da się uzyskać dokładność ok 1-2s/tydzień. W większości zastosowań nie jest konieczna tak duża dokładność (i tak dwa razy do roku trzeba przestawić czas, z letniego na zimowy a potem na odwrót).

Wykaz Elementów:

Sterownik:


3x Złącze ARK2
1x Listwa Gold Pin 1x6
1x Listwa Gold Pin 1x8
1x Listwa Gold Pin 1x4
1x uSwitch

8x 100R
1x 220R
1x 470R
1x 1k
1x 10k
1x 20k
3x 100k

1x 4...40pF Trymer
1x 10pF
1x 33pF
3x 22uF Elektrolit
1x 1000uF Elektrolit

1x Rezonator Kwarcowy 12MHz
1x 7805
1x 7812
2x 1N4007
1x Mostek Prostowniczy 1A
8x BC547B
1x MOC3042
1x TIC226
1x ULN2803
1x 4028
1x 4504
1x 4543
1x AT89C2051 + Podstawka

Wyświetlacz:


1x Listwa Gold Pin 1x8
1x Listwa Gold Pin 1x6

1x 220R

3x Wyświetlacz podwójny 7 segmentowy (wsp. anoda)
10x Dioda LED

Programowanie:
Mikrokontroler do sterownika został zaprogramowany w wersji demo programu BASCOM 8051 firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

$large
'*******************************************************************************
                                     'Zmienne
'*******************************************************************************
Dim Flaga_praca As Bit , Wygaszenie As Bit , Stan_triak As Bit
Dim Reczne_ster As Bit , Wygaszenie2 As Bit , Wyg_dziel As Byte
Dim Co2ms As Byte , Co4ms As Byte , Co1sek As Byte
Dim Dzielnik_pomocniczy As Byte , Stan_portu As Byte , Auto_powrot As Byte
Dim Aktualny_czas As Word , Czas_zal As Word , Czas_wyl As Word
 
Dim Sekundy As Byte , Minuty As Byte , Godziny As Byte
Dim Min_t1 As Byte , Godz_t1 As Byte
Dim Min_t2 As Byte , Godz_t2 As Byte
Dim Min_t3 As Byte , Godz_t3 As Byte
Dim Min_t4 As Byte , Godz_t4 As Byte
 
Dim Poz_wyswietlana As Byte , Tryb_wysw As Byte , Ustawianie As Byte
Dim Przycisk As Byte , Przycisk2 As Byte , Przycisk3 As Byte
Dim P_plus As Bit , P_minus As Bit , P_menu As Bit , Stan_led As Bit
'*******************************************************************************
                                 'stawienia Pocztkowe
'*******************************************************************************
 
Enable Interrupts
Config Timer0 = Timer , Gate = Internal , Mode = 2
Load Timer0 , 250                                             'okres Timera0 250*12*Tosc=250us
Enable Timer0
Start Timer0
On Timer0 Przerwanie_timer
'*******************************************************************************
                                 'Nazwy Wyprowadze?
'*******************************************************************************
Triak Alias P3.5
Miganie_led Alias P3.7
Test_napiecia Alias P3.0
Diody_led Alias P3.1
Prz_plus Alias P3.2
Prz_minus Alias P3.3
Prz_menu Alias P3.4
 
'*******************************************************************************
                             'Wartosci poczatkowe
'*******************************************************************************
Triak = 1
P1 = 255
Prz_plus = 1
Prz_minus = 1
Prz_menu = 1
Diody_led = 0
Test_napiecia = 1
 
Poz_wyswietlana = 6
Ustawianie = 0
Tryb_wysw = 0
 
Auto_powrot = 0
Reczne_ster = 0
Stan_led = 0
'*******************************************************************************
                                 'Program Glowny
'*******************************************************************************
Do
  If Test_napiecia = 1 Then
      P1 = 255
      Triak = 1
      Diody_led = 0
      Idle
  Else
  If Flaga_praca = 1 Then Gosub Praca
  End If
Loop
 
End
'*******************************************************************************
                                'Przerwanie Timera
'*******************************************************************************
Przerwanie_timer:
 
Incr Co2ms
If Co2ms = 8 Then
  Co2ms = 0
  Set Flaga_praca                                             'co 2ms
  Incr Co4ms
  If Co4ms = 2 Then
    Co4ms = 0
    Incr Co1sek
    If Co1sek = 250 Then
      Co1sek = 0
      Incr Sekundy
      If Sekundy >= 60 Then
        Sekundy = 0
        Incr Minuty
        If Minuty >= 60 Then
          Minuty = 0
          Incr Godziny
          If Godziny >= 24 Then
            Godziny = 0
          End If
        End If
      End If
    End If
  End If
End If
 
Return
'*******************************************************************************
                                'Wykonywane co 2ms
'*******************************************************************************
Praca:
 
Flaga_praca = 0
 
Incr Poz_wyswietlana
If Poz_wyswietlana = 7 Then Poz_wyswietlana = 0
 
Gosub Obsl_przyciskow
Gosub Sterowanie
 
Incr Dzielnik_pomocniczy
If Dzielnik_pomocniczy = 124 Then
   Dzielnik_pomocniczy = 0
   Wygaszenie = Not Wygaszenie
 
   Incr Wyg_dziel
   If Wyg_dziel = 3 Then
     Wyg_dziel = 0
     Wygaszenie2 = Not Wygaszenie2
   End If
 
   If Ustawianie > 0 Then
     Incr Auto_powrot
     If Auto_powrot >= 40 Then
       Auto_powrot = 0
       Ustawianie = 0
     End If
   Else
     If Tryb_wysw > 0 Then
       Incr Auto_powrot
       If Auto_powrot >= 20 Then
         Auto_powrot = 0
         Tryb_wysw = 0
       End If
     End If
   End If
 
End If
 
 
 
If Tryb_wysw = 0 Then Miganie_led = Wygaszenie Else Miganie_led = 0
 
 
If Poz_wyswietlana = 0 Then Stan_portu = 255
 
If Poz_wyswietlana = 1 Or Poz_wyswietlana = 2 Then
  Select Case Tryb_wysw
    Case 0:
      Stan_portu = Sekundy
      Stan_portu = Makebcd(stan_portu)
    Case 1:
      Stan_portu = &B11110001
    Case 2:
      Stan_portu = &B11110010
    Case 3:
      Stan_portu = &B11110011
    Case 4:
      Stan_portu = &B11110100
  End Select
 
 
 
  If Poz_wyswietlana = 1 Then Gosub Przesuwanie_bitow
 
  If Ustawianie = 3 And Wygaszenie = 0 Then Stan_portu = 240
End If
 
 
If Poz_wyswietlana = 3 Or Poz_wyswietlana = 4 Then
  Select Case Tryb_wysw
    Case 0:
      Stan_portu = Minuty
    Case 1:
      Stan_portu = Min_t1
    Case 2:
      Stan_portu = Min_t2
    Case 3:
      Stan_portu = Min_t3
    Case 4:
      Stan_portu = Min_t4
  End Select
 
  Stan_portu = Makebcd(stan_portu)
 
  If Poz_wyswietlana = 3 Then Gosub Przesuwanie_bitow
 
  If Ustawianie = 2 And Wygaszenie = 0 Then Stan_portu = 240
End If
 
 
If Poz_wyswietlana = 5 Or Poz_wyswietlana = 6 Then
  Select Case Tryb_wysw
    Case 0:
      Stan_portu = Godziny
    Case 1:
      Stan_portu = Godz_t1
    Case 2:
      Stan_portu = Godz_t2
    Case 3:
      Stan_portu = Godz_t3
    Case 4:
      Stan_portu = Godz_t4
  End Select
 
  Stan_portu = Makebcd(stan_portu)
 
  If Poz_wyswietlana = 5 Then
    Gosub Przesuwanie_bitow
  Else
    Stan_portu = Stan_portu And &B11110000
    If Stan_portu = 0 Then Stan_portu = 240
  End If
 
  If Ustawianie = 1 And Wygaszenie = 0 Then Stan_portu = 240
End If
 
 
Stan_portu = Stan_portu And &B11110000
Stan_portu = Stan_portu Or Poz_wyswietlana
 
Stan_led = 0
Select Case Poz_wyswietlana
  Case 1:
    If Reczne_ster = 1 Then Stan_led = 1 Else Stan_led = Wygaszenie2
  Case 2:
    If Tryb_wysw = 4 Then Stan_led = 1
  Case 3:
    If Tryb_wysw = 3 Then Stan_led = 1
  Case 4:
    If Tryb_wysw = 2 Then Stan_led = 1
  Case 5:
    If Tryb_wysw = 1 Then Stan_led = 1
  Case 6:
    If Tryb_wysw = 0 Then Stan_led = 1
 
End Select
 
Diody_led = 0
P1 = Stan_portu
Diody_led = Stan_led
 
Return
'*******************************************************************************
                            'Obsluga Przyciskow
'*******************************************************************************
Obsl_przyciskow:
 
If Prz_plus = 0 Then
  Incr Przycisk
  If Przycisk = 30 Then Set P_plus Else Reset P_plus
Else
  Przycisk = 0
  Reset P_plus
End If
 
If Prz_minus = 0 Then
  Incr Przycisk2
  If Przycisk2 = 30 Then Set P_minus Else Reset P_minus
Else
  Przycisk2 = 0
  Reset P_minus
End If
 
If Prz_menu = 0 Then
  Incr Przycisk3
  If Przycisk3 = 30 Then Set P_menu Else Reset P_menu
Else
  Przycisk3 = 0
  Reset P_menu
End If
 
 
If P_menu = 1 Then
 
 Auto_powrot = 0
 
 If Ustawianie = 0 Then
   Incr Tryb_wysw
   If Tryb_wysw = 5 Then Tryb_wysw = 0
 Else
   Incr Ustawianie
   If Ustawianie = 3 And Tryb_wysw > 0 Then Ustawianie = 0
   If Ustawianie = 4 Then Ustawianie = 0
 End If
End If
 
If P_plus = 1 And P_minus = 0 Then
 
   Auto_powrot = 0
 
   Select Case Ustawianie
 
     Case 0:
          Ustawianie = 1
     Case 1:
       Select Case Tryb_wysw
         Case 0:
           Incr Godziny
           If Godziny = 24 Then Godziny = 0
         Case 1:
           Incr Godz_t1
           If Godz_t1 = 24 Then Godz_t1 = 0
         Case 2:
           Incr Godz_t2
           If Godz_t2 = 24 Then Godz_t2 = 0
         Case 3:
           Incr Godz_t3
           If Godz_t3 = 24 Then Godz_t3 = 0
         Case 4:
           Incr Godz_t4
           If Godz_t4 = 24 Then Godz_t4 = 0
       End Select
     Case 2:
       Select Case Tryb_wysw
          Case 0:
           Incr Minuty
           If Minuty = 60 Then Minuty = 0
         Case 1:
           Incr Min_t1
           If Min_t1 = 60 Then Min_t1 = 0
         Case 2:
           Incr Min_t2
           If Min_t2 = 60 Then Min_t2 = 0
         Case 3:
           Incr Min_t3
           If Min_t3 = 60 Then Min_t3 = 0
         Case 4:
           Incr Min_t4
           If Min_t4 = 60 Then Min_t4 = 0
       End Select
     Case 3:
       Sekundy = 0
 
   End Select
End If
 
 
If P_plus = 0 And P_minus = 1 Then
 
   Auto_powrot = 0
 
   Select Case Ustawianie
 
     Case 0:
          'reczne wylaczanie i uruchamianie
          Reczne_ster = Not Reczne_ster
     Case 1:
       Select Case Tryb_wysw
         Case 0:
           Decr Godziny
           If Godziny = 255 Then Godziny = 23
         Case 1:
           Decr Godz_t1
           If Godz_t1 = 255 Then Godz_t1 = 23
         Case 2:
           Decr Godz_t2
           If Godz_t2 = 255 Then Godz_t2 = 23
         Case 3:
           Decr Godz_t3
           If Godz_t3 = 255 Then Godz_t3 = 23
         Case 4:
           Decr Godz_t4
           If Godz_t4 = 255 Then Godz_t4 = 23
       End Select
     Case 2:
       Select Case Tryb_wysw
          Case 0:
           Decr Minuty
           If Minuty = 255 Then Minuty = 59
         Case 1:
           Decr Min_t1
           If Min_t1 = 255 Then Min_t1 = 59
         Case 2:
           Decr Min_t2
           If Min_t2 = 255 Then Min_t2 = 59
         Case 3:
           Decr Min_t3
           If Min_t3 = 255 Then Min_t3 = 59
         Case 4:
           Decr Min_t4
           If Min_t4 = 255 Then Min_t4 = 59
       End Select
     Case 3:
       Sekundy = 0
 
   End Select
End If
 
Return
'*******************************************************************************
                                   'Przesuwanie bitow
'*******************************************************************************
Przesuwanie_bitow:
  Clr c
  Rotate Stan_portu , Left , 4
Return
'*******************************************************************************
                                   'Sterowanie pompa
'*******************************************************************************
Sterowanie:
 Stan_triak = 1
 
 Aktualny_czas = 60 * Godziny
 Aktualny_czas = Aktualny_czas + Minuty
 
 Czas_zal = 60 * Godz_t1
 Czas_zal = Czas_zal + Min_t1
 
 Czas_wyl = 60 * Godz_t2
 Czas_wyl = Czas_wyl + Min_t2
 
 If Sekundy = 0 Then
  If Aktualny_czas = Czas_zal Or Aktualny_czas = Czas_wyl Then Reczne_ster = 0
 End If
 
 If Czas_zal <= Czas_wyl Then
   If Aktualny_czas >= Czas_zal Then
     If Aktualny_czas < Czas_wyl Then Stan_triak = 0
   End If
 Else
   If Aktualny_czas >= Czas_zal Then Stan_triak = 0
   If Aktualny_czas < Czas_wyl Then Stan_triak = 0
 End If
 
 Czas_zal = 60 * Godz_t3
 Czas_zal = Czas_zal + Min_t3
 
 Czas_wyl = 60 * Godz_t4
 Czas_wyl = Czas_wyl + Min_t4
 
 If Sekundy = 0 Then
  If Aktualny_czas = Czas_zal Or Aktualny_czas = Czas_wyl Then Reczne_ster = 0
 End If
 
 If Czas_zal <= Czas_wyl Then
   If Aktualny_czas >= Czas_zal Then
     If Aktualny_czas < Czas_wyl Then Stan_triak = 0
   End If
 Else
   If Aktualny_czas >= Czas_zal Then Stan_triak = 0
   If Aktualny_czas < Czas_wyl Then Stan_triak = 0
 End If
 
 If Reczne_ster = 1 Then Stan_triak = Not Stan_triak
 
 Triak = Stan_triak
 
Return
'*******************************************************************************

Zdjęcia Projektu:

ZałącznikWielkość
Sterownik Schemat53.59 KB
Sterownik Płytka26.16 KB
Sterownik Płytka (odbicie lustrzane)26.26 KB
Sterownik (2 na stronie)50.07 KB
Sterownik Montowanie34.54 KB
Wyświetlacz Schemat42.67 KB
Wyświetlacz Płytka16.21 KB
Wyświetlacz Płytka (odbicie lustrzane)16.24 KB
Wyświetlacz (4 na stronie)73.75 KB
Wyświetlacz Montowanie20.67 KB
Płyta Czołowa195.44 KB
Kod źródłowy12.1 KB
Program po kompilacji (BIN)2.86 KB
Program po kompilacji (HEX)8.05 KB



Portret użytkownika imex

o co chodzi z tymi

o co chodzi z tymi przedzialami czasowymi ?? - wł / wył

Portret użytkownika mirley

Re: Sterownik

Sterownik posiada dwa ustawiane przedziały czasu i pompa pracuje od godziny zał1 do wył1 i od zał2 do wył2. Jeżeli czasy zał i wył są jednakowe to pompa się nie włącza.

-

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 luki

Czy dużo by było roboty w

Czy dużo by było roboty w przerabianiu programu pod ATtinny2313? Ewentualnie jakie to były by zmiany. Domyślam się, że chcąc zamienić procesor AT89c2051 na ATtiny 2313 nie trzeba zmieniać płytki a tylko program. Pozdrawiam.

Portret użytkownika mirley

Re: sterownik

tab było by duzo roboty..... popatrz sobie na układ Uniwersalny sterownik czasowy, jest prostszy i na M8 - nie trzeba niczego przerabiać

-

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.