Robot Ulysse
#2
Posté 25 juin 2012 - 12:54
joli, les caissons de basse a l'arriere et tout !....
IL parle ?
J'attend la description avec impatiente !
GG !
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter : https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/
Besoin d'une impression 3D grand format ? Contactez moi !
#4
Posté 25 juin 2012 - 02:04
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter : https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/
Besoin d'une impression 3D grand format ? Contactez moi !
#6
Posté 25 juin 2012 - 12:08
Bon comme vous l'avez remarqué ( enfin je pense ) que je n'été pas souvent sur le forum c'est dernier temps , normale d'une par j'ai du refaire mon
blog , pour l’évoluer en forum , et j'ai beaucoup bossé sur le robot Ulysse , j'ai u pas mal de problèmes avec quelque module , mes
ces chose la , on été réglé.
Bon passons , voici la description , plus achat des pièce.
Alors chassie plateforme robot mobile 4 roues motrices Mon lien
Une carte Romeo Tout-en-un (ATMega328) rev 1.1 Mon lien
Une Carte Arduino Uno Rev 3 Mon lien
Une Pince en Aluminium (avec Servomoteurs) Dagu Mon lien
Un Kit télécommande Infrarouge pour Arduino + 2 capteur. Mon lien
Une batterie 9,2V 2200mAh pris sur une voiture télécommandé.( pas de lien ).
Un boitier pour 4 piles LR6-AA Mon lien
Un module de Répétition MP3 ''DFRduino Player'' Mon lien
Après les petite baffe sur les deux coté de mon robot , on été pris sur des viel PC.
Voila je pense que j'ai fait le tour.
Voilà , ce que fait le robot.
Comme la dit microrupteurman2 , mon robot un bien télécommandé ( bien vue!!!! ) je contrôle mon robot , la pince , et aussi quelque voie , tout ça avec la télécommande.
Je compte acheter 2 modules pour une reconnaissance vocale
, donc un module Analyseur Audio Mon lien et un Capteur sonore analogique Mon lien
Je conte lui rajouté une colonne ( un étage ) pour rajouté un écran LCD , qui me donnera l'heure et la date , et voir aussi a rajouté un Module
caméra et un Module Bluetooth Mon lien pour contrôlé le robot à distance ou pour le traitement d'image , mes je ne suis pas sur de mois.
Voilà je pense que j'ai tous dit , si vous avez des questions hésité pas , ou des remarques.
Je travaille toujours sur le programme de Ulysse.
Une foi que tous serra fini je métré des photos et une vidéo.
- seb03000 aime ceci
#7
Posté 25 juin 2012 - 01:08
Si tu ajoutes les modules de reconnaissance vocale, ça m'intéressera tout particulièrement.
et merci pour ce partage, je ne crois pas être le seul à être jaloux en regardant ton joujou.. "j'en veux un !"
#11
Posté 28 mai 2013 - 12:58
Je me suis relancé sur divers projet que je posterai sur le fofo.
Pour commencé , cela concerne le robot ulysse.
j'ai viré la pince, plus les 3 capteurs infrarouge sharp , est les baffe,
pour rajouter le capteur IR Compound Eye = ( IR œil composé )
Celui si:
j'ai monté le capteur IR Compound Eye = ( IR œil composé ) plus le pont en H en guise de tourelle , pour que le capteur suis un objet ou ma mains , voici une photo:
Est voici le programme , avec quelque bout de code que j'ai trouvais sur le net , cette programmation n'est pas fini , car le capteur lui , suis que les objet ou ma mains ,
mais le chassie lui , ne se déplace pas , donc je cherche la solution pour que le chassie puisse roulé en fonction de l'objet mis devants lui.
Donc si vous avez une idée , je suis preneur.
Voici le code:
#include <Servo.h> #define IRleft 1 // Compound Eye Left - analog input A1 #define IRright 3 // Compound Eye Right - analog input A3 #define IRup 0 // Compound Eye Up - analog input A0 #define IRdown 2 // Compound Eye Down - analog input A2 #define IRleds 2 // Compound Eye LEDs - digital output D2 #define panPin 3 // PAN Servo - digital output D3 #define tiltPin 5 // TILt Servo - digital output D5 int sServoPin = 6; int sServoPin2 = 5; int dServoPin = 7; int dServoPin2 = 4; void stopper(void) //Stop { digitalWrite(sServoPin,LOW); digitalWrite(sServoPin2,LOW); } void advance(char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/> //le robot avance { analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>; digitalWrite(dServoPin,HIGH); analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>; digitalWrite(dServoPin2,HIGH); } void back_off (char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/> //le robot recule { analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>; digitalWrite(dServoPin,LOW); analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>; digitalWrite(dServoPin2,LOW); } void turn_L (char a) //Tourne a gauche { analogWrite (sServoPin,a); digitalWrite(dServoPin,HIGH); analogWrite (sServoPin2,a); digitalWrite(dServoPin2,LOW); } void turn_R (char a) //Tourne a droite { analogWrite (sServoPin,a); digitalWrite(dServoPin,LOW); analogWrite (sServoPin2,a); digitalWrite(dServoPin2,HIGH); } // defini les constants - define constants byte LRscalefactor=15; //facteur d'échelle - calibrer leurs moteurs - calibrage Selon le servos byte UDscalefactor=15; //facteur d'échelle - calibrer leurs moteurs - calibrage Selon le servo // distance minimale pour déplacer la tête du capteur int distancemax=255; // valeur capteur pour l'entrée analogique // distance qui provoque un décalage de gauche a droite int bestdistance=400; // valeur pour trouver expérimentale du capteur int PanZero=78; // stop servo di pan int TiltZero=40; //arrêter servo haut bas - asservissement d'inclinaison arrêt int sMotorStop=90; // servo gauche - Stop: int dMotorStop=90; // Arrêtez servo droit int LRmax=170; // Les valeurs max servo pan int LRmin=10; // Valeur min servo de pan int UDmax=170; // Max valore inclinable int UDmin=10; // min valore inclinable // Définir le support de la variables - définir les variables globales int pan=PanZero; int tilt=TiltZero; int panscale; int tiltscale; int sSpeed=sMotorStop; int dSpeed=dMotorStop; int panOld; int tiltOld; int distance; int temp; // Capteurs IR int updown; int leftright; int leftIRvalue; int rightIRvalue; int upIRvalue; int downIRvalue; //Servomoteurs Servo panLR; Servo tiltUD; void setup() { // initialise et configure la broche servo // servos initialiser et configurer les broches panLR.attach(panPin); panLR.write(PanZero); tiltUD.attach(tiltPin); tiltUD.write(TiltZero); pinMode (IRleds,OUTPUT); int i; for(int i=4;i<=7;i++) pinMode(i,OUTPUT); //Met les pin des moteurs 4,5,6,7 en mode sortie } void loop() { // servo régler la vitesse panLR.write(pan); tiltUD.write(tilt); IReye(); // lire les valeurs du capteur IRfollow(); // suivi } void IReye()//===============================================================Lire IR œil composé================================================ { digitalWrite(IRleds,HIGH); // allumer LED IR pour lire la lumière infrarouge TOTAL (ambiante + reflété) delay(4); // Prévoyez du temps pour phototransistors à répondre - aspetta par permettere LA Risposta dei phototransistors leftIRvalue=analogRead(IRleft); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT rightIRvalue=analogRead(IRright); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT upIRvalue=analogRead(IRup); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT downIRvalue=analogRead(IRdown); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT delay(2); digitalWrite(IRleds,LOW); // éteindre LA LED IR pour lire la lumière infrarouge ambiant (IR de l'éclairage intérieur et la lumière du soleil) delay(4); // Prévoyez du temps pour répondre à phototransistors-aspetta par permettere LA Risposta dei phototransistors leftIRvalue=leftIRvalue-analogRead(IRleft); // REFLECTED IR = TOTAL IR - AMBIENT IR rightIRvalue=rightIRvalue-analogRead(IRright); // REFLECTED IR = TOTAL IR - AMBIENT IR upIRvalue=upIRvalue-analogRead(IRup); // REFLECTED IR = TOTAL IR - AMBIENT IR downIRvalue=downIRvalue-analogRead(IRdown); // REFLECTED IR = TOTAL IR - AMBIENT IR distance=(leftIRvalue+rightIRvalue+upIRvalue+downIRvalue)/3;// la distance de l'objet est en moyenne illustrée - dans la distance de l'objet est la moyenne de la réflexion du capteur IR } void IRfollow ()//==============================================Suivre L'objet================================================================ { //servos a l'arrêt sSpeed=sMotorStop; dSpeed=dMotorStop; // si la valeur de retour est faible, cela signifie qu'il n'y a pas d'objet voisins // si la valeur lue est basse, il n'y a pas l'objet devant le capteur if (distance<distancemax) { // le capteur revient à la position repos - réinitialiser le capteur à position zéro if (pan>PanZero)pan=pan-1; if (pan<PanZero)pan=pan+1; if (tilt>TiltZero)tilt=tilt-1; if (tilt<TiltZero)tilt=tilt+1; } else { //-------------------------------------------------------------Suivre objet avec la tête------------------------------------------------ panscale=(leftIRvalue+rightIRvalue)*LRscalefactor/10; //Facteur d'échelle - valeur d'échelle tiltscale=(upIRvalue+downIRvalue)*UDscalefactor/10; // Facteur d'échelle - valeur d'échelle // si la tête tourne vers la gauche if (leftIRvalue>rightIRvalue) { leftright=(leftIRvalue-rightIRvalue)*15/panscale; pan=pan-leftright; } // si la tête tourne à droite if (leftIRvalue<rightIRvalue) { leftright=(rightIRvalue-leftIRvalue)*15/panscale; pan=pan+leftright; } // si la tête est levé if (upIRvalue>downIRvalue) { updown=(upIRvalue-downIRvalue)*15/tiltscale; tilt=tilt+updown; } // si la tête et vaire le bas if (downIRvalue>upIRvalue) { updown=(downIRvalue-upIRvalue)*15/tiltscale; tilt=tilt-updown; } panOld=pan; tiltOld=tilt; if (pan<LRmin) pan=LRmin; if (pan>LRmax) pan=LRmax; if (tilt<UDmin)tilt=UDmin; if (tilt>UDmax)tilt=UDmax; //-------------------------------------------------------------Tournez le corps du robot des qui suis un objet-------------------------------------------- // Si la tête tourne a plus de 60 degrés, exécute également le corps du robot temp=LRmax-panOld; if (temp<60) { sSpeed=sMotorStop-50+temp/2; dSpeed=dMotorStop-50+temp/2; } temp=panOld-LRmin; if (temp<60) { dSpeed=dMotorStop+50-temp/2; sSpeed=sMotorStop+50-temp/2; } //------------------------------------------------------Aller de l'avant ou vers l'arrière pour suivre l'objet------------------------------------ // si l'objet est à une distance inférieure à la distance optimale, revenir à cette distance, // si la distance de l'objet est inférieure à la distance, déplacer le robot pour aller de nouveau à la même distance temp=distance-bestdistance; temp=abs(temp); if (temp>10) { temp=temp-10; if (distance>bestdistance) { dSpeed=dSpeed-temp/3; sSpeed=sSpeed+temp/3; } else { dSpeed=dSpeed+temp/3; sSpeed=sSpeed-temp/3; } } } }
Pour se qui est de la pince dagu je rajouterai un étage de plus, sur le robot ulysse.
@Amicalement.
#12
Posté 28 mai 2013 - 03:05
Je voudrais savoir comment sont gérer les moteurs de ton robot ainsi que le détecteur infra.
Car avec un robot comme le tien, je gérais les roues avec des codeurs. Je m'explique:
Ton robot avance tout droit, le détecteur infrarouge détecte un objet a suivre=> il recule ou avance ou tourne en fonction de la valeur que le détecteur te donne(car tu lui demande en même temps).
Pour info perso: c'est quoi ton model de détecteur (je connais pas celui la).
Donne nous un peu plus d'info sur ton robot stp.
Ne demande jamais à un robot de faire ce que tu peux faire toi même.
#13
Posté 28 mai 2013 - 03:41
Merci pour mon robot.
Alors voilà les composant du robot a l'heure actuel.
Matériel:
Plateforme robot mobile 4 roues motrices
les 4 motoreducteurs du chassie ICI
Une carte Romeo ( ATMega328) rev2
Un capteur infrarouge type "oeil" Dagu
Un Kit Mini Tourelle Pan / Tilt Dagu
Voila je pence que je n'est rien oublier Melmet.
#14
Posté 28 mai 2013 - 04:00
je connaissais pas le capteur infra, il ma l'air pas mal (on peut travailler sur 4 zones de détections)
Tes moteurs ne consommes pas grand choses a priori. Je pense qu'un drivers avec un L293D suffira.
Ne demande jamais à un robot de faire ce que tu peux faire toi même.
#15
Posté 28 mai 2013 - 08:58
Le bémol se trouve au niveaux de la programmation.
Le code que j'ai exposé plus haut ^^ est fonctionnel pour le capteur infrarouge le ( IR Compound Eye ) , il suis bien les objet ,
c'est le chassie en lui même qui dois suivre les mouvement, ou l'objet en fonction du suivi du capteur .
En gros voila se que dois fait le robot:
http://www.youtube.com/watch?feature=player_embedded&v=HR-eO_szLCk
( La demande d'aide concerne le codage )
#16
Posté 29 mai 2013 - 08:14
au risque de me tromper, il te faut des codeur histoire de savoir de combien avance ton robot
après renseigne toi au niveau des PID
il existe des codeur pour se genre de moteurs
je n'ai pas vraiment regarder ton code mais je ne vois pas comment suivre un point sans savoir de combien de pas j'ai fais ^^
#18
Posté 30 mai 2013 - 05:57
Ici, il te suffit de dire à ton robot de tourner à droite s'il voit l'objet plus à droite, et réciproquement. Si possible de manière "proportionnelle" : si l'objet est très à droite, tourne plus vite à droite. Ca devrait suffire. C'est comme du suivi de ligne. C'est beaucoup plus simple qu'un asservissement PID complet.
Leon.
BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)
#19
Posté 30 mai 2013 - 04:43
Merci Leon pour ta réponse.
Donc je n'aurais pas besoins de faire du PID ( bon c'est déjà ça )
Ici, il te suffit de dire à ton robot de tourner à droite s'il voit l'objet plus à droite, et réciproquement. Si possible de manière "proportionnelle" : si l'objet est très à droite, tourne plus vite à droite
Oui je pence que cela devrai être plus facile a faire comparé a du PID ^^
Ben j'ai tenté aujourd'hui de faire mon programme , cela ne fonctionne pas , mais je doute que c'est pas la bonne façon de programmé cette effet.
Voilà la partit que j'ai fait:
///////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////// leftIRvalue = digitalRead(IRleft); rightIRvalue = digitalRead(IRright); // Si le gauche detecte quelque chose le robot tourne a droite if (leftIRvalue<rightIRvalue == LOW) { turn_R(255); } else { stopper(); } // Si le droite detecte quelque chose le robot tourne a gauche if (leftIRvalue>rightIRvalue == LOW) { turn_L(255); } else { stopper(); } //si les 2 capteurs IRs detecte en même temps le robot recule puis tourne if (leftIRvalue == LOW && rightIRvalue == LOW) { back_off(255); delay(2000); turn_L(255); delay(2000); } else { stopper(); } //sinon le robot avance if (leftIRvalue == HIGH && rightIRvalue == HIGH) { advance(255); } else { stopper(); } } } }
En code complet ça donne ce si:
#include <Servo.h> #define IRleft 1 // Compound Eye Left - analog input A1 #define IRright 3 // Compound Eye Right - analog input A3 #define IRup 0 // Compound Eye Up - analog input A0 #define IRdown 2 // Compound Eye Down - analog input A2 #define IRleds 2 // Compound Eye LEDs - digital output D2 #define panPin 3 // PAN Servo - digital output D3 #define tiltPin 8 // TILt Servo - digital output D8 int sServoPin = 6; int sServoPin2 = 5; int dServoPin = 7; int dServoPin2 = 4; void stopper(void) //Stop { digitalWrite(sServoPin,LOW); digitalWrite(sServoPin2,LOW); } void advance(char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //le robot avance { analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; digitalWrite(dServoPin,HIGH); analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; digitalWrite(dServoPin2,HIGH); } void back_off (char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //le robot recule { analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; digitalWrite(dServoPin,LOW); analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; digitalWrite(dServoPin2,LOW); } void turn_L (char a) //Tourne a gauche { analogWrite (sServoPin,a); digitalWrite(dServoPin,HIGH); analogWrite (sServoPin2,a); digitalWrite(dServoPin2,LOW); } void turn_R (char a) //Tourne a droite { analogWrite (sServoPin,a); digitalWrite(dServoPin,LOW); analogWrite (sServoPin2,a); digitalWrite(dServoPin2,HIGH); } // defini les constants - define constants byte LRscalefactor=15; //facteur d'échelle - calibrer leurs moteurs - calibrage Selon le servos byte UDscalefactor=15; //facteur d'échelle - calibrer leurs moteurs - calibrage Selon le servo // distance minimale pour déplacer la tête du capteur int distancemax=255; // valeur capteur pour l'entrée analogique // distance qui provoque un décalage de gauche a droite int bestdistance=400; // valeur pour trouver expérimentale du capteur int PanZero=78; // stop servo di pan int TiltZero=40; //arrêter servo haut bas - asservissement d'inclinaison arrêt int sMotorStop=90; // servo gauche - Stop: int dMotorStop=90; // Arrêtez servo droit int LRmax=170; // Les valeurs max servo pan int LRmin=10; // Valeur min servo de pan int UDmax=170; // Max valore inclinable int UDmin=10; // min valore inclinable // Définir le support de la variables - définir les variables globales int pan=PanZero; int tilt=TiltZero; int panscale; int tiltscale; int sSpeed=sMotorStop; int dSpeed=dMotorStop; int panOld; int tiltOld; int distance; int temp; // Capteurs IR int updown; int leftright; int leftIRvalue; int rightIRvalue; int upIRvalue; int downIRvalue; //Servomoteurs Servo panLR; Servo tiltUD; void setup() { // initialise et configure la broche servo // servos initialiser et configurer les broches panLR.attach(panPin); panLR.write(PanZero); tiltUD.attach(tiltPin); tiltUD.write(TiltZero); pinMode (IRleds,OUTPUT); int i; for(int i=4;i<=7;i++) pinMode(i,OUTPUT); //Met les pin des moteurs 4,5,6,7 en mode sortie } void loop() { // servo régler la vitesse panLR.write(pan); tiltUD.write(tilt); IReye(); // lire les valeurs du capteur IRfollow(); // suivi } void IReye()//===============================================================Lire IR œil composé================================================ { digitalWrite(IRleds,HIGH); // allumer LED IR pour lire la lumière infrarouge TOTAL (ambiante + reflété) delay(4); // Prévoyez du temps pour phototransistors à répondre - aspetta par permettere LA Risposta dei phototransistors leftIRvalue=analogRead(IRleft); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT rightIRvalue=analogRead(IRright); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT upIRvalue=analogRead(IRup); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT downIRvalue=analogRead(IRdown); // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT delay(2); digitalWrite(IRleds,LOW); // éteindre LA LED IR pour lire la lumière infrarouge ambiant (IR de l'éclairage intérieur et la lumière du soleil) delay(4); // Prévoyez du temps pour répondre à phototransistors-aspetta par permettere LA Risposta dei phototransistors leftIRvalue=leftIRvalue-analogRead(IRleft); // REFLECTED IR = TOTAL IR - AMBIENT IR rightIRvalue=rightIRvalue-analogRead(IRright); // REFLECTED IR = TOTAL IR - AMBIENT IR upIRvalue=upIRvalue-analogRead(IRup); // REFLECTED IR = TOTAL IR - AMBIENT IR downIRvalue=downIRvalue-analogRead(IRdown); // REFLECTED IR = TOTAL IR - AMBIENT IR distance=(leftIRvalue+rightIRvalue+upIRvalue+downIRvalue)/3;// la distance de l'objet est en moyenne illustrée - dans la distance de l'objet est la moyenne de la réflexion du capteur IR } void IRfollow ()//==============================================Suivre L'objet================================================================ { //servos a l'arrêt sSpeed=sMotorStop; dSpeed=dMotorStop; // si la valeur de retour est faible, cela signifie qu'il n'y a pas d'objet voisins // si la valeur lue est basse, il n'y a pas l'objet devant le capteur if (distance<distancemax) { // le capteur revient à la position repos - réinitialiser le capteur à position zéro if (pan>PanZero)pan=pan-1; if (pan<PanZero)pan=pan+1; if (tilt>TiltZero)tilt=tilt-1; if (tilt<TiltZero)tilt=tilt+1; } else { //-------------------------------------------------------------Suivre objet avec la tête------------------------------------------------ panscale=(leftIRvalue+rightIRvalue)*LRscalefactor/10; //Facteur d'échelle - valeur d'échelle tiltscale=(upIRvalue+downIRvalue)*UDscalefactor/10; // Facteur d'échelle - valeur d'échelle // si la tête tourne vers la gauche if (leftIRvalue>rightIRvalue) { leftright=(leftIRvalue-rightIRvalue)*15/panscale; pan=pan==-leftright; } // si la tête tourne à droite if (leftIRvalue<rightIRvalue) { leftright=(rightIRvalue-leftIRvalue)*15/panscale; pan=pan+leftright; } // si la tête est levé if (upIRvalue>downIRvalue) { updown=(upIRvalue-downIRvalue)*15/tiltscale; tilt=tilt+updown; } // si la tête et vaire le bas if (downIRvalue>upIRvalue) { updown=(downIRvalue-upIRvalue)*15/tiltscale; tilt=tilt-updown; } panOld=pan; tiltOld=tilt; if (pan<LRmin) pan=LRmin; if (pan>LRmax) pan=LRmax; if (tilt<UDmin)tilt=UDmin; if (tilt>UDmax)tilt=UDmax; //-------------------------------------------------------------Tournez le corps du robot des qui suis un objet-------------------------------------------- // Si la tête tourne a plus de 60 degrés, exécute également le corps du robot temp=LRmax-panOld; if (temp<60) { sSpeed=sMotorStop-50+temp/2; dSpeed=dMotorStop-50+temp/2; } temp=panOld-LRmin; if (temp<60) { dSpeed=dMotorStop+50-temp/2; sSpeed=sMotorStop+50-temp/2; } //------------------------------------------------------Aller de l'avant ou vers l'arrière pour suivre l'objet------------------------------------ // si l'objet est à une distance inférieure à la distance optimale, revenir à cette distance, // si la distance de l'objet est inférieure à la distance, déplacer le robot pour aller de nouveau à la même distance temp=distance-bestdistance; temp=abs(temp); if (temp>10) { temp=temp-10; if (distance>bestdistance) { dSpeed=dSpeed-temp/3; sSpeed=sSpeed+temp/3; } else { dSpeed=dSpeed+temp/3; sSpeed=sSpeed-temp/3; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////// leftIRvalue = digitalRead(IRleft); rightIRvalue = digitalRead(IRright); // Si le gauche detecte quelque chose le robot tourne a droite if (leftIRvalue<rightIRvalue == LOW) { turn_R(255); } else { stopper(); } // Si le droite detecte quelque chose le robot tourne a gauche if (leftIRvalue>rightIRvalue == LOW) { turn_L(255); } else { stopper(); } //si les 2 capteurs IRs detecte en même temps le robot recule puis tourne if (leftIRvalue == LOW && rightIRvalue == LOW) { back_off(255); delay(2000); turn_L(255); delay(2000); } else { stopper(); } //sinon le robot avance if (leftIRvalue == HIGH && rightIRvalue == HIGH) { advance(255); } else { stopper(); } } } }
Donc un avis favorable ou un exemple de programme serré le bienvenue ( si cela est possible )
Je continue mais teste , je doute que je touche au but.
édité: à 00H38
#20
Posté 01 juin 2013 - 12:00
je constate se si:
void advance(char B)/>/>/>/> //le robot avance { analogWrite (sServoPin,B)/>/>/>/>; digitalWrite(dServoPin,HIGH); analogWrite (sServoPin2,B)/>/>/>/>; digitalWrite(dServoPin2,HIGH); } void back_off (char B)/>/>/>/> //le robot recule { analogWrite (sServoPin,B)/>/>/>/>; digitalWrite(dServoPin,LOW); analogWrite (sServoPin2,B)/>/>/>/>; digitalWrite(dServoPin2,LOW);
voici se que se passe: il y a des /> , vous les remarquer ???
a la base le code doit être comme cela
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////void advance(char B) //le robot avance
{
analogWrite (sServoPin,B);
digitalWrite(dServoPin,HIGH);
analogWrite (sServoPin2,B);
digitalWrite(dServoPin2,HIGH);
}
void back_off (char B) //le robot recule
{
analogWrite (sServoPin,B);
digitalWrite(dServoPin,LOW);
analogWrite (sServoPin2,B);
digitalWrite(dServoPin2,LOW);////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Je n'est pas mis la balise pour que vous voyer.
Je suis toujours sur la programmation , je galère , est ne trouve pas comment faire , j'ai testé divers variable de choie.
Répondre à ce sujet
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users