ça fait déjà un an que je bricole mon ARDUINO pour fabriquer un genre de thermostat de clim réversible.
contrairement au thermostat du commerce qui ouvre ou ferme mon débit d'air, celui ci doit juste le réguler.
j'ai un problème d'alimentation, tout marche très bien quand je maquette sur mon bureau (branchement USB sur mon PC), mais lorsque j'installe vraiment le Servo vacille et le LCD clignote.
ci joint le code et un schéma de cablage.
Explication :
Sur mon tableau de bord 5 bouton, un LCD 1602 et une sonde LM35 DZ
bouton 1 mode (chauffage ou clim)
bouton 2 affichage (change la visu sur LCD)
bouton 3 plus (augmente la temp voulu)
bouton 4 moins (diminue la temp voulu)
bouton 5 reset (en cas de BUG)
dans mes combles un Servo moteur qui ouvre (0°) ou ferme (90°) le débit de mon air pulsé
le but est simple en mode chaud
le programme demande de faire la différence entre la température de la pièce et la température voulu
et tu bouge le Servo de la différence.
EXEMPLE : je veux 20° et il fait 18° donc 2° d'écart tu ouvre le Servo de 2°... (en mode clim ça le ferme )
Je sais que mon code n'ai pas "propre" mais il fonctionne je pense avoir un Problème électronique.
Merci pour votre temps içi et votre aide.
// ce programme permet le controle d'un afficheur LCD 16*2 et avec sonde de temperature LM35DZ
// 5 bouton poussoir qui commande : MODE (chauffage ou clim) AFFICHAGE +/- pour la temperature souhaiter ET RESET EN CAS OU
// 1 servo qui ouvre ou ferme une bouche air pulsé
#include <LiquidCrystal.h> //bibliotèque
#include <Servo.h> // bibliothèque
int tempPin = 0; // declare la pin analogique de la sonde de temperature
int bouton = 1; // declare la pin analogique des valeurs bouton
int temp_voulu =20; // variable de temperature voulu au demarage
int angle = 45; //angle du servo au demarage
int contrast=100; // variable de contraste LCD pin D6
int mode=0; //variable mode 0 = chauffage par default(haut)
int dif =0; //ecart de temperature a 0
int valeur_bouton = 0;
#define bouton_mode 0
#define bouton_affichage 1
#define bouton_plus 2
#define bouton_moins 3
#define bouton_reset 4
#define aucun_bouton 5
int read_LCD_buttons() // Lecture des boutons (tous regroupés sur le Pin Analog A1)
{
valeur_bouton = analogRead(1); // Lit la valeur depuis le sensor sur A1
// centré sur ces valeurs : 0,253,407,510,583
// on ajoute environ 50 à ces valeurs et on vérifie si on est proche
if (valeur_bouton > 1000) return aucun_bouton; // On définit ça en première option pour raison de rapidité car option la plus probable
if (valeur_bouton < 50) return bouton_reset;
if (valeur_bouton < 300) return bouton_moins;
if (valeur_bouton < 457) return bouton_plus;
if (valeur_bouton < 555) return bouton_mode;
if (valeur_bouton < 640) return bouton_affichage;
return aucun_bouton; // Sinon, on n'a aucun bouton de sélectionné (par défaut)
}
LiquidCrystal lcd(12,11,5,4,3,2); // pin connecté LCD
Servo monServo; // notre servo
void setup(){
pinMode(2,OUTPUT); //sortie LCD
pinMode(3,OUTPUT); //sortie LCD
pinMode(4,OUTPUT); //sortie LCD
pinMode(5,OUTPUT); //sortie LCD
pinMode(6,OUTPUT); //sortie LCD
pinMode(7,OUTPUT); //sortie CONTROLE SERVO
pinMode(11,OUTPUT); //sortie LCD
pinMode(12,OUTPUT); //sortie LCD
analogWrite (6,contrast); //envoie le contrast de base au lcd PAR PIN 6
lcd.begin(16,2); // initialise le type ecran
monServo.attach(7); //on déclare le servo sur la broche 7
monServo.write(angle); // met le servo a 45°
Serial.begin(9600); //on oublie pas de démarrer la voie série et ouvrir le moniteur sur pc
lcd.setCursor(2,0); //En haut à gauche
lcd.print("DEMARRAGE DU"); // Afficher un petit message
lcd.setCursor(3,1); //Ligne du bas
lcd.print("REGULATEUR"); //Afficher un petit message
delay(5000); //DELAI 5S
lcd.setCursor(0,0); //En haut à gauche
lcd.print(" "); //Effacer cette ligne
lcd.setCursor(0,1); // En bas
lcd.print(" "); // Effacer cette ligne
}
void loop()
{
bouton = read_LCD_buttons(); // Lire le bouton appuyé
switch (bouton) // Selon le bouton choisi
{
case bouton_mode:
{
lcd.print("MODE");
Serial.println("MODE");
break;
}
case bouton_affichage:
{
lcd.print("AFFICHAGE ");
Serial.println("AFFICHAGE");
break;
}
case bouton_plus:
{
lcd.print("PLUS ");
Serial.println("PLUS ");
break;
}
case bouton_moins:
{
lcd.print("MOINS ");
Serial.println("MOINS");
break;
}
case bouton_reset:
{
lcd.print("RESET");
Serial.println("RESET");
break;
}
case aucun_bouton:
{
lcd.print("Aucun ");
break;
}
}
//pour affichage
int valeur_LM35DZ = analogRead(tempPin); // valeur brut du relevé temperature (Pin analogique0)
int temp = valeur_LM35DZ * (4.8 / 1023 * 100) ; //calcul variable temperature (voir doc constructeur voir vrai voltage au final)
delay(100); // delai de rafrechissement
lcd.setCursor(3,0); // met le curseur a la ligne 1 depart 0
lcd.print("Piece a "); // affichage "temperature"
lcd.print(temp); // affichage "valeur"
//lcd.setCursor(15,0); // met le curseur a la ligne 1 depart 15
lcd.print(" C"); // affichage "valeur"
//lcd.scrollDisplayLeft(3,0);
lcd.setCursor(1,1); // met le curseur a la ligne 2 depart 0
lcd.print("Regulation "); // affichage "temperature"
lcd.print(temp_voulu); // affichage "valeur"
lcd.setCursor(15,1); // met le curseur a la ligne 2 depart 15
lcd.print("C"); // affichage "valeur"
// voir pour reduire le temps de reaction sur appuie bouton
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,mode); // met le curseur a la ligne 1 depart 0
lcd.print("<"); // affichage "temperature"
if (mode<1)
chauffage();
else
clim();}
Je ne comprends pas le rapport entre le code et le problème d'alimentation. Si votre code fonctionne sur votre bureau, il fonctionnera ailleurs. Si j'ai bien compris, la seule différence est qu'au lieu de l'alimenter avec le pc, vous le faite avec une alimentation externe ? Est-elle suffisamment puissante pour votre carte et le servo lorsque celui-ci monte en couple ? Et sans le relier au régulateur, ça donne quoi ?
Tu pense à un problème d'alimentation, et tu as probablement raison, mais tu donnes aucun renseignement sur le montage.
Comment penses tu que l'on pourra te répondre ?
Au minimum il faut :
schéma électrique
liens vers les composants extérieurs utilisés
premier bilan des courants
Et lire le message épinglé en tête de forum "Règles du forum francophone" qui donne des indications pour fournir les renseignements qui permettent d'obtenir rapidement de bonnes réponses.
En effet je pensais avoir mis le schéma en lien, je vous le joins a présent.
j'ai refais le câblage sur mon bureau, ça fonctionne,ARDUINO en USB et Servo sur pile 9V mais lorsque je la remplace par un transformateur 230VAC / 5.5VDC 2A le servo tremble.
Par quel genre de transfo dois je le remplacer? sachant qu'a terme il y aura 3 SERVO sur une ARDUINO méga (3 pièces à régulé).
De plus je me demande si je ne dois pas plutôt mettre une pile bouton 3V juste pour la sonde pour éviter les déperdition de voltage et rendre le servo "fou".
qu'en pensez vous ?
Merci de votre patience je débute.
CHOCOICELAND:
mais lorsque je la remplace par un transformateur 230VAC / 5.5VDC 2A le servo tremble.
Donc je suppose que tu branches ton transformateur à la place de la pile 9V. donc sur le jack, donc Vin.
Les valeurs de tension à cet endroit sont de 7-12V, donc 5.5V sont insuffisants.
Je ne sais pas, sur le moment, mais ça ne change rien au problème que si tu mets 5,5v. sur cette entrée, c'est insuffisant pour faire fonctionner ta carte.
jpbbricole:
Bonjour CHOCOICELANDDonc je suppose que tu branches ton transformateur à la place de la pile 9V. donc sur le jack, donc Vin.
Les valeurs de tension à cet endroit sont de 7-12V, donc 5.5V sont insuffisants.
Cordialement
jpbbricole
Bonsoir jp bricole
Désolé je ne viens pas souvent par manque de temps et non d'envie.
mon arduino est alimenté par USB de mon pc, le servo lui est sur une autre dashboard alimenté par pile 9v avec juste les masses en commun.