Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2021-11-23T13:12:53+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Articulation d'un bras robotique avec 5 servomoteurs, message #2391412021-11-23T13:12:53+01:00amael/@amaelhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239141<p>Alors je t’invite à utiliser la documentation Adafruit, elle est bien faite, quoiqu’en anglais.</p>
<p><a href="https://learn.adafruit.com/16-channel-pwm-servo-driver">https://learn.adafruit.com/16-channel-pwm-servo-driver</a></p>
<p>Si tu nous présente ce que tu as déjà fait comme cablage et code on pourra t’aider plus.</p>Articulation d'un bras robotique avec 5 servomoteurs, message #2391312021-11-23T11:04:33+01:00Jean-Sebastrick/@Jean-Sebastrickhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239131<p>Oui, la référence est bien PCA9685</p>Articulation d'un bras robotique avec 5 servomoteurs, message #2391292021-11-23T10:22:21+01:00amael/@amaelhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239129<p>Est-ce que tu peux lire la référence du composant principal?</p>
<p>Est-ce le PCA9685?</p>Articulation d'un bras robotique avec 5 servomoteurs, message #2391282021-11-23T09:50:15+01:00Jean-Sebastrick/@Jean-Sebastrickhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239128<p>Bonjour Amael, je ne suis pas sûr que ça soit ce que tu demandes, mais j’utilise un controller i2c pour les servomoteurs. </p>Articulation d'un bras robotique avec 5 servomoteurs, message #2391242021-11-22T23:41:04+01:00chrislyon/@chrislyonhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239124<p>Bonjour,
Désolé je ne voulais pas faire de la pub … pour de la pub
ce site est vraiment bourré d’informations gratuites et donnes beaucoup plus qu’il ne reçoit</p>Articulation d'un bras robotique avec 5 servomoteurs, message #2391122021-11-22T20:37:06+01:00amael/@amaelhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239112<p>Bonjour,</p>
<p>On va avoir besoin de la référence complète de ton driver pour pouvoir t’aider, as-tu un lien vers de la documentation ou une boutique?</p>
<p>Les servos de modélisme classique ont trois fils, un noir, un rouge et un jaune ou marron.</p>
<div class="table-wrapper"><table>
<thead>
<tr>
<th>fil</th>
<th>usage</th>
</tr>
</thead>
<tbody>
<tr>
<td>noir</td>
<td>masse, doit être commune avec le contrôleur</td>
</tr>
<tr>
<td>rouge</td>
<td>alimentation, reliée au 5V, 6V ou 12V en fonction des servos et de la puissance voulue</td>
</tr>
<tr>
<td>jaune</td>
<td>contrôle, relié à un pin de PWM</td>
</tr>
</tbody>
</table></div>
<p>Étant donné que tu as 5 servos, il te faut une alimentation externe, l’Arduino ne suffira pas.</p>Articulation d'un bras robotique avec 5 servomoteurs, message #2391082021-11-22T19:04:15+01:00chrislyon/@chrislyonhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239108<p>Bonjour,
Tu trouveras plein d’information ici : <a href="https://shop.mchobby.be/fr/">https://shop.mchobby.be/fr/</a>
Je ne sais pas ou tu achetes ton matériel électronique mais pour quelques euros de plus tu fais vivre un vrai passioné qui diffuse gratuitement PLEIN d’infos</p>
<p>Bon courage
Chris</p>Articulation d'un bras robotique avec 5 servomoteurs, message #2391052021-11-22T15:15:41+01:00Jean-Sebastrick/@Jean-Sebastrickhttps://zestedesavoir.com/forums/sujet/15864/articulation-dun-bras-robotique-avec-5-servomoteurs/?page=1#p239105<p>Bonjour, je travaille sur un projet de contrôle via bluetooth d’un bras robotique. Celui-ci est doté de 5 servomoteurs, chacun assurant une articulation du bras. J’ai besoin d’aide pour trouver un moyen de les programmer tous ensemble.</p>
<p>Pour le câblage, j’utilise un "16-channel 12-bit PWM driver" pour les connecter mais je ne vois pas comment y connecter les sorties numériques. Un peu d’aide serait la bienvenue.</p>arduino - arret des moteurs, message #2065432019-07-30T21:41:38+02:00Jacen/@Jacenhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206543<blockquote>
<p>pour info les 10 servos KSTX08 ont tous été achetés ensemble; </p>
</blockquote>
<p>Ca semble invalider ma théorie du coup. Mais ça vaut toujours le coup d’essayer le programme</p>arduino - arret des moteurs, message #2065322019-07-30T17:59:16+02:00mozzZ/@mozzZhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206532<figure><blockquote>
<p>Tu dis donc que les nouveaux servos fonctionnent avec "le programme classique" mais pas celui ci. Je suppose du coup que, même si la référence n’a pas changé, les nouveaux servos n’ont pas le même contrôleur. Ce genre de changements arrive sur de l’électronique consumer, pour faire des réductions de coût. Je te propose de tester le programme suivant, qui fait quasiment la même chose que le précédent, sauf qu’au lieu d’envoyer une impulsion de contrôle quand on touche le potentiomètre, il en envoie 5, étalées sur 100ms. Je suppose que le nouveau contrôleur se met en veille quand il n’a pas de signal de contrôle, et qu’il se réveille à la première impulsion quand le signal revient, ce qui ferait qu’il ne réagirait pas à une seule impulsion.</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-arduino"><span class="hljs-comment">//void setup() </span>
{
<span class="hljs-built_in">pinMode</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">OUTPUT</span>);
<span class="hljs-built_in">pinMode</span>(A1, <span class="hljs-literal">INPUT</span>);
}
<span class="hljs-keyword">int</span> v,n,b,iter=<span class="hljs-number">0</span>;
<span class="hljs-keyword">void</span> <span class="hljs-built_in">loop</span>()
{
v=<span class="hljs-number">0</span>;
<span class="hljs-built_in">for</span>(n=<span class="hljs-number">0</span>;n<<span class="hljs-number">32</span>;n++)
{
v+=<span class="hljs-built_in">analogRead</span>(A1);
}
v=v>><span class="hljs-number">5</span>;
v=<span class="hljs-built_in">map</span>(v,<span class="hljs-number">0</span>,<span class="hljs-number">1023</span>,<span class="hljs-number">1050</span>,<span class="hljs-number">1350</span>);
<span class="hljs-built_in">if</span> (v!=b) {
iter=<span class="hljs-number">5</span>;
}
<span class="hljs-built_in">if</span> (iter><span class="hljs-number">0</span>) {
<span class="hljs-built_in">noInterrupts</span>();
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">HIGH</span>);
<span class="hljs-built_in">delayMicroseconds</span>(v);
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">LOW</span>);
<span class="hljs-built_in">interrupts</span>();
b=v;
iter--;
}
<span class="hljs-built_in">delay</span>(<span class="hljs-number">19</span>);
}
</code></pre></div>
<p></p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206520">Jacen</a></figcaption></figure>
<p> je testerai la semaine prochaine ce programme. pour info les 10 servos KSTX08 ont tous été achetés ensemble; </p>
<p>Merci Jacen;</p>arduino - arret des moteurs, message #2065202019-07-30T12:20:36+02:00Jacen/@Jacenhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206520<p>Tu dis donc que les nouveaux servos fonctionnent avec "le programme classique" mais pas celui ci. Je suppose du coup que, même si la référence n’a pas changé, les nouveaux servos n’ont pas le même contrôleur. Ce genre de changements arrive sur de l’électronique consumer, pour faire des réductions de coût. Je te propose de tester le programme suivant, qui fait quasiment la même chose que le précédent, sauf qu’au lieu d’envoyer une impulsion de contrôle quand on touche le potentiomètre, il en envoie 5, étalées sur 100ms. Je suppose que le nouveau contrôleur se met en veille quand il n’a pas de signal de contrôle, et qu’il se réveille à la première impulsion quand le signal revient, ce qui ferait qu’il ne réagirait pas à une seule impulsion.</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-arduino"><span class="hljs-comment">//void setup() </span>
{
<span class="hljs-built_in">pinMode</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">OUTPUT</span>);
<span class="hljs-built_in">pinMode</span>(A1, <span class="hljs-literal">INPUT</span>);
}
<span class="hljs-keyword">int</span> v,n,b,iter=<span class="hljs-number">0</span>;
<span class="hljs-keyword">void</span> <span class="hljs-built_in">loop</span>()
{
v=<span class="hljs-number">0</span>;
<span class="hljs-built_in">for</span>(n=<span class="hljs-number">0</span>;n<<span class="hljs-number">32</span>;n++)
{
v+=<span class="hljs-built_in">analogRead</span>(A1);
}
v=v>><span class="hljs-number">5</span>;
v=<span class="hljs-built_in">map</span>(v,<span class="hljs-number">0</span>,<span class="hljs-number">1023</span>,<span class="hljs-number">1050</span>,<span class="hljs-number">1350</span>);
<span class="hljs-built_in">if</span> (v!=b) {
iter=<span class="hljs-number">5</span>;
}
<span class="hljs-built_in">if</span> (iter><span class="hljs-number">0</span>) {
<span class="hljs-built_in">noInterrupts</span>();
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">HIGH</span>);
<span class="hljs-built_in">delayMicroseconds</span>(v);
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">LOW</span>);
<span class="hljs-built_in">interrupts</span>();
b=v;
iter--;
}
<span class="hljs-built_in">delay</span>(<span class="hljs-number">19</span>);
}
</code></pre></div>arduino - arret des moteurs, message #2064852019-07-29T20:31:12+02:00mozzZ/@mozzZhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206485<figure><blockquote>
<p>Le nombre d’itérations sur l’acquisition n’a aucun lien avec le servo, c’est un filtrage de la lecture du potentiomètre.</p>
<p>Est ce que tu testes bien les nouveaux servos sur le même circuit, en débranchant juste le servo pour brancher le nouveau sans modifier le reste du circuit ? Est ce que tu as essayé les servos sans les accoupler au reste de la mécanique ? Est ce que tu as essayé de les faire fonctionner avec "le programme classique" que tu avais utilisé précédemment ?</p>
<p>Chaque question est importante, elles visent à vérifier:</p>
<ul>
<li>Que le problème ne vient pas d’une autre partie du circuit mal répliquée</li>
<li>Que le bon fonctionnement du servo n’est pas masqué par un accouplement différent</li>
<li>Que les servos sont fonctionnels et que le problème ne survient qu’avec ce programme</li>
</ul>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206469">Jacen</a></figcaption></figure>
<p>la reponse est oui a toutes tes questions; c’est bien ce qui est étrange. la seule difference existante est que le servo qui "fonctionne" est celui qui a été le plus utilisé (le plus usé donc moins précis ?).</p>
<p>le mystere demeure a cause des hitec qui eux répondent bien comme le servo X08.</p>
<p>merci</p>arduino - arret des moteurs, message #2064692019-07-29T12:43:02+02:00Jacen/@Jacenhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206469<p>Le nombre d’itérations sur l’acquisition n’a aucun lien avec le servo, c’est un filtrage de la lecture du potentiomètre.</p>
<p>Est ce que tu testes bien les nouveaux servos sur le même circuit, en débranchant juste le servo pour brancher le nouveau sans modifier le reste du circuit ? Est ce que tu as essayé les servos sans les accoupler au reste de la mécanique ? Est ce que tu as essayé de les faire fonctionner avec "le programme classique" que tu avais utilisé précédemment ?</p>
<p>Chaque question est importante, elles visent à vérifier:</p>
<ul>
<li>Que le problème ne vient pas d’une autre partie du circuit mal répliquée</li>
<li>Que le bon fonctionnement du servo n’est pas masqué par un accouplement différent</li>
<li>Que les servos sont fonctionnels et que le problème ne survient qu’avec ce programme</li>
</ul>arduino - arret des moteurs, message #2064612019-07-29T10:25:49+02:00mozzZ/@mozzZhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206461<figure><blockquote>
<p>C’est totalement arbitraire. Je pense même que l’auteur a du tester 8, 16, 32, 64, et prendre la valeur la plus faible qui donne un système stable. Plus on prend de valeur, plus le système met de temps à réagir, moins on en prend, moins il est stable (et plus il a tendance à rallumer le servo inutilement). Le seul choix qui ne soit pas arbitraire, c’est de prendre une puissance de 2. Divisier par une puissance de 2 en binaire, c’est aussi facile que de diviser par une puissance de 10 en décimal: il suffit de retirer les chiffres de droite (vu qu’on ne garde pas ce qui est après la virgule). C’est une opération qui prend beaucoup moins de temps au processeur qu’une division. Ici, ce n’est pas très important, vu qu’on attends de toutes façons 20ms à la fin, mais c’est habituel dans les systèmes embarqués.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206367">Jacen</a></figcaption></figure>
<p>Merci Jacen; tes explications de LOOP sont conformes a ce que m’a expliqué le programmeur (meme je n’y comprend pas le quart).</p>
<p>Pour l’impulsion électrique c’est effectivement pour limiter le débattement du servo.</p>
<p>Pour la valeur 32 effectivement il a fait plusieurs tests en 8, 16, 32, 64, . bien vu.</p>
<p>Du coup je viens de penser à quelquechose. En fait ce servo, dont le programme agit bien, est celui qui a servi pour tous les prototypes que j’ai fait (8 au total) avant d’être remplacé par les nouveaux. Se pourrrait il qu’une usure soit à l’origine de la difference de comportement entre les servos neufs et celui ci ? Dès que possible, je vais tenter de modifier ces valeurs 8, 16, 32, 64, pour les servos neufs pour voir. Par contre, comme je l’ai dit precedement ce programme fonction aussi (arret des moteurs dès non utilisation) sur les servos hitec 685MG. quel mystere ! merci à tous en tout cas.</p>arduino - arret des moteurs, message #2063672019-07-26T08:55:53+02:00Jacen/@Jacenhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206367<p>C’est totalement arbitraire. Je pense même que l’auteur a du tester 8, 16, 32, 64, et prendre la valeur la plus faible qui donne un système stable. Plus on prend de valeur, plus le système met de temps à réagir, moins on en prend, moins il est stable (et plus il a tendance à rallumer le servo inutilement). Le seul choix qui ne soit pas arbitraire, c’est de prendre une puissance de 2. Divisier par une puissance de 2 en binaire, c’est aussi facile que de diviser par une puissance de 10 en décimal: il suffit de retirer les chiffres de droite (vu qu’on ne garde pas ce qui est après la virgule). C’est une opération qui prend beaucoup moins de temps au processeur qu’une division. Ici, ce n’est pas très important, vu qu’on attends de toutes façons 20ms à la fin, mais c’est habituel dans les systèmes embarqués.</p>arduino - arret des moteurs, message #2063352019-07-25T18:18:13+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206335<blockquote>
<p>Les commentaires indiquent des mauvaises unités: ce sont des µs et des ms, pas des ms et des secondes.</p>
</blockquote>
<p>Ah oui, j’avais oublié que <code>delay</code> utilisait des millisecondes et j’ai ripé sur <code>delayMicroseconds</code> (c’est rare de calculer en 10^-6) que j’ai même pas pris la peine de vérifier la doc. <img src="/static/smileys/langue.png" alt=":p" class="smiley"> mea culpa</p>
<p>Ton commentaire est parfait, il apporte toutes les infos qui me manquait, merci pour mozzZ (je n’ai jamais utilisé de servo moteur ni traité d’entrée analogique).</p>
<p>Petite question : pourquoi exactement 32 fois ? Est-ce un standard ? ou juste arbitraire.</p>arduino - arret des moteurs, message #2063332019-07-25T16:55:01+02:00Jacen/@Jacenhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206333<p>Les commentaires indiquent des mauvaises unités: ce sont des µs et des ms, pas des ms et des secondes.</p>
<p>Pour détailler un peu les explications de <code>loop</code>, elle commence par lire 32 fois l’entrée analogique, additionner les 32 lectures, et diviser le résultat par 32 (décaler à droite de 5 bits et diviser par 32 a le même effet). Le résultat est la moyenne des 32 lectures. Le but est de réduire le bruit sur la lecture de la position du potentiomètre. Quand on lit une entrée analogique, le dernier chiffre est rarement stable, mais en faisant la moyenne de plusieurs valeurs, on obtient une valeur plus stable, qui va éviter de rallumer le moteur trop souvent.</p>
<p>Le map sert à convertir la valeur. Sur le potentiomètre, on lit de 0 à 1023, mais le servo se commande avec une impulsion électrique entre 1050 et 1350µs (normalement c’est entre 1000 et 2000µs, j’imagine qu’on n’utilise pas tout le débattement du servo ici, ou alors le servo n’est pas standard). map fait une conversion linéraire d’un intervalle vers l’autre.</p>
<p>Ensuite il y a une comparaison avec la valeur précédente. Si la valeur est la même, on ne fait rien, c’est ce qui permet que le moteur reste éteint et ne fasse pas de bruit. C’est aussi pour que ce test soit vrai qu’on a fait une moyenne de 32 valeurs précédemment, pour obtenir la même valeur quand on ne bouge pas le potentiomètre.</p>
<p>Quant au code de la boucle, il sert à envoyer une impulsion de v µs. les fonction <code>noInterrupts</code> et <code>interrupts</code> permettent de garantir que rien ne vient fausser le comptage du temps par le microcontrôleur pendant qu’il génère l’impulsion.</p>
<p>Quant au <code>delay(20)</code>, c’est une attente de 20ms, qui est le temps à attendre entre deux impulsions de commande pour le servo. C’est le protocole de commande des servos, ça ne s’invente pas.</p>
<p>En résumé, toutes les 20ms, si la consigne a changé, on génère une nouvelle impulsion de contrôle du servo, et sinon on ne fait rien (et du coup le servo ne fait rien et ne fait pas de bruit)</p>arduino - arret des moteurs, message #2063042019-07-24T20:10:17+02:00mozzZ/@mozzZhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206304<figure><blockquote>
<p>Alors honnêtement … j’en sais rien du tout.</p>
<p>Voici le code commenté si ça peut t’aider :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-arduino"><span class="hljs-keyword">void</span> <span class="hljs-built_in">setup</span>()
{
<span class="hljs-built_in">pinMode</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">OUTPUT</span>); <span class="hljs-comment">// PIN 2 sortie</span>
<span class="hljs-built_in">pinMode</span>(A1, <span class="hljs-literal">INPUT</span>); <span class="hljs-comment">// PIN A1 entrée analogique</span>
}
<span class="hljs-keyword">int</span> v, n, b=<span class="hljs-number">0</span>; <span class="hljs-comment">// déclaration des variables</span>
<span class="hljs-keyword">void</span> <span class="hljs-built_in">loop</span>() <span class="hljs-comment">// boucle principale, appel récurrent</span>
{
v=<span class="hljs-number">0</span>; <span class="hljs-comment">// remise à zéro de la variable v</span>
<span class="hljs-built_in">for</span>(n=<span class="hljs-number">0</span>; n < <span class="hljs-number">32</span>; n++) <span class="hljs-comment">// boucle sur 32 octets récupéré depuis le capteur analogique (entrée A1)</span>
{
v += <span class="hljs-built_in">analogRead</span>(A1); <span class="hljs-comment">// lecture de l'entrée analogique A1 & additionné à v</span>
}
v = v>><span class="hljs-number">5</span>; <span class="hljs-comment">// décalage de 5 bits vers la droite (c'est censé réduire l'entier)</span>
v = <span class="hljs-built_in">map</span>(v,<span class="hljs-number">0</span>,<span class="hljs-number">1023</span>,<span class="hljs-number">1050</span>,<span class="hljs-number">1350</span>); <span class="hljs-comment">// changement de grandeur, on passe v de [0;1023] à [1050;1350]</span>
<span class="hljs-built_in">if</span> (v != b) { <span class="hljs-comment">// si la donnée b stockée est différente de la nouvelle valeur</span>
<span class="hljs-built_in">noInterrupts</span>(); <span class="hljs-comment">// bloque les autres tâches de fond</span>
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">HIGH</span>); <span class="hljs-comment">// envoie un signal vers le PIN 2</span>
<span class="hljs-built_in">delayMicroseconds</span>(v); <span class="hljs-comment">// Attendre v millisecondes (entre 1050 et 1350 ms)</span>
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">LOW</span>); <span class="hljs-comment">// arrête le signal vers le PIN 2</span>
<span class="hljs-built_in">interrupts</span>(); <span class="hljs-comment">// relance les autres tâches de fond</span>
b = v; <span class="hljs-comment">// enregistre la valeur actuelle (pour la tester de nouveau la prochaine fois)</span>
}
<span class="hljs-built_in">delay</span>(<span class="hljs-number">20</span>); <span class="hljs-comment">// Attendre 20s</span>
}
</code></pre></div>
<p></p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206302">Yarflam</a></figcaption></figure>
<p>Waw ! merci beaucoup; ça me fera ma leçon de la semaine.</p>arduino - arret des moteurs, message #2063022019-07-24T19:10:17+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206302<p>Alors honnêtement … j’en sais rien du tout.</p>
<p>Voici le code commenté si ça peut t’aider :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-arduino"><span class="hljs-keyword">void</span> <span class="hljs-built_in">setup</span>()
{
<span class="hljs-built_in">pinMode</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">OUTPUT</span>); <span class="hljs-comment">// PIN 2 sortie</span>
<span class="hljs-built_in">pinMode</span>(A1, <span class="hljs-literal">INPUT</span>); <span class="hljs-comment">// PIN A1 entrée analogique</span>
}
<span class="hljs-keyword">int</span> v, n, b=<span class="hljs-number">0</span>; <span class="hljs-comment">// déclaration des variables</span>
<span class="hljs-keyword">void</span> <span class="hljs-built_in">loop</span>() <span class="hljs-comment">// boucle principale, appel récurrent</span>
{
v=<span class="hljs-number">0</span>; <span class="hljs-comment">// remise à zéro de la variable v</span>
<span class="hljs-built_in">for</span>(n=<span class="hljs-number">0</span>; n < <span class="hljs-number">32</span>; n++) <span class="hljs-comment">// boucle sur 32 octets récupéré depuis le capteur analogique (entrée A1)</span>
{
v += <span class="hljs-built_in">analogRead</span>(A1); <span class="hljs-comment">// lecture de l'entrée analogique A1 & additionné à v</span>
}
v = v>><span class="hljs-number">5</span>; <span class="hljs-comment">// décalage de 5 bits vers la droite (c'est censé réduire l'entier)</span>
v = <span class="hljs-built_in">map</span>(v,<span class="hljs-number">0</span>,<span class="hljs-number">1023</span>,<span class="hljs-number">1050</span>,<span class="hljs-number">1350</span>); <span class="hljs-comment">// changement de grandeur, on passe v de [0;1023] à [1050;1350]</span>
<span class="hljs-built_in">if</span> (v != b) { <span class="hljs-comment">// si la donnée b stockée est différente de la nouvelle valeur</span>
<span class="hljs-built_in">noInterrupts</span>(); <span class="hljs-comment">// bloque les autres tâches de fond</span>
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">HIGH</span>); <span class="hljs-comment">// envoie un signal vers le PIN 2</span>
<span class="hljs-built_in">delayMicroseconds</span>(v); <span class="hljs-comment">// Attendre v millisecondes (entre 1050 et 1350 ms)</span>
<span class="hljs-built_in">digitalWrite</span>(<span class="hljs-number">2</span>, <span class="hljs-literal">LOW</span>); <span class="hljs-comment">// arrête le signal vers le PIN 2</span>
<span class="hljs-built_in">interrupts</span>(); <span class="hljs-comment">// relance les autres tâches de fond</span>
b = v; <span class="hljs-comment">// enregistre la valeur actuelle (pour la tester de nouveau la prochaine fois)</span>
}
<span class="hljs-built_in">delay</span>(<span class="hljs-number">20</span>); <span class="hljs-comment">// Attendre 20s</span>
}
</code></pre></div>arduino - arret des moteurs, message #2062952019-07-24T16:54:51+02:00mozzZ/@mozzZhttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206295<figure><blockquote>
<p>Il faut que tu entoures ton code avec les <code>```</code>, comme c’est fait sur les trois lignes citée par A-312.</p>
<p>Si j’ai bien compris, tes deux servo-moteurs sont des KST X08 et il n’y en a qu’un des deux qui fonctionne avec ton programme ? Tu es sûr qu’ils fonctionnent tous les deux, au moins ? </p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206291">Popiette</a></figcaption></figure>
<p>BOnjour. J’ai exactement 10 KST X08; ils fonctionnent tous sur ce programme. Un seul répond a ce que je cherchais : Coupure moture quand non utilisé; en gros plus d’alimentation dès que l’on arrete le potentiometre. J’ai testé cze programme sur d’autres servos (HITEC 685MG) et l’arret moteur se fait bien. je ne comprend pas pourquoi; mais il faut dire que je ne comprend pas non plus ce programme.</p>
<p>merci</p>arduino - arret des moteurs, message #2062912019-07-24T14:07:43+02:00Popiette/@Popiettehttps://zestedesavoir.com/forums/sujet/12766/arduino-arret-des-moteurs/?page=1#p206291<p>Il faut que tu entoures ton code avec les <code>```</code>, comme c’est fait sur les trois lignes citée par A-312.</p>
<p>Si j’ai bien compris, tes deux servo-moteurs sont des KST X08 et il n’y en a qu’un des deux qui fonctionne avec ton programme ? Tu es sûr qu’ils fonctionnent tous les deux, au moins ? </p>