Commande d'un moteur avec une carte arduino uno

a marqué ce sujet comme résolu.

Bonjour,

je poste ici un petit projet que j’aimerais réaliser avec une carte arduino uno, je souhaiterais avoir vos lumière pour savoir si tout est faisable comme je le pense ou si il y a quelle que modification a apporter et si ce code est réalisable par un novice en programmation.

dans mon idée la carte devra commander deux servomoteurs. 1 servomoteur via l’action d’un potentiomètre (pour commander un accélérateur) donc des positionnements très précis de 0° à 90° 1 servomoteur qui servira a passer des vitesses (arrière/neutre/avant) par trois position bien distinct. dans ma tête j’aimerais que lorsque la carte ne reçoit aucune consigne (l’infini) le servo ce place a 45° lorsque l’on enclenche un bouton avec une résistance de 5 Khom le servo ce place a 0° et lorsque l’on enclenche un bouton avec une résistance de 10 Khom le servo ce place a 90°.

voila j’espère avoir été assé clair dans mes explications je ne sais pas si les valeur des résistances sont correct ni quelle valeur de résistance prendre pour le potentiomètre.

par avance merci de vos conseil

Oui c’est possible. Rien de bien compliqué a première vue. ;)

Pour tes servomoteurs, il faudra les alimenter avec une tension efficace / 2 pour qu’il soit a 45 degrés. 0V = 0deg/ Max tension = 90deg. Donc Max/2 = 45deg. Ils doivent surement etre alimentés en 5V, donc il faut envoyer du 2.5V. Pour faire ca, tu fais un hacheur. Pour une période T, tu l’alimentes pendant T/2 période et tu ne l’alimente plus pendant T/2 période.

Le but c’est d’avoir cette courbe la (source wikipedia) :

hacheur série

Pour le bouton, c’est dans le code.

pour répondre a Eskimon ce qui me bloque c’est que je ne connais pas du tout la carte arduino et le monde de la programmation et son langage

Merci Pouet_forever pour cette explication sur les servo

jurais besoin d’une confirmation sur la carte il y a des entrée analogique et digitale les entrée analogique sont pour des potentiomètre les entrée digitales sont pour des contacteurs on/off est ce bien cela ?

et serai il possible de commandé un servo par ces entrées digitale avec par exemple 3 inter pour 3 position

bonjour je reviens avec mon projet qui a avancé. Mais je rencontre un problème avec le code qui gère le servau de passages de vitesse, ça position de base est 90° lorsque j’appui sur un bouton le servo vas a un opposé (0°) sur mon deuxième bouton le servo ce dirige bien jusqu’à l’autre opposé (180°) mais je souhaiterai que lorsqu’aucun des boutons n’est actionné le servo ce repositionne a ça position de base 90°.

Mais je n’arrive pas a trouvé quelle ligne de code et ou faut il l’ajouter pour que cela soit réalisable.

je vous join ci dessous mon code qui regroupe l’accélérateur et le passage des vitesses

par avance un grand merci a vous

// servo passage vitesse

include <Servo.h>

Servo passageVitesse; // servo pour le passage vitesse

int pinAr = 4; // reliée au bouton poussoir marche Arrière

int pinAv = 3 ; // reliée au bouton poussoir marche Avant

int pmin = 0; // position mini

int pmax = 180 ; // position maxi

int pact= 90 ; // position base

int appui= 0; // quand un bouton poussoir est appuye il est dans l’état bas 0v

// fil bleu pin 3 av sens horaire // fil jaune pin 4 ar sens anti horaire

void tourne_plus () { if ( pact < pmax) { pact = pact + 1; passageVitesse.write(pact);

} }

void tourne_moins () { if ( pact > pmin) { pact = pact - 1; passageVitesse.write(pact);

} }

// servo accélérateur

Servo servo; // on crée l’objet Servo int pinServo=8; // pin de commande du servo int pinPotar=A0; // pin lié de lecture du potenitomètre

void setup() // executée une seule fois

// servo passage vitesse

{ { passageVitesse.attach(9); // pin 9 servo passage vitesse

pinMode(pinAr, INPUT_PULLUP); // Pin en mode entrée

pinMode(pinAv, INPUT_PULLUP); // Pin en mode entrée }

//servo accelerateur

{ servo.attach(pinServo); // on relie l’objet servo au pin de commande } }

void loop() // executée en boucle

// servo passage vitesse

{ { if (digitalRead(pinAr) == appui) { // appui sur le bouton poussoir tourne_moins(); }

if (digitalRead(pinAv) == appui) { // appui sur le bouton poussoir tourne_plus(); }

}

// servo accelerateur { int valeurPotar=analogRead(pinPotar); // lecture de la valeur du potentiomètre int angle=map(valeurPotar,0,1023,0,180); // tranformation en angle servo.write(angle); //mise en position du servo }

}

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte