artykół avr.pdf

(289 KB) Pobierz
http://www.easy-soft.tsnet.pl/
Bascom’51:
Automatyczny Sterownik Oświetlenia
Wstęp
Czasami drażnią nas z pozoru nieważne
czynności. Na przykład bardzo wielu ludzi
denerwuje potrzeba ciągłego włączania i
wyłączania oświetlenia. Można zostawiać
światło
włączone, ale to powoduje
podwyższenie opłat za energię elektryczną.
Aby ułatwić nieco sobie
życie
postanowiłem
skonstruować Automatyczny Sterownik
Oświetlenia.
Układ taki może być wykonany na bazie
czujnika ruchu. Rozwiązanie to ma jednak
istotną wadę - cena takiego czujnika waha
się w granicach 80 zł. Postanowiłem szukać
tańszego rozwiązania.
Zaprojektowany przeze mnie układ oparty
jest na idei liczenia ludzi wchodzących do
pokoju i z niego wychodzących. Gdy układ zliczy chociaż jedną wchodzącą do
środka
osobę – załącza
światło.
Oczywiście to trochę za mało. Bez sensu jest bowiem załączanie
światła
w dzień. Wyposażyłem więc swój sterownik w funkcję rozpoznawania czy jest
dzień, czy noc.
Światło
załączane jest w zależności od pory dnia. Trzecią funkcją układu
jest funkcja SEN, która powoduje,
że
po wciśnięciu przycisku,
światło
jest wyłączane i
układ oczekuje na nowy dzień.
Schemat ideowy
Na rysunku 1 pokazano schemat sterownika. Głównymi blokami układu są:
tani mikrokontroler AT89C2051,
odbiorniki promieniowania podczerwonego (TFMS)
nadajnik promieniowania podczerwonego wraz z generatorem 36kHz.
Oprogramowanie dla mikrokontrolera zostało napisane przy użyciu kompilatora BASCOM
8051 sefEP.
Do wyprowadzeń portów P3.2 i P3.3 mikrokontrolera zostały dołączone odbiorniki
podczerwieni. Porty te pracują jako wejściowe odbierając wysyłaną przez nadajnik falę
światła
podczerwonego. Jednocześnie przebieg otrzymany na wyjściach odbiorników jest
źródłem
przerwań zewnętrznych – odpowiednio Int0 i Int1.
Port P3.1, pracujący jako wyjściowy, poprzez tranzystor T1 steruje załączaniem
przekaźnika. Jest to przekaźnik załączający oświetlenie. Do wyprowadzeń P1.0 i P1.1
został dołączony fotorezystor. Dzięki takiemu połączeniu, możliwe staje się wykorzystanie
umieszczonego w strukturze AT89C2051 komparatora i w ten sposób CPU może
sprawdzać natężenie oświetlenia w pomieszczeniu. Mój sterownik stwierdza w ten
sposób, czy na zewnątrz jest dzień, czy noc. Próg konieczności załączenia
światła
ustawia
się dobierając wartości rezystorów R1, R2 i R3. Przycisk S1 służy do wywoływania
podprogramu SEN. Port P3.0 pracuje jako wyjściowy. Jego obciążeniem jest
sygnalizacyjna dioda LED.
Aby odbiorniki US2 i US3 działały poprawnie, diody nadawcze muszą emitować
światło
podczerwone o częstotliwości 36kHz. Do tego celu zbudowano z wykorzystaniem
M.Waśkiewicz: „Automatyczny Sterownik Oświetlenia”
STRONA 1 z 6
http://www.easy-soft.tsnet.pl/
popularnego układu NE555 generator fali prostokątnej. Pobierany z jego wyjścia sygnał,
przez tranzystor T2, steruje pracą diod D1 i D2.
US4
NE555
C5
+5V
T2
R8
R9
R10
+5V
DC 9...12V
US5 7805
PR1
IN
C6
OUT
GND
C8
C7
+5V
R11
C4
D1
D2
+5V
R5
T1
C2
R7
D4
ARK1
PK1
R6
C3
Q1
US3
US2
SW1
R4
D3
US1
89C2051
P3.0
P3.1
XTAL1
XTAL2
P3.2
P3.3
P3.4
P1.0
FR1
P1.1
R3
R2
C1
RESET
R1
+5V
Rysunek 1
Schemat ideowy sterownika
Program
Początek programu to polecenia konfiguracyjne. Pewne
wątpliwości może budzić pierwsza linijka, zawiera
bowiem nastawy wyświetlacza LCD! A przecież na
Do
schemacie nie ma
żadnego
panelu LCD... Jednak przy
Nd = P3.6
If P3.4 = 0 Then
uruchamianiu programu panel ten bardzo się przydaje.
Gosub Sen
Pozostawiłem więc polecenia sterujące jego pracą. W
End If
urządzeniu docelowym panel LCD nie jest montowany.
If Nd = 1 Then
Na listingu 1 została przedstawiona główna pętla
Gosub Swiatlo
programu. Kolejno układ przepisuje stan komparatora
End If
If Nd = 0 Then
wewnętrznego do zmiennej ND oraz sprawdza stan
Gosub Gaszenie
przycisku SEN. Jeżeli w pomieszczeniu jest ciemno
End If
program realizuje podprogram
Swiatlo.
Jeżeli zmienna
Lcd " L=" ; L ; " Nd=" ; Nd
ND przyjmuje wartość 0 ,program wykonywany jest
Waitms 200
podprogram
Gaszenie.
Gdy wciśnięty
Cls
‘Listing 2
Loop
zostanie klawisz SEN, realizowany
jest podprogram o nazwie
Sen.
Wejscie:
Kolejnym krokiem jest wyświetlenie
L = L + 1
Reset P3.0
na LCD stanu zmiennych L i ND. Polecenia te umieszczone są w pętli,
Wait 1
toteż wykonywane są nieprzerwanie.
Set P3.0
Podstawowymi podprogramami są: <Wejscie> i <Wyjscie>. Jeden z
Return
nich przedstawiono na listingu 2. Tu należy się kilka słów wyjaśnienia.
Dlaczego w sterowniku użyto dwóch odbiorników podczerwieni,
podczas gdy do stwierdzenia czyjejś obecności lub nieobecności
wystarczy jeden? Otóż ma to
ścisły
związek z wykrywaniem kierunku poruszania się
‘Listing
1
M.Waśkiewicz: „Automatyczny Sterownik Oświetlenia”
STRONA 2 z 6
http://www.easy-soft.tsnet.pl/
osoby. Odbiorniki umieszczone są w pewnej odległości od
‘Listing 3
siebie, na poziomej linii prostej. Wchodząca do pokoju osoba
„przecina” promień podczerwieni padający z nadajnika na
Sen:
Disable Interrupts
układy odbiorników. W ten sposób powoduje zanik sygnału na
Lcd "
Sen"
wyjściu odbiornika numer 1 a potem odbiornika numer 2. Gdy
For R = 1 To 20
będzie wychodzić, odbiorniki zadziałają w odwrotnej
Reset P3.0
kolejności. Sytuacja ta rozpoznawana jest przez program. W
Waitms 500
zależności od tego, który detektor zostanie zasłonięty
Set P3.0
Waitms 500
pierwszy, to albo od dotychczasowej liczby osób odejmuje się
Next R
jedną, albo dodaje. Kolejnym podprogramem jest blok
Gosub Gaszenie
poleceń
Sen.
Przedstawione są one na listingu 3. Pierwsze
Do
polecenie wyłącza obsługę przerwań. Oznacza to,
że
póki
Loop Until P3.6 = 0
śpimy żadne
wejście czy wyjście nie zakłóci nam snu, czyli nie
Enable Interrupts
zapali
światła.
Działanie tego podprogramu jest
Enable Int0
Enable Int1
sygnalizowane przez dwudziestokrotne
Return
mignięcie diody D3, a następnie
światło
‘Listing 4
gaśnie. Mikroprocesor wpada w pętlę
Swiatlo:
warunkową, z której może wyjść gdy ponownie słońce oświetli ziemię
If L <> 0
(zakładam,
że
nikt nie wpadnie na pomysł wciskania przycisku S1 w
Then
trakcie dnia). Gdy za oknem znów będzie widno program ponownie
Set P3.1
zezwala na obsługę przerwań i wraca do pętli głównej. Podprogram
Set S
Swiatlo
– listing 4 - jak
łatwo
się domyśleć, włącza i wyłącza
Waitms 255
Else
oświetlenie w pomieszczeniu. Algorytm jest następujący: jeżeli ktoś
Gosub
jest w pokoju, to zapal
światło
w przeciwnym przypadku idź do
Gaszenie
podprogramu
Gaszenie.
Podprogram wyłączający
światło,
analizuje
End If
czy przekaźnik jest włączony (zmienna S), jeżeli tak to go wyłącza.
Montaż i uruchomienie
Układ najlepiej jest zmontować na
płytce drukowanej jednostronnej
(do pobrania w dziale
Downloads).
Pasuje ona do większości puszek
elektroinstalacyjnych. Pozostałe
płytki służą do zamontowania
odbiorników promieniowania IR oraz
przekaźnika. Diody nadawcze
proponuje połączyć przy pomocy
przewodów a następnie
przytwierdzić je do obudowy za
pomocą kleju termoplastycznego.
Również za pomocą kleju należy
zamontować element wykonawczy
do płytki głównej. Jako płytę
czołową zastosowałem kawałek
laminatu o wymiarach 7,5 cm x 7,5
cm z naklejoną nalepką oraz z
wywierconymi otworami na diodę
D3 i przycisk SW1. Elementy te
należy połączyć z odpowiednimi
punktami na płycie głównej (opisy na schemacie i płytkach drukowanych). Resztę układu
montujemy klasycznie stosując pod układy scalone podstawki (szczególnie pod
mikrokontroler). Płytki z nadajnikami i odbiornikami podczerwieni zostały zwymiarowane
do obudów Z-43. Pozostałe szczegóły dotyczące montażu widoczne są na fotografii.
Pierwszą czynnością, jaką należy wykonać przy uruchamianiu układu, jest ustawienie
częstotliwości generatora. W tym celu pomiędzy emiter tranzystora T2 a masę
M.Waśkiewicz: „Automatyczny Sterownik Oświetlenia”
STRONA 3 z 6
http://www.easy-soft.tsnet.pl/
podłączamy miernik częstotliwości i potencjometrem montażowym PR1 ustawiamy
częstotliwość 36kHz. W przypadku braku takiego przyrządu, należy nadajnik i odbiornik
ustawić naprzeciwko siebie w odległości około 1 m. Regulując suwak potencjometru PR1,
tak dostrajamy generator, aby sterownik reagował na zasłonięcia obu czujników.
Fotorezystor umieszczamy w takim miejscu aby nie padało na niego
światło
z
pomieszczenia ani z ulicy. Ewentualnie należy dobrać wartość rezystorów R1, R2 i R3.
Układ powinien być zasilany napięciem stałym niekoniecznie stabilizowanym. W
sterowniku ze względów bezpieczeństwa nie zdecydowałem się na stosowanie zasilacza
beztransformatorowego.
Michał Waśkiewicz
mwaskiewicz@op.pl
(GG: 5239277)
M.Waśkiewicz: „Automatyczny Sterownik Oświetlenia”
STRONA 4 z 6
http://www.easy-soft.tsnet.pl/
'********************************************
'*
Program
źródłowy
*
'* Automatycznego Sterownika Oświetlenia
*
'*
*
'*
autor: Michał Waśkiewicz
*
'*
mwaskiewicz@op.pl
*
'*
*
'********************************************
Config Lcd = 16 * 1a
Cls
Dim L As Byte
Dim R As Byte
Dim Nd As Bit
Dim S As Bit
On Int0 Wyjscie
On Int1 Wejscie
Enable Interrupts
Enable Int0
Enable Int1
L = 0
Reset S
Reset Nd
Reset P3.1
Set P3.0
Set P3.4
Lcd " **** ASO **** "
Wait 2
Cls
Do
Nd = P3.6
If P3.4 = 0 Then
Gosub Sen
End If
If Nd = 1 Then
Gosub Swiatlo
End If
If Nd = 0 Then
Gosub Gaszenie
End If
Lcd " L=" ; L ; " Nd=" ; Nd
Waitms 200
Cls
Loop
Wejscie:
L = L + 1
Reset P3.0
Wait 1
Set P3.0
Return
Wyjscie:
L = L - 1
Reset P3.0
Wait 1
Set P3.0
Return
'konfiguracja LCD
'czyszczenie lcd
'zmienna L - ilość ludzi
'zmienna R - używana w podprogramie SEN
'zmienna ND - noc/dzień
'zmienna S - stan przekaźnika
'konfiguracja przerwań
'konfiguracja przerwań
'włącz przerwania
'włącz Int0
'włącz Int1
'zerowanie zmiennych
'zerowanie wyprowadzeń
'ustawianie wyprowadzeń
'komunikat powitalny
'czekaj 2s
'czyść
'pętla główna
'ustaw zmienną ND z portu P3.6
'Jeżeli wciśnięty jest przycisk SEN to
'idź do podprogramu SEN
'jeżeli jest "noc" to
'idź do podprogramu SWIATLO
'jeżeli jest "DZIEŃ" to
'idź do podprogramu GASZENIE
'wyświetl na lcd stan zmiennych
'czekaj 200ms
'czyść lcd
'wróć
'podprogram WEJSCIE
'zwiększ liczbę osób
'mignij diodą
'wróć
'podprogram WYJSCIE
'zmniejsz liczbę osób
'mignij diodą
'wróć
M.Waśkiewicz: „Automatyczny Sterownik Oświetlenia”
STRONA 5 z 6
Zgłoś jeśli naruszono regulamin