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

