Bonjour.
Je suis nouveau sur ce forum et je commence a utiliser les micro-contrôleur Arduino et je trip beaucoup
Voici mon projet. J'aimerai guider un robot a l'aide d'un fil enfouis dans le sol.
J'utilise un kit générateur de boucle. Ce système fonctionne très bien et il est couplé sur un Arduino UNO sur les entrées analogiques A0 et A1.
Pour les sorties contrôlant les deux moteurs, j'utilise le module VMA409 qui est un contrôleur L298N.
La pin ENA est sur la pin 11, la pin IN1 est sur la pin 9, la pin IN2 est sur la pin 8, la pin IN3 est sur la pin 7, la pin IN4 est sur la pin 7 et la pin ENB est sur la pin 10 de l'Arduino.
Mon problème est de trouver le code car je n'ai pas d'expérience en language C++, je n'ai programmé que des automates Omron dans le passé.
La tension aux deux entrées est d'environ 3 volts quand les deux capteurs sont centré avec le fil émetteur et ce que j'aimerai c'est que peu importe la tension aux deux entrées, en autant qu'elle soit égale, fasse tourner les deux moteurs a vitesse égale, et aussi en me permettant d'ajuster la vitesse maximale des deux moteurs. Si une des deux entrées diminue, je dois faire abaisser la vitesse du moteur se trouvant du même côté que la baisse de tension pour remettre le robot au centre du fil émetteur.
Quelqu'un pourrais m'aider dans ce projet ?
J'ai programmé ce code, mais ça ne donnes pas les résultats recherché.
Sur ce code, je ne compare pas les deux entrées analogique, et il faut absolument que je le fasse car si les capteurs s'éloignent du fil émetteur, les deux moteurs baisses et ce n'est pas ce que je souhaite.
Je me demandais aussi si je ne devais pas faire varier qu'un seul moteur pour la correction de l'axe.
Merci
Jacques3012
//Broche d'entrées analogique
int x_key = A0;
int y_key = A1;
int x_pos;
int y_pos;
//Motor Pins
int EN_A = 11; //Broche d'activation moteur gauche
int IN1 = 9; //Broche de contrôle moteur gauche
int IN2 = 8; //Broche de contrôle moteur gauche
int IN3 = 7; //Broche de contrôle moteur droit
int IN4 = 6; //Broche de contrôle moteur droit
int EN_B = 10; //Broche d'activation moteur droit
//Initialisation de variables pour stocker des données
int motor_speed;
int motor_speed1;
void setup ( ) {
Serial.begin (9600); //Démarrage de la communication série à un débit de 9600 bauds
//Initialisation des broches du moteur en sortie
pinMode(EN_A, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(EN_B, OUTPUT);
//Initialisation des broches d'entrées analogique
pinMode (x_key, INPUT) ;
pinMode (y_key, INPUT) ;
}
void loop () {
x_pos = analogRead (x_key) ; //Entrée capteur gauche
y_pos = analogRead (y_key) ; //Entrée capteur droit
if (x_pos < 1200){ //Faire tourner le moteur gauche dans le sens des aiguilles d'une montre
motor_speed = map(x_pos, 1200, 0, 0, 150); //Mapper les valeurs sur 0-255 pour déplacer le moteur gauche
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(EN_A, motor_speed); //activation moteur gauche
}
if (y_pos < 1200){ //Faire tourner le moteur droit dans le sens des aiguilles d'une montre
motor_speed1 = map(y_pos, 1200, 0, 0, 150); //Mapper les valeurs sur 0-255 pour déplacer le moteur droit
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(EN_B, motor_speed1); //activation moteur droit
}
}