Arduino je suis perdu.

  • Auteur de la discussion marmalou
  • Date de début
M

marmalou

Compagnon
Bonjour
Connaissez vous l'atelier de http://www.mon-club-elec.fr ?
Si Oui !
Dans l'atelier --servomoteur à rotation continue à laide d'une résistance variable.
Je fais un copier coller du programme mais il ne marche pas .(message d'erreurs
Ce programme est il utilisable en l'état ou faut il y entrer des données?
Merci
 
Dernière édition par un modérateur:
N

nopxor

Compagnon
Bonjour,

Le plus simple serait de contacter directement l'auteur à:
support_at_mon-club-elec_point_fr
 
M

marmalou

Compagnon
Oui !
mais je ne trouve pas le bouton de se lien sur le site .
 
N

nopxor

Compagnon
son adresse c'est bien:
support_at_mon-club-elec_point_fr
En remplaçant:
_at_ par @

_point_ par .

Il l'a écrit de cette façon pour éviter la diffusion de son adresse par les logiciels qui traquent les adresses dans les pages web. :wink:
 
M

marmalou

Compagnon
OK ! merci je comprend.
Je vais pouvoir les contacter.
 
M

marmalou

Compagnon
Bonjour
oui j'ai la meme version .
voici une photo de l'écran .

IMG_0792.JPG
 
M

meles

Apprenti
Bonsoir,
Je ne vais pas pouvoir t'aider sur arduino, mais pour les copies d'écrans, tu as une touche pour ça sur le clavier ("impr ecran" ou "prnt screen") au dessus des flèches de direction.

En appuyant sur la touche tu fais une copie d’écran, en faisant ALT+ImprEcran, tu copie la fenêtre active. Il ne te reste plus qu'a faire un copier coller dans le bon logiciel, la sauver dans le format de ton choix et nous l'envoyer.

@+
 
E

erolhc

Guest
Bonjour

Attention aux commentaires (qui débutent par //) et qui sont sur deux lignes (car coupés par un retour chariot effectué lors du copié-collé)

par exemple au début de ta copie :
// acquisition conversion analogique-numérique (CAN) sur la voie [passage à la ligne]
analogique

le "analogique" étant un debut de ligne est considéré par le compilateur comme une instruction, fonction, etc ... et génère une erreur car pas de référence alors que c'est manifestement la suite du commentaire
Un coup de [backspace] avant le "anologique" ou un [suppr] après "voie" et cela rentrera dans l'ordre.
Faire ce genre de manip sur tout les commentaires tronqués

Les commentaires débutant par // ne doivent pas comporter de retour chariot (même s'il peuvent apparaitre sur deux lignes car affichage ou page d'impression pas assez large mais dans ce cas là c'est le Pc qui decide tout seul et le code ne comporte pas rééllement de retour chariot dans la ligne.

Les commentaires peuvent être sur plusieurs lignes mais dans ce cas cela débute par /* et la dernière ligne se termine par */
 
M

marmalou

Compagnon
Bonjour a tous

Meles : j'ai un portable et je ne trouve pas cette touche imp ecran

chlore : j'ai changer // des commentaires par /* */ pour les commentaires sur deux lignes

j'ai verifier .
voici les nouveaux messages d'erreurs ( traduit par google)
test_servo_rotation_continu.cpp: Dans «void loop () 'fonction:
test_servo_rotation_continu: 24: erreur: redéfinition de «void loop () '
test_servo_rotation_continu: 16: erreur: 'void loop ()' précédemment défini ici
test_servo_rotation_continu: 29: erreur: 'impulsion' n'a pas été déclaré dans cette portée
test_servo_rotation_continu: 29: erreur: expected ';' avant 'AV'

Et une photo

IMG_0793.JPG
 
E

erolhc

Guest
Bonjour

Je ne t'ai pas dis de convertir tes commentaires d'une ligne en multilignes juste de faire en sorte qu'ils tiennent sur une ligne par un simple appuis sur une touche (suppression ou retour arrière : pourquoi faire compliqué quand on peut faire simple ?)
Au lieu de vouloir innover tu devrais déjà vérifier que tu as repéré tout les commentaires car j'en vois au moins un qui n'est pas correct : impulsion AV correspondante
 
M

marmalou

Compagnon
MERCI Strofe

Ton programe ne plante pas .

Sur mon montage le servomoteur ne tourne pas de façon progréssive .
la resistance ajustable (10K) fonctionne comme un inter M/A et le servo toujours dans le méme sens .
le servo est modifier pour tourner a 360°
photo du montage
bonne soirée
Marc
 
M

marmalou

Compagnon
marmalou a dit:
MERCI Strofe

Ton programe ne plante pas .

Sur mon montage le servomoteur ne tourne pas de façon progréssive .
la resistance ajustable (10K) fonctionne comme un inter M/A et le servo toujours dans le méme sens .
le servo est modifier pour tourner a 360°
photo du montage
bonne soirée
Marc

IMG_0794.JPG
 
S

Strofe

Apprenti
Bonsoir

Bon on fait comme si on était déjà demain.. :lol:

Je viens de faire le montage avec moi aussi un moteur modifié pour tourner à 360°. Donc en mode moteur et plus en mode comparateur..

Ce qui fait que la valeur de consigne inverse le sens de rotation du moteur....

Il faut un servomoteur non modifié..

A+

Christophe
 
M

marmalou

Compagnon
Bonsoir
Oui effectivement, le fil orange qui part du potar à la broche GND n'est pas à sa place ,c'est un essai.
Car le montage ne fonctionne pas en le branchant a la broche Ao .
C'est gentil de te pencher sur mon problème
A demain
Marc
 
M

marmalou

Compagnon
marmalou a dit:
Bonsoir
Oui effectivement, le fil orange qui part du potar à la broche GND n'est pas à sa place ,c'est un essai.
Car le montage ne fonctionne pas en le branchant a la broche Ao .
C'est gentil de te pencher sur mon problème
A demain
Marc

j'ai branché un servo non modifié et il ne fonctionne pas non plus.
 
M

marmalou

Compagnon
Bon
ton programme avec un servo non modifié et le montage qui va bien (photo),ça fonctionne.
mai ,ce que je veux ,c'est commander un servomoteur à rotation continue à laide d'une résistance variable.AV,AR,vitesse.

IMG_0796.JPG
 
M

marmalou

Compagnon
Bonjour speedjf37
J'ai suivi ton lien et j'ai fait un copier coller et le servo tourne toujours dans le méme sens( il n'est pas calibré) .
j'ai ensuite telechargé le programme de calibration du site mon-club-elec.fr mais je n'arrive pas a trouver le neutre du servo .
je dois pas le faire correctement car le programme tourne .



// --- Que fait ce programme ? ---
/* Test de la position d'un servomoteur par saisie directe de la largeur d'impulsion dans le Terminal côté PC*/

// --- Fonctionnalités utilisées ---
// Utilise la connexion série vers le PC
// Utilise un servomoteur

// --- Circuit à réaliser ---
// Connexion série entre la carte Arduino et le PC (utilise les broches 0 et 1)
// Connecter Broche de commande d'un Servomoteur sur la broche 2 (configurée en sortie)

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

#include <Servo.h> // librairie pour servomoteur

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int SERVO=2; //declaration constante de broche


// --- Déclaration des variables globales ---

int ReceptionOctet=0; // variable de stockage des octets reçus par port série
int ReceptionNombre=0; // variable de calcul du nombre reçu par port série
int impulsion=1500; // variable pour impulsion - valeur médiane initiale

// --- Initialisation des fonctionnalités utilisées ---

Servo mon_servo; // crée un objet servo pour contrôler le servomoteur

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup() { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

mon_servo.attach(SERVO); // attache l'objet servo à la broche de commande du servomoteur

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission

pinMode(SERVO, OUTPUT); //met la broche en sortie



} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal ---


//--- lecture d'un nombre reçu par le Terminal et positionnement du servomoteur ---
if (Serial.available()>0) { // si caractère dans la file d'attente

//---- lecture du nombre reçu
while (Serial.available()>0) { // tant que buffer pas vide pour lire d'une traite tous les caractères reçus

ReceptionOctet= Serial.read(); // renvoie le 1er octet présent dans la file attente série (-1 si aucun)
ReceptionOctet=ReceptionOctet-48; // transfo valeur ASCII en valeur décimale

if ((ReceptionOctet>=0)&&(ReceptionOctet<=9)) ReceptionNombre = (ReceptionNombre*10)+ReceptionOctet;
// si valeur reçue correspond à un chiffre on calcule nombre

delay(1); // pause pour laisser le temps au Serial.available de recevoir les caractères

} // fin while

Serial.print ("Nombre recu= ");
Serial.println(ReceptionNombre); // affiche valeur numerique entière ou à virgule au format décimal


//----- positionnement du servomoteur en fonction de la largeur d'impulsion demandée

impulsion=ReceptionNombre;

if (impulsion>2600)impulsion=2600; // pour éviter valeur supérieure à 2600 = position maxi possible servomoteur
if (impulsion<300)impulsion=300; // pour éviter valeur inférieure à 300 = position maxi possible servomoteur

mon_servo.writeMicroseconds(impulsion); // génère l'impulsion de la durée voulue en µs pour le servomoteur

Serial.print ("Impulsion servomoteur = ");
Serial.print(impulsion); // affiche valeur numerique entière
Serial.println (" microsecondes ");

delay (1000); //entre chaque changement de position

ReceptionNombre=0; // réinitialisation de la variable de calcul du nombre reçu

} // end if


} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---
 
S

speedjf37

Compagnon
Bonjour,

Pour que le servo360 trouve une position d'arret il faut lui envoyer l'impulsion qui correspond exactement a la
position du potentiomètre d'origine (servo non modifié) si possible au milieu de course.

Méthode:
Générer des impulsions stables de largeur fixe correspondant à la position centrale du servo ( 1ms ).
Déplacer le potentiomètre pour trouver la position qui permet l'arret
(on peut mettre un servo non modifié en // pour voir la position centrale).

Une impulsion plus courte fera tourner le servo dans un sens .(vers la gauche)
Une impulsion plus longue fera tourner le servo dans l'autre sens .(vers la droite)

Comme le point d'équilibre n'est jamais atteint par le potentiomètre qui n'est plus suiveur le moteur tourne sans s'arreter

Des explications ici: a partir du milieu de page
http://photocerfvolant.free.fr/phpBB2/viewtopic.php?f=6&t=3763
 
Dernière édition par un modérateur:
S

Strofe

Apprenti
Bonjour

Je ne connaissais pas la variation de la vitesse d'un servomoteur modifié en 360°

J'ai donc expérimenté...

1°) prendre un potentiomètre linéaire (pas logarithmique) .. 4K à 10K c'est bien...
La valeur d'une entrée analogique varie de 0 à 1024 et la valeur pour un servo de 0 à 179.
Avec 90 comme point central d'inversion de sens de rotation. Il faut donc faire une règle de 3..
La variation de vitesse n'est pas linéaire de 0 à 90, ni de 90 à 179.
2°) Chercher la plage de variation de vitesse afin d'optimiser la lecture du potentiomètre.

Charger le programme, afficher le moniteur série et tourner le potentiomètre de 0 à MAX.
Lire les valeurs dans le moniteur. --> écouter le servo moteur
-->90 point central --> servo à l'arrêt
--> 90 vers 0 --> à la valeur 75 le moteur n'accélère plus.
--> 90 vers 179 --> à la valeur 105 le moteur n'accélère plus.
Il faut donc que la règle de 3 soit --> servoVal = map(pot1val, 0, 1023, 75, 105);
Le potentiomètre est maintenant optimisé.

La course complète du potentiomètre pour régler la plage de vitesse et l'inversion du sens de rotation== . Plus de précision

Bons essais... J'espère être assez clair
 
S

Strofe

Apprenti
Bonjour

Pour le fun une petite vidéo...

 
Dernière édition par un modérateur:
M

marmalou

Compagnon
Bonsoir a tous

Strofe - je ne comprends pas tout (j'ai la comprenette difficile).
J'ai fait un copier coller de ton premier code.
Puis branché le servo enregistré le code dans arduino . le servo se met a tourner sans aucune réponse au potar.
Puis j'ai demarré le moniteur ,et la ! Sur toute une ligne , des petits carrés s'affichent sur le moniteur puis plante.
MAIS , grâce a tes explications qui m'ont éclairé , voila ce que j'ai fait.
Démonté le servo
Mis le potar de 10k en position centrale
Mis l'ensemble sous tention le moteur s'est mis a tourner, puis j'ai touné le petit potentiomètre du servo jusqu'à l'arrêt du moteur.
une fois tout remonté , ça fonctionne parfaitement.
 
M

marmalou

Compagnon
marmalou a dit:
Bonsoir a tous

Strofe - je ne comprends pas tout (j'ai la comprenette difficile).
J'ai fait un copier coller de ton premier code.
Puis branché le servo enregistré le code dans arduino . le servo se met a tourner sans aucune réponse au potar.
Puis j'ai demarré le moniteur ,et la ! Sur toute une ligne , des petits carrés s'affichent sur le moniteur puis plante.
MAIS , grâce a tes explications qui m'ont éclairé , voila ce que j'ai fait.
Démonté le servo
Mis le potar de 10k en position centrale
Mis l'ensemble sous tention le moteur s'est mis a tourner, puis j'ai touné le petit potentiomètre qui se trouve dans servo jusqu'à l'arrêt du moteur.
une fois tout remonté , ça fonctionne parfaitement.
 
V

victorjung

Compagnon
salut, c'est normal pour que le systeme fonctionne il faut que le potentiometre soit au milieu!
sinon, ca déplace la valeur pour laquelle le servo est a l equilibre!
 
M

marmalou

Compagnon
Bonjour a tous
j'ai télécharger AFMotor et je n'arrive pas a faire fonctionner Motor test
a suivre .une photo d'écran
qu'elle est l'erreur ?

2012-11-28_181510.png
 
M

marmalou

Compagnon
marmalou a dit:
Bonjour a tous
j'ai télécharger AFMotor et je n'arrive pas a faire fonctionner Motor test .
Joint . Une photo d'écran
qu'elle est l'erreur ?
 

Sujets similaires

Haut