Approche Arduino

Les radios commandes, déclencheurs divers et variés. Les circuits électroniques et autres bidouillages.

Re: Approche Arduino

Messagede Wouah le Mar 07 Février 2012, 10:41

rdd a écrit:Dis donc tu as super bien avancé ... aller encore un p'tit coup de collier et tu auras une merveille d'autokap "C'est moi qui l'ai fait" :wink: 8)


Ben j'apprend et j'essaie de comprendre mais il ya de grosses zones d'ombre! en tout cas tu as été super réactif et d'une patience...! merci
Avatar de l’utilisateur
Wouah
Plus de 1000 messages
 
Messages: 1012
Inscription: Mer 10 Novembre 2010, 20:13
Localisation: Saint-Malo

Re: Approche Arduino

Messagede Wouah le Mer 08 Février 2012, 20:17

Bon voilà la bête est dans sa petite boite, les connections sont faites, quelques petits réglages....OK tout fonctionne bien ou presque...seulement 2 choses:

1) comme je pense mais pas bien :mrgreen: un servo pour déclenché c'est bien, mais avec un programme qui fait tourner la nacelle à 36O° et toujours dans le même sens c'est nul!! ben oui y'a des fils.bon c'est pas grave je déclencherais avec le chdk c'est bien aussi...mais faudra que je pense à faire la modif pour que la nacelle fasse des aller/retour ou à 360 ou 180...(pourl'instantce ne doit pas être compliqué mais......j'sais pas faire!

2) 2ème chose quand je teste la nacelle/arduino avec le cable usb c'est OK mais quand j'alimente avec 4X1,2 en 2500 mA c'est faiblard...limite si ça tourne. (j'ai des servo Sanwa SRW102 ,c'est pas tout jeune mais ils fonctionnent pourtant bien avec la radio.....jusqu'a quel voltage je peux alimenter l'arduino avec ces servos?

Merci
Avatar de l’utilisateur
Wouah
Plus de 1000 messages
 
Messages: 1012
Inscription: Mer 10 Novembre 2010, 20:13
Localisation: Saint-Malo

Re: Approche Arduino

Messagede Alonzo BISTROT le Mer 08 Février 2012, 21:36

Bonsoir,

Pas de flagornerie, je trouve que pour un "bleu" tu t'en sort honorablement.

1)
Wouah a écrit:avec un programme qui fait tourner la nacelle à 36O° et toujours dans le même sens c'est nul!

Je comprend que les fils vont s’emmêler autour de l'axe de rotation ? Si c'est le cas, c'est qu'il y a quelque chose qui n'est pas placé au bon endroit.

D’après les programmes précédents, l’arrêt du servo est réalisé avec un paramètre de "90" et la marche en avant avec "10". L'écart est donc de "-80" pour aller dans un sens. Le sens contraire à même vitesse devrait donc être trouvé avec un paramètre de 90-(-80) soit 90+80= "170".

Le plus simple est (a mon avis) de faire une fonction "Tourner_a_gauche()" avec un paramètre de "90" et une autre fonction "Tourner_a_droite()" avec un paramètre de "170". Ces fonctions seront appelées successivement par le programme principale autant de fois que nécessaire.


2) Selon le modèle et le fabriquant de l'arduino, la tension d'alimentation ne doit pas excéder 3,3V ou 5V au niveau du microcontroleur AVR implanté sur la carte. Pour pouvoir répondre avec efficacité il faut avoir une idée de ton câblage car les servos pourraient être alimentés au travers du régulateur de tension. Si c'est le cas, tu perd de manière systématique environ 1V au travers du régulateur...Ce qui pourrait expliquer leurs faiblesses. Affiche une photo de ton montage, la réponse pourra alors être plus affirmative.

A+
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 461
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Approche Arduino

Messagede Wouah le Jeu 09 Février 2012, 0:49

Merci Alonzo, bon je viens de voir qu'au remontage du servo, je l'ai décalé très légèrement et que les roues dentelées sont un peu serrée, du coup sa force légèrement....peut-être la raison mais je regarde de plus près....
A+
Avatar de l’utilisateur
Wouah
Plus de 1000 messages
 
Messages: 1012
Inscription: Mer 10 Novembre 2010, 20:13
Localisation: Saint-Malo

Re: Approche Arduino

Messagede hansel le Jeu 09 Février 2012, 13:04

Wouah,

Si tu utilise un servo modifia pour 360 degrés, tu vas avoir des problèmes: comme l'angle que tu tournes a chaque fois n'est pas très précis les fils vont s’emmêler autour de l'axe de rotation au bout d'un certain nombre d'aller et retour... La solution est de monter toute l’électronique sur la parte tournante, ou d’utiliser un servo treuil (c'est la solution que j'ai choisi)

Bonne chance! Hans,
Avatar de l’utilisateur
hansel
Plus de 400 messages
 
Messages: 420
Inscription: Ven 07 Mai 2010, 16:58
Localisation: rotterdam,nl

Re: Approche Arduino

Messagede Alonzo BISTROT le Jeu 09 Février 2012, 21:29

Pour finir le JOB ! en pseudo-code, ça doit faire quelques chose de ce style:

    Boucle principale() {

    // Incliner la tête à 0°
    Tilt(0)
    // pause pour que ça se stabilise
    Attendre_secondes(3)


    // 12 photos en tournant a droite
    Pour n_photo = 0 jusqu’à 11 faire
    prendre_une_photo();
    Tourner_un_pas_a_droite();
    Attendre_secondes(1)
    incrémenter n_photo de 1
    Fin

    // Incliner la tête à 20°
    Tilt(20)
    // pause pour que ça se stabilise
    Attendre_secondes(3)

    // 12 photos en tournant a gauche
    Pour n_photo = 0 jusqu’à 11 faire
    prendre_une_photo();
    Tourner_un_pas_a_gauche();
    Attendre_secondes(1)
    incrémenter n_photo de 1
    Fin

    // Incliner la tête à 90°
    Tilt(90)
    // pause pour que ça se stabilise
    Attendre_secondes(3)

    // 12 photos en tournant a droite
    Pour n_photo = 0 jusqu’à 12 faire
    prendre_une_photo();
    Tourner_un_pas_a_droite();
    incrémenter n_photo de 1
    Fin

    }// Fin de la boucle principale

Les mouvements d'inclinaison sont de grande amplitude, donc la pause qui suit est plus longue.

Aprés on peut s'amuser à optimiser, car 12 images à 90° (Nadir) ça peut faire beaucoup...

Bonsoir.
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 461
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Approche Arduino

Messagede Wouah le Jeu 09 Février 2012, 21:52

Merci Alonzo,
Me voilà équipé de codes.....je jongle avec tous...je cherche encore des modifs à taton des fois sans trop comprendre... puisque ma nacelle fait un 360 après 15 mouvement de servos. je test celui qui me convient le mieux ou plutôt j'essaie de déchiffrer les lignes.....certains sont plus faciles que d'autres en tous cas...quand ces lignes n'auront plus de secret :roll: il me restera à revoir l'alimentation je trouve vraiment que le servoPAN peine....même la led s'allume faiblement sauf au moment où je pose la prise USB....ensuite usb ou batterie....c'est pareil la led s’éclaire faiblement (Merci l'ERDF) :P

encore merci
Avatar de l’utilisateur
Wouah
Plus de 1000 messages
 
Messages: 1012
Inscription: Mer 10 Novembre 2010, 20:13
Localisation: Saint-Malo

Re: Approche Arduino

Messagede ElectroDup le Mar 03 Avril 2012, 20:54

bonsoir a tous

je viens a mon tour de recevoir mon arduino nano, et ben je trouve que l'approche est assez simple, si on s'appuie sur tout les bouts de code que l'on trouve sur le forum.
pour ma part je viens de faire un code pour une rotation pan + déclenchement pour ma mini nacelle avec 'un servo 360°.

enfin voila pour dire a ce qui hésite, ben d'y allez car je suis nul en programmation et cela a fonctionné quand même lol

bonne soirée
a+
Laurent
ElectroDup
Plus de 100 messages
 
Messages: 106
Inscription: Dim 13 Décembre 2009, 19:38

Re: Approche Arduino

Messagede mattpano le Mar 10 Avril 2012, 12:27

Wouah a écrit:...
servoAPN.write(62); // Turn Servo Left to 45 degrees
...


Il y a quelque chose que je ne comprends pas, il n'y a pas de lien entre la commande et la rotation ? Il faut donner la commande 62 pour qu'il fasse 45° de rotation ?
Je viens d'acheter deux servo GWS S125 1T/2BB, que je commande vis un Arduino uno.
Quand je lui envoie comme commande 60°, il fait à peu près 100°-110° de rotation.
J'envoie alors une commande de 360°, pour voir ce qu'il fait, et là, il se déplace à peu près sur 740°-750°, soit un peu plus de 2 tours !

Ai-je loupé quelque chose ?
Merci pour vos retours !
Matthieu SELME
- Mes panoramas à 360° : www.361.fr
- Mes panoramas aériens à 360° : 360° aériens
Avatar de l’utilisateur
mattpano
Plus de 400 messages
 
Messages: 601
Inscription: Lun 19 Mars 2012, 17:36
Localisation: Derrière son écran !

Re: Approche Arduino

Messagede Deltakap le Mar 10 Avril 2012, 17:45

Bonjour Matthieu,

mattpano a écrit:il n'y a pas de lien entre la commande et la rotation ?

Si, si.... sur un servo non modifié 360° (et c'est le cas de ton servo winch) l'angle de rotation est directement proportionnel à la valeur envoyée avec un write.

mattpano a écrit:Il faut donner la commande 62 pour qu'il fasse 45° de rotation ?

Là par contre, non. Ça dépend du servo (d'autant plus que tu utilises un servo 360°)

En fait, tu as deux façons d'utiliser cette commande write:
- soit avec une valeur comprise entre 0 et 180, la position centrale (ou neutre) est à 90.
Ça correspond en gros (mais vraiment en gros) à une valeur d'angle.
PS: Une valeur comprise entre 181 et 500 est ramenée à 180.
- soit avec une valeur comprise entre 501 et 2500, la position centrale est très proche de 1500
ça correspond cette fois-ci à des microsecondes.
Cette deuxième plage de valeurs permet évidemment des réglages de position beaucoup plus précis.

Quel que soit ton choix, dans les deux cas, il va falloir procéder par tatonnements pour déterminer les valeurs qui correspondent à ton 0° et à ton 360° (l'affichage dans la console des valeurs envoyées au servo peut faire gagner un temps fou). Tu trouveras par exemple 32 et 154 (au pif), il te suffira ensuite de "mapper" ces valeurs (http://arduino.cc/en/Reference/map) pour les faire correspondre au 0 et au 360°:
Code: Tout sélectionner
angle = 10; // je veux que le servo soit à 10° (sur les 360°)
servoAPN.write(map(angle,0,360,32,154));// le servo se déplace à la valeur angle (en °)

avec l'autre plage de valeurs tu auras peut-être 0° pour 1066 et 360° pour 1935. Ta formule write sera donc:
Code: Tout sélectionner
angle = 10; // je veux que le servo soit à 10° (sur les 360°)
servoAPN.write(map(angle,0,360,1066,1935));// le servo se déplace à la valeur angle (en °)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Approche Arduino

Messagede mattpano le Mar 10 Avril 2012, 18:06

Ta réponse est très complète. J'ai bien compris ce que tu me proposes de faire, mais j'ai cependant 2 "problèmes" :

- Le premier est que j'ai acheté un servo 1T, donc il est censé faire 1 unique et 1 seul tour, et pourtant, en envoyant en consigne 360, il parcours un peu plus de 2 tours... Bon passons, à la limite, c'est mieux ainsi, comme ça, je suis sûr de pouvoir faire au moins un tour... mais ça me déstabilise quand même !

- Le deuxième soucis est que la fonction que tu proposes, MAP(angle), va en gros faire correspondre deux valeurs, si j'ai bien compris ton exemple :
servoAPN.write(map(angle,0,360,32,154));
le 0° théorique à la valeur réelle trouvée, soit 32,
le 360°théorique à la valeur réelle trouvée, soit 154.

Le calcul sera donc (je suppose) proportionnel, donc si je demande 180°, pile entre 0° et 360°, il devrait m'envoyer en commande 61, pile entre 32 et 154. Cela impose que tout soit linéaire.

Or, j'ai fait des tests, en envoyant au servo des "write" tous les 10° théoriques, pour voir comment le servo réagissait.
Lors du passage de 0° à 10°, il tourne de presque 90°-100°, puis ensuite, lors de la commande de 10° à 20°, il tourne de 30-40°, ainsi de suite, jusqu'à arriver en butée au bout d'un peu plus de 2 tours... Donc ce n'est pas proportionnel...

Sur ce, je vais tester ce que tu proposes !

Pour d'autres personnes, la version FR de map :
http://arduino.cc/fr/Main/Map
Matthieu SELME
- Mes panoramas à 360° : www.361.fr
- Mes panoramas aériens à 360° : 360° aériens
Avatar de l’utilisateur
mattpano
Plus de 400 messages
 
Messages: 601
Inscription: Lun 19 Mars 2012, 17:36
Localisation: Derrière son écran !

Re: Approche Arduino

Messagede Deltakap le Mar 10 Avril 2012, 19:07

mattpano a écrit:il parcours un peu plus de 2 tours...

A priori, ça ne me choque pas plus que ça. Le constructeur a pu prévoir une plage de rotation bien supérieure à 360° (pour être certain qu'il fasse au moins un tour). Après, tous les servos sont prévus pour fonctionner avec une radio de modélisme avec un signal bien défini... et l'arduino permet de sortir de ces valeurs "normales" pour un servo.

mattpano a écrit:Le calcul sera donc (je suppose) proportionnel, donc si je demande 180°, pile entre 0° et 360°, il devrait m'envoyer en commande 61, pile entre 32 et 154. Cela impose que tout soit linéaire.

La commande map va effectivement traduire (dans le cas bidon que j'ai proposé) le 90 (°) en 32+61 soit 93... mais peu importe, c'est l'arduino qui va faire le calcul ;)
Tout est absolument linéaire dans la plage de fonctionnement du servo. Le problème, c'est que tous les emetteurs RC envoient en gros des signaux entre 800 et 2200µs, jamais plus (et un signal de 1500µs pour mettre le servo au neutre). Il est probable qu'avec une radio RC le servo fasse bien moins de deux tours. Les servos ne sont donc pas conçus pour répondre correctement (linéairement) au delà de ces valeurs. L'arduino, lui peut envoyer des signaux entre 501 et 2500µs et à ces valeurs extrêmes et non prévues par le constructeur, le servo est dans les choux.

Je t'ai parlé de deux plages de fonctionnement de la commande write. A mon avis, la première méthode (valeurs < 180) est à éviter pour toi. Tu n'auras au mieux que 180 valeurs pour 360° (voir beaucoup moins et la précision de la position sera forcement supérieure à 2°).
Si tu utilises la seconde, voici une façon de déterminer les valeurs:
- un servoAPN.write(1500); va te donner le neutre (c'est la position centrale de ton servo). on va considérer pour l'instant que c'est le 0°.
- il faut maintenant trouver la valeur qui le fait se déplacer de 180° dans un sens.
un premier essai avec par exemple servoAPN.write(1700); te donne physiquement le sens de déplacement du servo et son amplitude en °, genre ça tourne vers la droite de 60° avec 200 de différence en plus par rapport au neutre (1500). Pour avoir 180°, une règle de 3 te donne (1500+200/60*180) soit servoAPN.write(2100); . Hop, ça c'est fait ;)
- même chose dans l'autre sens avec un servoAPN.write(1300); pour connaitre le déplacement réel du servo, règle de trois, etc, disons que tu trouves 851 pour les 180°.
Ta formule sera :
Code: Tout sélectionner
angle = 10; // je veux que le servo soit à 10° (sur les 360°)
servoAPN.write(map(angle,0,360,851,2100));// le servo se déplace à la valeur angle (en °)

ou
Code: Tout sélectionner
angle = 10; // je veux que le servo soit à 10° (sur les 360°)
servoAPN.write(map(angle,0,360,2100,851));// le servo se déplace à la valeur angle (en °)

suivant le sens dans lequel ça tourne... et ça sera linéaire ;)
Dernière édition par Deltakap le Mar 10 Avril 2012, 19:30, édité 1 fois.
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Approche Arduino

Messagede mattpano le Mar 10 Avril 2012, 19:29

Merci, c'est ce que je suis en train de chercher, après avoir fait quelques erreurs. Je me suis rendu compte qu'aux butées, le servo n'est pas super fiable, il faut donc travailler avec une plage de valeurs "au milieu" !
J'y retourne, et je vous tiens au courant !
Matthieu SELME
- Mes panoramas à 360° : www.361.fr
- Mes panoramas aériens à 360° : 360° aériens
Avatar de l’utilisateur
mattpano
Plus de 400 messages
 
Messages: 601
Inscription: Lun 19 Mars 2012, 17:36
Localisation: Derrière son écran !

Re: Approche Arduino

Messagede mattpano le Mar 10 Avril 2012, 19:57

L'expérimentation fut assez rapide, j'ai donc trouvé les valeurs correspondants à mes 2 servos :

servo1 : monservo.write(map(iAngle,0,360,1016,1984));
servo2 : monservo.write(map(iAngle,0,360,1002,1998));

Merci beaucoup Deltakap pour ton aide !

En fait, je ne pensais pas qu'il fallait d'une part "calibrer" les servo, et d'autre part CHAQUE servo, car les 2 servos strictement identiques, de la même marque, n'ont pas les mêmes valeurs...

En attendant de débloquer la dessus cet après-midi, j'ai commandé ma nacelle chez Kapshop... bientôt je teste dans mon salon !
Matthieu SELME
- Mes panoramas à 360° : www.361.fr
- Mes panoramas aériens à 360° : 360° aériens
Avatar de l’utilisateur
mattpano
Plus de 400 messages
 
Messages: 601
Inscription: Lun 19 Mars 2012, 17:36
Localisation: Derrière son écran !

Re: Approche Arduino

Messagede mattpano le Ven 03 Octobre 2014, 17:58

Bonjour à tous,

Je reviens vers vous, car je suis en train d'essayer de 'calibrer' un servo Hitec HS 785HB (3,5 tours) et j'ai un petit soucis :

Avant toute chose, je précise qu'il est piloté via un Arduino, que l'Arduino a sa propre alimentation secteur, et que le servo est alimenté aussi sur le secteur, via une autre alimentation, en 6V, et j'ai relié les 2 masses.

Voici un extrait de code qui ne sert pas à grand chose, à part faire des allers-retours entre les positions que je souhaite extrême, afin de voir s'il y a bien un mouvement constant, et quelque chose de reproductible :

Code: Tout sélectionner
for (int i=0; i <= 255; i++){
servo_h.writeMicroseconds(1500);
delay(6000);
servo_h.writeMicroseconds(1620);
delay(6000);
servo_h.writeMicroseconds(1500);
delay(6000);
servo_h.writeMicroseconds(1375);
delay(6000);
}


Je suis en train de chercher les positions pour que 1500 corresponde à la position "neutre", 1620 corresponde à + 180° et 1375 corresponde à -180°.

- Déjà, première chose, les valeurs entrées ne sont pas symétriques par rapport à 1500. Est-ce normal ? Cela l'était sur mes 2 servos précédents. Mais bon, je ne fais pas de fixation là dessus. J'ai essayé en mettant une valeur moyenne entre 1620 et 1375, cela ne m'avance pas sur la suite du pb.

- Par contre, ce qui m'embête beaucoup plus, c'est que le 1500 ne corresponde PAS à la même position suivant s'il tourne dans un sens ou dans un autre. Je m'explique :

S'il va DE 1620 VERS 1500, il aura une certaine position.
Mais s'il va DE 1375 VERS 1500, et bien la position 1500 n'est pas la même que celle précédemment.
A vu de nez, il y a bien 10° - 15° d'écart !

Avez-vous déjà rencontré ce problème ? Y-a-t-il une solution ?

Merci
Matthieu SELME
- Mes panoramas à 360° : www.361.fr
- Mes panoramas aériens à 360° : 360° aériens
Avatar de l’utilisateur
mattpano
Plus de 400 messages
 
Messages: 601
Inscription: Lun 19 Mars 2012, 17:36
Localisation: Derrière son écran !

Re: Approche Arduino

Messagede hansel le Sam 04 Octobre 2014, 7:35

mattpano a écrit:Je reviens vers vous, car je suis en train d'essayer de 'calibrer' un servo Hitec HS 785HB (3,5 tours) ...


Les servo 3.5 tours ne sont pas très précis en général. Ton 2me problème est la zone morte du servo (hystérésis): C’est fiat exprès pour éviter que ça gigote trop. La fiche du Hitec HS 785HB indique une zone morte de 5 us ce qui donne 5us * 630deg/400us = 8 degrés (dans chaque sens)

Le servo ne commence donc a tourner que quand la différence entre l'angle actuel et l'angle désire est plus grand que 8 degrés, ce qui correspond a 5 microsecondes. C'est probablement pas trop grave pour une nacelle? Sinon il vaut mieux prendre un servo a 1 tour...
Avatar de l’utilisateur
hansel
Plus de 400 messages
 
Messages: 420
Inscription: Ven 07 Mai 2010, 16:58
Localisation: rotterdam,nl

Re: Approche Arduino

Messagede mattpano le Sam 04 Octobre 2014, 9:25

Et bien voilà, merci pour l'explication ! Encore une chose apprise sur les servos !

Je n'avais pas bien compris ce que pouvait être ce "dead band width", maintenant, je comprend tout à fait, pour éviter des petits sauts du servo à gauche et à droite, il "ne bouge plus" quand il est "à peu près à sa place".

Comme un Thermostat qui est programmé à 18°C, et qui ne recommencera à chauffer qu'à 17,5°C, et non à 17,9°C, sinon il se mettrait en marche, arrêt, marche, arrêt ...

Et du coup, ce dead band width est réglé d'usine par le fabricant ? Impossible de le programmer manuellement ? (Sans tout démonter, via une commande quelconque ? )
Matthieu SELME
- Mes panoramas à 360° : www.361.fr
- Mes panoramas aériens à 360° : 360° aériens
Avatar de l’utilisateur
mattpano
Plus de 400 messages
 
Messages: 601
Inscription: Lun 19 Mars 2012, 17:36
Localisation: Derrière son écran !

Précédent

Retourner vers L'électronique embarquée et au sol

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 38 invités