Système de Contrôle Automatique de la Température à l’aide du PIC Microcontrôleur – mikroC
English
Regardez la partie 1 du tutoriel vidéo:
Un système de contrôle automatique de la température a la possibilité de surveiller et de contrôler la température d’un espace spécifié sans intervention humaine. L’objectif principal est de gérer la température d’une zone donnée en fonction des paramètres spécifiés par un utilisateur du système.
Figure 1: Schéma synoptique du contrôle automatique de la température
Ce projet utilise un microcontrôleur PIC pour contrôler automatiquement la température d’une zone. Cette zone pourrait être une petite usine, une maison ou tout autre lieu ou un dispositif qui nécessite une température contrôlée comme un incubateur (œuf) par exemple. La figure 1 représente le schéma synoptique du système à concevoir. Le réglage de la température désirée est entré en utilisant un clavier. La température de la zone est mesurée à l’aide d’un capteur de température analogique, le capteur de température à circuit intégré de précision LM35 est utilisé pour cela.
Le microcontrôleur lit la température continuellement et la compare à la valeur souhaitée. Si la valeur souhaitée est supérieure à la valeur mesurée, le chauffage est activé pour pour chauffer la pièce. Le chauffage est éteint une fois la température désirée atteinte. Si, par contre, la valeur mesurée est supérieure à la valeur souhaitée, le ventilateur est activé pour refroidir la pièce jusqu’à ce que la température requise soit atteinte. Si la température atteint une valeur critique de 40 °C ou plus, l’avertisseur sonore retentit continuellement et une LED clignote jusqu’à ce que la température baisse en dessous de 40 °C.
Ce projet est complet et peut être utilisé comme base pour le projet de fin d’année destiné aux étudiants en génie.
La figure 2 montre le schéma de circuit du projet. L’écran LCD est connecté au PORTC. Le capteur de température LM35 est connecté à la broche d’entrée analogique AN0 (RA0). Un clavier 3×4 est connecté au PORTB. La touche ‘*‘ du clavier est utilisée pour effacer la valeur saisie lors de la configuration de la température et la touche « # » est utilisée pour ENTRER (sauvegarder) le réglage sur EEPROM interne du microcontrôleur. Le dispositif de chauffage et le ventilateur sont commandés par des relais commandés par des transistors et sont reliés aux broches RD0 et RD1 du microcontrôleur respectivement.
Au démarrage, il lit la température de référence dans l’EEPROM interne PIC, si aucune valeur n’est enregistrée, l’utilisateur est invité à entrer une nouvelle température de référence et à l’enregistrer dans l’EEPROM interne PIC. En fonctionnement, vous pouvez appuyer sur le bouton « * » pendant 3 secondes pour accéder à nouveau au menu de configuration si vous devez définir une nouvelle température de référence.
Figure 2: Le schéma de circuit du Contrôle automatique de la température
Remarque: Dans la conception du matériel, il est toujours recommandé de ne pas laisser les broches inutilisées flotter. Vous pouvez les définir comme sortie et les connecter à la terre de préférence via une résistance de tirage pour éviter les interférences électromagnétiques. Comme la broche RB3 inutilisée peut être un bon candidat.
Attention: Les spécifications des des relais (tension, courant, puissance) doivent dépendre des spécifications de l’appareil de chauffage et du ventilateur. Si vous décidez d’utiliser l’appareil de chauffage et ventilation d’une tension nominale de 220V, utiliser des relais appropriés qui sont capables de supporter cette tension. La tension de la bobine doit être de préférence 5V et avec un faible courant que le transistor BC108 peut être à mesure de supporter, ou vous pouvez utiliser un notre transistor différent. S’il vous plaît respectez les consignes de sécurité. 220V (ou 110V si vous vivez aux Etats-Unis) est très dangereuse, si vous n’avez jamais travaillé avec une haute tension avant, s’il vous plaît demander de l’aide, ne pas essayer de le faire vous même.
Code MikroC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
/* * Nom du projet: Automatic Temperature Control * Copyright: (c) www.studentcompanion.co.za, 2018. * Test configuration: MCU: PIC18F45K22 http://ww1.microchip.com/downloads/en/DeviceDoc/41412D.pdf Oscillator: HS-PLL, 32.00000 MHz */ // Connexions du clavier char keypadPort at PORTB; // Fin de connexions du module clavier // Connexions de lécran LCD sbit LCD_RS at LATC4_bit; sbit LCD_EN at LATC5_bit; sbit LCD_D4 at LATC0_bit; sbit LCD_D5 at LATC1_bit; sbit LCD_D6 at LATC2_bit; sbit LCD_D7 at LATC3_bit; sbit LCD_RS_Direction at TRISC4_bit; sbit LCD_EN_Direction at TRISC5_bit; sbit LCD_D4_Direction at TRISC0_bit; sbit LCD_D5_Direction at TRISC1_bit; sbit LCD_D6_Direction at TRISC2_bit; sbit LCD_D7_Direction at TRISC3_bit; // fin de Connexions de lécran LCD #define HEATER PORTD.RD0 #define FAN PORTD.RD1 #define LED PORTD.RD3 #define ENTER 15 #define CLEAR 13 #define ON 1 #define OFF 0 void main() { unsigned short kp,Txt[14]; unsigned int Temp_Ref ; // Température de référence unsigned char inTemp; unsigned int temp; float mV, ActualTemp; ANSELC = 0; // Configurez PORTC comme des broches d'entrée / sortie numériques ANSELB = 0; // Configurez PORTB comme des broches d'entrée / sortie numériques ANSELD = 0; // Configurez PORTD comme des broches d'entrée / sortie numériques TRISA0_bit = 1; //Configurez AN0 (RA0) comme des broches d'entrée TRISC = 0; //PORTC sont des sorties (LCD) TRISD0_bit=0; //RD0 est sortie (chauffage) TRISD1_bit=0; //RD1 est sortie (ventilateur) TRISD3_bit=0; //RD3 est sortie (LED) TRISB3_bit=0; //RB3 est sortie (non connecté) LATB.B3=0; //Conduire bas Keypad_Init(); // Initialiser le clavier Lcd_Init(); // Initialiser LCD Sound_Init(&PORTD, 2); // Initialiser la broche RD2 pour jouer le son Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1, 4, "Automatic"); Lcd_Out(2, 2, "Temp Control"); delay_ms(2000); //2s delay HEATER = OFF; FAN = OFF; //ON startup, read the Referance Temperature from EEPROM or the Keypad //Read Temp Ref from EEPROM Temp_Ref= EEPROM_Read(0x02); // Read data from EEPROM address 2 and store it in Temp_Ref variable if ((Temp_Ref > 0) & (Temp_Ref < 100)) { goto START_PROGRAM ; } else { START: Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1, 1, "Enter Temp Ref"); Temp_Ref=0; Lcd_Out(2, 1, "Temp Ref: "); while(1) { //Setup new Temp Ref do kp = Keypad_Key_Click(); // Store key code in kp variable while (!kp); if ( kp == ENTER )break; if (kp > 3 && kp < 8) kp = kp-1; if (kp > 8 && kp < 12) kp = kp-2; if (kp ==14)kp = 0; if ( kp == CLEAR )goto START; Lcd_Chr_Cp(kp + '0'); Temp_Ref =(10*Temp_Ref) + kp; } } Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1, 1, "Temp Ref: "); intToStr( Temp_Ref,Txt); //Convert to String inTemp=Ltrim(Txt); Lcd_Out_CP(inTemp); //Display Ref Temp EEPROM_Write(0x02,Temp_Ref); // Write Temp_Ref at address 2 of EEPROM Lcd_Out(2, 1, "Press # to Cont."); //Wait until # is pressed kp =0; while(kp!=ENTER) { do kp = Keypad_Key_Click(); // Store key code in kp variable while(!kp); } START_PROGRAM: Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1, 1, "Temp Ref: "); Lcd_Chr(1,15,223); // Different LCD displays have different // char code for degree Lcd_Chr(1,16,'C'); // Display "C" for Celsius //Program loop while(1) { //Display Referance Temperature and Actual Temperature temp = ADC_Read(0); //Read temperature from AN0 mV = temp * 5000.0/1023.0; //Convert to mV ActualTemp = mV/10.0 ; // Convert to degrees Celcius intToStr( Temp_Ref,Txt); //Convert to String inTemp=Ltrim(Txt); //Lcd_Out(1, 1, "Temp Ref: "); Lcd_Out(1, 11, inTemp); //Display Ref Temp Lcd_Out(2, 1, "Temp= "); FloatToStr(ActualTemp,Txt); //Convert to string Txt[4] = 0; Lcd_Out(2,7,Txt); Lcd_Out(2,12," "); //Compare ref temp with actual emp if (Temp_Ref > ActualTemp) //If Temp Ref is greater than actual Temp, Switch ON Heater { HEATER = ON, FAN = OFF; } if (Temp_Ref < ActualTemp) //If Temp Ref is less than actual Temp, Switch ON Fan { HEATER = OFF, FAN = ON; } if (Temp_Ref == ActualTemp) //If Temp Ref is equal to actual Temp, Switch OFF Fan and Heater { HEATER = OFF, FAN = OFF; } //Check if the '*' key is pressed kp = Keypad_Key_Press(); // Store key code in kp variable if ( kp == CLEAR ) { delay_ms(3000); //3s delay kp = Keypad_Key_Press(); // Store key code in kp variable if ( kp == CLEAR ) { goto START; } } //Sound the buzzer if (ActualTemp >= 40) //If Temp reaches critical temperature of 40. { Sound_Play(880, 300); // Play sound at 880Hz for 300ms LED = ~LED ; //Blink LED delay_ms(200); //200ms delay } else { LED = OFF; } } } |
Regardez la partie 2 du tutoriel vidéo:
Regardez la partie 3 du tutoriel vidéo:
Circuit imprimé du projet avec EAGLE
N’importe quel logiciel de conception de schéma de circuit imprimé peut être utilisé. Dans ce projet, nous avons utilisé EAGLE en raison de sa simplicité et de sa gratuité (la version gratuite comporte certaines limitations, mais pour les cartes simples à 2 couches comme celle-ci, ces limitations ne nous concernent pas).
La conception de PCB dans EAGLE est un processus en deux étapes. Nous allons d’abord concevoir le schéma, puis créer le circuit imprimé.
Commencez avec un nouveau projet EAGLE. Dans le panneau de configuration, sous «Projets», cliquez avec le bouton droit sur le répertoire dans lequel vous voulez enregistrer votre projet, nous préférons utiliser le répertoire EAGLE par défaut. Sélectionnez «Nouveau projet». Nommer votre projet avec un nom significatif.
Pour ajouter un schéma à un dossier de projet, cliquez avec le bouton droit de la souris sur votre dossier de projet, passez la souris sur «Nouveau» et sélectionnez «Schéma». Ajoutez les composants à l’aide de l’outil ADD et créez un schéma similaire à celui de la figure 3 ci-dessous.
Figure 3: Schéma de contrôle automatique de la température dans EAGLE
Créé le circuit imprimé à l’aide du logiciel EAGLE
Dans l’éditeur de schéma, cliquez sur le bouton Generate/Switch to Board dans la barre d’outils ou Passer à la carte dans le menu Fichier. Cela vous invitera à créer un nouveau tableau basé sur le schéma. Tous les composants que vous avez ajoutés depuis le schéma doivent être empilés les uns sur les autres, prêts à être placés et les router.
Placez tous les composants à l’aide de l’outil MOVE sur le plateau vide et router tous les liaisons équipotentielles. La carte est petite peut être facilement routée manuellement en utilisant l’outil ROUTE.
Figure 4: Circuit imprimé du contrôle automatique de la température
Nous avons routé toutes les traces sur la couche supérieure (couleur rouge) et avons créé un plan de masse sur la couche inférieure (couleur bleue) en ajoutant une couche de cuivre à l’aide de l’outil POLYGON.
Génération des fichiers Gerber
Maintenant que nous avons atteint le stade final de la conception du PCB, il est temps de générer les fichiers Gerber que nous pouvons envoyer à notre usine de fabrication pour construire nos cartes.
Les fichiers Gerber contiennent les données sur le PCB, où les traces, les pads, les trous sont placés, leur largeur, etc.
Cliquez sur l’icône du processeur CAM dans la barre d’outils. Mais il existe un autre moyen plus simple de générer des fichiers Gerber en ligne à partir du site Web de PCBWay, la société que nous utilisons pour fabriquer nos cartes de circuits imprimés.
Téléchargez simplement votre fichier de carte Eagle * .brd sur ce lien: https://www.pcbway.com/member/brdtogerber.aspx , leur convertisseur en ligne prend en charge les cartes Eagle de 1 à 10 couches. Voici les trois étapes faciles à suivre:
- Cliquez sur le bouton Browse for files pour télécharger votre fichier EAGLE board (.brd).
- Cliquez sur le bouton Run the Conversion pour générer des fichiers Gerber à partir de votre fichier EAGLE. Il y a aussi un visualiseur Gerber, cela vous donnera une dernière chance d’analyser votre PCB pour vous assurer que tout est correct avant de l’envoyer à votre usine de fabrication..
- Cliquez sur le bouton Download Gerber pour télécharger vos fichiers Gerber dans un format compressé. La figure 5 ci-dessous illustre le convertisseur en ligne.
Figure 5: Convertisseur en ligne de Gerber
Fabriquer le circuit imprimé
Dans toute conception électronique, la carte de circuit imprimé est l’un des éléments les plus importants, sa qualité affectant la qualité globale de tous ces appareils. Pour un prototypage rapide ou pour des produits commerciaux, il est toujours nécessaire de faire appel à un fabricant de circuits imprimés réputé, au lieu de le faire vous-même.
Il existe de nombreuses entreprises de fabrication de circuits imprimés dans le monde qui peuvent vous fabriquer des circuit imprimés de bonne qualité, mais trouver une entreprise capable de produire des cartes de haute qualité à un bon prix car le premier lot de tous les projets sera probablement limité. Vous devez teser avec succès d’abord avant de commander des cartes en grande quantité à un coût unitaire réduit. Vous devrez sélectionner une entreprise spécialisée dans les prototypes de PCB. L’un d’eux que nous avons utilisé s’appelle: PCBWay
Figure 6: PCBWay Page d’accueil
PCBWay.com est un fabricant chinois basé à Shenzhen, spécialisé dans le prototypage de circuits imprimés, la production de petits volumes et l’assemblage de circuits imprimés sous un même toit avec plus de dix ans d’expérience. Ils offrent des PCB rapides à un prix très économique. Des milliers d’ingénieurs, d’étudiants et d’amateurs utilisent leurs PCB pour leurs travaux et études quotidiens. Vous pouvez obtenir 10 cartes de circuit imprimé pour seulement 5 $.
Si vous êtes un étudiant en ingénierie ou un éducateur, vous pouvez obtenir votre PCB gratuitement auprès de PCBWay avec leur programme de parrainage de projets étudiants. Pour plus d’informations sur le programme de parrainage, veuillez cliquer ici: https://www.pcbway.com/sponsor.html
De la page d’accueil de PCBWay: https://www.pcbway.com/ ,Vous pouvez utiliser le système de devis en ligne gratuit pour obtenir votre prix instantanément et immédiatement après avoir entré quelques paramètres en ligne. Vous devez d’abord créer un compte avec eux gratuitement en cliquant sur « Rejoindre » dans le coin supérieur droit, comme illustré à la figure 6 ci-dessus.
Ci-dessous, sur la figure 7, la carte de circuit imprimé avec des composants en 3D.
Figure 7: Circuit imprimé du contrôle de température automatique avec composants en 3D
Vous pouvez télécharger les fichiers Gerber de ce projet gratuitement ou vous pouvez simplement commander la carte de circuit imprimé de ce projet à partir de ce lien: https://www.pcbway.com/project/shareproject/Automatic_Temperature_Control_System_with_PIC_Microcontroller.html
Chaque fois qu’une personne commande cette carte de circuit imprimé, nous obtiendrons une commission de 10% du coût total. C’est ainsi que vous pouvez également nous soutenir pour plus de tutoriels.
Regardez la partie 4 du tutoriel vidéo:
Vous pouvez télécharger le schéma Proteus et le code mikroC ci-dessous. Les fichiers sont compressés, vous devrez les décompresser (Téléchargez une version gratuite de l’utilitaire Winzip pour décompresser les fichiers).
MikroC Source Code: Automatic Temp Control mikroC Project
Proteus Schematic: Automatic Temp Control mikroC Proteus Schematic