Hardrobot : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(capteur de proximité)
(programme arduino)
Ligne 4 : Ligne 4 :
  
 
<source lang=c>
 
<source lang=c>
int pwm_a = 10;  
+
int testtimer=0;const int ledhaut=8;const int ledpinv=5;const int ledpinj=6;const int ledpinr=7;int pwm_a = 10; //PWM control for motor outputs 1 and 2 is on digital pin 10 int pwm_b = 11; //PWM control for motor outputs 3 and 4 is on digital pin 11 int Pindir_a = 12;int dir_a=1;//PWM control for motor outputs 1 and 2 is on digital pin 12 int Pindir_b = 13;int dir_b=1;//PWM control for motor outputs 3 and 4 is on digital pin 13 int val0=0;//valuer sur1024 de capteur0int val1=0;//valuer sur1024 de capteur1int val2=0;//valuer sur1024 de capteur2int ariv=0;//capteur d'arrivéint analogPin0 = 0;//capteur0(millieu) broche0int analogPin1 = 1;//capteur1(gauche) broche1int analogPin2 = 2;//capteur2(droit) broche2int analogPin4 =5;//capteur d'arrivéint compteura=20;int compteurb=20;int anciencompteura ;int anciencompteurb;char c;int zero;int afaire=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 RegisterTIMSK1 |= (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 de la broche d'entrée0 val1 = analogRead (analogPin1); // lecture de la broche d'entrée1 val2 = analogRead (analogPin2); // lecture de la 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 et esquive  {    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 blocage alors 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 couleur noir 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);        }}
//PWM control for motor outputs 1 and 2 is on digital pin 10  
+
 
int pwm_b = 11;  
 
//PWM control for motor outputs 3 and 4 is on digital pin 11  
 
int Pindir_a = 12;
 
int dir_a=0;
 
//PWM control for motor outputs 1 and 2 is on digital pin 12  
 
int Pindir_b = 13;
 
int dir_b=0;
 
//PWM control for motor outputs 3 and 4 is on digital pin 13  
 
int val;
 
int compteur;
 
int entreePin=4;
 
  int entreePin2=2;
 
char c;
 
 
void setup() {
 
  Serial.begin(115200); // ouvre le port série, fixe le débit à 9600 bauds
 
  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
 
  pinMode(pwm_b, OUTPUT);
 
  pinMode(Pindir_a, OUTPUT);
 
pinMode(dir_b, OUTPUT);
 
  pinMode(Pindir_b, OUTPUT);
 
  //capteur optique
 
  attachInterrupt (0,test , CHANGE);//patte 2, moteur a
 
  attachInterrupt (1,test2 , CHANGE);//patte 3, moteur b  
 
  //sens du moteur
 
  dir_a=1;//si 0 recule,si 1 avance
 
  digitalWrite(Pindir_a, dir_a);
 
  dir_b=1;//si 0 recule,si 1 avance
 
  digitalWrite(Pindir_b, dir_b);
 
  }  
 
   
 
  void test()
 
  {
 
  if (dir_a==1){
 
  compteur=compteur+1;
 
  }
 
  else{
 
  compteur=compteur-1;
 
  }
 
  Serial.println(compteur);
 
  }
 
   
 
  void test2(){
 
   Serial.println("change2");
 
  }
 
   
 
  void loop(){
 
  c = Serial.read();
 
      if(compteur<=5000){
 
              analogWrite(pwm_a, 100);
 
              analogWrite(pwm_b, 100);
 
      }
 
        if(compteur>=5000){
 
          analogWrite(pwm_a, 0);
 
              analogWrite(pwm_b, 0);
 
             
 
         
 
   }    
 
             
 
}
 
 
</source>
 
</source>
  

Version du 26 mars 2013 à 13:02

1 ere Étape moteur

programme arduino

Présentation en ligne

int testtimer=0;const int ledhaut=8;const int ledpinv=5;const int ledpinj=6;const int ledpinr=7;int pwm_a = 10; //PWM control for motor outputs 1 and 2 is on digital pin 10 int pwm_b = 11; //PWM control for motor outputs 3 and 4 is on digital pin 11 int Pindir_a = 12;int dir_a=1;//PWM control for motor outputs 1 and 2 is on digital pin 12 int Pindir_b = 13;int dir_b=1;//PWM control for motor outputs 3 and 4 is on digital pin 13 int val0=0;//valuer sur1024 de capteur0int val1=0;//valuer sur1024 de capteur1int val2=0;//valuer sur1024 de capteur2int ariv=0;//capteur d'arrivéint analogPin0 = 0;//capteur0(millieu) broche0int analogPin1 = 1;//capteur1(gauche) broche1int analogPin2 = 2;//capteur2(droit) broche2int analogPin4 =5;//capteur d'arrivéint compteura=20;int compteurb=20;int  anciencompteura ;int anciencompteurb;char c;int zero;int afaire=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 RegisterTIMSK1 |= (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 de la broche d'entrée0  val1 = analogRead (analogPin1); // lecture de la broche d'entrée1  val2 = analogRead (analogPin2); // lecture de la 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 et esquive  {    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 blocage alors 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 couleur noir 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);        }}

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.

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