Bonjour à tous,
j’ai appris l’utilisation de l’Arduino grâce à tous vos exemples et cours, merci à tous.
J’ai fait un croquis qui me permet de piloter une pompe de circulation de l’eau de ma piscine dans un capteur solaire de 33 m² que j’ai fabriqué.
Le pilotage réalise :
- La mise en service de la pompe si la température de mon capteur est supérieure à une Température Haute définie dans le programme ici 40°C
- L’arrêt de la pompe si la température de mon capteur est inférieure à une Température Basse définie dans le programme ici 36°C
- La mise en service de la pompe si la température de mon capteur est inférieure à une Température Gel définie dans le programme ici 2°C
L’ensemble fonctionne bien depuis 5 ans et mon écran LCD 16*2 type 1602 à claquer, je l’ai remplacé par un écran identique mais en I2C.
Là j’ai le même problème que beaucoup d’entre vous, l’ensemble fonctionne très bien tant que l’alimentation 12V de commande du relais n’est pas alimentée.
Dès que je met l’alimentation 12V le programme se bloque et l’écran soit affiche n’importe quoi soit reste bleu sombre bien que je n’ai branché aucune charge sur les sorties 240V du relais.
Je pense avoir des problème de parasites comme j’ai lu sur plusieurs topics mais je ne suis pas électronicien et je ne sais pas résoudre mon problème.
J’utilise une carte Arduino Uno REV3
Merci par avance pour votre aide.
Je me permet de vous joindre : - mon schéma électronique (d’un mécanicien :}) en retraite)
- mon schéma d’implantation des composants sur un circuit imprimé
- mon code source du croquis si cela peut servir à d’autres
// Déclarer les bibliothèques spéciales
#include <Wire.h>
#include<LiquidCrystal_I2C.h> // bibliothèque LCD - I2C
// Régler l'adressage de l'écran LCD
LiquidCrystal_I2C lcd(0x27,16,2);
// Écrire le code du SETUP, exécuter qu’une seule fois
void setup() {
lcd.init(); // Initialisation de l'écran LCD
Serial.begin(9600); // Réglage de la sortie série à 9600 bauts pour communiquer avec le moniteur du portable
pinMode(2,OUTPUT); // Définition de la broche digital D2 en mode sortie utilisée pour piloter le relais de puissance de la pompe
}
// Déclaration des constantes
float U5V = 5.0; // Alimentation des thermistances Capteur et Piscine
float RC = 10000.0; // Résistance de la thermistance Capteur
float RP = 10000.0; // Résistance de la thermistance Piscine
int FT = 0; // Sens de variation de la température capteur FT=0 T augmente FT=1 T diminue
int GEL = 0; // Fonctionnement lors de gel capteur GEL=0 pas de gel GEL=1 capteur en sécurité
float T_H = 40.0; // Température haute capteur où la pompe se met en marche
float T_B = 36.0; // Température basse capteur où la pompe se coupe
float T_CM = 0.0; // Température Capteur Maximale
float T_CMini = 100.0; // Température Capteur Minimale
float T_G = 2.0; // Température de gel capteur, la pompe se met en marche continue par sécurité
// Déclaration des constantes Steinhart de la sonde CTN 10K Capteur
float AC = 1.133618908E-3;
float BC = 2.333942596E-4;
float CC = 0.9056118493E-7;
// Déclaration des constantes Steinhart de la sonde CTN 10K Piscine
float AP = 1.022798253E-3;
float BP = 2.530888021E-4;
float CP = 0.002511372037E-7;
// Écrire le code Programme, exécuter en boucle infinie
void loop() {
lcd.backlight(); // Activer le rétro éclairage
int TSCA = analogRead(A0); // TempSondeCapteurAnalogique (Lire en nombre entier la tension Analogique broche A0 de la sonde Capteur)
float TSCV = TSCA * (5.0 / 1023.0); // TempSondeCapteurVolt (Convertir cette valeur (de 0 - 1023) en volt (de 0 - 5V))
float TSCR = (TSCV*RC)/(U5V-TSCV); // TempSondeCapteurOhm (calcul de la résistance en Ohm de la sonde Capteur)
float TSCK = AC + (BC*log(TSCR)) + (CC*pow(log(TSCR),3)); // TempSondeCapteurKelvin (calcul de la température en degré Kelvin de la sonde Capteur)
float TSCC = (1/TSCK) - 273.15; // TempSondeCapteurCelsius (calcul de la température en degré Celsius de la sonde Capteur)
// CDT1 Passage de Temp Basse en phase descendante de la température
if(FT == 1 && TSCC < T_B){ // SI Temp Capteur diminue ET est inf à Temp Basse alors coupure du moteur sur sortie D2
digitalWrite(2,LOW);
FT = 0;
}
// CDT2 Passage entre Temp basse et Temp Haute en phase montante de la température
if(FT == 0 && TSCC > T_B){ // SI Temp Capteur augmente ET est sup à Temp Basse alors coupure du moteur sur sortie D2
digitalWrite(2,LOW);
FT = 0;
}
// CDT3 Capteur dont la température est supérieure à Temp Haute
if(FT == 1 || TSCC > T_H){ // SI Temp Capteur diminue OU est sup à Temp Haute alors marche du moteur sur sortie D2
digitalWrite(2,HIGH);
FT = 1; // Gestion du sens d'évolution de la température
}
// CDT4 Mise en marche en continue de la pompe si risque de gel
while(TSCC < T_G) { // TANT QUE Temp Capteur inf à Temp Gel alors
digitalWrite(2,HIGH); // marche du moteur sur sortie D2
int TSCA = analogRead(A0);
float TSCV = TSCA * (5.0 / 1023.0);
float TSCR = (TSCV*RC)/(U5V-TSCV);
float TSCK = AC + (BC*log(TSCR)) + (CC*pow(log(TSCR),3));
TSCC = (1/TSCK) - 273.15;
GEL = 1; // Capteur en mode sécurité
int TSPA = analogRead(A1);
float TSPV = TSPA * (5.0 / 1023.0);
float TSPR = (TSPV*RP)/(U5V-TSPV);
float TSPK = AP + (BP*log(TSPR)) + (CC*pow(log(TSPR),3));
float TSPC = (1/TSPK) - 273.15;
lcd.home(); // Positionne le curseur en colonne 0 et ligne 0 coin haut gauche
lcd.print("T Capteur ="); // Affichage du texte T Capteur =
lcd.setCursor(11,0); // Positionne le curseur colonne 12(11+1) et ligne 1 (0+1)
lcd.print(TSCC,1); // Ecrit la variable TSCC
lcd.setCursor(15,0); // Positionne le curseur colonne 16(15+1) et ligne 1 (0+1)
lcd.print("C"); // Ecrit le texte C
lcd.setCursor(0,1);
lcd.print("T Piscine =");
lcd.setCursor(11,1);
lcd.print(TSPC,1);
lcd.setCursor(15,1);
lcd.print("C");
}
// Gestion de sortie de la phase gel
if(GEL == 1){ // SI le programme sort du mode sécurité
digitalWrite(2,LOW); // Arrêt pompe
GEL = 0; // Réinitialisation de la variable GEL
FT = 0; // Réinitialisation de la variable FT (Gestion du sens d'évolution de la température)
}
// Gestion de l'affichage de la température Capteur et Piscine
int TSPA = analogRead(A1); // TempSondePiscineAnalogique (Lire en nombre entier la tension Analogique broche A1 de la sonde Piscine)
float TSPV = TSPA * (5.0 / 1023.0); // TempSondePiscineVolt (Convertir cette valeur (de 0 - 1023) en volt (de 0 - 5V))
float TSPR = (TSPV*RP)/(U5V-TSPV); // TempSondePiscineOhm (calcul de la résistance en Ohm de la sonde Piscine)
float TSPK = AP + (BP*log(TSPR)) + (CP*pow(log(TSPR),3)); // TempSondePiscineKelvin (calcul de la température en degré Kelvin de la sonde Piscine)
float TSPC = (1/TSPK) - 273.15; // TempSondePiscineCelsius (calcul de la température en degré Celsius de la sonde Piscine)
lcd.home();
lcd.print("T Capteur =");
lcd.setCursor(11,0);
lcd.print(TSCC,1);
lcd.setCursor(15,0);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("T Piscine =");
lcd.setCursor(11,1);
lcd.print(TSPC,1);
lcd.setCursor(15,1);
lcd.print("C");
delay(2000); // Temporisation de 2000 millisecondes soit 2 s
// Gestion de l'affichage de la température maximale du Capteur
if(T_CM < TSCC) {
T_CM = TSCC;
}
lcd.home();
lcd.print("T Capteur =");
lcd.setCursor(11,0);
lcd.print(TSCC,1);
lcd.setCursor(15,0);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("T Cap Max =");
lcd.setCursor(11,1);
lcd.print(T_CM,1);
lcd.setCursor(15,1);
lcd.print("C");
delay(2000);
// Gestion de l'affichage de la température minimale du Capteur
if(T_CMini > TSCC) {
T_CMini = TSCC;
}
lcd.home();
lcd.print("T Capteur =");
lcd.setCursor(11,0);
lcd.print(TSCC,1);
lcd.setCursor(15,0);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("T Cap Min =");
lcd.setCursor(11,1);
lcd.print(T_CMini,1);
lcd.setCursor(15,1);
lcd.print("C");
Serial.println(" Fin programme ");
delay(2000);
}
Schéma électronique V2.pdf (57.3 KB)
Circuit électronique V2.pdf (36.8 KB)