Problème d'alimentation

Bonjour a tous,

ç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 :slight_smile: )

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.

REGLATEUR_CHAUFFAGE_CLIM.ino (5.17 KB)

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

Bonjour,

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 ?

Bonjour CHOCOICELAND

Je ne vois pas le schéma???

Cordialement,
bidouilleelec

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.

Bonsoir a vous tous,

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. :slight_smile:

BRANCHEMANT LCD CLIM.pdf (28.4 KB)

Bonjour CHOCOICELAND

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.

Cordialement
jpbbricole

Bonjour jpbbricole

jpbbricole:
Bonjour CHOCOICELANDDonc je suppose que tu branches ton transformateur à la place de la pile 9V. donc sur le jack, donc Vin.

Cordialement
jpbbricole

Sauf erreur de ma part, il y a une diode entre l'entrée jack et Vin ?

Cordialement,
bidouilleelec

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.

Cordialement
jpbbricole

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.

cordialement