W ramach tego projektu zamierzamy wykonać system sygnalizacji pożaru z wykorzystaniem mikrokontrolera ATMEGA8 i czujnika pożaru. Czujnik ognia może być dowolnego typu, jednak używamy czujnika ognia opartego na podczerwieni (IR). Chociaż czujniki pożarowe oparte na podczerwieni mają pewne wady, głównie niedokładność, jest to najtańszy i najłatwiejszy sposób wykrywania pożaru.
Czujniki pożarowe oparte na podczerwieni mają mniejszą czułość, więc zamierzamy zamontować czujnik ognia na silniku serwo. Serwo będzie się obracało wahadłem o 180 stopni. Dzięki zamontowanemu na nim czujnikowi ognia uzyskujemy wizję wykrywania ognia w zakresie 270 + stopni. Serwo będzie się obracać w sposób ciągły, dając w ten sposób kompletny system ostrzegania o pożarze w pomieszczeniu. Dla większej dokładności możemy dodać do systemu czujnik dymu. Dzięki temu mogliśmy uzyskać większą dokładność.
Elementy obwodu
Sprzęt: zasilanie + 5V, silnik serwo (sg90), ATMEGA8, BRZĘCZYK, przycisk, rezystor 10KΩ, rezystor 1KΩ, rezystor 220Ω, kondensator 100nF, PROGRAMATOR AVR-ISP.
Oprogramowanie: Atmel studio 6.1, progisp lub flash magic.
Schemat obwodu i działanie
Aby wałek serwomechanizmu ruszył się w lewo, musimy podać dawkę o 1/18 obrotu, a aby wałek obrócił się maksymalnie w lewo, musimy podać PWM o współczynniku pracy 2/18. Zamierzamy zaprogramować ATMEGA8 tak, aby wydawał sygnał PWM, który obróci wał serwa do 180, a następnie do 0 po pewnym opóźnieniu.
Przez cały czas czujnik pożaru będzie włączony, a sterownik będzie w stanie całkowitego alarmu. W przypadku pożaru czujnik zapewnia wysoki impuls, który po wykryciu przez kontroler uruchamia alarm. Alarm zostanie wyłączony przez naciśnięcie przycisku resetowania, który jest do niego podłączony.
W atmega8 dla trzech kanałów PWM wyznaczyliśmy trzy piny. Możemy wziąć wyjście PWM tylko na tych pinach. Ponieważ używamy PWM1 powinniśmy wziąć sygnał PWM na OC1A pin (PORTB 1 st PIN). Jak pokazano na schemacie obwodu, podłączamy sygnał serwa do pinu OC1A. Tutaj kolejna sprawa to trzy kanały PWM, dwa to 8-bitowe kanały PWM i jeden 16-bitowy kanał PWM. Użyjemy tutaj 16-bitowego kanału PWM.
W ATMEGA jest kilka sposobów generowania PWM
1. Faza PWM poprawna.
2. Szybki PWM.
Tutaj wszystko będzie proste, więc użyjemy metody FAST PWM do wygenerowania sygnału PWM.
Najpierw należy wybrać częstotliwość PWM, zwykle zależy to od aplikacji, dla diody LED wystarczyłaby częstotliwość większa niż 50 Hz. Z tego powodu wybieramy licznik zegarowy 1MHZ, więc nie wybieramy prescalara. Prescalar to liczba wybrana tak, aby uzyskać mniejszy licznik czasu. Na przykład, jeśli zegar oscylatora wynosi 8 MHz, możemy wybrać preskalar równy '8', aby uzyskać zegar 1 MHz dla licznika. Prescalar jest wybierany na podstawie częstotliwości. Jeśli chcemy więcej impulsów okresu czasu, musimy wybrać wyższy prescalar.
Teraz, aby uzyskać FAST PWM o taktowaniu 50 Hz z ATMEGA, musimy włączyć odpowiednie bity w rejestrze „ TCCR1B ”.
Tutaj, CS10, CS11, CS12 (ŻÓŁTY) - wybierz preskalar do wyboru licznika zegara. Tabela dla odpowiedniego preskalara jest pokazana w poniższej tabeli. A więc do przeskalowania jednego (zegar oscylatora = zegar licznika).
więc CS10 = 1, pozostałe dwa bity to zero.
CZERWONY (WGM10-WGM13): są zmieniane, aby wybrać tryby generowania przebiegu, w oparciu o poniższą tabelę, dla szybkiego PWM. Mamy WGM11, WGM12 i WGM12 są ustawione na 1.
Teraz wiemy, że PWM to sygnał o innym współczynniku wypełnienia lub o różnych czasach włączenia. Do tej pory wybraliśmy częstotliwość i rodzaj PWM. Główny temat tego rozdziału znajduje się w tej sekcji. Aby uzyskać inną rację cła, wybierzemy wartość od 0 do 255 (2 ^ 8 z powodu 8 bitów). Powiedzmy, że wybieramy wartość 180, ponieważ licznik zaczyna odliczać od 0 i osiąga wartość 180, odpowiedź wyjścia może zostać wyzwolona. Ten wyzwalacz może być odwracający lub nieodwracający. Oznacza to, że wyjście można nakazać podciągnąć w górę po osiągnięciu liczby lub można powiedzieć, że ma zostać zmniejszone po osiągnięciu liczby.
ZIELONY (COM1A1, COM1A0): Ten wybór ciągnięcia w górę lub w dół jest wybierany przez bity CM1A0 i CM1A1.
Jak pokazano w tabeli, wyjście osiągnie stan wysoki przy porównaniu i pozostanie wysoki aż do wartości maksymalnej. Aby to zrobić, musimy wybrać tryb odwracania, więc COM1A0 = 1; COM1A1 = 1.
Jak pokazano na poniższym rysunku, OCR1A (Output Compare Register 1A) jest bajtem, który przechowuje wybraną przez użytkownika wartość. Jeśli więc zmienimy OCR1A = 180, sterownik wyzwoli zmianę (wysoką), gdy licznik osiągnie 180 od 0.
OCR1A musi wynosić 19999-600 dla 180 stopni i 19999-2400 dla 0 stopni.