
VBnette
#1
Posté 03 août 2012 - 11:06
je crée ce sujet histoire de tenir au courant de mes avancé sur VbNette
aujourd'hui ou j'en suis :
le carter qui servira de bases est quasi fini je pofirnerai l'estetique plus tard,
j'ai recuperer 2 moteur de monte lit, ils ressemblent a des moteurs d'essui glace et on un couple important pour une conso relativement ridicule.
j'ai commandé une carte Commande SaberTooth 2x5A chez gotronic que j'ai enfin recu!
je suis en train d'installer les moteur sur la base, et je fixerais des roues de velo d'enfant (en 27 Cm de Diam) directement sur l'arbre du moteur
je plubirais plusieur photo une fois le tout assemblé
A+
#2
Posté 03 août 2012 - 10:51
en ce qui concerne la coque elle est loin d'etre parfaite a l'heure ou je vous parle mais elle a le merite d'etre assez rigide
la conso des 2 moteurs (pour le moment alimenté en directe

je n'ai pa eu le temps de tester le driver moteur car j'ai galeré pour aligner l'axe des roue, une fois reussi, l'axe des roue a encore casser, et voila encore une heure a perdre pour bricoler un moyen de les fixer
bon maintenant le probleme d'axe est regler mais il ne roule pas tout a fait droit! avec tout ce bricolage j'ai reussi a tordre la plaque de fixation de la roue folle ce qui a pour effet de fausser la trajectoire de vebenette
vue l'lheure tardive je verrais ça plus tard
@+
#4
Posté 04 août 2012 - 07:36
ton souci de trajectoire m'amène à me poser une question :
ne serait-il pas possible de prévoir un petit potard en série avec chaque moteur pour compenser ce genre de petits soucis ?
la communication avec la crte driver sera en serie donc le potar c mort
je pense plutot qu'il faut regler le probleme mecanique
hier soir en allant ranger le robot je me suis rendu compte d'une chose: la plaque n'est pas vraiment tordu mais la roue a un sacres jeu sur son axe mobile
pour une roue payer 11 € chez leroy ça me fait bien chi...
ce qui me desépere le plus c'est que je ne pourrais pas y touché ce aujourd'hui pffff
#5
Posté 05 août 2012 - 10:41
j'ai commencer a branché la carte! elles sont juste genial
materiel utiliser : batterie 12v plomb
carte driver SaberTooth 2x5A
arduino mega
autonomie : 2h
je vous laisse voir la video ( enfin une fois fini d'uploader !)
les mouvement sont juste programmer il n'y a aucun IA!
#6
Posté 05 août 2012 - 11:19
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 !
#7
Posté 06 août 2012 - 12:34
Impossible de voir la video !
moi je la vois... c'est quoi le message d'erreur?
#8
Posté 06 août 2012 - 06:13
maintenat tout devraii fonctionné!
@mirorupteurman
la coque est en fibre de verre et elle est de ma conception
il reste des petit detaille a corriger mais ça reste correcte ,non?
j'ai voulus changer des robot tout rond ou tout carré
Edit: sur la vidéo le robot fait dans l'ordre :
il tourne, recule, attend 2s, avance , attends 2 seconde, etc... en boucle
je n'ai pas encors integres de codeur.
A+
#9
Posté 07 août 2012 - 03:59
j'ai develloppé l'interface de commande ( en VB bien sur!


j'ai mis un gros bouton Emergency Stop histoire de frimé un peu

elle se controle avec la souris, ou (et) le clavier
il y as comme un petit joystick dans le carré (mode souri)
les information vitesses que l'on peux voir serais plutot la puissance demander via la carte Controleur
elle est pas completement fonctionnel mais ça ne saurais tarder, il me manque de finalisé la synthax utilisé pour envoyé les commande a l'arduino
voila de ce qui est Vbnette aujourdui
A+
#10
Posté 08 août 2012 - 10:15
je me suis inspiré du code de Luj de pobot en le modifiant au endroit qui m'interresse
je n'ai pas encore eu l'ocassion de le tester, je n'ai pas d'arduino sous la main
Fichier(s) joint(s)
#11
Posté 09 août 2012 - 07:31
il est evident que le code que j'ai publier hier, est bourrer de faute et que par conséquent il ne fonctionne pas !
j'ai passé une bonne partie de ma soiré a le corriger, et j'ai fini par reussir a le compilé et a l'envoyer sur l'arduino
mais (il y a toujour un mais!) je n'arrive pas a recuperer les valeur envoyer
pour bien expliquer le principe, il s'agit d'envoyer a l'arduino une chaine de caractere de ce type : SG10D200
S pour start; G pour moteur gauche ; 10 pour la valeur de la puissance moteur demandé ; etc ...
l'arduino me retourne systematiquement 0
j'ai donc essayer de faire un bete copier coller du code originelle mais j'ai encore le meme probleme, il me retourne encore 0
j'avais deja rencontrer se probleme ici
mais visiblement la solution de l'epoque n'est pas la bonne
si hexa mail passe par la (je sais que tu la deja utilisé ^^) et que dans un de tes tirroir, tu aurais une solution pour moi?!
A+
#12
Posté 09 août 2012 - 08:37
Juste en regardant vite fait le code on peut voir:
// End the array with a specific character (E=End) // (means that you can't choose 'E' as a user meaning command commande[indice] = 'E';
Donc si tu n'as pas le caractère 'E' à la fin de ta chaîne de caractère le programme risque de ne pas marcher.
#13
Posté 09 août 2012 - 08:41
Salut,
Juste en regardant vite fait le code on peut voir:// End the array with a specific character (E=End) // (means that you can't choose 'E' as a user meaning command commande[indice] = 'E';
Donc si tu n'as pas le caractère 'E' à la fin de ta chaîne de caractère le programme risque de ne pas marcher.
j'avoue que je n'ai pas essayer
mais a l'epoque il n'etait pas necessaire de le mettre
autre info la vitesse de com est bien regler (9600 bauds sur la carte et le moniteur arduino )
franchement je ne comprend pas la cause
#14
Posté 09 août 2012 - 08:50
Peux-tu mettre une version corrigée (c-à-d qui compile) histoire qu'on ne passe pas trop de temps à corriger ces problèmes là ? Je ne peux pas le tester dans la mesure où je n'ai pas de carte sous la main, mais je peux jeter un oeil. D'ailleurs, c'est quelle modèle d'Arduino comme cible ? (ça peut aider)
#15
Posté 09 août 2012 - 09:16
Salut !
Peux-tu mettre une version corrigée (c-à-d qui compile) histoire qu'on ne passe pas trop de temps à corriger ces problèmes là ? Je ne peux pas le tester dans la mesure où je n'ai pas de carte sous la main, mais je peux jeter un oeil. D'ailleurs, c'est quelle modèle d'Arduino comme cible ? (ça peut aider)
se soir je metterais mon code en ligne mais l'idée serais de faire fonctionner plutot le code originelle ou si quelqu'un peut au moin l'essayer et me confirmer qu'il fonctionne
en tout cas merci de vos reponses
c'est une arduino mega rev3
#17
Posté 09 août 2012 - 09:45
//valeur numérique à décoder des commandes spécifiques après int value = 0; // où nous sommes actuellement dans la séquence de construction ou de décodage int indice = 0; // la séquence de caractères, où est stocké ce que l'utilisateur veut char commande[40]; // réduire la durée d'économiser de la mémoire (si nécessaire) /** * */ void setup() { Serial.begin(9600); } /** * */ void loop() { //Démarrer une nouvelle réception, reinit l'indice navigateur de la matrice indice = 0; // Remplissez-en la séquence de caractères avec tous les caractères reçus while (Serial.available()) { commande[indice++] = Serial.read(); } // Fin du tableau avec un caractère spécifique (E = Fin) // (ce qui signifie que vous ne pouvez pas choisir «ME» en tant que commande sens utilisateur) commande[indice] = 'E'; // Ne pas continuer la boucle si aucune commande (adapter à votre propre code) if (indice == 0) return; // DEBUG affichage que d'une nouvelle séquence a été trouvé // Serial.print ("> commande reçue, longueur ="); // Serial.println (indice); // Début de l'analyse du tableau de séquence indice = 0; while (commande[indice] != 'E') { //Reinit la valeur numérique value = 0; // switch (commande[indice]) { case 'S': Serial.println("> Start command."); break; case 'G': // Continuer à l'autre char (peut contenir la valeur numérique indice++; while (commande[indice] >= 48 && commande[indice] <= 57) { value = value * 10 + (commande[indice]-48); // chiffre suivant indice++; } // Haut si pas plus chiffre à être ajouté à la valeur numérique indice--; Serial.print("> servo gauche : "); Serial.println(value,DEC); break; case 'D': // Continuer à l'autre char (peut contenir la valeur numérique indice++; while (commande[indice] >= 48 && commande[indice] <= 57) { value = value * 10 + (commande[indice]-48); //chiffre suivant indice++; } // Haut si pas plus chiffre à être ajouté à la valeur numérique indice--; Serial.print("> servo droit : "); Serial.println(value,DEC); break; default: // Serial.print ("> commande non reconnue:"); // Serial.println (commande [indice]); break; } indice++; } }
je les compilé , et cela fonction , dans le serial monitore a ne pas oublier de mettre 9600 bauds et d'écrire les lettre en majuscule voila , donc pour ma par le code fonctionne.
#18
Posté 09 août 2012 - 10:02
Apres si ça ne marche pas, affiche la chaîne de caractère que tu reçoit pour vérifier qu'elle est bonne.
#include <SabertoothSimplified.h> SabertoothSimplified ST(Serial1); //Created Objet sabertooth using serial1 /** * Command Line Interface for Arduino * * Julien Holtzer for www.pobot.org * * 18 mars 2009, late in the night */ // numerical value to be decoded after specific commands int value = 0; // where we currently are in the sequence construction or decoding int indice = 0; // the sequence of characters where is stored what the user wants char commande[40]; // reduce the length to save memory (if necessary) int sensg=0; int sensd=0; int tempg; int tempd; /** * */ void setup() { Serial.begin(9600); Serial1.begin(38400); // This is the baud rate (SERIAL1) you chose with the sabertooth's DIP switches. } /** * */ void loop() { // Start a new reception, reinit the browser index of the array indice = 0; // Fill-in the sequence of chars with all received characters while (Serial.available()) { commande[indice++] = Serial.read(); } // End the array with a specific character (E=End) // (means that you can't choose 'E' as a user meaning command commande[indice] = 'E'; // Don't continue the loop if no command (adapt to your own code) if (indice == 0) return; // DEBUG Display that a new sequence has been found //Serial.print("> Received command, length="); //Serial.println(indice); // Start parsing the sequence array indice = 0; while (commande[indice] != 'E') { // Reinit the numerical value value = 0; // switch (commande[indice]) { case 'S': Serial.println("> Start command."); break; case 'G': // Continue to the next char (could contain the numerical value indice++; if(commande[indice]=='-') { sensg=2; indice++; }else sensg=1; while (commande[indice] >= 48 && commande[indice] <= 57) { value = value * 10 + (commande[indice]-48); // next digit indice++; } // Back if no more digit to be added to numerical value indice--; // Serial.print("sensg= "); // Serial.println(sensg); tempg=value; ST.motor(sensg, tempg); Serial.print("> servo gauche : "); if(sensg==1)Serial.print("Marche avant "); else if(sensg==2) Serial.print("Marche arriere "); Serial.print(tempg,DEC); Serial.println (" %"); break; case 'D': // Continue to the next char (could contain the numerical value indice++; if(commande[indice]=='-') { sensd=2; indice++; }else sensd=1; while (commande[indice] >= 48 && commande[indice] <= 57) { value = value * 10 + (commande[indice]-48); // next digit indice++; } // Back if no more digit to be added to numerical value indice--; //Serial.print("sensd= "); // Serial.println(sensd); tempd=value; ST.motor(sensd, tempd); Serial.print("> servo droit : "); if(sensd==1)Serial.print("Marche avant "); else if(sensd==2) Serial.print("Marche arriere "); Serial.print(tempd,DEC); Serial.println (" %"); break; default: //Serial.print("> unrecognized command : "); //Serial.println(commande[indice]); break; } indice++; } }
#19
Posté 09 août 2012 - 10:31
le troll est de retourMoi je dis que c'est à cause du VB

ça m'ettonne pas de toi, mais ou est passé ta liberté créative

enfin bon pour le moment je suis dans le c et non pas dans le VB

merci c'est cool, du coup je sais pas pourquoi il ne fonctionne pas chez moi pfffSalut julkien bon j'ai testé le code que tu nous a demandé.
je les compilé , et cela fonction , dans le serial monitore a ne pas oublier de mettre 9600 bauds et d'écrire les lettre en majuscule voila , donc pour ma par le code fonctionne.
un autre truc bizarre : quand je compile et que je l'envois sur l'arduino il faut que j'attend une minute avant d'avoir une reponse( meme si elle n'est pas coherente)
J'ai modifier le code pour qu'il te conviens. Si tu veut que le moteur tourne en marche arrière tu as juste a rajouter un '-' devant la valeur
Apres si ça ne marche pas, affiche la chaîne de caractère que tu reçoit pour vérifier qu'elle est bonne.
ou la c'est cool j'en demané pas autant mais tu m'enleve une sacré épine du pied (moi et le c)

en plus par un inconnu

je test tout ça ce soir
et vous tien au courant
merci a tous
#20
Posté 09 août 2012 - 01:56
//#include <SabertoothSimplified.h> //SabertoothSimplified ST(Serial1); //Created Objet sabertooth using serial1 char commande[40]; int gSpeed,dSpeed; int gSens, dSens; boolean allData; int indice=0; int mode=0; char c; /* Protocol de communication : Bit de start 'S' + Choix du moteur 'G'ou'D' + sens '-' pour marche arrière ou rien pour marche avant + vitesse du moteur en % + bit de fin 'E' Exemple = "SG67D-56E" Moteur gauche à 67% en marche avant et Moteur droit à 56% en marche arrière */ void setup() { Serial.begin(9600);// port série de communication pc//Arduino //Serial1.begin(38400); // This is the baud rate (SERIAL1) you chose with the sabertooth's DIP switches. } void loop() { if (Serial.available())// si réception de donnée { // read the incoming byte: c = Serial.read(); commande[indice++]=c;// incrémentation du buffer // say what you got: // Serial.print("I received: "); //Serial.println(c); if(c=='E')//Réception du bit de fin { allData=true; } } if(allData && indice) { for(int i=0; i<indice; i++)// analyse du buffer { switch (commande[i]) { case 'S': Serial.println("Reception des donnees"); break; case 'G': mode=1; break; case 'D': mode=2; break; default: break; } if(mode==1)//Réception des données du moteur gauche { //Serial.println("mode1"); if(commande[i]=='-')// caractère '-' pour indiquer la marche arrière { gSens=2; }else gSens=1; if (commande[i] >= '0' && commande[i] <= '9') { gSpeed = gSpeed * 10 + (commande[i]-'0');// "(commande[i]-'0')" converti le Char en Int } } if(mode==2)//Réception des données du moteur droit { //Serial.println("mode2"); if(commande[i]=='-')// caractère '-' pour indiquer la marche arrière { dSens=2; }else dSens=1; if (commande[i] >= '0' && commande[i] <= '9') { dSpeed = dSpeed * 10 + (commande[i]-'0');// "(commande[i]-'0')" converti le Char en Int } } }//fin analyse //ST.motor(gSens, gSpeed); Serial.print("Moteur gauche : "); if(gSens==1)Serial.print("Marche avant "); else if(gSens==2) Serial.print("Marche arriere "); Serial.print(gSpeed,DEC); Serial.println (" %"); //ST.motor(dSens, dSpeed); Serial.print("Moteur droit : "); if(dSens==1)Serial.print("Marche avant "); else if(dSens==2) Serial.print("Marche arriere "); Serial.print(dSpeed,DEC); Serial.println (" %"); gSpeed=0; dSpeed=0; indice=0; allData=false; } }
Si tu ne comprend pas quelque chose n’hésite pas à demander. Après je ne connais pas la librairie que tu utilise pour commander tes moteurs, j'ai donc mis en commentaire cette partie.
Répondre à ce sujet

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