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łącznik | Rozmiar |
|---|---|
| Sterownik Schemat | 60.05 KB |
| Sterownik Płytka | 13.42 KB |
| Sterownik Płytka (odbicie lustrzane) | 13.4 KB |
| Sterownik Płytka (6 na stronie) | 67.21 KB |
| Sterownik Montowanie | 18.63 KB |
| Wyświetlacz Schemat | 26.68 KB |
| Wyświetlacz Płytka | 7.36 KB |
| Wyświetlacz Płytka (odbicie lustrzane) | 7.47 KB |
| Wyświetlacz Płytka (6 na stronie) | 40.26 KB |
| Wyświetlacz Montowanie | 8.46 KB |
| Płyta Czołowa | 38.83 KB |
| Kod źródłowy | 10.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
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
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
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
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
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
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.