Hardrobot

De troyesGEII
Aller à : navigation, rechercher

1 ere Étape moteur

présentation du robot en vidéo http://www.youtube.com/watch?v=qjyGY_saNkU

petite vidéo du fonctionnement très rudimentaire http://www.youtube.com/watch?v=RFTtGAS0Rkk

Soudage des composants

Présentation en ligne

programme arduino

inttesttimer=0;
const intledhaut=8;
const int ledpinv=5;
const int ledpinj=6;
const int ledpinr=7;
int pwm_a = 10; 
//PWM control for motor outputs 1and 2 is on digital pin 10 
int pwm_b = 11; 
//PWM control for motor outputs 3and 4 is on digital pin 11 
int Pindir_a = 12;
int dir_a=1;
//PWM control for motor outputs 1and 2 is on digital pin 12 
int Pindir_b = 13;
int dir_b=1;
//PWM control for motor outputs 3and 4 is on digital pin 13 
int val0=0;//valuersur1024 de capteur0
intval1=0;//valuer sur1024 de capteur1
intval2=0;//valuer sur1024 de capteur2
intariv=0;//capteur d'arrivé
intanalogPin0 = 0;//capteur0(millieu) broche0
intanalogPin1 = 1;//capteur1(gauche) broche1
intanalogPin2 = 2;//capteur2(droit) broche2
intanalogPin4 =5;//capteur d'arrivé
intcompteura=20;
intcompteurb=20;
int  anciencompteura ;
intanciencompteurb;
char c;
int zero;
intafaire=0;
int tim=0;
void setup(){
  Serial.begin(115200);   // ouvre le port série, fixe le débit à 115200 bauds
  pinMode(pwm_a, OUTPUT);  //vitesse
  pinMode(pwm_b, OUTPUT);  //vitesse
  pinMode(Pindir_a, OUTPUT); //sens
  pinMode(Pindir_b, OUTPUT); //sens
  //capteur optique
  attachInterrupt (0,test , CHANGE);//patte 2,moteur a
  attachInterrupt (1,test2 , CHANGE);//patte 3,moteur b
  pinMode(ledpinv, OUTPUT);
    pinMode(ledpinj, OUTPUT);
      pinMode(ledpinr, OUTPUT);
  //sens du moteur
  //si 0 recule,si 1 avance
  digitalWrite(Pindir_a, dir_a);
  //si 0 recule,si 1 avance
  digitalWrite(Pindir_b, dir_b);
 cli();//stop interrupts
 
// TCCR1A = 0;                  //Reset control registers
// TCCR1B = 0;                  //Reset control registers
// TCCR1B |= (1 << WGM12);     // Clear Timer on Compare Match (CTC) Mode
// TCCR1B |= (1 << CS10);      // Prescaler x1
// OCR1A = 255;                 //Set compared value
// TIMSK1 = 0;                  //Reset Timer/Counter2 Interrupt Mask Register
TIMSK1 |= (1 << OCIE1A);     // Enable Output Compare Match A Interrupt*/ 
 
 sei();//allow interrupts
 
 
} 
 
 
ISR(TIMER1_COMPA_vect)  {//timer1 interrupt 1Hz toggles pin 13 (LED)
 
testtimer++;
 
if (testtimer==2000)
{
 
 testtimer=0;
 afaire=1;
 
 
 }
}
 
 
void test(){
 tim=tim+1;
 compteura=anciencompteura ;
  if (dir_a==1){
    compteura=compteura+1;
  }
  else{
    compteura=compteura-1;
  }
 
}
 
void test2(){
 if (dir_b==1){
   compteurb=compteurb+1;
  }
  else{
    compteurb=compteurb-1;
  }
 
}
 
void loop(){
    anciencompteura=compteura;//compteur a 
    anciencompteurb=compteurb;//compteur b 
  
   
    
  /* Serial.print('a');
   Serial.println(compteura); 
   Serial.print('b');
   Serial.println(compteurb);*/
  val0 = analogRead (analogPin0); // lecture dela broche d'entrée0
  val1 = analogRead (analogPin1); // lecture dela broche d'entrée1
  val2 = analogRead (analogPin2); // lecture dela broche d'entrée2  
  ariv = analogRead (analogPin4);
    Serial.print('m');
    Serial.println (ariv); // valeurs d'arrivé
  /* Serial.print('g'); 
   Serial.println (val1); // debug valeur
   Serial.print('d');
   Serial.println (val2); // debug valeur 
   */
 
 if(val0>=200||val1>=100||val2>=100)//detetion d'obstacle etesquive
  {
 
   digitalWrite(ledpinv, LOW);
    digitalWrite(ledpinj, HIGH);
     digitalWrite(ledpinr, LOW);
 
   dir_a=0;
   dir_b=0;
    //compteura=0;
    //compteurb=0;
    digitalWrite(Pindir_a, dir_a);
    digitalWrite(Pindir_b, dir_b);
   //if(compteura<=-40&compteurb<=-40){ 
    analogWrite(pwm_b,200);
    analogWrite(pwm_a,80);
   delay(500);
 }
 
 else //condition normal
 {
    digitalWrite(ledpinj, LOW);
     digitalWrite(ledpinv, HIGH);
       digitalWrite(ledpinr, LOW);
     
   analogWrite(pwm_b,100);
   analogWrite(pwm_a,114);
   dir_a=1;
   dir_b=1;
 
   digitalWrite(Pindir_a, dir_a);
   digitalWrite(Pindir_b, dir_b);
   delay(200);
  }
      if(afaire=1){// si dection de blocagealors déblocage du robots
  digitalWrite(ledpinv, LOW);
  digitalWrite(ledpinj, LOW);
   digitalWrite(ledpinr, HIGH);
     
   if(compteura==anciencompteura&compteurb==anciencompteurb){
    dir_a=0;
   dir_b=0;
   digitalWrite(Pindir_a, dir_a);
   digitalWrite(Pindir_b, dir_b);
   analogWrite(pwm_b,80);
    analogWrite(pwm_a,200);
    delay(500); //afficher les valeurs
  }
    if(ariv>=1000)// detection d'une couleurnoir sur le dessous alors on s'arrete
    
   
  {
   digitalWrite(ledpinv, LOW);
  digitalWrite(ledpinj, HIGH);
   digitalWrite(ledpinr, HIGH);
   
       analogWrite(pwm_b,0);
   analogWrite(pwm_a, 0);
    delay(10000);
  
      }
 
 
}

carte ARDUINO

Lors de la conception nous nous sommes aperçu que le robots s’arrêtait tout seul au bout de quelque seconde, en faite le convertisseur 12v - 5v prévue dans la carte arduino chauffait de trop pour cela 2 transistors de conversion on été rajouter sur le composants pour aider la carte arduino a gérer ces tensions

M0.jpg




roue codeuse et capteur optique

1.remplacement des nouvel roue codeuse 30 noir 30 blache 4 degret chacune

2.voici le shéma du cablage que nous avons réalisé Schema fourche optique.jpg

3.Mise en place des capteur, puis test petit problème du à l'alignement des capteurs optiques et à la position qui créaient des frottement sur le moteur. Réparation du et remise en place des composants. Mise en place de la batterie.



Visualisation

M1234.jpg







2 ème étape l'esquive

capteur de proximité

On a choisi de mettre 3 capteurs fait a base de photodiode et photo-transistor. L'émetteur d'entrée est alimenté sous un courant provocant une émission radiative puis récupérée par la base du photo-transistor pour donner à la sortie un courant collecteur. Listes des composants: - 1 photodiode LD271

                      - 1 photo-transistor BPW50
                      - 1 résistance de 19 Ohm
                      - 1 résistance de 220 KOhm 

Schéma de principe:

Detec obstacle.JPG

Détection de blocage

Grace a une commande interrupt on peut constater quand le robot est à l’arrêt.

cli();
//stop interrupts //  TCCR1A = 0;                  
// Reset control registers //  TCCR1B = 0;                  
// Reset control registers 
//  TCCR1B |= (1 << WGM12);      
// Clear Timer on Compare Match (CTC) Mode 
//  TCCR1B |= (1 << CS10);       
// Prescaler x1 //  OCR1A = 255;                 
// Set compared value //  TIMSK1 = 0;                  
// Reset Timer/Counter2 Interrupt Mask Register TIMSK1 |= (1 << OCIE1A);                              // Enable Output Compare Match A Interrupt */   sei();
//allow interrupts   }  ISR(TIMER1_COMPA_vect)  {
//timer1 interrupt 1Hz toggles pin 13 (LED) testtimer++; 
if (testtimer==2000) {   
testtimer=0; afaire=1;  } }

3 Détection de l'arrivée

On utilise un capteur optique pour détecter le changement de couleur du sol ainsi on détectera la zone d'arrivée du robot. Voici le schéma du cablage du capteur optique:

Detect arrive.JPG


M123.jpg