Σε αυτό το έργο, πρόκειται να δημιουργήσουμε ένα σύστημα συναγερμού πυρκαγιάς χρησιμοποιώντας μικροελεγκτή ATMEGA8 και αισθητήρα πυρκαγιάς. Ο αισθητήρας πυρκαγιάς μπορεί να είναι οποιουδήποτε τύπου, ωστόσο χρησιμοποιούμε τον αισθητήρα πυρκαγιάς με βάση IR (υπέρυθρες ακτίνες). Παρόλο που οι αισθητήρες πυρκαγιάς με βάση τα IR έχουν ορισμένα μειονεκτήματα κυρίως της ανακρίβειας, είναι ο φθηνότερος και ευκολότερος τρόπος ανίχνευσης πυρκαγιάς.
Οι αισθητήρες πυρκαγιάς με βάση το IR έχουν μικρότερη όραση ανίχνευσης, οπότε πρόκειται να τοποθετήσουμε τον αισθητήρα πυρκαγιάς σε έναν σερβοκινητήρα. Το Servo θα κάνει περιστροφές εκκρεμών 180 μοιρών. Με τον αισθητήρα πυρκαγιάς τοποθετημένο πάνω του, έχουμε ένα όραμα ανίχνευσης πυρκαγιάς 270+ βαθμών. Το σερβο θα περιστρέφεται συνεχώς δίνοντας έτσι ένα πλήρες σύστημα ειδοποίησης πυρκαγιάς δωματίου. Για μεγαλύτερη ακρίβεια μπορούμε να προσθέσουμε έναν αισθητήρα καπνού στο σύστημα. Με αυτό θα μπορούσαμε να έχουμε μεγαλύτερη ακρίβεια.
Εξαρτήματα κυκλώματος
Υλικό: Τροφοδοσία + 5v, Servo motor (sg90), ATMEGA8, BUZZER, Button, 10KΩ resistor, 1KΩ resistor, 220Ω resistor, 100nF capacitor, AVR-ISP PROGRAMMER.
Λογισμικό: Atmel studio 6.1, progisp ή flash magic.
Διάγραμμα κυκλώματος & εργασία
Προκειμένου ο σερβο άξονας να κινείται αριστερά μακριά, πρέπει να δώσουμε 1/18 στροφή στο σιτηρέσιο, και για τον άξονα να περιστραφεί προς τα αριστερά πρέπει να δώσουμε στον PWM με καθήκον 2/18. Πρόκειται να προγραμματίσουμε το ATMEGA8 για να δώσουμε ένα σήμα PWM που θα περιστρέψει το σερβο άξονα στο 180 και μετά στο 0 μετά από μια συγκεκριμένη καθυστέρηση.
Κατά τη διάρκεια ολόκληρου του χρόνου ο αισθητήρας πυρκαγιάς θα είναι ενεργοποιημένος και ο ελεγκτής θα είναι σε πλήρη ειδοποίηση. Εάν υπάρχει πυρκαγιά, ο αισθητήρας παρέχει έναν υψηλό παλμό αυτόν τον παλμό όταν ανιχνευθεί από τον ελεγκτή θέτει έναν συναγερμό. Ο συναγερμός θα απενεργοποιηθεί πατώντας ένα κουμπί επαναφοράς που είναι συνδεδεμένο σε αυτό.
Στο atmega8 για τρία κανάλια PWM, έχουμε ορίσει τρεις ακίδες. Μπορούμε να πάρουμε μόνο έξοδο PWM σε αυτές τις ακίδες μόνο. Δεδομένου ότι χρησιμοποιούμε PWM1, πρέπει να λαμβάνουμε σήμα PWM στον ακροδέκτη OC1A (PORTB 1ο PIN). Όπως φαίνεται στο διάγραμμα κυκλώματος, συνδέουμε το σερβο σήμα στον ακροδέκτη OC1A. Εδώ ένα άλλο πράγμα είναι πάνω από τρία κανάλια PWM, δύο είναι κανάλια PWM 8-bit και ένα κανάλι PWM 16-bit. Θα χρησιμοποιήσουμε ένα κανάλι PWM 16-bit εδώ.
Στην ATMEGA υπάρχουν μερικοί τρόποι δημιουργίας PWM
1. Σωστή φάση PWM.
2. Γρήγορο PWM.
Εδώ θα διατηρήσουμε τα πάντα απλά, οπότε θα χρησιμοποιήσουμε τη μέθοδο FAST PWM για τη δημιουργία του σήματος PWM.
Πρώτα για να επιλέξετε τη συχνότητα του PWM, Αυτό εξαρτάται από την εφαρμογή συνήθως, για μια LED οποιαδήποτε συχνότητα μεγαλύτερη από 50Hz θα έκανε. Για το λόγο αυτό επιλέγουμε το ρολόι 1MHZ. Επομένως, δεν επιλέγουμε κανένα πρόδρομο. Ένα prescalar είναι ένας αριθμός που είναι τόσο επιλεγμένος για να πάρει ένα μικρότερο ρολόι μετρητή. Για παράδειγμα, εάν το ρολόι ταλαντωτή είναι 8Mhz, μπορούμε να επιλέξουμε μια προκαταρκτική τιμή του «8» για να πάρουμε ένα ρολόι 1MHz για μετρητή. Η προεπιλογή επιλέγεται με βάση τη συχνότητα. Αν θέλουμε περισσότερους παλμούς χρονικής περιόδου πρέπει να επιλέξουμε υψηλότερα prescalar.
Τώρα για να βγάλουμε το FAST PWM του ρολογιού 50Hz από το ATMEGA, πρέπει να ενεργοποιήσουμε τα κατάλληλα bits στο μητρώο " TCCR1B ".
Εδώ, CS10, CS11, CS12 (ΚΙΤΡΙΝΟ) —επιλέξτε το prescalar για επιλογή ρολογιού. Ο πίνακας για την κατάλληλη προκαταρκτική εμφανίζεται στον παρακάτω πίνακα. Έτσι, για την προεπιλογή ενός (ρολόι ταλαντωτή = ρολόι μετρητή).
έτσι CS10 = 1, άλλα δύο bit είναι μηδέν
ΚΟΚΚΙΝΟ (WGM10-WGM13): τροποποιούνται για να επιλέξουν τρόπους δημιουργίας κυματομορφών, με βάση τον παρακάτω πίνακα, για γρήγορο PWM. Έχουμε WGM11, WGM12 και WGM12 έχουν οριστεί σε 1.
Τώρα γνωρίζουμε ότι το PWM είναι ένα σήμα με διαφορετική αναλογία λειτουργίας ή διαφορετικούς χρόνους απενεργοποίησης. Μέχρι τώρα έχουμε επιλέξει τη συχνότητα και τον τύπο PWM. Το κύριο θέμα αυτού του κεφαλαίου βρίσκεται σε αυτήν την ενότητα. Για να λάβουμε διαφορετική κατανομή καθηκόντων, θα επιλέξουμε μια τιμή μεταξύ 0 και 255 (2 ^ 8 λόγω 8 bit). Ας υποθέσουμε ότι επιλέγουμε μια τιμή 180, καθώς ο μετρητής αρχίζει να μετράει από το 0 και φτάνει στην τιμή 180, η απόκριση εξόδου μπορεί να ενεργοποιηθεί. Αυτή η σκανδάλη μπορεί να είναι αντιστροφή ή μη αναστροφή. Δηλαδή, η έξοδος μπορεί να ειπωθεί ότι ανεβαίνει κατά την επίτευξη του αριθμού, ή μπορεί να ειπωθεί για να τραβήξει προς τα κάτω κατά την επίτευξη του αριθμού.
ΠΡΑΣΙΝΟ (COM1A1, COM1A0): Αυτή η επιλογή προς τα πάνω ή προς τα κάτω επιλέγεται από τα bit CM1A0 και CM1A1.
Όπως φαίνεται στον πίνακα, για σύγκριση της εξόδου σε σύγκριση και η έξοδος θα παραμείνει υψηλή έως τη μέγιστη τιμή. Πρέπει να επιλέξουμε τη λειτουργία αντιστροφής για να το κάνουμε αυτό, έτσι COM1A0 = 1; COM1A1 = 1.
Όπως φαίνεται στο παρακάτω σχήμα, το OCR1A (Output σύγκριση Register 1A) είναι το byte που αποθηκεύει την επιλεγμένη από τον χρήστη τιμή. Αν αλλάξουμε OCR1A = 180, ο ελεγκτής ενεργοποιεί την αλλαγή (υψηλή) όταν ο μετρητής φτάσει το 180 από το 0.
Το OCR1A πρέπει να είναι 19999-600 για 180 μοίρες και 19999-2400 για 0 βαθμό.