Sterownik Pompy Kolektora Słonecznego

Układ został zbudowany w celu automatycznego uruchamiania pompy gdy temperatura na kolektorze słonecznym osiągnie ustawiony poziom. Urządzenie to jest prostym sterownikiem, nie posiada funkcji sprawdzania temperatury w zbiorniku. Całość jest zbudowana w oparciu o mikrokontroler AT89C2051 i kilka elementów pomocniczych. W roli czujnika temperatury wykorzystano popularny DS18S20 przez co pomiar jest dokładny a program dla procesora nie jest skomplikowany. Dodanie drugiego czujnika nie stanowi problemu gdyż pracują one na magistrali 1-Wire ale konieczna jest modyfikacja programu.

Działanie:
Schemat Sterownika przedstawia poniższy rysunek:

Głównym elementem sterownika jest mikrokontroler U1 (AT89C2051) oraz kondensatory C3 (33pF) i C4 (33pF) wraz z rezonatorem kwarcowym X1 (12MHz). Elementy Br1, stabilizator U2 (7805) oraz kondensatory C1 (1000uF) i C2 (47uF) tworzą zasilacz dostarczający napięcia dla całego układu. Kondensator C5 (4,7uF) pracuje w obwodzie resetu mikrokontrolera i zapewnia jego poprawną pracę po włączeniu zasilania. Rezystory R1 - R8 (220R) ograniczają prąd wyświetlaczy LED. Złącze SW (goldpin) służy do podłączenia dwu przyciskowej klawiatury, natomiast 1W jest złączem czujnika DS18S20. Tranzystory T1 - T3 (BC557) wraz z rezystorami R12 (2,7k), R13 (2,7k) i R14 (2,7k) oraz R15 (3,3k), R16 (3,3k) i R17 (3,3k) sterują pracą anod wyświetlaczy i diodami sygnalizacyjnymi. Elementy R9 (470R), R11 (220R) oraz optotriak OPT (MOC3042) i triak T (TIC226) stanowią prosty układ wykonawczy uruchamiający pompę.

Na rysunku poniżej znajduje się schemat wyświetlacza:

Budowa:
Sterownik można zmontować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek płytki w odbiciu lustrzanym można ściągnąć tutaj. Montaż płytki jest bardzo łatwy, należy go rozpocząć od wlutowania jednej zworki. Kolejność pozostałych elementów nie ma znaczenia. Pod mikrokontroler należy bezwzględnie zastosować podstawkę, gdyż w przeciwnym wypadku niemożliwe będzie jego zaprogramowanie. W miejsce złącz GP1 i COM, zapewniających kontakt sterownika z wyświetlaczem można zastosować kawałek przewodu wstążkowego wlutowanego bezpośrednio w obie płytki. Pomocą przy konstrukcji może okazać się dostępny tutaj schemat montażowy.

Płytkę wyświetlacza można wykonać w oparciu o rysunek dostępny tutaj. Rysunek płytki w odbiciu lustrzanym można ściągnąć tutaj. Montaż wyświetlacza należy rozpocząć od wlutowaniu wszystkich zworek. Pod wyświetlacz dobrze jest zastosować połowę podstawki DIP40. Diody LED należy umiejscowić trochę wyżej niż wyświetlacz, aby wystawały nieco z płyty czołowej obudowy. Pomocą przy budowie może okazać się schemat montażowy dostępny tutaj.

Wykaz Elementów:
--- Sterownik
2x Złącze ARK2
3x Listwa Goldpin 1x3
1x Listwa Goldpin 1x8

9x 220R
1x 470R
3x 2,7k
3x 3,3k

2x 33pF
1x 4,7uF Elektrolit
1x 47uF Elektrolit
1x 1000uF Elektrolit

1x Rezonator Kwarcowy 12MHz
1x Mostek Prostowniczy 1A
3x BC557B
1x 7805
1x AT89C2051 + Podstawka
1x MOC3042
1x TIC226

--- Wyświetlacz
1x Listwa Gold Pin 1x3
1x Listwa Gold Pin 1x8

1x Wyświetlacz podwójny 7 segmentowy
2x 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

Config Timer0 = Timer , Gate = Internal , Mode = 2            'okres Timera0 250*12*Tosc=250us
Load Timer0 , 250
On Timer0 Przerwanie
Enable Interrupts
Enable Timer0
Start Timer0

Config 1wire = P3.2

'*******************************************************************************
                                  'Zmienne
'*******************************************************************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Byte , Wysw1 As Byte , Wysw10 As Byte
Dim Tempa As Byte , Tempu As Byte , Hister As Byte , Tempw As Byte
Dim Mux As Byte
Dim Liczmig As Byte , Liczmig2 As Byte
Dim Autopowrot As Byte
Dim Ustawianie As Byte
Dim Przycisk1 As Byte , Przycisk2 As Byte , Przycisk3 As Byte

Dim Zezw_przyc As Bit , Zezw_wysw As Bit , Zezw_uruch As Bit
Dim Praca_automat As Bit , Stan_reczny As Bit
Dim Mig As Bit , Mig2 As Bit
Dim Pompa As Bit
Dim Pomiar_odczyt As Bit

'*******************************************************************************
                                  'wartosci
'*******************************************************************************
Ustawianie = 0
Tempu = 40
Hister = 4
Set Praca_automat
Set Stan_reczny
Reset Pomiar_odczyt
Set Pompa
'*******************************************************************************
                                  'Petla glowna
'*******************************************************************************
Do

If Zezw_wysw = 1 Then                                         'wyswietlanie
  Reset Zezw_wysw
  '*****************************************      'co 4ms
  Incr Mux
  If Mux = 3 Then Mux = 0

  Select Case Ustawianie
   Case 0:                                                    'temp akt
    Wysw = Tempa
   Case 1:                                                    'Temp ustawiona
    If Mig2 = 1 Then Wysw = Tempu Else Wysw = 253
   Case 2:                                                    'przedzial
    If Mig2 = 1 Then Wysw = Hister Else Wysw = 253
   Case 3:
    If Praca_automat = 1 Then Wysw = 251 Else Wysw = 252
  End Select

  Gosub Przelicz

  Select Case Mux
    Case 0:
     Set P3.3
     P1 = Wysw10
     Reset P3.5
    Case 1:
     Set P3.5
     P1 = Wysw1
     Reset P3.4
    Case 2:
     Set P3.4
     Select Case Ustawianie
      Case 0:
       P1 = 255
       If Mig = 1 Then P1.6 = P3.7 Else P1.6 = 1
       P1.7 = Praca_automat
      Case 1:
       P1 = &B01111111
      Case 2:
       P1 = &B10111111
      Case 3:
       P1 = 255
     End Select
     Reset P3.3
  End Select
  '*****************************************
End If

If Zezw_przyc = 1 Then
  Reset Zezw_przyc
  '*****************************************   co100ms
  Incr Liczmig
  If Liczmig = 5 Then
    Liczmig = 0
    Mig = Not Mig                                             '2Hz miganie
  End If

  Incr Liczmig2
  If Liczmig2 = 2 Then
    Liczmig2 = 0
    Mig2 = Not Mig2                                           '5Hz miganie
  End If

  If Ustawianie <> 0 Then
   Incr Autopowrot
   If Autopowrot = 100 Then                                   ' po 10s wracaj do pokazywania temperatury
     Autopowrot = 0
     Ustawianie = 0
   End If
  End If

  'przyciski

  P3.0 = 1
  P3.1 = 1

  If P3.0 = 0 And P3.1 = 1 Then                               'tylko minus wcisniety
   Incr Przycisk1
   If Przycisk1 = 5 Then
    Przycisk1 = 0
    Autopowrot = 0
    '***********************
    Select Case Ustawianie
       Case 0:
        If Praca_automat = 0 Then Set Stan_reczny             'gdy tryb reczny wylacz pompe
       Case 1:
        If Tempu > 20 Then Decr Tempu                         'zmniejsz ustawiona temp
       Case 2:
        If Hister > 0 Then Decr Hister                        'zmniejsz przedzial temp
       Case 3:
        Reset Praca_automat                                   'zalacze prace reczna i wyl pompe
        Set Stan_reczny
     End Select
    '***********************
   End If
  Else
   Przycisk1 = 0
  End If

  If P3.1 = 0 And P3.0 = 1 Then                               'tylko plus wcisniety
   Incr Przycisk2
   If Przycisk2 = 5 Then
    Przycisk2 = 0
    Autopowrot = 0
    '***********************
    Select Case Ustawianie
       Case 0:
        If Praca_automat = 0 Then Reset Stan_reczny           'gdy tryb reczny wlacz pompe
       Case 1:
        If Tempu < 90 Then Incr Tempu                         'zwieksz ustawiona temp
       Case 2:
        If Hister < 20 Then Incr Hister                       'zwieksza przedzial temp
       Case 3:
        Set Praca_automat                                     'zalacza prace automatyczna i wyl pompe
        Set Stan_reczny
     End Select
    '***********************
   End If
  Else
   Przycisk2 = 0
  End If

  If P3.1 = 0 And P3.0 = 0 Then                               'wcisniety plus i minus
   Incr Przycisk3
   If Przycisk3 = 8 Then
    Przycisk3 = 0
    Autopowrot = 0
    '***********************
    Incr Ustawianie
    If Ustawianie = 4 Then Ustawianie = 0
    '***********************
   End If
  Else
   Przycisk3 = 0
  End If

  '*****************************************
End If

If Zezw_uruch = 1 Then
  Reset Zezw_uruch
  '*****************************************  co 1s
  If Tempa < 100 Then
    Tempw = Tempu - Hister

    If Tempa >= Tempu Then Reset Pompa

    If Tempa < Tempw Then Set Pompa

  Else
   Set Pompa
  End If

  If Praca_automat = 0 Then Pompa = Stan_reczny

  If P3.7 <> Pompa Then P3.7 = Pompa
  '*****************************************
End If

Loop
End
'*******************************************************************************
                                  'Przerwanie Timera
'*******************************************************************************
Przerwanie:                                                   'co 250us
 Incr Co4ms
 If Co4ms = 16 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     Set Zezw_przyc
     Incr Co1s
     If Co1s = 10 Then
       Co1s = 0
       '*************************************** co 1s
       Pomiar_odczyt = Not Pomiar_odczyt

       Disable Interrupts
       1wreset

       If Pomiar_odczyt = 1 Then
        1wwrite &HCC
        1wwrite &H44
       Else
        If Err = 0 Then

          1wwrite &HCC
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():

          If Msb = 0 Then
            Tempa = Lsb / 2                                   'dokladnosc 1 stopien
          Else
            Tempa = 254                                       'LA wyswietli low alert
          End If

        Else
          Tempa = 255                                         'Er wyswietli wyswietlacz potem
        End If
       End If

       Set Zezw_uruch
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
Return
'*******************************************************************************
'procedura przeliczajaca zmienna wysw na dwie zmienne odpowiadajace wyswietlaniu na dwoch wyswietlaczach
'*******************************************************************************
Przelicz:
 If Wysw < 100 Then
   Wysw1 = Wysw Mod 10
   Wysw1 = Lookup(wysw1 , Tabela)
   If Wysw > 9 Then
     Wysw10 = Wysw / 10
     Wysw10 = Lookup(wysw10 , Tabela)
   Else
     Wysw10 = 255                                             ' znika 0 na pierwszym miejscu
   End If
 Else
   If Wysw < 251 Then
     Wysw1 = 136                                              'A
     Wysw10 = 137                                             'H
   End If

   If Wysw = 251 Then
     Wysw1 = 136                                              'A
     Wysw10 = 140                                             'P
   End If

   If Wysw = 252 Then
     Wysw1 = 175                                              'r
     Wysw10 = 140                                             'P
   End If

   If Wysw = 253 Then
     Wysw1 = 255                                              'nic    potrzebne do migania
     Wysw10 = 255                                             'nic
   End If

   If Wysw = 254 Then
     Wysw1 = 136                                              'A
     Wysw10 = 199                                             'L
   End If

   If Wysw = 255 Then
     Wysw1 = 175                                              'r
     Wysw10 = 134                                             'E
   End If
 End If

Return
'*******************************************************************************
                           'Tabela do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
'znak:    0     1     2     3     4     5     6     7     8     9
'*******************************************************************************

Zdjęcia Projektu:

ZałącznikRozmiar
Sterownik Schemat60.05 KB
Sterownik Płytka13.42 KB
Sterownik Płytka (odbicie lustrzane)13.4 KB
Sterownik Płytka (6 na stronie)67.21 KB
Sterownik Montowanie18.63 KB
Wyświetlacz Schemat26.68 KB
Wyświetlacz Płytka7.36 KB
Wyświetlacz Płytka (odbicie lustrzane)7.47 KB
Wyświetlacz Płytka (6 na stronie)40.26 KB
Wyświetlacz Montowanie8.46 KB
Płyta Czołowa38.83 KB
Kod źródłowy10.25 KB
Program po kompilacji (BIN)1.52 KB
Program po kompilacji (HEX)4.32 KB

Transformator

Witam
Mam pytanie ,jaki zastosowałeś transformator w tym projekcie?

Transformator

portret użytkownika mirley

Transformator użyty tam pochodzi z jakiegoś starego radia (napięcie ok 6-8V). Można użyć dowolnego transformatora, pobór prądu powinien być mniejszy od 100mA. Polecam w roli zasilacza zastosować ładowarkę do komórki. np taką http://www.allegro.pl/item324390518_ladowarka_siec_mini_nokia_3310_6020_6310_hit.html. Jest lżejsza od trafa i tania a ma wydajność prądową ok 400mA.

programowanie sterownika

Prosze podpowiedzieć jak zaprogramować sterownik to na pewno wielu amatorom pomoże sam program to nie wszystko trzeba jeszcze wiedzieć jak to zrobić przy pomocy jakich nażędzi i jaki program zastosować jeśli będzie występował więcej niż jeden czujnik

programowanie sterownika

portret użytkownika mirley

Opisywany sterownik zawiera mikrokontroler AT89C2051, aby go zaprogramować potrzebny jest programator na przykład http://www.sklep.avt.com.pl/p/pl/48061/programator+procesorow+89cx051.html. Sam kupiłem go wiele lat temu, kiedy zaczynałem zabawę z mikrokontrolerami (wtedy nie kosztował aż tyle :)). Tańszym rozwiązaniem jest kupienie samej płytki i elementów osobno. Jeżeli chodzi o część softwarową to polecam program BASCOM 8051 w wersji demo. Można go ściągnąć ze strony producenta. Link bespośredni dostępny jest tutaj. Drugim całkowicie innym wyjściem jest wstawienie mikrokontolera ATTINY2313 z rodziny AVR. Co znakomicie uprości sprawę zaprogramowania, gdyż wystarczą wtedy tylko 4 kabelki podłączone do portu LPT i 4 rezystory zabezpieczające ale powstanie konieczność napisania nowego programu, gdyż są pewne różnice.

Jeżeli chodzi o dwa czujniki temperatury to samo podłączenie jest proste, ponieważ zwykle łączymy równolegle dwa czujniki do tych samych przewodów. W programie wystąpi kilka problemów a mianowicie. Każdy z czujników ma swój numer, który należy odczytać i zapisać do pamieci stałej. Można to zrobić za pomocą płytki testowej z wyświetlaczem lcd i potem wpisać uzyskany kod każdego z czujników na sztywno do kodu programu. Można także napisać procedurę w programie sterownika (jeśli się zmieści) która przy pierwszym uruchomieniu odczyta czujniki i zapisze do pamięci. Drugim problemem jest lekkie przygaszenie wyświetlacza w momencie odczytu temperatury. Można to rozwiązać ale wymaga dość dużo pracy nad kodem programu. A zatem mając płytkę testową lub inny układ pomocniczy mogący odczytać numer czujnika DS18B20 lub DS18S20 i godząc się na przygaszenie wyświetlacza raz na sekundę można to zrobić w prosty sposób.

Jeżeli masz dostęp do programatora i odczytasz numery czujników posiadanych przez Ciebie to mogę zająć się tym kodem w wolnej chwili. W razie dalszych pytań proszę pisać.

Witam jeszcze raz Trochę

Witam jeszcze raz
Trochę czasu upłynęło zanim udało mi się skończyć ten sterownik ale na sam koniec mała niespodzianka i nie chce się poprawnie uruchomić.Z racji, że zbyt biegły nie jestem w temacie proszę o jakąś pomoc,wskazówkę.Gdzie leży przyczyna : http://www.fotosik.pl/pokaz_obrazek/29810ed62c8f0ac4.html
Z góry serdeczne dzięki

Dziwne znaki

portret użytkownika mirley

Przyczyna dziwnych wskazań może leżeć w złym podłączeniu wyświetlacza (nie jestem teraz pewny czy pin 1 w złączu GP1 odpowiada pinowi 1 w tym samym złączu na wyświetlaczu bo projekt ten powstał dawno temu :) ). Najpierw sprawdź czy wyświetlacz jest podłączony poprawnie do płytki z procesorem. W tym celu wyjmij procesor z podstawki i nozki 7, 8 i 9 podłącz do masy(włączy to 3 tranzystory sterujące wyświetlaczem). Kawałek przewodu podłącz z jednej strony do masy, włącz zasilanie sterownika i drugim końcem przewodu dotykaj pokolei do wyprowadzeń 12...19 w podstawce. Zwieranie do masy kolejnych pinow w podstawce powinno zapalać na dwoch wyswietlaczach kolejne segmenty a,b...g,dp a dodatkowo jeszcze dla dwoch ostatnich pinow powinny się zaswiecac diody.

W razie dalszych problemow pytaj

Pozdrawiam

Witam Z wyświetlaczem

Witam
Z wyświetlaczem doszedłem do ładu,i tak jak mówiłeś pin 1 w złączu GP1 nie odpowiada pinowi 1 w tym samym złączu na wyświetlaczu .W tej chwili niezależnie od tego czy mam podłączony czujnik temp. czy nie cały czas wyświetla mi komunikat LA czyli temp<0 i nie reaguje na sygnał z przycisków??Wszystkie połączenie niby w porządku.
Pozdrawiam

komunikat LA

portret użytkownika mirley

Jaki masz czujnik temperatury zastosowany, DS18S20 czy DS18B20? Jest to bardzo ważne! Dodaj jeszcze rezystor 4,7k między +5V a linie sygnałową czujnika temperatury (środkowa nożka), w tym też może być problem.

Zamawiałem DS18s20 ale na

Zamawiałem DS18s20 ale na czujniku pisze DS1820.

Sprawdź z rezystorem, tak

portret użytkownika mirley

Sprawdź z rezystorem, tak jak pisałem wcześniej. Musi działać

Witam, Chciałem się

Witam,
Chciałem się zapytać autora czy czujnik DS18B20 w praktyce ma wystarczający zakres pomiaru temperatur dla płynu w solarach. Mam solary próżniowe i poszukuje właśnie jakiś czujników temp. z komunikacją 1-wire, tylko że wydawało mi się ze max +125°C to za mało. Czy solary nie nagrzewają się do wyższych temperatur? Myślałem o jakiś czujnikach do +200,250°C tylko że z komunikacja 1-wire chyba takich nie ma.

Czujnik

portret użytkownika mirley

Sterownik ten pracował z domowej roboty kolektorem pracującym na wodzie, więc jego temperatura nie mogła wyjść poza 100°C. Jeżeli masz solary zamontowane na stałe na dachu lub na statywie to może na nich wystąpić wysoka temperatura (szczegolnie wtedy gdy sterownik odłączy pompę bo temperatura w zbiorniku osiągneła ustawiony max). Należy zastosować czujnik rezystancyjny Pt100 lub inny podobny, ktorych maksymalna temperatura precy jest dużo wyższa.

W mojej prywatnej konstrukcji ktorą można oglądać tutaj zastosowałem czujniki DS18B20 ale dzięki możliwości obrotu całego kolektora do cienia uniemożliwiam wzrost temperatury powyżej 100°C

Niestety nadal nic ,cały

Niestety nadal nic ,cały czas sie wyświetla LA niezależnie od tego czy czujnik podłączony czy nie.Zastanawia mnie czy to może nie jest problem z prockiem,gdyż procedura się powtarza cały czas niezależnie od tego czy podłącze czujnik czy nie, a sygnał z czujnika na pewno dochodzi do procka i zasilanie też jest.

Powered by Drupal - Design by artinet