In diesem Projekt werden wir ein Brandmeldesystem mit ATMEGA8-Mikrocontroller und Feuersensor herstellen. Der Feuersensor kann von jedem Typ sein, wir verwenden jedoch einen auf IR (Infrarot) basierenden Feuersensor. Obwohl IR-basierte Feuersensoren einige Nachteile haben, hauptsächlich die Ungenauigkeit, ist dies der billigste und einfachste Weg, um Feuer zu erkennen.
IR-basierte Feuersensoren haben eine geringere Wahrnehmungssicht, daher werden wir den Feuersensor an einem Servomotor montieren. Der Servo dreht sich um 180 Grad. Mit dem darauf montierten Feuersensor erhalten wir eine Feuersensor-Sicht von über 270 Grad. Das Servo dreht sich kontinuierlich und bietet so ein komplettes Raumbrandwarnsystem. Für mehr Genauigkeit können wir dem System einen Rauchsensor hinzufügen. Damit könnten wir eine höhere Genauigkeit erzielen.
Schaltungskomponenten
Hardware: + 5V Stromversorgung, Servomotor (sg90), ATMEGA8, Summer, Taste, 10KΩ Widerstand, 1KΩ Widerstand, 220Ω Widerstand, 100nF Kondensator, AVR-ISP PROGRAMMER.
Software: Atmel Studio 6.1, Progisp oder Flash Magic.
Schaltplan & Arbeiten
Damit sich die Servowelle ganz nach links bewegt, müssen wir eine Einschaltration von 1/18 geben, und damit sich die Welle ganz nach links dreht, müssen wir PWM mit einer Betriebsration von 2/18 geben. Wir werden ATMEGA8 so programmieren, dass es ein PWM-Signal ausgibt, das die Servowelle nach einer bestimmten Verzögerung auf 180 und dann auf 0 dreht.
Während der gesamten Zeit ist der Feuersensor eingeschaltet und die Steuerung ist vollständig alarmiert. Im Brandfall liefert der Sensor einen hohen Impuls. Dieser Impuls wird von der Steuerung erkannt und setzt einen Alarm. Der Alarm wird durch Drücken einer daran angeschlossenen Reset-Taste ausgeschaltet.
In atmega8 haben wir für drei PWM-Kanäle drei Pins festgelegt. Wir können den PWM-Ausgang nur an diesen Pins nehmen. Da wir PWM1 verwenden sollten wir PWM - Signal am Pin OC1A nehmen (PORTB 1 st PIN). Wie im Schaltplan gezeigt, verbinden wir das Servosignal mit dem OC1A-Pin. Hier ist eine andere Sache über drei PWM-Kanäle, zwei sind 8-Bit-PWM-Kanäle und ein 16-Bit-PWM-Kanal. Wir werden hier einen 16-Bit-PWM-Kanal verwenden.
In ATMEGA gibt es verschiedene Möglichkeiten, PWM zu generieren
1. Phasenkorrekte PWM.
2. Schnelle PWM.
Hier werden wir alles einfach halten, also werden wir die FAST PWM-Methode verwenden, um das PWM-Signal zu erzeugen.
Um zuerst die Frequenz der PWM zu wählen, hängt dies normalerweise von der Anwendung ab. Für eine LED würde jede Frequenz größer als 50 Hz ausreichen. Aus diesem Grund wählen wir die Zähleruhr 1 MHz. Also wählen wir kein Prescalar. Ein Prescalar ist eine Zahl, die so ausgewählt wird, dass eine geringere Zähleruhr erhalten wird. Wenn der Oszillatortakt beispielsweise 8 MHz beträgt, können wir einen Prescalar von '8' wählen, um einen 1-MHz-Takt für den Zähler zu erhalten. Der Prescalar wird basierend auf der Frequenz ausgewählt. Wenn wir mehr Zeitperiodenimpulse wollen, müssen wir einen höheren Prescalar wählen.
Um nun die SCHNELLE PWM des 50-Hz-Takts aus dem ATMEGA herauszuholen, müssen die entsprechenden Bits im Register „ TCCR1B “ aktiviert werden.
Hier, CS10, CS11, CS12 (GELB) - Wählen Sie den Prescalar für die Auswahl der Zähleruhr. Die Tabelle für das entsprechende Prescalar ist in der folgenden Tabelle aufgeführt. Also zur Vorskalierung eins (Oszillatortakt = Zählertakt).
also CS10 = 1, andere zwei Bits sind Null.
ROT (WGM10-WGM13): werden geändert, um Wellenformgenerierungsmodi basierend auf der folgenden Tabelle für schnelles PWM auszuwählen. Wir haben WGM11, WGM12 und WGM12 auf 1 gesetzt.
Jetzt wissen wir, dass PWM ein Signal mit unterschiedlichem Betriebsverhältnis oder unterschiedlichen Ein- und Ausschaltzeiten ist. Bisher haben wir Frequenz und Art der PWM gewählt. Das Hauptthema dieses Kapitels liegt in diesem Abschnitt. Um ein anderes Betriebsverhältnis zu erhalten, wählen wir einen Wert zwischen 0 und 255 (2 ^ 8 wegen 8 Bit). Angenommen, wir wählen einen Wert 180, da der Zähler von 0 an zählt und den Wert 180 erreicht, kann die Ausgangsantwort ausgelöst werden. Dieser Trigger kann invertierend oder nicht invertierend sein. Das heißt, die Ausgabe kann angewiesen werden, beim Erreichen der Zählung nach oben gezogen zu werden, oder sie kann angewiesen werden, bei Erreichen der Zählung nach unten gezogen zu werden.
GRÜN (COM1A1, COM1A0): Diese Auswahl zum Hoch- oder Herunterziehen wird durch die Bits CM1A0 und CM1A1 ausgewählt.
Wie in der Tabelle gezeigt, bleibt die Ausgabe beim Vergleich hoch und die Ausgabe bleibt bis zum Maximalwert hoch. Dazu müssen wir den invertierenden Modus wählen, also COM1A0 = 1; COM1A1 = 1.
Wie in der folgenden Abbildung gezeigt, ist OCR1A (Output Compare Register 1A) das Byte, in dem der vom Benutzer ausgewählte Wert gespeichert wird. Wenn wir also OCR1A = 180 ändern, löst der Controller die Änderung (hoch) aus, wenn der Zähler 180 von 0 erreicht.
OCR1A muss 19999-600 für 180 Grad und 19999-2400 für 0 Grad sein.