S.A.R.A.H
Bonjour et bienvenu sur le forum SARAH-ROBOTIQUE

Merci de nous rejoindre,, au plaisir de se croisé sur le forum.

Rejoignez le forum, c’est rapide et facile

S.A.R.A.H
Bonjour et bienvenu sur le forum SARAH-ROBOTIQUE

Merci de nous rejoindre,, au plaisir de se croisé sur le forum.
S.A.R.A.H
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
S.A.R.A.H

Intelligence artificielle domotique IA & Programmation


Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

Arduino Mon robot Ulysse

Aller en bas  Message [Page 1 sur 1]

1Sujet Arduino Mon robot Ulysse Jeu 13 Juin 2024 - 1:14

Dark-Best

Dark-Best
Admin
Admin

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

Puis une fois la pince équipé sur le chassie et tous le reste:

Arduino Mon robot Ulysse  Dscf0333

Arduino Mon robot Ulysse  Dscf0334

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

Sa c'est le code pour la carte roméo ( donc mode autonome ou manuel ) ^^


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
^^

Dark-Best aime ce message

https://sarah-robotique.forumactif.com

Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum