Dans ce projet, nous allons concevoir un circuit de mesure de température. Ce circuit est développé à l'aide du « LM35 », un capteur de tension linéaire. La température est généralement mesurée en «Centigrades» ou «Faraheite». Le capteur «LM35» fournit une sortie basée sur une échelle de centigrades.
Le LM35 est un appareil semblable à un transistor à trois broches. Il a VCC, GND et OUTPUT. Ce capteur fournit une tension variable à la sortie en fonction de la température.
Comme le montre la figure ci-dessus, pour chaque augmentation de température de +1 centigrade, il y aura une sortie plus élevée de + 10 mV. Donc, si la température est de 0 ° C, la sortie du capteur sera de 0 V, si la température est de 10 ° C, la sortie du capteur sera de + 100 mV, si la température est de 25 ° C, la sortie du capteur sera de + 250 mV.
Donc pour l'instant, avec LM35, nous obtenons la température sous forme de tension variable. Cette tension dépendante de la température est donnée comme entrée du convertisseur analogique-numérique (ADC) de l'ATMEGA32A. La valeur numérique après conversion obtenue est affichée sur l'écran LCD 16x2 sous forme de température.
Composants requis
Matériel: Microcontrôleur ATMEGA32, alimentation (5v), PROGRAMMATEUR AVR-ISP, JHD_162ALCD (16x2LCD), condensateur 100uF (deux pièces), condensateur 100nF, capteur de température LM35.
Logiciel: Atmel studio 6.1, progisp ou flash magic.
Schéma de circuit et explication
Dans le circuit, le PORTB d'ATMEGA32 est connecté au port de données de l'écran LCD. Ici, il faut se rappeler de désactiver la communication JTAG dans PORTC ou ATMEGA en changeant les octets de fusible, si l'on veut utiliser le PORTC comme port de communication normal. Dans l'écran LCD 16x2, il y a 16 broches sur tout s'il y a un rétro-éclairage, s'il n'y a pas de rétro-éclairage, il y aura 14 broches. On peut alimenter ou laisser les broches du rétroéclairage. Or, dans les 14 broches, il y a 8 broches de données (7-14 ou D0-D7), 2 broches d'alimentation en énergie (1 et 2 ou VSS et VDD ou GND et + 5v), 3 ème broches de la commande de contraste (VEE-contrôle l'épaisseur des caractères doivent être illustré), 3 broches de commande (RS & RW & E).
Dans le circuit, vous pouvez observer que je n'ai pris que deux broches de contrôle car cela donne la flexibilité d'une meilleure compréhension. Le bit de contraste et READ / WRITE ne sont pas souvent utilisés afin qu'ils puissent être court-circuités à la masse. Cela met l'écran LCD en mode de contraste et de lecture le plus élevé. Nous avons juste besoin de contrôler les broches ENABLE et RS pour envoyer des caractères et des données en conséquence.
Les connexions effectuées pour l'écran LCD sont indiquées ci-dessous:
PIN1 ou VSS ------------------ masse
PIN2 ou VDD ou VCC ------------ + 5v d'alimentation
PIN3 ou VEE --------------- masse (donne le meilleur contraste pour un débutant)
PIN4 ou RS (sélection de registre) --------------- PD6 de uC
PIN5 ou RW (lecture / écriture) ----------------- masse (met l'écran LCD en mode lecture facilite la communication pour l'utilisateur)
PIN6 ou E (Activer) ------------------- PD5 de uC
PIN7 ou D0 ----------------------------- PB0 de uC
PIN8 ou D1 ----------------------------- PB1 de uC
PIN9 ou D2 ----------------------------- PB2 de uC
PIN10 ou D3 ----------------------------- PB3 de uC
PIN11 ou D4 ----------------------------- PB4 de uC
PIN12 ou D5 ----------------------------- PB5 de uC
PIN13 ou D6 ----------------------------- PB6 de uC
PIN14 ou D7 ----------------------------- PB7 de uC
Dans le circuit, vous pouvez voir que nous avons utilisé une communication 8 bits (D0-D7) mais ce n'est pas obligatoire, nous pouvons utiliser une communication 4 bits (D4-D7) mais avec un programme de communication 4 bits devient un peu complexe, j'ai donc choisi le 8 bits la communication.
Donc, à partir de la simple observation du tableau ci-dessus, nous connectons 10 broches de l'écran LCD au contrôleur dans lequel 8 broches sont des broches de données et 2 broches pour le contrôle. La sortie de tension fournie par le capteur n'est pas complètement linéaire; ce sera bruyant. Pour filtrer le bruit, un condensateur doit être placé à la sortie du capteur comme indiqué sur la figure.
Avant d'aller de l'avant, nous devons parler de l'ADC d'ATMEGA32A. Dans ATMEGA32A, nous pouvons donner une entrée analogique à l'un des huit canaux de PORTA, peu importe le canal que nous choisissons car tous sont identiques. Nous allons choisir le canal 0 ou PIN0 de PORTA. Dans ATMEGA32A, l'ADC a une résolution de 10 bits, de sorte que le contrôleur peut détecter un changement minimum de Vref / 2 ^ 10, donc si la tension de référence est de 5V, nous obtenons un incrément de sortie numérique pour chaque 5/2 ^ 10 = 5mV. Ainsi, pour chaque incrément de 5 mV dans l'entrée, nous aurons un incrément de un à la sortie numérique.
Nous devons maintenant définir le registre d'ADC en fonction des termes suivants:
Tout d'abord, nous devons activer la fonction ADC dans ADC.
2. Puisque nous mesurons la température ambiante, nous n'avons pas vraiment besoin de valeurs au-delà de cent degrés (sortie 1000mV du LM35). Nous pouvons donc configurer la valeur maximale ou la référence de l'ADC à 2,5V.
3. Le contrôleur a une fonction de conversion de déclenchement, ce qui signifie que la conversion ADC n'a lieu qu'après un déclenchement externe, car nous ne voulons pas que nous ayons besoin de définir les registres pour que l'ADC fonctionne en mode de fonctionnement libre continu.
4. Pour tout ADC, la fréquence de conversion (valeur analogique en valeur numérique) et la précision de la sortie numérique sont inversement proportionnelles. Donc, pour une meilleure précision de la sortie numérique, nous devons choisir une fréquence moindre. Pour une horloge ADC moindre, nous réglons la prévente de l'ADC à la valeur maximale (128). Puisque nous utilisons l'horloge interne de 1MHZ, l'horloge de l'ADC sera (1000000/128).
Ce sont les quatre seules choses que nous devons savoir pour démarrer avec ADC. Les quatre fonctionnalités ci-dessus sont définies par deux registres.
ROUGE (ADEN): Ce bit doit être défini pour activer la fonction ADC d'ATMEGA.
BLEU (REFS1, REFS0): Ces deux bits sont utilisés pour définir la tension de référence (ou tension d'entrée max que nous allons donner). Puisque nous voulons avoir une tension de référence de 2,56 V, REFS0 et REFS1 doivent tous deux être définis, par la table.
VERT CLAIR (ADATE): Ce bit doit être défini pour que l'ADC fonctionne en continu (mode de fonctionnement libre).
PINK (MUX0-MUX4): Ces cinq bits sont destinés à indiquer le canal d'entrée. Puisque nous allons utiliser ADC0 ou PIN0, nous n'avons pas besoin de définir de bits comme dans la table.
MARRON (ADPS0-ADPS2): ces trois bits servent à régler le préscalaire pour ADC. Sice que nous utilisons un préscalaire de 128, nous devons définir les trois bits.
VERT FONCE (ADSC): ce bit est défini pour que l'ADC commence la conversion. Ce bit peut être désactivé dans le programme lorsque nous devons arrêter la conversion.
Pour réaliser ce projet avec Arduino, consultez ce tutoriel: Thermomètre numérique utilisant Arduino
Explication de la programmation
Le fonctionnement de la mesure de température est mieux expliqué étape par étape du code C donné ci-dessous:
#include // en-tête pour activer le contrôle du flux de données sur les broches
#define F_CPU 1000000 // indiquant la fréquence du cristal du contrôleur connecté
#comprendre
#define E 5 // donnant le nom «enable» à la 5 ème broche de PORTD, car elle est connectée à la broche d'activation de l'écran LCD
#define RS 6 // donnant le nom «registerselection» à la 6 ème broche de PORTD, car elle est connectée à la broche RS de l'écran LCD
void send_a_command (commande char non signée);
void send_a_character (caractère char non signé);
void send_a_string (char * string_of_characters);
int main (void)
{
DDRB = 0xFF; // mettant portB et portD comme broches de sortie
DDRD = 0xFF;
_delay_ms (50); // donnant un délai de 50ms
DDRA = 0; // Prenant portA comme entrée.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}