Hardrobot
Sommaire
1 ere Étape moteur
programme arduino
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é
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:
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: