Pages: [1]   Go Down
Author Topic: Faire fonctionner deux moteurs sur moteur shield via telecomande  (Read 443 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Je suis nouveau sur le forum et je débute sur arduino.
J'ai une carte arduino uno et un shield moteur arduino rev3.
Depuis plusieurs jours je cherche a faire fonctionner deux moteurs brancher sur le shield via une télécommande de TV.
J'ai décodé les codes IR de la télécommande et j'ai fais plusieurs tentatives qui restent infructueuses.
La touche 1 pour le moteur gauche marche avant . La touche 2 pour les deux moteurs en marche avant. La touche 3 pour le moteur droit marche avant puis 4,5 et 6 pour la marche arrière.
Dernier essai avec le code suivant (bouton 1,2 et 3 pour le test) désolé pour les puristes mais je comprend tout :

#include <IRremote>
const byte IR_REC = 11;
const byte Mot_d1 = 12;
const byte Mot_g1 = 3;
const byte Mot_d2 = 13;
const byte Mot_g2 = 8;

IRrecv irrecv(IR_RECV);
Decode_results results;
void setup()
{
irrecv.enableIRIn();
pinMode(Mot_d1,  OUTPUT);
pinMode(Mot_g1, OUTPUT);
pinMode(Mot_d2, OUTPUT);
pinMode(Mot_g2, OUTPUT);
}
void loop();
{
If (irrecv.decode(&results))
{
If(results.value == 0x20df8877) {
digitalWrite(Mot_d1, LOW);
digitalWrite(Mot_g1, HIGH);
digitalWrite(Mot_d2, LOW);
digitalWrite(Mot_g2,  HIGH);
}
else if (results.value == 0x20df88b7)
{
digitalWrite(Mot_d1, HIGH);
digitalWrite(Mot_g1, LOW);
digitalWrite(Mot_d2, HIGH);
digitalWrite(Mot_g2, LOW);
}
else if (results.value == 0x20dfc837)
{
digitalWrite(Mot_d1, LOW);
digitalWrite(Mot_g1, LOW);
digitalWrite(Mot_d2, LOW);
digitalWrite(Mot_g2, LOW);
}
irrecv.resume();
}
}



Merci de votre aide.
« Last Edit: July 03, 2014, 12:27:08 am by Klimero12 » Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1968
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
déjà dans le bar tu vas avoir peu de réponses smiley-wink

1- tu arrive a faire fonctionner ta télécommande pour allumer une led?
2- tu arrives a faire tourner tes moteurs avec un prog tout con?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Je ne savais pas ou poser ma question. Le bar m'a semblé être le bon endroit !!!!!
Pour la led pas de soucis avec la télécommande. Pour les moteurs aussi ils tournent avec un prog
Ce que je ne comprend pas c'est que l ´IR ne semble fonctionner que sur la broche 11, or c'est normalement le broche dédiée au pwm du moteur b sur le shield.
Quand je téléverse le prog, le moteur gauche tourne et en appuyant sur la touche trois de ma télécommande tout s'arrête. Si j'appuie sur la touche 1  il redémarre. Je ne sais pas si c'est un soucis de programme ou de branchement ou simplement de déclaration dans les const byte. Encore une fois je suis totalement novice sur arduino, j'arrive a comprendre une partie du code mais je ne sens pas capable de l'écrire seul. Il faut bien commencer un jour.
S,il faut mettre le sujet ailleurs, merci d me dir ou.
Merci
Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1968
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

tu peux changer la pin de l'IR, regardes dans la lib si tu peux la changer.
je mets mes IR ou je veux sans soucis sur une nono.
Logged

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 241
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Ce que je ne comprend pas c'est que l ´IR ne semble fonctionner que sur la broche 11, or c'est normalement le broche dédiée au pwm du moteur b sur le shield.

La librairie IR fonctionne en mettant le récepteur sur n'importe quelle broche. Il suffit de modifier la ligne :

Code:
const byte IR_REC = 11;

...en indiquant celle reliée au récepteur dans votre propre montage.
Vérifiez également les déclarations de constantes liées aux moteurs : sur la fiche produit du Motor Shield il est indiqué l'emplacement des broches utilisées ainsi que leur rôle.
Logged

- Distributeur officiel Arduino - France

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci de vos réponse, j'ai changé mon code et mis un seul moteur pour comprendre. J'ai branché le récepteur IR  sur la broche 5, pas de soucis dans la librairie ce qui m'a permis de libérer les broches dédiées aux moteurs.  Pour les touches 2 et 3 de ma télécommande soit j'ai mal fais mon décodage soit j'ai mal lu ou mystère .Mon code modifié :

#include  <IRremote.h> // insertion de la bibliothéque

int IR_RECV = 5;
int MotAD = 12; // déclaration des constante pin12 direction moteur A
int MotAF = 9;  // déclaration des constanttes pin9 frein moteur A
int MotAP = 3; // déclaration des constantes pin 3 PWM moteur A

IRrecv irrecv(IR_RECV);
decode_results results;


void setup() {
irrecv.enableIRIn();
pinMode(MotAD, OUTPUT); //initialisation pin 12
pinMode(MotAF, OUTPUT); //initialisation  pin 9
pinMode(MotAP, OUTPUT); //iitialisation Pin 3

//digitalWrite(MotAD, LOW); sens de rotation du moteur
//digitalWrite(MotAF, LOW); //dessérage sdu frein moteur
//analogWrite(MotAP, 255); //vitesse PWM au max
}

void loop() // A VOIR SI LOW POSITIF OU NEGATIF SINON ANALOGICWRITE A -255
{
if(irrecv.decode(&results))
{
if(results.value == 0x20df8877)// TOUCHE 1 DE LA TELECOMMANDE
{
digitalWrite(MotAD, LOW);
digitalWrite(MotAF, LOW); //desserrage du frein moteur
analogWrite(MotAP, 255);
}
else if(results.value == 0x20df28D7) //TOUCHE 4 DE LA TELECOMMANDE
{
digitalWrite(MotAD, HIGH);
digitalWrite(MotAF, LOW); //desserrage sdu frein moteur
analogWrite(MotAP, 255);
}
else if(results.value == 0x20dfa857) // TOUCHE 5 DE LA TELECOMMANDE
{
digitalWrite(MotAD, LOW);
digitalWrite(MotAF, LOW); //desserrage du frein moteur
analogWrite(MotAP, 255);
}
irrecv.resume();
}
}

// les touches 1 et 5 font tourner le moteur A dans le même sens
// la touche 4 fait tourner le moteur dans l'autre sens


C'est peut être pas du beau code mais j'avance.
Je n'ai pas compris une chose, si je change 255 par un autre chiffre la touche ne marche plus. Je pense que j'oublie de déclarer quelque chose mais je ne sais pas encore quoi. Si vous avez des conseils pour améliorer.
merci
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
J'y suis arrivé et je vous livre le code finalisé (qui marche) :

#include  <IRremote.h> // insertion de la bibliothèque

int IR_RECV = 5; // déclaration de la pin du récepteur infrarouge

int MotAD = 12; // déclaration des constante pin12 direction moteur A
int MotAF = 9;  // déclaration des constantes pin9 frein moteur A
int MotAP = 3; // déclaration des constantes pin3 PWM moteur A
int MotBD = 13; // déclaration des constante pin13 direction moteur B
int MotBF = 8;  // déclaration des constantes pin8 frein moteur B
int MotBP = 11; // déclaration des constantes pin11 PWM moteur B


IRrecv irrecv(IR_RECV);
decode_results results;


void setup() {
irrecv.enableIRIn();
pinMode(MotAD, OUTPUT); //initialisation pin 12
pinMode(MotAF, OUTPUT); //initialisation  pin 9
pinMode(MotAP, OUTPUT); //initialisation Pin 3
pinMode(MotBD, OUTPUT); //initialisation pin 13
pinMode(MotBF, OUTPUT); //initialisation  pin 8
pinMode(MotBP, OUTPUT); //initialisation Pin 11
}

void loop()
{
if(irrecv.decode(&results))

{
if(results.value == 0x20df48b7) // Touche 2 de la télécommande
//les deux moteurs tournent dans le même sens
{
digitalWrite(MotAD, LOW);
analogWrite(MotAP, 255);
digitalWrite(MotBD, LOW);
analogWrite(MotBP, 255);
}

else if(results.value == 0x20df8877) //Touche 1 de la télécommande
//Le moteur gauche va en avant
{
digitalWrite(MotAD, LOW);
analogWrite(MotAP, 255);
}

else if(results.value == 0x20dfc837) // Touche 3 de la télécommande
//le moteur droit va en avant
{
digitalWrite(MotBD, LOW);
analogWrite(MotBP, 255);
}

else if(results.value == 0x20df28d7) //Touche 4 de la télécommande
// Le moteur gauche va en avant, le moteur droit va en arrière
{
digitalWrite(MotAD, LOW);
analogWrite(MotAP, 255);
digitalWrite(MotBD, HIGH);
analogWrite(MotBP, 255);
}

else if(results.value == 0x20dfa857) //Touche 5 de la télécommande
// Les deux moteurs vont en arrière
{
digitalWrite(MotAD, HIGH);
analogWrite(MotAP, 255);
digitalWrite(MotBD, HIGH);
analogWrite(MotBP, 255);
}

else if(results.value == 0x20df6897) //Touche 6 de la télécommande
// Le moteur gauche va en arrière, le moteur droit va en avant
{
digitalWrite(MotAD, HIGH);
analogWrite(MotAP, 255);
digitalWrite(MotBD, LOW);
analogWrite(MotBP, 255);
}

else if(results.value == 0x20dfe817) //Touche 7 de la télécommande
// Le moteur gauche va en arrière
{
digitalWrite(MotAD, HIGH);
analogWrite(MotAP, 255);
}

else if(results.value == 0x20df18e7) //Touche 8 de la télécommande
// Les deux moteurs sont arrêtés
{
digitalWrite(MotAD, LOW);
analogWrite(MotAP, 0);
digitalWrite(MotBD, LOW);
analogWrite(MotBP, 0);
}

else if(results.value == 0x20df9867) //Touche 9 de la télécommande
// le moteur droit va en arrière
{
digitalWrite(MotBD, HIGH);
analogWrite(MotBP, 255);
}
irrecv.resume();
}
}

Après avoir galéré j'espère que ça servira aux personnes qui débutent comme je le fais
Merci

Logged

Pages: [1]   Go Up
Jump to: