Aller au contenu


Photo
- - - - -

Robot en mecanno avec une tourelle

arduino meccanno capteur ultrason tourelle

18 réponses à ce sujet

#1 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 14 mai 2018 - 12:06

Bonjour a tous,

il y a quelques temps je me suis inscrit sur le forum pour poser des question quand j'en aurais besoin.Depuis j'ai crée mon premier robot sur roue avec un chassie en meccano car il y avait deja des moteur adaptées et plusieurs engrenages et courroies.

 

Mon robot est maintenant terminé mais je suis passé par  plusieurs galère avant de le finir : il-n’avait pas suffisamment de couples, les courroies patinait, après il y avait trop de frottement avec les pièces d'origine :dash2: .... Mais j'ai quand même réussi a adapter sur les meccano l’Arduino ,la roulette, le capteur (avec quelques petits trous.)

je suis un débutant en programmation (j'ai suivie les cours du kit de base et sur le blog d'Eskimon)mais j'ai réussie a faire un programme simple ou le robot avance tant qu'il n'y a pas d'obstacle a moins de 30cm sinon il recule et tourne a gauche pendant X secondes.

Mais maintenant je veut faire tourner ma tourelle avec un moteur pas a pas que j'ai réussi a adapter mais je bloque sur certaines chose:

-faire tourner le moteur :facile

-mettre les valeur du capteur dans un tableau :facile

-comparer les valeur pour trouver la plus grande :pas facile mais je crois que j'ai trouver

-associer cette valeur a temps pour faire tourner le robot vers la valeur du capteur la plus grande :beaucoup chercher pas trouver (j'ai essayer avec un tableau a 2 dimension mais a chaque fois je bloque sur un truc).

 

voila le code :Fichier joint  voituremecanoV1.ino   2,18 Ko   15 téléchargement(s) désoler j'ai oublié de le commenter j'espère que vous le comprendrait ou je le reposterait .

 

et voici les photos:

20180513_121205.jpg

20180513_120954.jpg

20180513_121023 - Copie.jpg

20180513_121040.jpg

20180513_121108.jpg

 

 

merci d'avance pour vos réponses.

ps:désoler pour le fautes et poser vos questions si tout n'est pas clair.



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 254 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 14 mai 2018 - 08:31

Pourquoi faire un tableau en deux dimensions ? 

Pourquoi ne pas placer le capteur droit devant, mesurer en continu la présence éventuelle d'un obstacle, si obstacle on s'arrête, on bouge la tourelle à droite et à gauche, on regarde quelle valeur et la plus grande et on tourne du côté où la valeur est la plus grande ... Simple et efficace qu'en dis tu ?


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#3 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 15 mai 2018 - 04:02

Pourquoi faire un tableau en deux dimensions ? 

Pourquoi ne pas placer le capteur droit devant, mesurer en continu la présence éventuelle d'un obstacle, si obstacle on s'arrête, on bouge la tourelle à droite et à gauche, on regarde quelle valeur et la plus grande et on tourne du côté où la valeur est la plus grande ... Simple et efficace qu'en dis tu ?

 

Mouais c'est vrai mais autant faire tourner la tourelle a 360° non ? j'en ai la  possibilité.

 

Par contre pour le Tableau je voulais d'en coté récupérer les valeurs du capteur et de l'autre les assignées a un temps ou un angle que je change en temps. Pour après pendants mon calcul de la plus grande valeur prendre toute la ligne avec et la valeur du capteur et le "temps" pour après faire un genre de "turnLeft(monTableau[20][1]" avec dans le 20 la valeur la plus grande et dans le 1 le "temps".

je ne sais pas du tout si cela est possible et j’espère que tu as compris mon explication un peu farfelue.

 

-Une dernière question mon code pour retrouver la plus grande valeur est-il bon?

 

Merci de ta réponse et j'essayerai de vous tenir au courant si j'ai réussi ce que j'aimerai.



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 254 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 mai 2018 - 06:05

En fait il faut enregistrer la " position " de la mesure, c'est plus important que le temps ! 

 

Si dans ton tableau tu enregistre " distance, angle " 

une fonction telle que : 

int monTableau[NBMESURESMAX][2];

uint8_t indiceMax = 0;


for( uint8_t i = 0; i<NBMESURESMAX; i++) {



  if( monTableau[indiceMax][0] < monTableau[i][0] ) indiceMax = i ;

}



distanceMax = monTableau[indiceMax][0]; 

angleMax = monTableau[indiceMax][1];

c'est simple et efficace =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#5 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 15 mai 2018 - 07:28

super Merci pour tes réponse rapide Mike118 .

Je vais y réfléchir un petit peu mais c'est vraiment cool de ta par.

Par contre j'ai quatre nouvelle question: (je suis curieux).

-que veut dire:"uint8_t" ??? demande le Mega débutant que je suis

-donc dans mon setup j'enregistre avant tout les angle c'est sa?

-Ton morceau code veut dire que je n'utilise plus la fonction max?

-Et comment a tu fais pour insérer ton code dans la réponse ?

 

Merci encore pour les réponse et je pense tester toutes les modification ce weekend



#6 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 204 messages
  • Gender:Male

Posté 15 mai 2018 - 08:11

Salut,
Pour ta première question : http://www.robot-maker.com/forum/tutorials/article/102-comment-adapter-la-taille-des-variables-en-c/

#7 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 254 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 mai 2018 - 09:39

 

 

-que veut dire:"uint8_t" ??? demande le Mega débutant que je suis

 

 

 

Il n'y a aucune honte à être débutant on est tous passé par là un moment ou un autre ;)

et pour cette première question Jekert t'a très bien répondu en pointant vers un tutoriel que j'ai rédigé exprès pour répondre à cette question ;)

 

 

Mais si tu as plus de questions spécifique sur ce sujet hésite pas à les poser en commentaire du tutoriel ;) 

 

 

 

-donc dans mon setup j'enregistre avant tout les angle c'est sa?

 

 

J'ai pas compris ta question ... 

quels angles ? 

Après pour tout te dire je n'ai pas compris pourquoi tu voulais faire le tableau en deux dimensions qui stock les angles ... 
Car de base si tu prend 10 mesures sur 90° tu sais que le premier angle ça sera 0, le suivant, 10, le suivant 20 puis 30, 40 50 60 70 80 et 90° ... et ça sera toujours pareil donc pas besoin de stocker l'angle ...et dans ce cas l'angle i vaut 10* i ... avec i de 0 à 9 ...  

 

 

 

-Ton morceau code veut dire que je n'utilise plus la fonction max?

 

 

non mon morceau de code n'utilise pas la fonction max car mon but est de savoir lequel des deux est le plus grand pour travailler au niveau de l'indice ... Très utile quand tu as un tableau à plusieurs dimensions quand on ne veut pas stocker les max de chaque dimension à chaque étape de la vérification... Mais si tu avais un tableau de une dimension tu pourrais sans problème utiliser la fonction max... Bref c'était surtout pour montrer une autre façon de faire =)

 

 

 

-Et comment a tu fais pour insérer ton code dans la réponse ?

 

 

 

Pour ça je te recommande de lire ce tutoriel qui explique comment intégrer du contenu sur le forum

 

et je te recommande aussi de jeter un oeil sur vous êtes nouveau sur robot maker


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#8 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 17 mai 2018 - 04:22

Super merci Mike et Jekert
Je ferai des teste ce weekend et je revient vers le forum pour vous montrer mes avancer ou poser encore des questions

#9 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 11 juin 2018 - 03:38

Salut a tous les maker,

je reviens vers vous avec mon robot tourelle pour poser de nouvelle question est essayer de résoudre un bug très bizarre que j'ai.

 

donc ce bug va avec mon tableau a 2 colonne et 20 ligne ;le problème vient  quand je remplie ma 2éme colonne dans mon setup et que après quand j'assigne des valeurs de mon capteur a la 1er colonne et que je veux les afficher sur le moniteur série il m'affiche presque toute les valeur de la 2éme colonne alors qu'il n'y a aucun lien entre les deux.

voici mon code et des screenshots du moniteur série pour mieux comprendre:

 

je l'ai commentée cette fois    :)  https://create.ardui...ecanoV1/preview

et les photos a comprendre avec le programme

Capture d’écran (7).png      la première suite de nombre correspond au valeur de la  colonne 2 qui ne devrai pas être la

Capture d’écran (8).png

 

avez vous une idée pour le résoudre?? :help:

 

Et maintenant les question:

 

1-vue que mon robot ne va absolument pas droit et que j'aimerais lui faire plein d'autre chose après connaissez vous un encodeur simple, pas trop cher et adaptable sur des axes assez gros comme ceux des meccano vu que je n'ai pas envie de changer de moteur car il faudrait alors changer tout mon chassie ??

 

2-avez vous une solutions pour commentez et décommenter facilement vos programme?

 

3-avez vous une solution pour quand on téléverse un programme vers l’Arduino éviter que le programme d'avant ce lance?

 

4- une dernière pour la route,quand vous faite un programme avec des donnée a changer régulièrement vous faites comment pour éviter de le re-téléverser a chaque fois

 

merci de vos réponse

 

ps: vue que vous êtes en trains de remoduler le forum  pourquoi ne pas faire une sort de chat en direct pour poser des questions simple pour ne pas avoir a faire tout un topic .

 

Voila modifié merci quand même et désoler si ilya beaucoupde question mais bon je suis curieux et débutant.


Modifié par 3721, 11 juin 2018 - 04:43 .


#10 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 254 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 11 juin 2018 - 03:58

On a plus accès au code, sans le code difficile de répondre à tes questions ... 

En plus il y a trop de questions d'un coup ... et même pas numéroté ça donne pas envie de répondre x)  ( mine de rien quand il y a beaucoup de questions  les numéroter ça aide à rendre la chose plus claire =)  )

 

 

ps: vue que vous êtes en trains de remoduler le forum  pourquoi ne pas faire une sort de chat en direct pour poser des questions simple pour ne pas avoir a faire tout un topic .

 

Il n'y a pas de chat car le but est de garder les réponses pour que d'autres personnes qui se posent les même questions puisse avoir accès aux réponses sans que les gens qui donnent les réponses aient à répéter 50 fois les choses =) Les personnes qui donnent des réponses sont suffisamment gentille pour le faire gratuitement alors elles méritent que tu te donnes la peine de faire un petit sujet avec un question simple =) .

En plus tu n'es pas obligé de faire un gros topic quand tu as une questions à poser. Il vaut mieux ouvrir 5 topic dans 5 rubriques différentes pour poser 5 questions différentes que de les poser dans ton sujet de robot ... 

par exemple tu peux aller dans " programmation" pour créer un sujet où tu demandes  comment on piloter un moteur pas à pas. ( Mais bon on a déjà des tests qui explique comment piloter un moteur pas à pas  ... Mais si ce test ne répond pas à tes question hésite pas à ouvrir un sujet dédié en mettant plus de détails dans ta question =) 
tu peux ouvrir un sujet dans mécanique où tu mets une photo de ton chassis de tes axes et de ton moteur et où tu demandes : comment monter un encodeur dessus ... 

 

 

Pour "bloquer l'exécution du code" sur une carte arduino tu peux garder le doigt appuyé sur le bouton reset et le relâcher que quand l'upload du code a commencé ...

 

Pour commenter facilement tu as  /*    Bloc de code commenté  */ qui permet de commenter tout un bloc de code ...

 

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#11 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 12 juin 2018 - 05:02

Merci pour ta réponse même si elle ma un peu refroidit.

Bref pas grave le  code est il bon?

j'ai numérotes les question et je les reposerai autre pars.



#12 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 254 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 12 juin 2018 - 05:50

Qu'est ce qui t'a refroidit ?  Quoi qu'il en soit désolé c'est pas du tout le but ! On est là pour aider pas pour refroidir ! =)
C'est juste que c'est difficile de répondre bien à plein de question d'un coup ... 
Mais il n'y a aucun problème à avoir plein de questions ! =) 

 

Je n'arrive malheureusement toujours pas à avoir accès à ton code =/ peux tu le poster directement avec la balise code " < > "  ? ça ira beaucoup plus vite =) 

 

Du coup pour répondre à tes questions : 

 

1 => J'attend d'avoir accès au code =)

 

2 => J'ai répondu dans mon précédent message avec " /* */ " j'espère que c'est ce que tu attendais comme réponse =) 

 

3 => J'ai répondu avec l'appuis sur le bouton reset

 

4 => Là c'est plus délicat, dès que tu veux changer ton programme tu es obligé de reprogrammer ta carte ... La seule méthode c'est genre d'imaginer les différents cas d'usages / tests que tu veux faire et de lancer les différents tests avec le moniteur série ... Mais bon ça fait faire un programme plus compliqué ... 

un exemple de ce que je décris regarde le programme de test de servomoteur de jekert 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#13 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 12 juin 2018 - 06:16

OK cool ne t'inquiète pas ton message était correcte c'est moi qui me suis un peu emballes.

 

Donc pour le code je refais ma 1er techniques désoler si vous devez le télécharger:

Fichier joint  voituremecanoV1.ino   3,88 Ko   8 téléchargement(s)

 

pour la question 2 merci sa ma sauvé la vie dans un autre programme

et pour la 4 je vais me faire des petits test.

 

Sinon un nouvelle question (je pense que sa va devenir un routine pour moi et sa doit être pas cool pour vous)

 

1-y a t-il une technique pour quand on utilise le moniteur série pour le débogage de mettre ou pas les messages ,une fonction booléenne  avec un vrai si on les affiche et faux si non??

 

encore merci

 

le code : 

#include <Stepper.h>
Stepper Moteur (200,10,11,12,13);//moteur pas a pas de récuperation pour la tourelle 

int donneeCapteur[19][1];//tableau pour les angles de rotation du robot en fonction de la plus grnde distance trouvée avec la tourrelle
uint8_t indiceMax = 0;//variable pour le calcul de la plus grande valeur de la tourrelle
uint8_t angleMax;//variable pour l'angle max trouver dans le calcul
uint8_t distanceMax;//pareil mais pour la distance

const byte motorLeftEnablePin = 3;//pins de connexions du oteur gauche
const byte motorLeftIn1 = 2;
const byte motorLeftIn2 = 4;

const byte motorRighEnablePin = 5;//pins de connexions du moteur droit
const byte motorRighIn1 = 6;
const byte motorRighIn2 = 7;

const byte trigPin = 8;//pins pour la sortie du capteur ultason  
const byte echoPin =9;//pins pour l'entrer du capteur
long distance,duree,maximum;//variable pour la mesure de la distance

void setup() {
  for(byte i=2;i<= 8;i++){
    pinMode(i,OUTPUT);
  }
pinMode(9,INPUT);
Serial.begin(9600);

Moteur.setSpeed(240);

 for(byte x=0;x <=19;x++){
  donneeCapteur[x][1] = donneeCapteur[x-1][1] + 164;//remplissage de la 2éme colonne du tableau pour définir les anglesmax ,le robot fait un tour en 3280ms donc 164 pour 18° car 20mesure
  Serial.print("azerty");
 Serial.println(donneeCapteur[x][1]); //pour vérifir
 } 
}
void loop() {

 mesure();
 
 if(distance <= 25){
  mesure();
  if(distance <= 25){  
  arret();
 tournicotit();  
//recule(255);
//delay(1500);
 turnRigh(angleMax);
  }
 }
  
else{
  avance(255);
 }
}
void mesure(){//code pour la mesure de la distance
digitalWrite(trigPin,LOW);
  delayMicroseconds(10);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  duree = pulseIn(echoPin,HIGH);
  distance = duree*340/(2*10000);
 /* Serial.print(distance);
  Serial.print("cm");
  Serial.print(duree);
  Serial.println("ms");*/
  if(distance > 250){//pour éviter des valeur éronnée
    distance == 200;
  }
delay(50);
}
void setMotorLeft (int speeds ,boolean reverse){//initialisation des moteur avec la vitesse et le sens
  analogWrite( motorLeftEnablePin,speeds);
  digitalWrite(motorLeftIn1,reverse);
  digitalWrite(motorLeftIn2,! reverse);
}
void setMotorRigh (int speeds,boolean reverse){
  analogWrite(motorRighEnablePin,speeds);
  digitalWrite(motorRighIn1,reverse);
  digitalWrite(motorRighIn2,! reverse);
}
void turnRigh (int Stop){//pour torner a gauche
  setMotorLeft(255,true);
  setMotorRigh(255,false);
  delay(Stop);
  setMotorLeft(255,true);
  setMotorRigh(255,true);
}
void turnLeft (int Stop){//et a droite
  setMotorLeft(255,false);
  setMotorRigh(255,true);
  delay(Stop);
  setMotorLeft(255,true);
  setMotorRigh(255,true);
}
void avance (int speeds){//pout avancer 
  setMotorLeft(speeds,true);//-25 pour avancer en ligne droit car le moteur gauche tire trop
  setMotorRigh(speeds,true);
}
void recule (int speeds){
  setMotorLeft(speeds,false);
  setMotorRigh(speeds,false);
}
void arret (){
  setMotorLeft(0,true);
  setMotorRigh(0,true);
}
void tournicotit (){//pour faire tourner la tourelle en mesurant la disance pour apres aller vers ladistance la plus grande
  for(byte a = 0; a <= 19;a++){//tourner la tourelle en mesurant
    Moteur.step(390);
    mesure();
    distance = donneeCapteur[a][0]; //la distance est socker dans la 1er colonne du tableau :je pense qu'ily a un bug ici
    Serial.println(donneeCapteur[a][0]);  
  }
  Moteur.step(-7800);//retour de la tourelle pour éviter de se bloquer avec les cables de capteur
   
  for(byte c = 0;c <= 19;c++){//pour calculer la plus grand valeur :marche mal,pas
  if( donneeCapteur[indiceMax][0] < donneeCapteur[c][0] ){
    indiceMax = c;
  }
  Serial.println(indiceMax);
 }
distanceMax == donneeCapteur[indiceMax][0];//association de la distance maxtrouver
angleMax == donneeCapteur[indiceMax][1];//pareil mais avec le tableau rempli dans le setup
Serial.print("a");
Serial.println(angleMax);
Serial.print("b"); 
Serial.println(distanceMax);
}



#14 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 254 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 12 juin 2018 - 06:35

Numéroter les questions c'est uniquement si il y en a beaucoup =) C'est uniquement pour faciliter les réponses en utilisant les numéros pour se référer aux questions =) 

 

Oui il y a une méthode que j'utilise dans tous mes programmes ! =) 

J'avais prévu dans parler dans un article qui traite des différentes astuces que j'utilise mais j'ai tellement de choses que je veux faire ... que si tu attend que je fasse cette article tu risque d'attendre longtemps x) 

Bref l'astuce : n'utilise plus " Serial.println " et "Serial.print "

 

utilise :  Debugprintln  et  Debugprint   en mettant au début de ton code :

#define DEBUG 1 //variable a mettre a "1" pour le mode debuge sinon "0"
#define Debugprintln(text) if (DEBUG) Serial.println(text); //afficher du text en mode debug avec saut de ligne
#define Debugprint(text) if (DEBUG) Serial.print(text); //afficher du text en mode debug sans saut de ligne

C'est ce qu'on appel des macro =) C'est cool les macros mais il faut les utiliser avec parcimonie =) 

 

 

 

Maintenant que j'ai pu voir le code dans l'ensemble c'est pas trop mal ! Par contre il y a un truc qui me chagrine à la fin : 

 

distanceMax == donneeCapteur[indiceMax][0];//association de la distance maxtrouver
angleMax == donneeCapteur[indiceMax][1];//pareil mais avec le tableau rempli dans le setup

 

 

=> Quelle est la différence entre " == " et " = " ? :P

 

Pas sûr que ça résolve tout tes problèmes mais déjà tu peux corriger ça et expliquer les problèmes qui te reste =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#15 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 060 messages
  • Gender:Male
  • Location:Autriche

Posté 12 juin 2018 - 09:35

(...)
3 => J'ai répondu avec l'appuis sur le bouton reset
(...)


Quel est le problème à ce que le code précédent se lance ? Il est en général judicieux de déconnecter les pins de la carte pour éviter les erreurs de communication série.
Dans le cas contraire, il suffit de mettre une condition dans la fonction loop : une variable booléenne qui définit si le programme doit se lancer ou pas, mise à jour par l'appui sur un bouton. Le bootloader va démarrer le programme et initialiser les variables définies avant, mais il n'y aura pas de changement d'état sur les broches (et pas de commande des actionneurs si c'est le problème).
Je ne suis pas sûr que maintenir le bouton reset soit très propre : il me semble que la mémoire n'est pas vidée, ce qui peut provoquer des comportements bizarres (genre en .
R1D1 - Calculo Sed Ergo Sum -- en ce moment, Projet Ballista
Avatar tiré du site bottlebot
Donnez votre avis sur la restructuration des catégories du forum : http://www.robot-maker.com/forum/topic/12115-reorganisation-du-forum/

#16 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 13 juin 2018 - 02:03

Non,ce n'est pas un grave problème R1D1, mais parfois quand je fais des test en restant avec le câble USB j'ai le robot qui me lâche des mains a cause des moteur qui se lance donc je voulais savoir ...

je me doutait qu'il me faudrait rajouté un bouton mais il me reste plus que RX et TX de libre et comme je fais encore beaucoup de test.

 

 

 

Maintenant que j'ai pu voir le code dans l'ensemble c'est pas trop mal ! Par contre il y a un truc qui me chagrine à la fin : 

 

distanceMax == donneeCapteur[indiceMax][0];//association de la distance maxtrouver
angleMax == donneeCapteur[indiceMax][1];//pareil mais avec le tableau rempli dans le setup

 

 

=> Quelle est la différence entre " == " et " = " ? :P

 

Pas sûr que ça résolve tout tes problèmes mais déjà tu peux corriger ça et expliquer les problèmes qui te reste =)

 

 

le problème c'est que la différence je l'ai pas retenue :ignat_02: et que je me demande tous le temps =)

donc je vais changer et essayer.

 

 

 

ps:merci a celui qui a modifié le code

 

 



#17 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 254 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 13 juin 2018 - 03:02

== c'est pour tester l'égalité ! =) 

= c'est pour l'asignation

Genre

 

if ( toto == tata ) ;    si toto vaut 0 et que tata vaut 0 alors "toto == tata" est vrai et vaut 1 ! =)

 

 

toto = tata;     si tata vaut 0, alors on va mettre 0 dans toto ... =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#18 3721

3721

    Nouveau membre

  • Membres
  • 19 messages

Posté 24 juin 2018 - 05:14

:dash2: :dash2: :dash2: .........................

salut

j'ai suivi tes conseil Mike118 mais sa marche toujours pas ,j'ai bien vérifié tous mes "=="mais j'ai le même bug .

 

j'ai essayé de mettre deux tableau au lieu un en 2D , donc sa me fait un tableau ou je stocke dans mon setup tous mes angle pour la rotation du robot et l'autre ou je stocke mes mesure quand la tourelle tourne (c'est la que je pense qu',il y a un problème).

 

je suppose que c'est la car quand je fais tourner la tourelle je lui demande de m'afficher les valeur du capteur mais il ne me renvoie que "0" alors qu'l devrai me renvoyé les valeur du capteur

 

voici le code de nouveaux avec les modifs:

#include <Stepper.h>
Stepper Moteur (200,10,11,12,13);//moteur pas a pas de récuperation pour la tourelle 

int donneeCapteur[19];//tableau pour les angles de rotation du robot en fonction de la plus grnde distance trouvée avec la tourrelle
int angleRotation[19];
uint8_t indiceMax = 0;//variable pour le calcul de la plus grande valeur de la tourrelle
uint8_t angleMax;//variable pour l'angle max trouver dans le calcul
uint8_t distanceMax;//pareil mais pour la distance

const byte motorLeftEnablePin = 3;//pins de connexions du oteur gauche
const byte motorLeftIn1 = 2;
const byte motorLeftIn2 = 4;

const byte motorRighEnablePin = 5;//pins de connexions du moteur droit
const byte motorRighIn1 = 6;
const byte motorRighIn2 = 7;

const byte trigPin = 8;//pins pour la sortie du capteur ultason  
const byte echoPin =9;//pins pour l'entrer du capteur
long distance,duree,maximum;//variable pour la mesure de la distance

void setup() {
  for(byte i=2;i<= 8;i++){
    pinMode(i,OUTPUT);
  }
pinMode(9,INPUT);
Serial.begin(9600);

Moteur.setSpeed(240);

 for(byte x=0;x <=19;x++){
  angleRotation[x] = angleRotation[x-1] + 164;//remplissage de la 2éme colonne du tableau pour définir les anglesmax ,le robot fait un tour en 3280ms donc 164 pour 18° car 20mesure
  Serial.print("azerty");
 Serial.println(angleRotation[x]); //pour vérifir
 } 
}
void loop() {

 mesure();
 
 if(distance <= 25){
  mesure();
  if(distance <= 25){  
  arret();
 tournicotit();  
//recule(255);
//delay(1500);
 turnRigh(angleMax);
  }
 }
  
else{
  avance(255);
 }
}
void mesure(){//code pour la mesure de la distance
digitalWrite(trigPin,LOW);
  delayMicroseconds(10);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  duree = pulseIn(echoPin,HIGH);
  distance = duree*340/(2*10000);
 /* Serial.print(distance);
  Serial.print("cm");
  Serial.print(duree);
  Serial.println("ms");*/
  if(distance > 250){//pour éviter des valeur éronnée
    distance = 200;
  }
delay(50);
return distance;
}
void setMotorLeft (int speeds ,boolean reverse){//initialisation des moteur avec la vitesse et le sens
  analogWrite( motorLeftEnablePin,speeds);
  digitalWrite(motorLeftIn1,reverse);
  digitalWrite(motorLeftIn2,! reverse);
}
void setMotorRigh (int speeds,boolean reverse){
  analogWrite(motorRighEnablePin,speeds);
  digitalWrite(motorRighIn1,reverse);
  digitalWrite(motorRighIn2,! reverse);
}
void turnRigh (int Stop){//pour torner a gauche
  setMotorLeft(255,true);
  setMotorRigh(255,false);
  delay(Stop);
  setMotorLeft(255,true);
  setMotorRigh(255,true);
}
void turnLeft (int Stop){//et a droite
  setMotorLeft(255,false);
  setMotorRigh(255,true);
  delay(Stop);
  setMotorLeft(255,true);
  setMotorRigh(255,true);
}
void avance (int speeds){//pout avancer 
  setMotorLeft(speeds,true);//-25 pour avancer en ligne droit car le moteur gauche tire trop
  setMotorRigh(speeds,true);
}
void recule (int speeds){
  setMotorLeft(speeds,false);
  setMotorRigh(speeds,false);
}
void arret (){
  setMotorLeft(0,true);
  setMotorRigh(0,true);
}
void tournicotit (){//pour faire tourner la tourelle en mesurant la disance pour apres aller vers la distance la plus grande
  for(byte a = 0; a <= 19;a++){//tourner la tourelle en mesurant
    Moteur.step(390);
    mesure();
    distance = donneeCapteur[a]; //la distance est socker dans la 1er colonne du tableau : BUG ICI????????!!!!!!!!!!!!
    Serial.println(donneeCapteur[a]);  
  }
  Moteur.step(-7800);//retour de la tourelle pour éviter de se bloquer avec les cables de capteur
   
  for(byte c = 0;c <= 19;c++){//pour calculer la plus grand valeur :marche mal,pas
  if( donneeCapteur[indiceMax] < donneeCapteur[c] ){
    indiceMax = c;
  }
  Serial.println(indiceMax);
 }
distanceMax = donneeCapteur[indiceMax];//association de la distance maxtrouver
angleMax = angleRotation[indiceMax];//pareil mais avec le tableau rempli dans le setup
Serial.print("a");
Serial.println(angleMax);
Serial.print("b"); 
Serial.println(distanceMax);
}

:help: :help:

 

merci encore



#19 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 260 messages
  • Gender:Male
  • Location:Paris

Posté 24 juin 2018 - 11:31

Il y a en effet une erreur quand tu parcours ton tableau.

 

int donneeCapteur[19]; => 19 int de 0 à 18

 

Or avec ton for(byte a = 0; a <= 19;a++), tu vas de 0 à 19.

 

Il faudrait for(byte a = 0; a < 19;a++) pour utiliser a directement dans ton tableau

 

Sinon, la dernière itération va demander une valeur du tableau qui n'existe pas.


Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 




Répondre à ce sujet



  



Aussi étiqueté avec au moins un de ces mots-clés : arduino, meccanno, capteur ultrason, tourelle

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users