Problème affichage LCD "saute" lors de l'arret moteurs

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);
}

comment est cablé le mosfet?

nota, la liaison série lors du téléversement, commence par faire un reset du µ.

dfgh:
comment est cablé le mosfet?

Bonjour merci pour votre réponse,

Voici le schéma, rien que de très classique me semble t il...

Que se passe t-il si tu débranches les ventilateurs et lorsque la commande arrêt est envoyée ??
Y a t-il toujours un plantage ?

ps: je n'ai pas regardé ton code.

tk5ep:
Que se passe t-il si tu débranches les ventilateurs et lorsque la commande arrêt est envoyée ??
Y a t-il toujours un plantage ?

Bonjour,

Non pas de plantage, le LCD semble très sensible ....

J'ai "résolu" le problème en faisant un lcd.begin(x,x) après l’arrêt des ventilateurs, c'est efficace mais certainement qu'il y aurait plutôt une solution hardware ???

Bonjour

Si tu utilises une breadboard pour tout cabler, le problème peut venir de là.
C'est pratique, mais les contacts sont d'une qualité médiocre, ce qui rend l'ensemble sensible à la moindre perturbation électrique. Il suffit de bouger un peu les fils "à chaud" pour s'en rendre compte.

De mon côté j'ai déjà constaté ce genre de soucis, qui ont disparu lorsque je suis passé en contacts soudés.
La qualité des fils fournis dans un starter kit peut également être médiocre.
Ne pas hésiter à compléter le start kit par des nappes dupontwire (prix dérisoire sur ebay)

à tout hasard

ta diode est dans le bon sens?

dfgh:
à tout hasard

ta diode est dans le bon sens?

Oui oui ^^'

Quant à la breadboard c'est possible, je verrai lorsque je passerai en circuit imprimé et soudé ...

Merci.