interference moteur sur lcd

bonjour,

j'utilise un arduino pour la gestion complète de mon aquarium.
il déclenche plusieurs pompe (en relais sur 220v pompe de brassage et sur du 12v osmolation)
1 fois sur 5 le déclenchement des moteurs trouble mon lcd (16*2)
a la place de l'affichage classique il y a des hiéroglyphe.

nul doute qu'il s'agit d’interférence.

que faut t'il faire pour évité cela ? et si possible sans démonter mon boitier "arduino".

merci

bonjour,
sans le code ca sera plus difficile de répondre.
tu peux sinon réllonger les cables et éloigner les relais et transfo.
mais je penche sur un défaut d'alim et ca tire trop sur le nono lors des déclenchements relais.

"je penche sur un défaut d'alim et sa tire trop sur le nono lors des déclenchements relais."
nono ?
quelle solution ?
un transfo + puissant ? (actuellement 12v 7a)

#include "LiquidCrystal.h"
#include "WProgram.h"
#include "Wire.h"
#include "DS1307.h"

LiquidCrystal lcd(7, 2, 3, 4, 5, 6);
int pompe = 8;
int soleil = 9;
int ventilateur = 10;
int brassage = 11;
int led = 12;
int niveau = 13;

int valeurPWM=0;

int minut;
int heure;
int seconde;
int time;

float sensorPin;
float temp;
float temp1;
float Vact = 0;  // variable valeur instantanée
int Fd=20; // facteur de division de la moyenne = moyenne toutes les FD boucles ici 20
long Accm=0; // accumulateur pour moyenne
int Nbcl=0; // compteur de boucles
float vitventilo;
int off;

void setup() {
  
  lcd.begin(16,2);
Serial.begin(9600);

  pinMode(pompe, OUTPUT);  
  pinMode(ventilateur, OUTPUT);  
  pinMode(soleil, OUTPUT);  
  pinMode(led, OUTPUT);  
  pinMode(brassage, OUTPUT); 
  pinMode(niveau, INPUT);
} 
  
  
  void loop(){
  
sensorPin = analogRead(0);
Vact = ((sensorPin*0.5)+1.5)*100 ;
Accm=Accm+Vact;
Nbcl ++;

if (Nbcl == Fd) { 
  temp1 = (Accm / Fd) ;
  temp = temp1/100;
  Accm= Accm-(Accm/20) ;
  Nbcl= 19;
  }   
else{
   temp = (Accm / Nbcl) ;
   temp = temp/100;   
   }

//Récupération de l'heure du DS1307**********************************************************************************************
  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,true);
  seconde = RTC.get(DS1307_SEC,true);
  time = (heure * 100) + minut;
  
//Affichage ******************************************************************************************
 lcd.setCursor(0,0);
   lcd.print ("  AQUA GESTION  ");
   lcd.setCursor(0,1);
   lcd.print("     ");
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(heure);
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(minut);
lcd.print("      ");
  delay (5000);
lcd.setCursor(0,1);
lcd.print("     ");
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("     ");
  delay (5000);


 //*****Controle des sorties eclairage *********
 //***on-off***** soleil ***
  
 if ((time >= 9300) && (time < 1045)){ 
    valeurPWM = map(time, 930, 1044, 0, 255);
    analogWrite (soleil, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" + + soleil + + ");
    delay(5000);
  }
 else if ((time >= 2215) && (time < 2300)){  
   valeurPWM = map(time, 2215, 2259, 255, 0);
    analogWrite (soleil, valeurPWM); 
lcd.setCursor(0,1);
    lcd.print(" - - soleil - - ");
    delay(5000);
  }   
  else if ((time >= 1045 ) && (time < 2230)) {
    analogWrite(soleil, 255);
  }
else {
    analogWrite(soleil, 0);
      lcd.setCursor(0,1);
    lcd.print("   BONNE NUIT   ");
    delay(5000);
}


//***on-off*****led 1w***
     if((time >= 1040) && (time < 2235)){
    digitalWrite(led, HIGH);
   }
  else{
    digitalWrite(led, LOW);
   }
    
    
//***on-off***** brassage ***
if((time >= 1045) && (time < 2230)){
    digitalWrite(brassage, HIGH);
   }
  else{
    digitalWrite(brassage, LOW);
   }

//***on-off***** ventilateur  ***

lcd.setCursor(0,0);
lcd.print("     ");
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("     ");

if (temp1 > 2900){
  temp1 = 2900;
}
 
 if (temp1 < 2620){
  temp1 = 2620;
}

 vitventilo = map(temp1,2620,2900, 0, 255);
 analogWrite(ventilateur, vitventilo);

  lcd.setCursor(0,1);
    lcd.print("ventilateur ");
        off = ((vitventilo*100)/255);
    if (off == 0){
    lcd.print(" OFF");
    delay(5000);
    }
    
    else {
    lcd.print((vitventilo*100)/255);
    lcd.print("% ");
    delay(5000);
    }

//***on-off***** pompe ***
if (digitalRead (niveau) == HIGH)
{
   lcd.setCursor(0,1);
    lcd.print("niveau d'eau BAS");
    delay(5000);
 
 if ((minut % 10)== 0) {
     lcd.setCursor(0,1);
    lcd.print("  ajout  d'eau  ");
    digitalWrite(pompe, HIGH);
    delay (2000);
    digitalWrite(pompe, LOW);
}
}

 else if (digitalRead (niveau) == LOW){
      lcd.setCursor(0,1);
    lcd.print("niveau d'eau  OK");
    delay(5000);
 digitalWrite(pompe, LOW);
} 

 }

???
svp
merci

Ce probleme peut venir du cablage ou de l'alimentation.
Tu ne donnes aucune info ni sur l'un ni sur l'autre.
Comme disais un internaute sur la partie anglaise de ce forum : "Ma boule de cristal est a l'entretien. Je ne sais pas t'aider pour le moment" :smiley:

Je parie sur une mauvaise masse. Plusieurs options, les plus classiques : tirer une vraie masse depuis le LCD jusqu'à l'alim, ajouter des condensateurs au plus proche du LCD (un polarisé genre quelques dizaines/centaines de µF + 1 non-polarisé 1µF)

la masse par de l'arduino jusque au lcd
j'ai ajouter un condo polarisé de 22uf ... le probleme persiste ...

Bonjour

Il faut également antiparasiter le contact.

C'est a dire ?
je suis novice ?

100n (ou 220n) / 400V copié de çà : Electronique - Realisations - Interfaces 230V 001
Sinon, le principe du Triac de ce lien me permets d'éviter tous parasites sur mes commandes de pompes.

J'ai fais un petit récap ici :
http://www.cap-recifal.com/topic/828-arduino-lautomatisation-à-la-portée-des-bricoleurs/?p=23781

Bubule:
100n (ou 220n) / 400V copié de çà : Electronique - Realisations - Interfaces 230V 001
Sinon, le principe du Triac de ce lien me permets d'éviter tous parasites sur mes commandes de pompes.

J'ai fais un petit récap ici :
ARDUINO l'automatisation à la portée des bricoleurs - Page 3 - Securité, mesures, gestion de l'aquarium - Cap Récifal

Réponse pertinente s'il avait utilisé des triacs xD

Oui, ...pour l'avenir.
Cependant, cela fonctionne également en mettant le condensateur en // du contact du relais.

donc il faudrait mettre un condo sur les pompe aussi c sa ?

Oui, mais aux bornes du contact du relais

ok je fait et je revient vers vous.
j'ai remarquer aussi que j'ai le meme probleme lorsque je branche et debranche un appareil qui est sur la meme multi prise que le transfo qui alimente l'arduino.

Question comme ça est que ton transfo est mis a la terre ?
ton problème vien peut-être de ta barre d'alientation.
tu pourrais esseiller de brancher ta carte sur une autre alimentation.

depuis l’installation du condo sur l'alimentation lcd le "beug" est plus présent qu'avant.
je les donc retiré

mon transfo n'as pas la terre.

l'intalation est comme ceci,
transfo 12v 5a.
connecter a 2 barette de distribution avec condo 2000uf
les sorties alimente:
arduino
eclairage led via relais et driver dimmable
pompe d'osmolation via relais
ventilation via driver dimmable

j'ai remarquer aussi que j'ai le meme probleme lorsque je branche et debranche un appareil qui est sur la meme multi prise que le transfo qui alimente l'arduino.

est que ta pompe est brancher sur la même multi prise que ton transfo
si oui ton problème survien quand ta pompe démarre et arrêt.
ton problème est peut-être juste ta multi prise.

oui enfin il s'agit d'un prise sur la meme ligne (dijoncteur) mais pas la meme multi prise.

c'est encore pire ...
l’écran affiche des hieroglife sans que quoi que se soit se déclenche ...