Bonjour,
Électronicien en herbe je découvre ce domaine grâce à un arduino UNO acheté en starter kit.
J'ai réalisé un mix de plusieurs des projets proposés dans le book qui accompagne le kit.
Mon but est de commander deux ventilateurs en parallèle (12VDC-120mA) d'une tour d'ordinateur qui sont asservis via l'arduino à un capteur de T°.
Les ventilateurs ont une vitesse fixe.
J'affiche la valeur de la T° sur l'écran LCD
Le code fonctionne à merveille, mais voilà ... Lorsque les ventilateurs s'arrêtent, l'affichage LCD disparaît (l'écran reste allumé, mais les caractères ne s'affichent plus).
La commande des ventilateurs se fait par une sortie numérique de l'arduino via le MOSFET IRF520, en parallèle des moteurs j'ai placé une diode, j'ai également testé avec une capa de 100uF en plus, mais cela ne change rien.
Seul le reset de l'arduino ou l'activation de la transmission série ranime l'écran.
Que pourrai-je faire pour éviter ce problème d'affichage ??
Merci pour vos pistes expertes !
NOTA: l'ensemble du matériel utilisé en dehors des ventilateurs sont dans le kit
le code, desfois que cela vienne de là ....
//Thermostat à consigne fixe
//Affichage des températures ambiante et système sur LCD 2 lignes - 16 caractères
//L'arduino commande un couple de ventilateurs par le biais d'un transistors MOSFET
const int thermoSensorPin = A1; // Pin Capteur T°
const int consigne = 35; // Consigne
int temperature = 0; // T° capteur
int ventilL = 7; // MOSFET
int nb_mesure = 50;// Nb mesures du capteur pour faire la moyenne
int mesure_brute = 0;//Lecture du capteur
int cumul = 0;//somme des valeurs du capteur
int moyenne = 0;//valeur moyenne du capteur fonction du nb de mesure
unsigned long tempo = 20000; //Durée minimale de fonctionnement des ventilos
unsigned long departTempo = 0; //Valeur de millis() lorsque T°>consigne
#include <LiquidCrystal.h> //Appel la bibliothèque LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Connecteurs du LCD utilisés (4bits)
void setup() {
pinMode(ventilL, OUTPUT);
lcd.begin(16, 2); //Mise en fonctin du LCD sur 2 lignes de 16 caractères chacune
Serial.begin(9600);
}
void loop() {
//mesure et calcul de la moyenne de T°
for (int i=0; i<nb_mesure; i++) // répète la mesure du capteur à chaque boucle
{
mesure_brute=analogRead(thermoSensorPin);
cumul=cumul+mesure_brute;
}
moyenne=cumul/nb_mesure;
cumul=0;
lcd.setCursor(0, 1); //défini le début de la position des caractères à afficher 0=1er caractère et 1=2ème ligne
lcd.print("Sys/sens: ");//Ecris Sys/sens: sur l'écran du LCD
temperature = ((((moyenne / 1024.0) * 5.0) - .5) * 100)+8; //+8 T° corrigée pour "coller" à celle du sensor système
lcd.print(temperature); //écrit la valeur à la suite
lcd.print('/');
lcd.print(temperature-8);//écrit la valeur à la suite
Serial.println(temperature);
if (temperature >= consigne) { //Si la T° du capteur est supérieure à la T° de consigne
departTempo = millis();//valeur de millis() stocké dans la variable departTempo
}
delay (10);//mise en pause du programe pdt 10ms
if ((tempo > (millis() - departTempo))&& (temperature > consigne)) { //Marche
digitalWrite(7, HIGH);
}
else if ((tempo < (millis() - departTempo))&& (temperature < consigne)) { //Arrêt
digitalWrite(7, LOW);
}
delay (500);
}