
[2WD]mon robot Jardise
Débuté par
seb03000
, juil. 22 2011 03:29
202 réponses à ce sujet
#104
Posté 12 août 2011 - 06:40
Les capteurs US sont sujets aux nuisances sonors comme les capteyrs IR sont sendibles auc nuisances lumineuses.
Pour la programmation fe ce czateur, sans dire de bêtise, ils ont plusieurs facons d'être connectés. (I2C, serial etc).
Quellr est la solution sue tu as choisies.
Cdlt
Yves
Pour la programmation fe ce czateur, sans dire de bêtise, ils ont plusieurs facons d'être connectés. (I2C, serial etc).
Quellr est la solution sue tu as choisies.
Cdlt
Yves
#106
Posté 12 août 2011 - 07:10
#108
Posté 12 août 2011 - 07:22
Attention confusion
Je dit que les Capteurs IR sont sensibles a la lumiere
Les Capteurs US sont sensibles aux sons.
Tu as aparament choisie la connexion serial
Mais le RX du capteur doit etre connecté au TX de la carte
Et le TX tx du capteur au RX de la carte.
C'est le sens logique d'une liaison serie.
Sinon, la age que je t'ai donnee ne correspond pas a une liaison serie.
Je dit que les Capteurs IR sont sensibles a la lumiere
Les Capteurs US sont sensibles aux sons.
Tu as aparament choisie la connexion serial
Mais le RX du capteur doit etre connecté au TX de la carte
Et le TX tx du capteur au RX de la carte.
C'est le sens logique d'une liaison serie.
Sinon, la age que je t'ai donnee ne correspond pas a une liaison serie.
#112
Posté 12 août 2011 - 08:11
Je ne suis pas la personne qu'il ce faut pour examiner le code.
Mais celii qui te l'as donné l'a vraiment bien commenté.
J'ai bien une idée, mais je prefere na pas en parler tellement je n'ai pas confiance en mes connaissances en C++
Attends un programmeur confirmé vas passer.
Cdlt
Yves
Mais celii qui te l'as donné l'a vraiment bien commenté.
J'ai bien une idée, mais je prefere na pas en parler tellement je n'ai pas confiance en mes connaissances en C++
Attends un programmeur confirmé vas passer.
Cdlt
Yves
#114
Posté 12 août 2011 - 08:30
Bon je te parle de mon idée.
Tu as une fonction
Void direction ( et des valeurs)
Une fonction void (c'est sa spécificité) ne retourne eucune vzleua
Void moteur2()
Voila comment declarer une fonction void
Les valeurs sui se trouvent entre tes parenteses ne dont donc pas valides.
Tes moteurs ne changent changent pas de direction
Tu as une fonction
Void direction ( et des valeurs)
Une fonction void (c'est sa spécificité) ne retourne eucune vzleua
Void moteur2()
Voila comment declarer une fonction void
Les valeurs sui se trouvent entre tes parenteses ne dont donc pas valides.
Tes moteurs ne changent changent pas de direction
#117
Posté 13 août 2011 - 11:33
Bonjour,
Actuellement donc, les pin en sortie sont 5,6,7,8.
à remplacer par
Ayant de l'expérience en la matière, je sais que bosser sur un code qui n'est pas le sien c'est plutôt chi*** car personne n'a les même connaissances et les même méthodologie.
Par exemple, pour ça:
vitesse2 et direction2 sont directement appelé en global ????
J'aurai fait :
Cdlt
int i; for(i=5;i<=8;i++) pinMode(i, OUTPUT); //met les pin 4,5,6,7 en mode sortieDéjà, là ça ne va pas, i commence à 5 donc, le pin 4 n'est pas pris en compte, et il met le pin 8 en sortie car 'i<=8 ' ce qui ne correspond pas à ton commentaire.
Actuellement donc, les pin en sortie sont 5,6,7,8.
à remplacer par
for(int i=4;i<8;i++){ pinMode(i, OUTPUT); //met les pin 4,5,6,7 en mode sortie }Comme quoi, apprendre les fondamentaux de l'algorithmie ça sert à quelque chose avant de s'attaquer à un langage, et de faire son propre code pour le comprendre.
Ayant de l'expérience en la matière, je sais que bosser sur un code qui n'est pas le sien c'est plutôt chi*** car personne n'a les même connaissances et les même méthodologie.
Par exemple, pour ça:
void Moteur2(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(direction2,HIGH); } else { digitalWrite(direction2,LOW); } }
vitesse2 et direction2 sont directement appelé en global ????
J'aurai fait :
// CONSTANTES ... #define VITESSE_2 = 5; #define DIRECTION_2 = 4; void Moteur2(int valeur_vitesse, boolean sens_avant){ analogWrite(VITESSE_2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum type = (sens_avant ? HIGH : LOW); digitalWrite(DIRECTION_2,type); }
Cdlt
#119
Posté 10 février 2012 - 01:07
Bonjour a tous.
Pour évité d'ouvrir un nouveaux sujet , je me remet sur mon sujet.
Bon voila j'ai perfectionner mon robot je luis et rajouter des nouveaux composants , et ce n’est pas fini , voila se que j'ai pu faire depuis tous se
temps.
Pour commencé voici quelque photo de mon robot Jardise , attention ya beaucoup de files lol.








Au cours de quelque moi j'ai voulu me remettre sur mon robot Jardise , j'avais stipulé qu'il été fini , mes j'ai voulue l’amélioré en luit rajoutent
de nouveau composent.
J’ai bien sûr grâce aux logiciels Arduino , amélioré mon code de Jardise , grâce à la télécommande et son capteur de son fonctionnement manuel , et
autonome.
Voici son code:
J'ai voulu rajouté une deuxième carte Arduino pour luit donné quelque fonction.
Une Fonction , qui est:
Un module de capteur de mouvement PIR , qui permet dès qu'il capte un mouvement , une LED s'allume , pour me
prévenir qu'il y a un mouvement détecté.
J'ai aussi rajouté pour le fun un bouton poussoir qui me permet d’allumé une LED , je pense par la suite rajouter d'autre
composent pour utilisé se bouton poussoir.
Voici le deuxième code pour la deuxième carte Arduino:
De plus je me suis amusé a contrôlé mon robot Jardise avec le serial monitor du logiciel Arduino , c'est plutôt marrent , mes ça permet aussi de voir si nos motoreducteur fonctionnent bien qu'il nous permet aussi de bien réglé les mouvements des motoreducteurs.
Voila un code d'aisé que j'ai pu faire , ça peux vous servir:
Ou alors vous pouviez contrôlé une LED aussi avec le sérial monitor du logiciel Arduino.
Je vous passe aussi un des codes que j'ai pu faire pour contrôler une LED , ( PS la LED je les pris sur mon robot ).
Voici le code:
Pour évité d'ouvrir un nouveaux sujet , je me remet sur mon sujet.
Bon voila j'ai perfectionner mon robot je luis et rajouter des nouveaux composants , et ce n’est pas fini , voila se que j'ai pu faire depuis tous se
temps.
Pour commencé voici quelque photo de mon robot Jardise , attention ya beaucoup de files lol.








Au cours de quelque moi j'ai voulu me remettre sur mon robot Jardise , j'avais stipulé qu'il été fini , mes j'ai voulue l’amélioré en luit rajoutent
de nouveau composent.
J’ai bien sûr grâce aux logiciels Arduino , amélioré mon code de Jardise , grâce à la télécommande et son capteur de son fonctionnement manuel , et
autonome.
Voici son code:
#include <IRremote.h> #include <IRremoteInt.h> #include <Servo.h> //Servomoteur // Créer un objet pour contrôler un servomoteur Servo myservo; //Capteur de Distance infrarouge IR Sharp GP2Y0A02YK0F int capteur = 0; //Capteur de distance infrarouge Sharp GP2Y0A21 int capteur2 = 1; // Variable pour lire la valeur du capteur de la broche analogique int val; // Variable pour lire la valeur du capteur2 de la broche analogique int val2; //LED bleu int LEDBLEU = 2; //Motoreducteur const int vitesse1=6; const int vitesse2=5; const int direction1=7; const int direction2=4; ////Fonctions motoréducteur pour le mode déplacement automatique void moteur1(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse1,valeur_vitesse); //Valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(7,HIGH); } else { digitalWrite(7,LOW); } } void moteur2(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse2,valeur_vitesse); //Valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(4,HIGH); } else { digitalWrite(4,LOW); } } // IR PIN module récepteur et variable int RECV_PIN = 11; 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; void setup() { //LEDBLEU broche en mode sortie pinMode(LEDBLEU,OUTPUT); // Attache le servo sur la broche 3 à l'objet servo myservo.attach(3); int i; for(int i=4;i<=7;i++) pinMode(i,OUTPUT); //Met les pin 4,5,6,7 en mode sortie Serial.begin(9600); // désactiver les moteur par défaut digitalWrite(5,LOW); digitalWrite(6,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,LOW); } } // recevoir la prochaine valeur irrecv.resume(); // court délai d'attente pour répéter le signal IR // (L'empêcher d'arrêter si aucun signal reçu) delay(550); } // mode automatique if(mode == MODE_AUTO) { // Définit la position d'asservissement en fonction de la valeur à l'échelle myservo.write(val); // L'échelle pour l'utiliser avec le servo (valeur entre 0 et 300) val = map(val, 0, 115, 0, 300); val = analogRead(capteur); val2 = analogRead(capteur2); // Attend que le servo pour y arriver delay(200); // Si on est à moins de quelque cm d'un obstacle pour les deux capteurs if ((val >= 215) || (val2 >= 215)) { moteur1(0,true); //J'arrete le moteur 1 moteur2(0,true); // J'arrete le moteur 2 delay(150); //J'attend 2 seconde moteur1(160,true); //J'avance tout droit moteur2(0,true); // J'arrete le moteur 2 delay(300); //La valeur à mettre reste à définir en fonction de la vitesse du robot moteur1(160,false); //J'avance tout droit moteur2(160,true); //J'avance tout droit } else { moteur1(160,true); //J'avance tout droit moteur2(160,false); //J'avance tout droit } } else { Serial.println(results.value, DEC); switch (sous_mode_manuel) // Mode Manuel controle le robot avec la télécommande { case MODE_LED: //Allume la LED bleu avec la touche ( EQ ) de la télécommande if (led_on) { digitalWrite(LEDBLEU,LOW); led_on = false; } else { digitalWrite(LEDBLEU,HIGH); led_on = true; } break; case MODE_STOP: // Stop (FUNC / STOP) bouton de la télécommande digitalWrite(5,LOW); // roue droite a l'arrêt digitalWrite(6,LOW); // roue gauche a l'arrêt break; case MODE_AVANCE: // (VOL +) bouton de la télécommande faire avancer le robot motor(100,100); break; case MODE_RECULE: // (VOL-) bouton de la télécommande faire reculer le robot motor(-100,-100); break; case MODE_DROITE: // rotation droite (>>) bouton avance rapide la télécommande motor(0,-90); break; case MODE_GAUCHE: // rotation gauche (<<) bouton avance rapide la télécommande motor(-90,0); break; case MODE_AV_DROITE: // avant droite avec la touche ( ST/REPT ) de la télécommande motor(120,45); break; case MODE_AV_GAUCHE: // avant gauche (playe) bouton de la télécommande motor(65,110); 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 mode moteur ( motoréducteur pour le mode manuel ) 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(7,HIGH); // direction roue gauche avant analogWrite(6,left); // vitesse de la roue gauche } //inverser la roue gauche else if(left<0) { digitalWrite(7,LOW); // inverse à gauche en direction analogWrite(6,-left); // vitesse de la roue gauche } else { digitalWrite(6,LOW); // roue gauche a l'arrêt } if(right>0) // roue droite avant { // direction de la roue droite avant digitalWrite(4,LOW); analogWrite(5,right); } else if(right<0) // roue droite en arrière { digitalWrite(4,HIGH); // inverse à droite en direction analogWrite(5,-right); } else { digitalWrite(5,LOW); // roue droite a l'arrêt } } // FIN // SEB03000
J'ai voulu rajouté une deuxième carte Arduino pour luit donné quelque fonction.
Une Fonction , qui est:
Un module de capteur de mouvement PIR , qui permet dès qu'il capte un mouvement , une LED s'allume , pour me
prévenir qu'il y a un mouvement détecté.
J'ai aussi rajouté pour le fun un bouton poussoir qui me permet d’allumé une LED , je pense par la suite rajouter d'autre
composent pour utilisé se bouton poussoir.
Voici le deuxième code pour la deuxième carte Arduino:
const int bouton = 2; //Le bouton est connecté à la broche 2 de la carte Adruino const int led = 13; //La LED à la broche 13 int etatBouton; //Variable qui enregistre l'état du bouton int LED8 = 8; // Choisir la broche pour la LED 8 int Mouvement = 5; // Choisir la broche d'entrée (pour le capteur PIR) int EX = LOW; // Je commence, en supposant qu'aucun mouvement sera détecté int val3 = 0; // Variable pour la lecture de l'état de la broches void setup() { pinMode(led, OUTPUT); //La LED est une sortie pinMode(bouton, INPUT); //Le bouton est une entrée etatBouton = HIGH; //On initialise l'état du bouton comme "relaché" pinMode(LED8, OUTPUT); // Déclare la LED 8 en sortie pinMode(Mouvement, INPUT); // Déclare le capteur comme une entrée Serial.begin(9600); //Démarrage de la connexion en série avec l'ordinateur. } void loop() { etatBouton = digitalRead(bouton); //Rappel : bouton = 2 if(etatBouton == HIGH) //Test si le bouton a un niveau logique HAUT { digitalWrite(led,LOW); //La LED reste éteinte } else //Test si le bouton a un niveau logique différent de HAUT (donc BAS) { digitalWrite(led,HIGH); //Le bouton est appuyé, la LED est allumée delay(9000); //La LED reste allumé 9 seconde après éxtinction } { val3 = digitalRead(Mouvement); // Lire la valeur d'entrée if (val3 == HIGH) // Vérifier si l'entrée est HAUTE { digitalWrite(LED8, HIGH); // Clignotants LED 8 ON if (EX == LOW) { // allumage Serial.println("Mouvement detecte!!!!!"); EX = HIGH; } } else { digitalWrite(LED8, LOW); // Clignotants à LED 8 OFF if (EX == HIGH) delay(1); { //éteinte Serial.println("Mouvement terminee!"); EX = LOW; delay(2); } } } }
De plus je me suis amusé a contrôlé mon robot Jardise avec le serial monitor du logiciel Arduino , c'est plutôt marrent , mes ça permet aussi de voir si nos motoreducteur fonctionnent bien qu'il nous permet aussi de bien réglé les mouvements des motoreducteurs.
Voila un code d'aisé que j'ai pu faire , ça peux vous servir:
int EN1 = 6; int EN2 = 5; int IN1 = 7; int IN2 = 4; void Motor1(int pwm, boolean reverse) { analogWrite(EN1,pwm); //mais un contrôle PWM, 0 pour l'arrêter, et 255 pour une vitesse maximale if(reverse) { digitalWrite(IN1,HIGH); } else { digitalWrite(IN1,LOW); } } void Motor2(int pwm, boolean reverse) { analogWrite(EN2,pwm); if(reverse) { digitalWrite(IN2,HIGH); } else { digitalWrite(IN2,LOW); } } void setup() { int i; // for(i=6;i<=9;i++) // pinMode(i, OUTPUT); //set pin 6,7,8,9 au mode de sortie for(i=5;i<=8;i++) //Pour Arduino Blindage pinMode(i, OUTPUT); //set pin 4,5,6,7 au mode de sortie Serial.begin(9600); } void loop() { int x,delay_en; char val; while(1) { val = Serial.read(); if(val!=-1) { switch(val) { case 'w'://Move ahead Motor1(100,true); Motor2(100,true); break; case 'x'://move back Motor1(100,false); Motor2(100,false); break; case 'a'://turn left Motor1(100,false); Motor2(100,true); break; case 'd'://turn right Motor1(100,true); Motor2(100,false); break; case 's'://stop Motor1(0,false); Motor2(0,false); break; } } }
Ou alors vous pouviez contrôlé une LED aussi avec le sérial monitor du logiciel Arduino.
Je vous passe aussi un des codes que j'ai pu faire pour contrôler une LED , ( PS la LED je les pris sur mon robot ).
Voici le code:
int ledPin = 2; // j'initialise une led int octetRecu; //Déclaration de la variable contenant la valeur de la touche saisi au clavier void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } void loop(){ if (Serial.available() > 0) { //si il y a une valeur dans le serial // Lecture de l'octet présent dans la mémoire tampon (buffer) octetRecu = Serial.read(); if (octetRecu == 'A' || octetRecu == 'a') //Si l'octet recuz est égal à A ou a { digitalWrite(ledPin, HIGH); //Allume la LED A Serial.println("allume"); //Affiche "allume" la LED série } if (octetRecu == 'E' || octetRecu == 'e') //Si l'octet recu est égal à E ou e { //Eteindre la LED connectées digitalWrite(ledPin, LOW); Serial.println("eteinte");//Affiche " eteinte" dans le moniteur série } } }
#120
Posté 10 février 2012 - 01:07
Je conte luis rajouté un étage supplémentaire ( en bois on en PVC ) sur mon robot du coup ça luit fera une plateforme
neutre je rajoute une deuxième carte Arduino pour rajouté la carte mémoire et le module son , et voir a rachouté la pince
aluminium celle si.

J'ai fait un petit programme que j'ai amélioré pour la pince , ce programme n'est pas fini , car je vais luis implanté un capteur infrarouge sharp ( ou autre ) voir a le contrôle avec une autre télécommande , c'est a réfléchir , et a étudié bien sûr.
Voici le début du code:
Et voici une vidéo du fonctionnement de la pince aluminium dagu:
http://www.dailymotion.com/video/xog6vq_pince-aluminium-dagu-en-fonction_lifestyle
Je me suis acheter cette pièce:

Vas falloir que je face de la soudure , il va falloir être précis , car je les reçu en kit , voici une photo:

Et je possède se module aussi pour qu'il puisse parlé:

C'est un module Amplificateur Audio DFRobot:
La suite bientôt.
neutre je rajoute une deuxième carte Arduino pour rajouté la carte mémoire et le module son , et voir a rachouté la pince
aluminium celle si.

J'ai fait un petit programme que j'ai amélioré pour la pince , ce programme n'est pas fini , car je vais luis implanté un capteur infrarouge sharp ( ou autre ) voir a le contrôle avec une autre télécommande , c'est a réfléchir , et a étudié bien sûr.
Voici le début du code:
#include <Servo.h> Servo myservo; // creer l'objet servo pour controller un servo // Déclaration des constantes //position des servomoteure const int position_minimum_Z = 900; // Position min pour le servo pour ça rotation sur l'axe z const int position_maximum_Z = 2300; // Position max pour le servo pour ça rotation sur l'axe z const int position_minimum_X = 1200; // Position min pour le servo pour ça rotation sur l'axe x const int position_maximum_X = 2400; // Position max pour le servo pour ça rotation sur l'axe x const int servo = 3; //declaration de la broche 3 du servo de la pince. // Déclaration des variables int position1 = 0; // Position 1 int position2 = 0; // Position 2 // les servos Servo Servo1; //Servo pince Servo Servo2; // Servo pince factice void setup() { pinMode(servo, OUTPUT); //met la broche en sortie Servo1.attach(servo, position_minimum_Z, position_maximum_Z); Servo1.attach(servo, position_minimum_X, position_maximum_X); position1 = position_minimum_Z; position2 = position_minimum_X; } void loop() { if(position1 == position_minimum_Z) { for(position2 = position_minimum_Z; position1 <= position_maximum_Z; position1++) { Servo1.writeMicroseconds(position1); // durée voulue pour le servomoteur delay(1); } for(position2 = position_minimum_X; position2 <= position_maximum_X; position2++) { Servo2.writeMicroseconds(position2); // durée voulue pour le servomoteur delay(1); } } else { for(position1 = position_maximum_Z; position1 >= position_minimum_Z; position1--) { Servo1.writeMicroseconds(position1); // durée voulue pour le servomoteur delay(1); } for(position2 = position_maximum_X; position2 >= position_minimum_X; position2--) { Servo2.writeMicroseconds(position2); // durée voulue pour le servomoteur delay(1); } position1 = position_minimum_Z; position2 = position_minimum_X; } }
Et voici une vidéo du fonctionnement de la pince aluminium dagu:
http://www.dailymotion.com/video/xog6vq_pince-aluminium-dagu-en-fonction_lifestyle
Je me suis acheter cette pièce:

Vas falloir que je face de la soudure , il va falloir être précis , car je les reçu en kit , voici une photo:

Et je possède se module aussi pour qu'il puisse parlé:

C'est un module Amplificateur Audio DFRobot:
La suite bientôt.
Répondre à ce sujet

1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users