Nano alimentée externe ne fonctionne pas

Bonjour,Je tente de créer une voiture gérée par une télécommande de DVD. Il me faut donc une alimentation autonome pour la voiture, et je vais passer par une pile 9V (je sais ce n’est pas la panacée mais je ne vais pas trop consommer). Mon programme fonctionne tant que je suis connecté à mon USB (avec ou sans la pile raccordée), mais quand je suis avec la pile seule, je n’ai plus aucun signe d’activité.Pour mes essais, je commence par gérer la direction avec un servomoteur 5v. J’affiche dans le moniteur série de l’IDE les différentes actions sur la télécommande et je vérifie qu’elle exécute bien la bonne opération. Connecté via USB, le moniteur m’affiche les bonnes valeurs et le servomoteur réagit correctement, le voyant de la carte clignotent ne signalant qu’il y a bien échange entre la télécommande et l’arduino. Quand je suis sur la pile, le servomoteur ne réagit pas mais surtout aucune LED de la carte Nano ne clignote, donc aucune réception probablement.Je vous joins mon schéma de montage, et le programme même si je ne vois pas pourquoi le programme pourrait influer sur le dysfonctionnement, mais !!!

// headers for library
/*PHILIPPS DVD PLAYER
  1223   = eteindre
  1090   = ouvrir
  1170   = home
  1233   = menu
  1154   = option
  1112   = avance haut
  1113   = recule bas
  1114   = gauche
  1115   = droite
  1116   = OK
  1155   = back
  1073   = stop
  1068   = enregistrer
  1057   = debut
  1056   = fin
  1099   = sous titre
  1232   = goto
  1102   = audio
  1271   = plein ecran
  1184   = volume
  1053   = repete


*/
#include <Servo.h>
#include <IRremote.h>
#define RECV_PIN 12
#include <DRV8833.h>

// Creation de l'instance de la DRV8833:
DRV8833 driver = DRV8833();
const int inputA1 = 10, inputA2 = 9;
// Pins Ain1 et Ain2 du DRV8833

// Creation de l'instance du recepteur IR
IRrecv irrecv(RECV_PIN);
decode_results results;

// declaration des pins utilisées
int position = 0;

// Definition pour le servo moteur
Servo motorT;
const int motorTpin = 6;
const int motorTZero = 90;

// Variables
int x = 0;             // variable de direction
int y = 0;             // variable de direction
int pos = 90;          // position motorT en cours de travail
int val = 0;           // increment pour le mouvement du servo
int valprec = 90;      // Conservation de la valeur précédente pour le servo moteur
int valmin = 10;       // position minimum du servo
int valmax = 140;      // position maximum du servo
int vitesse = 3;       //  vitesse du mouvement
const int vstop = 5;   //  feux stop arrieres
const int vavant = 3;  //  feux avant
int motorSpeed = 255;
const int vsleep = 4;   // pour réveiller la DRV8833
String sens = " ";      // variable de travail a afficher dans le moniteur
// initialization
void setup() {
  Serial.begin(9600);                               // ouvert du port serie
  IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK);  // Demarre le receiver
  pinMode(vstop, OUTPUT);
  pinMode(vavant, OUTPUT);
  driver.attachMotorA(inputA1, inputA2);
  motorT.attach(motorTpin);  // attache le servo à la pin 9 
  motorT.write(motorTZero);   // mise en position 0 du servo
  digitalWrite(vsleep, HIGH); // réveil de la DRV8833 si je ne fais pas cela, rien ne se passe sur cette carte

}
// main loop
void loop() {

// réception de la télécommande, affichage des valeurs reçues et affectation à la variable x
  x = 0;
  if (IrReceiver.decode()) {
    if (IrReceiver.decodedIRData.decodedRawData != 0) {
      Serial.println(getProtocolString(IrReceiver.decodedIRData.protocol));
      x = IrReceiver.decodedIRData.decodedRawData;
      Serial.print("\tvalprec=");
      Serial.print(valprec);
      Serial.print("\tx=");
      Serial.print(x);
      Serial.print("\tpos=");
      Serial.print(pos);
      Serial.print("\t");
      Serial.println(sens);
    }
    IrReceiver.resume();  // Receive the next value
  }
  /**********************************************************************
     GESTION DES OPERATIONS 
  ***********************************************************************/
  //  servo moteur vers la gauche
  if (x == 1114) {
    for (val = valprec; val >= valmin; val -= vitesse) {
      motorT.write(val);  
      valprec = val;
      delay(20);  
    }
    sens = "gauche";  // Pour affichage sur le moniteur de controle
  }
  //  servo moteur vers la droite
  else if (x == 1115) {
    for (val = valprec; val <= valmax; val += vitesse) {
      motorT.write(val);  
      valprec = val;
      delay(20);  
    }
    sens = "droite";
  } 
  // remise en position initiale du servo
  else if (x == 1116) {
    pos = motorTZero;
    motorT.write(pos);
    valprec = pos;
    sens = "initial";
    delay(20);
  }
// fonction mouvement vers avant
  else if (x == 1112) {
    sens = "avance";
    driver.motorAForward();
  }

// fonction mouvement vers arrière
  else if (x == 1113) {
    sens = "recule";
    driver.motorAReverse();
  } 
  // fonction arret de tout mouvement
  else if (x == 1170) {
    driver.motorAStop();
    sens = "arret total";
  } 
  // allumage des feux arrières
  else if (x == 1233) {
    sens = "feux stop allumés";
    digitalWrite(vstop, HIGH);
  } 
  // arret de l'allumage des feux arrières
  else if (x == 1154) {
    sens = "feux stop eteints";
    digitalWrite(vstop, LOW);
  } 
    // allumage des feux avants
else if (x == 1155) {
    sens = "feux avant allumés";
    digitalWrite(vavant, HIGH);
  } 
  // arret de l'allumage des feux avants
  else if (x == 1073) {
    sens = "feux avant eteints";
    digitalWrite(vavant, LOW);
  }
}

Merci à vous pour votre aide et pardonnez si l’erreur vous parait fragrante, mais je n’ai pas assez d’expérience pour la détecter.
Cordialement.
JCG95

bjr,

la connexion du +9v de la pile va uniquement au Vin de l’arduino?

Ce n’est pas claire sur le schéma et j’aurais même tendance qu’elle alimente le servo moteur et serais relier au +5V.

Pourrais-tu éclaircir ce point?

Si le code fonctionne en USb, c’est très peu probable qu’elle soit à l’origine du dysfonctionnement quand on alimente par la pile.

Moi je n’utilise jamais de pile 9V.

Merci Leptro pour ton retour. Quelques précisions nécessaires et schéma refait.
La Vin n’est raccordée qu’à l’alimentation de la pile et au VCC de la DRV8833 (erreur sur le schéma). Le servo et le capteur IR sont sur le 5V, il est vrai que les fils se croisent sur le schéma mais je n’ai pas encore réussi à en faire un en 3D.
Les branchements réels sont ceux décrits ici. J’ai revérifié les connexions réelles et les soudures mais comme ça marche avec l’USB seule, je ne pense pas que cela vienne d’ici.
Ce n’est pas la première fois que j’ai constaté ce phénomène.

Une pile de 9V n’est pas capable de fournir le courant nécessaire pour un servo.

Le régulateur de la nano peut donner du 5V si le courant demandé n’est pas trop important. Il n’est pas prévu pour alimenter un moteur, servo ou MCC.

Normalement, Quand le servo et le moteurs ne bougent pas, tout va bien. Quand un moteur du servo doit tourner le régulateur ne peut plus fournir suffisamment de courant et baisse la tension et la nano n’est plus alimentée. Pour faire ce type de montage, il faut donc un régulateur externe pour le servo.

Il n’est pas impossible que le moteur tire suffisamment de courant pour faire diminuer la tension de la pile en dessous des 7V nécessaire pour la broche Vin de la nano.

Voir par exemple cette page.

Merci Vileroi pour ce retour.

Même si je dois accepter ces remarques pertinentes, je dois préciser que le simple allumage de led 3V ne fonctionne pas non plus, sans utilisation du servo, à moins que le servo, même s’il n’est pas utilisé, consomme de l'énergie telle que les leds ne fonctionnent pas.

Je vais tout de même regarder dans ton sens, ça ne peut qu’être bénéfique.
Merci.

Je vous tiens au courant.

Hello.

Une pile 9V fait autour de 9V à vide quand elle n’est pas “à plat”, combien mesure tu sur cette pile quand elle est connectée à tout ton ensemble?

Bonjour Jef59,
Ma pile (j’en ai beaucoup d’autres) présente un voltage de 8,6 en direct.
Sur le GND et la pin vin de l’arduino, je suis à 8,10
Sur le GND et la sortie 5v, je suis à 7,3
Sur le GND et la pin 12 (par exemple) sans action je suis à 7
En actionnant la télécommande, je descends à 6,2
Sur la GND et la pin où est connecté mon servomoteur, je suis à 6.9 ou 7

Serait-ce suffisant pour les 5V demandés par le servomoteur ?
Merci

Hello, 7.3V sur la sortie 5V?

Testes en débranchant tous tes périphériques .

Donc en ne laissant que la pile raccordée.

Si on considère les tensions relevées :

  • Soit le régulateur de la nano est mort.
  • Soit il y a une mauvaise connexion de masse quelque part.

Bonjour à tous,

J’ai fait comme DFGH préconisait, tout débrancher et remesurer. Cette fois les mesures sont correctes, il s’agissait sans doute d’un mauvais branchement.
J’ai testé en branchant les éléments un par un, et après avoir mis le servomoteur et le récepteur IR tout semble OK. Je vais connecter le reste et tester et mesurer à chaque étape.

Merci pour vos conseils, votre aide et je vous tiens au courant.

J’ai trouvé d’où venait l’erreur. J’avais, comme je croyais l’avoir lu, connecté le pin VCC de la DRV8833 directement sur le VIN. Et dès cela, le dysfonctionnement reprenait. J’ai revu les documentations, et un raccordement sur la pin 5V suffisait (dans mon cas le moteur ne nécessite pas plus). Et maintenant ça marche en autonomie avec ma pile 9V.
J’allume des phares, je dirige en avant, à droite à gauche sans problème. Il m’en reste tout de même (que je vais soumettre dans un autre sujet approprié) c’est que mon moteur DC ne tourne que dans un sens, il refuse catégoriquement d’aller en avant et en arrière.

Encore merci à tous

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.