Bonjour à tous.
Mon robot Ulysse que j'ai réalisé , j'ai ù pas mal de problèmes avec quelque module , mes c'est chose la , on été réglé.
Bon passons , voici la description.
Alors chassie plateforme robot mobile 4 roues motrices.
Une carte Romeo Tout-en-un (ATMega328) rev 1.1.
Une Carte Arduino Uno Rev 3.
Une Pince en Aluminium (avec Servomoteurs) Dagu.
Un Kit télécommande Infrarouge pour Arduino + 2 capteur.
Une batterie 9,2V 2200mAh pris sur une voiture télécommandé.
Un boitier pour 4 piles LR6-AA
Un module de Répétition MP3 ''DFRduino Player'.
Après les petite baffe sur les deux coté de mon robot , on été pris sur des PC usagé.
Voila je pense que j'ai fait le tour.
Voila , ce que fait le robot.
Mon robot et télécommandé ( bien vue non!!!! ) je contrôle mon robot , la pince , et aussi quelque voix ,
tous ça avec la télécommande.
Voila je pense que j'ai tous dit , si vous avez des question hésité pas , ou des remarque à faire.
Voici des photos:
![Arduino Mon robot Ulysse Img_2010](https://i.servimg.com/u/f83/15/50/68/13/img_2010.jpg)
Puis une fois la pince équipé sur le chassie et tous le reste:
![Arduino Mon robot Ulysse Dscf0333](https://i.servimg.com/u/f40/15/50/68/13/dscf0333.jpg)
![Arduino Mon robot Ulysse Dscf0334](https://i.servimg.com/u/f40/15/50/68/13/dscf0334.jpg)
Et voila la programmation en deux partit car il y a deux carte:
Est celui si , c'est le code pour la pince est pour l'effet des voix
commandé par la télécommande infrarouge donc la carte Arduino Uno Rev 3 ^^
Mon robot Ulysse que j'ai réalisé , j'ai ù pas mal de problèmes avec quelque module , mes c'est chose la , on été réglé.
Bon passons , voici la description.
Alors chassie plateforme robot mobile 4 roues motrices.
Une carte Romeo Tout-en-un (ATMega328) rev 1.1.
Une Carte Arduino Uno Rev 3.
Une Pince en Aluminium (avec Servomoteurs) Dagu.
Un Kit télécommande Infrarouge pour Arduino + 2 capteur.
Une batterie 9,2V 2200mAh pris sur une voiture télécommandé.
Un boitier pour 4 piles LR6-AA
Un module de Répétition MP3 ''DFRduino Player'.
Après les petite baffe sur les deux coté de mon robot , on été pris sur des PC usagé.
Voila je pense que j'ai fait le tour.
Voila , ce que fait le robot.
Mon robot et télécommandé ( bien vue non!!!! ) je contrôle mon robot , la pince , et aussi quelque voix ,
tous ça avec la télécommande.
Voila je pense que j'ai tous dit , si vous avez des question hésité pas , ou des remarque à faire.
Voici des photos:
![Arduino Mon robot Ulysse Img_2010](https://i.servimg.com/u/f83/15/50/68/13/img_2010.jpg)
Puis une fois la pince équipé sur le chassie et tous le reste:
![Arduino Mon robot Ulysse Dscf0333](https://i.servimg.com/u/f40/15/50/68/13/dscf0333.jpg)
![Arduino Mon robot Ulysse Dscf0334](https://i.servimg.com/u/f40/15/50/68/13/dscf0334.jpg)
Et voila la programmation en deux partit car il y a deux carte:
- Code:
#include
//Capteur de Distance infrarouge IR Sharp GP2Y0A02YK0F
int capteur = 5;
int capteur2 = 4;
int capteur3 = 3;
// Variable pour lire la valeur des capteurs sur les broches analogique
int val;
int val2;
int val3;
//LED bleu, est rouge
int LEDROUGE = 2; // broche digitale pour la LEDROUGE 2
int LEDBLEU = 3; // broche digitale pour la LEDBLEU 3
int LEDBLEU_AR = 4;// broche digitale pour la LEDBLEU_AR 4
//Motoreducteur ( donc les moteurs du robot )
const int EN1=6;
const int EN2=5;
const int IN1=7;
const int IN2=4;
// IR PIN module récepteur et variable
int RECV_PIN = 11; // donc c'est le capteur infrarouge de la télécommande )
IRrecv irrecv(RECV_PIN);
decode_results results;
//mode d'execution
const int MODE_AUTO = 0;
const int MODE_MANUEL = 1;
int mode = MODE_MANUEL;
const int MODE_STOP = 10;
const int MODE_AVANCE = 11;
const int MODE_RECULE = 12;
const int MODE_AV_RAPIDE = 13;
const int MODE_AR_RAPIDE = 14;
const int MODE_DROITE = 15;
const int MODE_GAUCHE = 16;
const int MODE_AV_DROITE = 17;
const int MODE_AV_GAUCHE = 18;
const int MODE_AR_DROITE = 19;
const int MODE_AR_GAUCHE = 20;
const int MODE_LED = 21;
int sous_mode_manuel = MODE_STOP;
//Fonctions
//motoréducteur pour le mode déplacement automatique
void Moteur1(int pwm, boolean reverse)
{
analogWrite(EN1,pwm); //Valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(reverse)
{
digitalWrite(IN1,HIGH);
}
else
{
digitalWrite(IN1,LOW);
}
}
void Moteur2(int pwm, boolean reverse)
{
analogWrite(EN2,pwm); //Valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(reverse)
{
digitalWrite(IN2,HIGH);
}
else
{
digitalWrite(IN2,LOW);
}
}
void setup()
{
int i;
for(int i=4;i<=7;i++)
pinMode(i,OUTPUT); //Met les pin des moteurs 4,5,6,7 en mode sortie
//LEDBLEU broche en mode sortie
pinMode(LEDROUGE, OUTPUT); // Déclare la LEDROUGE 2 en sortie
pinMode(LEDBLEU,OUTPUT); // Déclare la LEDBLEU 3 en sortie
pinMode(LEDBLEU_AR,OUTPUT); // Déclare la LEDBLEU_AR 4 en sortie
Serial.begin(9600);
// désactiver les deux moteurs par défaut
digitalWrite(EN2,LOW);
digitalWrite(EN1,LOW);
// début de récepteur IR
irrecv.enableIRIn();
}
void loop()
{
int led_on =false;
// Signal IR reçu
if (irrecv.decode(&results))
{
// changement de mode par le Bouton rouge de la télécommande (POWER)
//automatique ou manuel
if(results.value==16580863)
{
if (mode == MODE_AUTO)
mode = MODE_MANUEL;
else
mode = MODE_AUTO;
}
else if(mode == MODE_MANUEL)
{
if(results.value==16597183) // Stop (FUNC / STOP) bouton de la télécommande
sous_mode_manuel = MODE_STOP;
else if(results.value==16613503) // (VOL +) bouton de la télécommande faire avancer le robot
sous_mode_manuel = MODE_AVANCE;
else if(results.value==16617583) // (VOL-) bouton de la télécommande faire reculer le robot
sous_mode_manuel = MODE_RECULE;
else if(results.value==16589023) // rotation gauche (<<) touche recule rapide de la télécommande
sous_mode_manuel = MODE_GAUCHE;
else if(results.value==16605343) // rotation droite (>>) bouton avance rapide la télécommande
sous_mode_manuel = MODE_DROITE;
else if(results.value==16609423) // avant droite avec la touche ( ST/REPT ) de la télécommande
sous_mode_manuel = MODE_AV_DROITE;
else if(results.value==16621663) // avant gauche (playe) bouton de la télécommande
sous_mode_manuel = MODE_AV_GAUCHE;
else if(results.value==16601263) // inverse à droite (HAUT) bouton de la télécommande
sous_mode_manuel = MODE_AR_DROITE;
else if(results.value==16584943) // inverse à gauche (BAS) bonton de la télécommande
sous_mode_manuel = MODE_AR_GAUCHE;
else if(results.value==16625743) //Allume la LED bleu avec la touche ( EQ ) de la télécommande
sous_mode_manuel = MODE_LED;
if(results.value==16593103) // Arrêt de la LED bleu avec la touche ( 0 ) de la télécommande
{
digitalWrite(LEDBLEU_AR,LOW);
digitalWrite(LEDBLEU,LOW);
digitalWrite(LEDROUGE,LOW);
}
}
// recevoir la prochaine valeur
irrecv.resume();
}
// mode automatique
if(mode == MODE_AUTO)
{
val = analogRead(capteur); // lit la valeur du capteur SHARP
val2 = analogRead(capteur2); // lit la valeur du capteur2 SHARP
val3 = analogRead(capteur3); // lit la valeur du capteur3 SHARP
delay(100);
// Si on est à moins de quelque cm d'un obstacle pour les trois capteurs
if ((val >= 255) || (val2 >= 255) || (val3 >= 255)) // si on est à quelque cm d'un obstacle pour les 3 capteurs
{
Moteur1(0,false); //j'arrete le moteur 1
Moteur2(0,false); // j'arrete le moteur 2
delay(350); //j'attend 3,50 seconde
Moteur1(255,false); //J'avance tout droit moteur 1
Moteur2(255,false); // j'avance tout droit moteurs 2
delay(500); //la valeur à mettre reste à définir en fonction de la vitesse du robot
Moteur1(255,false); //J'avance tout droit en metant les 1 moteurs
Moteur2(255,true); //J'avance tout droit en metant les 2 moteurs
}
else
{
Moteur1(255,true); //J'avance tout droit en metant les 1 moteurs
Moteur2(255,false); //J'avance tout droit en metant les 2 moteurs
}
}
else
{
Serial.println(results.value, DEC);
switch (sous_mode_manuel) // Mode Manuel controle le robot avec la télécommande
{
case MODE_LED: //Allume les trois LED, les 2 led bleu, est rouge avec la touche ( EQ ) de la télécommande
if (led_on)
{
digitalWrite(LEDROUGE,LOW);
digitalWrite(LEDBLEU,LOW);
digitalWrite(LEDBLEU_AR,LOW);
led_on = false;
}
else
{
digitalWrite(LEDROUGE,HIGH);
digitalWrite(LEDBLEU,HIGH);
digitalWrite(LEDBLEU_AR,HIGH);
led_on = true;
}
break;
case MODE_STOP: // Stop (FUNC / STOP) bouton de la télécommande
digitalWrite(EN2,LOW); // roue droite a l'arrêt
digitalWrite(EN1,LOW); // roue gauche a l'arrêt
break;
case MODE_AVANCE: // (VOL +) bouton de la télécommande faire avancer le robot
motor(200,200);
break;
case MODE_RECULE: // (VOL-) bouton de la télécommande faire reculer le robot
motor(-200,-200);
break;
case MODE_DROITE: // rotation droite (>>) bouton avance rapide la télécommande
motor(250,-210);
break;
case MODE_GAUCHE: // rotation gauche (<<) bouton avance rapide la télécommande
motor(-250,210);
break;
case MODE_AV_DROITE: // avant droite avec la touche ( ST/REPT ) de la télécommande
motor(200,150);
break;
case MODE_AV_GAUCHE: // avant gauche (playe) bouton de la télécommande
motor(150,200);
break;
case MODE_AR_DROITE: // inverse à droite (HAUT) bouton de la télécommande
motor(255,255);
break;
case MODE_AR_GAUCHE:// inverse à gauche (BAS) bonton de la télécommande
motor(-255,-255);
break;
}
}
}
// fonction pour contrôler le moteur
void motor(int left, int right)
{
// limiter la vitesse max
if(left>255)left=255; //gauche
else if(left<-255)left=-255; //gauche
if(right>255)right=255; //droite
else if(right<-255)right=-255; //droite
if(left>0)//gauche a l'arrét
{
digitalWrite(IN1,HIGH); // direction roue gauche avant
analogWrite(EN1,left); // vitesse de la roue gauche
}
//inverser la roue gauche
else if(left<0)
{
digitalWrite(IN1,LOW); // inverse à gauche en direction
analogWrite(EN1,-left); // vitesse de la roue gauche
}
else
{
digitalWrite(EN1,LOW); // roue gauche a l'arrêt
}
if(right>0) // roue droite avant
{
// direction de la roue droite avant
digitalWrite(IN2,LOW);
analogWrite(EN2,right);
}
else if(right<0) // roue droite en arrière
{
digitalWrite(IN2,HIGH); // inverse à droite en direction
analogWrite(EN2,-right);
}
else
{
digitalWrite(EN2,LOW); // roue droite a l'arrêt
}
}
// FIN
// SEB03000
- Code:
Ceci est un code :SÉLECTIONNER LE CONTENUSÉLECTIONNER LE CONTENU
#include
#include
#include
#include
#include
#define ArduinoPlayer_address 0x35 //Arduino Lecteur 0x35 adresse I2C (par défaut)
Servo servo1; // créer un objet d'asservissement pour commander le servo1
Servo servo2; // créer un objet d'asservissement pour commander le servo2
int possition1 ; // variable pour stocker la position1 d'asservissement
int possition2 = 90; //variable pour stocker la position2 d'asservissement
int RECV_PIN = 5;
int current; //conserver la trace de la position actuelle du servo
int codeValue; //les code de la télécommande
IRrecv irrecv(RECV_PIN);
decode_results results;
int derniermp3 = 0; //declaration du dernier mp3 qui a était lu
void TwiSend(const char *cmd) //I2C Command
{
char len = 0;
len = strlen(cmd); //Calculer la longueur de la commande
Wire.beginTransmission(ArduinoPlayer_address); // Arduino Lecteur adresse I2C
while(len--)
{
Wire.send(*(cmd++));
}
Wire.endTransmission(); // stop transmission
}
void jouermorceauscpecifique (int numeromp3)
{
if (numeromp3 >= derniermp3)// si le numero du mp3 desirer est superieur ou egale au dernier mp3 jouer
{
for (int i=derniermp3; i < derniermp3; i++){ // boucle pour passer jusqu'au morceau voulu
TwiSend("\\:n\r\n"); // Play prochain
derniermp3 = i;
}
}
if (numeromp3 <= derniermp3)
{
for (int i=derniermp3; i > derniermp3; i--){ // boucle pour passer jusqu'au morceau voulu
TwiSend("\\:u\r\n"); // Play précédent
derniermp3 = i;
}
}
}
void setup()
{
Wire.begin(); // rejoindre le bus I2C (adresse en option pour le maître)
Serial.begin(9600); // lancer un port série sur le serial monitor
servo1.attach(7); // attache le servo sur la broche 7 à l'objet d'asservissement
servo1.write(possition1); // mis en position1 de départ servo1
servo2.attach(6); // attache le servo sur la broche 6 à l'objet d'asservissement
servo2.write(possition2);// mis en position2 de départ servo2
irrecv.enableIRIn(); // Démarrer le récepteur
delay(2000);//Attendez 2 secondes
Serial.println("Ready");
TwiSend("\\:v 255\r\n");// régler le volume, de 0 (minimum) -255 (maximum)
}
void loop()
{
Serial.println(results.value, DEC);
if (irrecv.decode(&results))
{
codeValue = results.value;
switch (codeValue)
{
case 16615543: // touche 4 de la télécomande ouvre la pince
current +=80;
if (current > 180) current = 0;
servo1.write(current);
break;
case 16582903:// bouton touche 1 de la télécommande ( envoie une parole prochain )
jouermorceauscpecifique(4);
TwiSend("\\:n\r\n");
break;
case 16599223:// bouton touche 3 de la télécommande ( envoie une parole précédente )
jouermorceauscpecifique(4);
TwiSend("\\:u\r\n");
break;
case 16586983:// bouton touche 7 de la télécommande ( pour monté le + volume )
jouermorceauscpecifique(4);
TwiSend("\\:v 255\r\n");
break;
case 16619623: // touche 6 de la télécommande ferme la pince
current -=80;
if (current < 0) current = 180;
servo1.write(current);
break;
case 16591063: // touche 2 de la télécommande décend la pince
current +=40;
if (current > 180) current = 0;
servo2.write(current);
break;
case 16607383: // touche 8 de la télécommande léve la pince
current -=40;
if (current < 0) current = 180;
servo2.write(current);
break;
int sensorValue = analogRead(1); // analogique 1, a 10k
while (sensorValue > 255) { //valeur peut être ajustée, 255 très sensible
sensorValue = analogRead(1); //lit la valeur du capteur à nouveau pour la boucle
}
servo1.write(possition2);
current = possition2;
servo1.write(possition1);
current = possition1;
servo2.write(possition2);
current = possition2;
servo2.write(possition1);
current = possition1;
}
irrecv.resume();
}
}
Est celui si , c'est le code pour la pince est pour l'effet des voix
commandé par la télécommande infrarouge donc la carte Arduino Uno Rev 3 ^^