Dans ce projet, nous allons créer un système d'alerte incendie utilisant un microcontrôleur ATMEGA8 et un capteur d'incendie. Le capteur d'incendie peut être de n'importe quel type, mais nous utilisons un capteur d'incendie basé sur IR (infrarouge). Bien que les capteurs d'incendie basés sur IR présentent certains inconvénients, principalement l'inexactitude, c'est le moyen le moins cher et le plus simple de détecter un incendie.
Les capteurs d'incendie à base infrarouge ont une vision de détection moindre, nous allons donc monter le capteur d'incendie sur un servomoteur. Le servo effectuera des rotations de pendule de 180 degrés. Avec le capteur d'incendie monté dessus, nous obtenons une vision de détection d'incendie à plus de 270 degrés. Le servo tournera en continu, donnant ainsi un système complet d'alerte incendie dans la pièce. Pour plus de précision, nous pouvons ajouter un capteur de fumée au système. Avec cela, nous pourrions obtenir une plus grande précision.
Composants du circuit
Matériel: alimentation + 5v, servomoteur (sg90), ATMEGA8, BUZZER, bouton, résistance 10KΩ, résistance 1KΩ, résistance 220Ω, condensateur 100nF, AVR-ISP PROGRAMMER.
Logiciel: Atmel studio 6.1, progisp ou flash magic.
Schéma de circuit et fonctionnement
Pour que l'arbre de servo se déplace à gauche, nous devons donner un rapport de 1/18 de tour, et pour que l'arbre tourne complètement vers la gauche, nous devons donner un PWM avec un rapport de service de 2/18. Nous allons programmer ATMEGA8 pour qu'il émette un signal PWM qui fera tourner l'arbre du servo à 180 puis à 0 après un certain délai.
Pendant tout le temps, le capteur d'incendie sera activé et le contrôleur sera en alerte complète. S'il y a un incendie, le capteur fournit une impulsion haute cette impulsion lorsqu'il est détecté par le contrôleur, il définit une alarme. L'alarme sera désactivée en appuyant sur un bouton de réinitialisation qui lui est connecté.
Dans atmega8 pour trois canaux PWM, nous avons désigné trois broches. Nous ne pouvons prendre la sortie PWM que sur ces broches. Puisque nous utilisons PWM1, nous devrions prendre le signal PWM à la broche OC1A (PORTB 1 er PIN). Comme indiqué dans le schéma de circuit, nous connectons le signal d'asservissement à la broche OC1A. Ici, une autre chose est plus de trois canaux PWM, deux sont des canaux PWM 8 bits et un canal PWM 16 bits. Nous allons utiliser ici un canal PWM 16 bits.
Dans ATMEGA, il existe deux façons de générer PWM, elles sont
1. Phase correcte PWM.
2. PWM rapide.
Ici, nous allons tout garder simple, nous allons donc utiliser la méthode FAST PWM pour générer le signal PWM.
Commencez par choisir la fréquence de PWM, cela dépend généralement de l'application, pour une LED, toute fréquence supérieure à 50 Hz ferait l'affaire. Pour cette raison, nous choisissons le compteur d'horloge 1MHZ, donc nous ne choisissons pas de prescalaire. Un prescalaire est un nombre qui est ainsi sélectionné pour obtenir une horloge de compteur moindre. Par exemple, si l'horloge de l'oscillateur est de 8Mhz, nous pouvons choisir un prescalaire de '8' pour obtenir une horloge de 1MHz pour le compteur. Le préscalaire est sélectionné en fonction de la fréquence. Si nous voulons plus d'impulsions de période, nous devons choisir un préscalaire supérieur.
Maintenant, pour obtenir le FAST PWM de l'horloge à 50 Hz de l'ATMEGA, nous devons activer les bits appropriés dans le registre « TCCR1B ».
Ici, CS10, CS11, CS12 (JAUNE) —sélectionnez le préscalaire pour choisir l'horloge du compteur. Le tableau du préscalaire approprié est présenté dans le tableau ci-dessous. Donc pour le préréglage (horloge de l'oscillateur = horloge du compteur).
donc CS10 = 1, les deux autres bits sont nuls.
ROUGE (WGM10-WGM13): sont modifiés pour choisir les modes de génération de forme d'onde, en fonction du tableau ci-dessous, pour une PWM rapide. Nous avons WGM11, WGM12 et WGM12 sont mis à 1.
Nous savons maintenant que PWM est un signal avec un rapport de service différent ou des temps d'activation différents. Jusqu'à présent, nous avons choisi la fréquence et le type de PWM. Le thème principal de ce chapitre se trouve dans cette section. Pour obtenir une ration de service différente, nous allons choisir une valeur entre 0 et 255 (2 ^ 8 à cause de 8 bits). Disons que nous choisissons une valeur 180, car le compteur commence à compter à partir de 0 et atteint la valeur 180, la réponse de sortie peut être déclenchée. Ce déclencheur peut être inverseur ou non inverseur. C'est-à-dire que la sortie peut être appelée à tirer vers le haut en atteignant le décompte, ou elle peut être dite à tirer vers le bas en atteignant le décompte.
VERT (COM1A1, COM1A0): Cette sélection de tirage vers le haut ou vers le bas est choisie par les bits CM1A0 et CM1A1.
Comme indiqué dans le tableau, pour que la sortie devienne élevée, comparez et la sortie restera élevée jusqu'à la valeur maximale. Nous devons choisir le mode d'inversion pour ce faire, donc COM1A0 = 1; COM1A1 = 1.
Comme le montre la figure ci-dessous, OCR1A (Output Compare Register 1A) est l'octet qui stocke la valeur choisie par l'utilisateur. Donc, si nous changeons OCR1A = 180, le contrôleur déclenche le changement (haut) lorsque le compteur atteint 180 à partir de 0.
OCR1A doit être 19999-600 pour 180 degrés et 19999-2400 pour 0 degré.