probleme reglage servomoteur

bonjour,

j'ai acheté le servo moteur suivant : SpringRC SM-S4315R - Continuous Rotation Robot Servo, mais avec le sketch sweep de base mon moteur tourne dans un sens pendant 9 secondes et dans l'autre sens pendant 9 secondes aussi et ainsi de suite. Alors que dans le sketch il ne devrait tourner que de 180°.

ça fait un bon moment que je cherche mais quelque chose m'echappe. Je debute en arduino, pouvez-vous m'expliquer comment bien contrôler mon servomoteur ( lui fait faire les rotations que je veux )

Sachant que ce que je souhaite faire est le faire tourner dans un sens pendant un certain temps ( pas d'un certain angle) , un arrêt de plusieurs heures et le faire tourner dans l'autre sens.

mon projet final est qu'il monte une corde pour l'ouverture et la fermeture d'une petite porte.

Merci pour votre aide

Pierreli

Sans voire votre code difficile dire mais lisez cela pour voir la différence de la commande sur un servo à rotation continue

Continuous Rotation Robot Servo

Désolé mais tu t'es fait avoir :relaxed:.

Ton code est sans aucun doute bon et le comportement est normal.
Ce qui n'est pas normal c'est qu'on affuble ce moteur du nom de "servo" car ce n'en est pas un.

Ta "chose" est un moteur à courant continu tout ce qu'il y a de plus classique qui tourne continuellement.
Le seul point qui le rapproche d'un servo est l'interface de commande qui est "inspirée" de celle des vrais servo.

Cherche un peu sur internet comment réagit ce genre de moteur.
Je vais juste te donner un résumé :
Si l'impulsion de commande est

  • égale à 1,5 ms le moteur est à l'arret
  • supérieure à 1,5 ms il tourne dans un sens
  • inférieure à 1,5 ms il tourne dans l'autre sens
  • plus l'impulsion de commande s'éloigne de 1,5 ms (vers 2ms ou vers 1ms) plus le moteur tourne vite.

Je pense que c'est exactement ce que tu constate.

bonjour,

merci pour vos réponses , mon servo moteur marche comme dis sur le lien, c’est à dire à 90 à l’arret , au dessous de 90 dans un sens et au dessus dans l’autre. c’est deja pas mal . merci pour le lien.

du coup j’ai fait ça:

#include <Servo.h>

Servo myservo;

void setup()
{ }

void loop() {{
myservo.attach(9);
myservo.write(40);
delay(10000);}
{ delay(10000);}
{
myservo.write(120);
delay(10000);
}}

mon servo tourne bien dans les 2 sens pendant 10 secondes mais il ne fait pas de pause entre les 2 rotations

de temps en temps , ça bugge un peu d’ailleurs, le moteur tourne lentement , c’est bizarre, pourtant je l’ai acheté sur un bon site .

je cherche maintenant la bonne fonction pour que le programme s’arrete une certain temps et reparte.

Merci

je corrige il tourne dans un sens pendant 20 secondes et dans l'autre pendant 10 secondes.
le deuxieme delay(10000) est pris en compte dans le mouvement du moteur et ne stoppe pas le programme.

en ecrivant, je pense que j'ai compris il faut que j'ajoute une commande à 90 (le moteur sera fixe) pendant ce deuxieme delai...

j'ai pris ce type de moteur pour avoir un bon couple.

c’était ça , merci pour votre aide , dans le principe j’ai ce que je voulais:

#include <Servo.h>

Servo myservo;

void setup()
{ }

void loop() {{
myservo.attach(9);
myservo.write(40);
delay(10000);}

{myservo.write(90);
delay(10000);}
{
myservo.write(120);
delay(10000);}

{myservo.write(90);
delay(5000);}
}

un moteur qui va dans un sens pendant 10 sec , s’arrete 10sec , repars dans l’autre sens 10 sec , s’arrete 5 et ainsi de suite.

mais pour gerer des durées de plusieurs heures pensez-vous que la fonction delay soit la plus adaptée ?
mon projet est d’automatiser l’ouverture d’une porte de poulailler.

merci

Pierre

mais pour gerer des durées de plusieurs heures pensez-vous que la fonction delay soit la plus adaptée ?

Sûrement pas.
Delay bloque le micro.
Delay c'est tout juste bon pour mettre une petite temporisation quand on interroge du matériel peu rapide.
Par exemple tu envoi un ordre dans un pérophérique et il faut lui laisser "un petit peu de temps" pour qu'il fasse son travail avant de lui demander le résultat. Dans cette application on reste dans la gamme de quelques millisecondes.

Pour ton application il faut que tu utilises la fonction millis().
Voir l'exemple "blink without delay" dans les exemples fournis avec l'IDE.

disons que si votre arduino ne fait rien d’autre que faire tourner le moteur dans un sens le matin et dans l’autre le soir vous pouvez utilisez delay() pour plusieurs heures… mais dans ce cas c’est une débauche de technologie pour un simple circuit…

merci 68TJS, je vais voir avec Milli.

et c'est à dire J-M-L ? vous auriez fait comment ?

mon but est aussi de me familiariser avec arduino avec qqchose de simple pour voir ce que je peux faire de mieux ensuite.

dans l’absolu je ferrai comme vous, je jouerai avec un arduino :slight_smile:

Mais sinon une prise programmable et 4 interrupteurs pour “faire un pont en H”, avec les interrupteurs positionnés de façon à ce que la porte (suivant en haut ou en bas) inverse la polarité “mécaniquement”

j'y avais pensé, mais j'ai préféré m'amuser avec une Arduino.

En tout cas, merci pour votre aide.

Pensez-vous que pour gérer le temps plus proprement et sur la durée, il me faudra un module RTC ?, j'ai lu que sans cela le compteur qui fonctionne dans la carte est limité à 49 jours et des poussieres.

Est-ce qu'il faut vraiment que j’achète le module RTC ou une astuce permettra d'utiliser le timer interne de la carte ?

oui c'est pas plus mal de partir sur l'Arduino vous aurez sans doute vite envie d'y greffer un capteur de T°, luminosité, RTC... etc :slight_smile:

Pour la RTC tout dépend de ce que vous voulez faire... en été les jours sont plus longs, une RTC genre DS3231 + un capteur de luminosité permettrait d'affiner la gestion de la porte de poulailler et ça ne coûte pas une fortune (la RTC c'est 1 euro pile comprise si vous l'achetez en chine - faut juste être un peu patient, ça vous laisse le temps de lire les tutos et faire le bricolage physique pour la porte (sinon ~2 à 4 euros en france))

Regardez un peu sur le forum il y a eu de nombreux projets de portes de poulailler - ça vous donnera des idées

millis()
Il n'y a pas de compteur mais un "traitement" d'un compteur (Timer 0 8bit -->0 à 255).
Effectivement le "traitement" fait dans la fonction millis() "reboucle" au bout de 49 jours et des poussières.
Reboucler ne veut pas dire s'arréter mais veux dire repasser à 0 et continuer le comptage indéfiniment.
Cela ne pose pas de problème. Je m'étais posé la question il y a quelques mois et toutes les savantes explications des colistiers prouvaient que le C est bien fait et qu'aucune erreur n'est générée.

Le code de la fonction millis() est disponible dans le répertoire de l'IDE arduino.

RTC ?
Pas vraiment indispensable mais sécurisant. Et à 1€ une horloge à base de DS3231 pourquoi ne pas s'amuser avec ?

ok, merci, la RTC ça sera pour la V2 de mon installation, ça serait bien d'adapter l'ouverture et fermeture en fonction de la saison.

Je vais alimenter ma carte avec un transfo sur une prise. Je pense peut-être y mettre un programmateur pour couper le courant de la carte la nuit, pensez-vous donc que des mises sous tension tous les jours peuvent à la longue endommager la carte ?

merci

Pierre

pierreli:
… peut-être y mettre un programmateur pour couper le courant de la carte la nuit, pensez-vous donc que des mises sous tension tous les jours peuvent à la longue endommager la carte ? …

Les mises sous-tension et coupures n’ont jamais amélioré la fiabilité des systèmes. Pour autant, ce peut être d’un effet négligeable s’il n’y a pas d’appels de courant démesurés. Donc une alim plutôt 9 V que 12.

Par contre, si vous n’utilisez pas d’horloge RTC, il va falloir remettre à l’heure votre système à chaque remise sous tension ??

Cordialement.

Pierre

pour la remise à l'heure je ne pense pas que ça pose problème vu que je le ferai toujours à heure fixe, le programme demarera toujours et se déroulera tous les jours de la même façon.

ça devrait marcher.

pierreli:
pour la remise à l'heure je ne pense pas que ça pose problème vu que je le ferai toujours à heure fixe, le programme demarera toujours et se déroulera tous les jours de la même façon.

ça devrait marcher.

Oui ::slight_smile: En espérant que vous n'ayez pas de coupures de courant intempestives.

Cordialement.

Pierre