Aller au contenu


Photo
- - - - -

Programme arduino pour 2 servomoteurs


18 réponses à ce sujet

#1 Angel0812

Angel0812

    Nouveau membre

  • Membres
  • 7 messages

Posté 18 mai 2012 - 08:18

Bonjour à tous,

Tout d'abord je vous signale que je suis nouveau sur ce forum et donc si je ne suis pas dans le bon topic merci de me le signaler.

J'en viens à mon problème. J'ai un projet à faire pour l'école dont je n'arrive pas à m'en sortir.
Je cherche à programmer et à construire une voiture suiveuse de ligne.
Je viens d'acheter le matériel cependant lors de la programmation je n'arrive même pas à faire tourner les 2 servomoteurs dans un sens opposé...

Si quelqu'un peut m'aider au moins pour le début de mon programme ça serait vraiment sympa.

Caractéristique technique:
carte arduino uno
servomoteurs futaba S3003

#2 Mic*

Mic*

    Habitué

  • Membres
  • PipPip
  • 232 messages
  • Gender:Male
  • Location:Sarthe

Posté 18 mai 2012 - 08:37

Bonjour à tous,

Tout d'abord je vous signale que je suis nouveau sur ce forum et donc si je ne suis pas dans le bon topic merci de me le signaler.

J'en viens à mon problème. J'ai un projet à faire pour l'école dont je n'arrive pas à m'en sortir.
Je cherche à programmer et à construire une voiture suiveuse de ligne.
Je viens d'acheter le matériel cependant lors de la programmation je n'arrive même pas à faire tourner les 2 servomoteurs dans un sens opposé...

Si quelqu'un peut m'aider au moins pour le début de mon programme ça serait vraiment sympa.

Caractéristique technique:
carte arduino uno
servomoteurs futaba S3003


Google est ton ami regarde ce post vers la fin :inversion rotation
il faut aussi couper une butée sur l'engrenage fais des recherches avec ta question, il y pas mal d'exemples

#3 Angel0812

Angel0812

    Nouveau membre

  • Membres
  • 7 messages

Posté 18 mai 2012 - 08:45

merci pour ton aide mais c'est plutôt en programmation que j'aurai besoin d'un coup de main...

Je n'arrive même pas à faire tourner ce foutu moteur dans un sens ...

#4 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 520 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 19 mai 2012 - 07:55

bonjour

commence par ce site pour apprendre pas mal de petites choses: http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.TousLesProgrammes

Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#5 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 19 mai 2012 - 10:59

Angel0812 , a tu commencé un programme pour faire fonctionné tes 2 servomoteurs , car si j'ai bien compris , tu a bien tenté

de les faire fonctionné , et cela na pas marcher , donc tu a fait un morceau de programme ???

Donc et t'il possible que tu mette ton programme en évidence sur le topic ???

#6 Mic*

Mic*

    Habitué

  • Membres
  • PipPip
  • 232 messages
  • Gender:Male
  • Location:Sarthe

Posté 19 mai 2012 - 12:11

bonjour

commence par ce site pour apprendre pas mal de petites choses: http://www.mon-club-...usLesProgrammes


Un bon site merci ! :)

#7 Angel0812

Angel0812

    Nouveau membre

  • Membres
  • 7 messages

Posté 21 mai 2012 - 04:26

merci pour votre aide mais j'ai réussi à faire fonctionner mes moteurs.

Voici le code

#include <Servo.h>
Servo Servo1;
Servo Servo2;

void PROPULSION()
{
Servo1.writeMicroseconds(1300);
Servo2.writeMicroseconds(1350);
}
void setup()
{
Servo1.attach(10); // neutre=1300, CW<1300, CCW>1300
Servo2.attach(11); // neutre=1350, CW<1350, CCW>1350
}

void loop()
{
PROPULSION();
}


Par contre maintenant je souhaite mettre une direction sur mon véhicule: je vais mettre un servomoteur qui agira directement sur la direction de ma roue avant.

Pouvez m'aider à écrire mon programme pour cette partie ?

#8 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 21 mai 2012 - 04:34

Ton code consiste a faire quoi , concernent tes servo??

Ta une vidéo???

#9 Angel0812

Angel0812

    Nouveau membre

  • Membres
  • 7 messages

Posté 21 mai 2012 - 06:42

il consiste juste à faire tourner mes servo dans un sens opposé pour faire avancer ma voiture

Et non j'ai pas de vidéo dsl

#10 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 333 messages
  • Gender:Male

Posté 22 mai 2012 - 09:20

il consiste juste à faire tourner mes servo dans un sens opposé pour faire avancer ma voiture

Et non j'ai pas de vidéo dsl


Tu as plus simple je pense. Il sort d'ou le void propulsion ?

Je vais t'expliquer un peu. Pour des servomoteurs, la librairie "servo" s'utilise comme ça :

-tu déclares que tu vas utiliser la librairie tout au début (ce que tu as fait)
-dans void loop() tu déclares à quelle sortie digitale tu vas brancher ton servo de cette maniere : "nom de la variable".attach(numéro de sortie); exemple -> servo1.attach(6);
-dans void loop () tu indiques son mouvement comme ça : servo1.write("angle"); l'angle est comprit entre 0 et 180, ce qui corespond à l'angle des servos à butée, et en ce qui concerne les servo a rotation continue c'est aussi de 0 a 180, sauf que 90 coresspond a l'arret et quand tu augmentes il tourne dans un sens et inversement. Et plus tu t'éloignes de 90 plus il tourne vite. J'espere que j'ai été clair :/

#11 Angel0812

Angel0812

    Nouveau membre

  • Membres
  • 7 messages

Posté 23 mai 2012 - 06:16

oui c'était très clair ton explication.

Cependant mon programme fonctionne comme il est actuellement donc je ne le change pas.

Par contre tu as une très bonne idée en utilisant les angles pour faire tourner les servo.
Je vais faire comme ça pour commander mon dernier servo de direction.

Par contre j'ai un peu de mal à utiliser mon capteur suiveur de ligne

C'est un Sharp et je voudrai que mon robot suive une ligne grace à ce capteur. Bien sur celui ci est à coupler au dernier servo pour rectifier la trajectoire en temps réel.

La j'ai grand besoin d'aide pour ça

#12 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 23 mai 2012 - 07:34

[Edit me dit que je suis pas encore bien réveillé parce que c'est un code pour une voiture et que du coup, il n'y a pas besoin d'une fonction avec des arguments, sauf s'il veut reculer aussi...]

@Ashira :
Rien n'empêche de créer une nouvelle fonction pour gérer la vitesse du robot, c'est même une bonne chose. Par contre, j'aurais mis des arguments... Avec cette fonction, tu peux gérer tous les déplacements. (Avancer, reculer, tourner à droite, à gauche...)
void PROPULSION(int angleServoGauche, int angleServoDroit)
{
  Servo1.write(angleServoGauche);
  Servo2.write(angleServoDroit);
}

À utiliser comme ça :
void loop()
{
  PROPULSION(70,110); //valeurs au hasard!!
}
(Il est évidemment possible d'améliorer la fonction "PROPULSION" pour, par exemple, refuser des valeurs plus petites que 0 ou plus grandes que 180°.)

Autre chose, je ne sais pas comment Angel0812 a modifié ses servomoteurs mais le neutre à 90°, ça n'est vrai qu'en théorie. C'est très régulièrement à des valeurs différentes (83, 102... etc...) Il faut donc penser à tester les servomoteurs modifiés pour trouver le neutre. (C'est ce qu'il a déjà fait avec les valeurs en µs (1300 et 1350), reste à voir à quel angle cela correspond. Il est également possible de compenser ça dans la fonction "PROPULSION". Exemple, si le neutre du Servo1 est à 82° et le neutre du Servo2 à 96°, mais que pour se simplifier la vie, tu veux utiliser 90° pour les deux, tu rajoutes :

void PROPULSION(int angleServoGauche, int angleServoDroit)
{
  Servo1.write(angleServoGauche - 8); // 90 - 8 = 82 => neutre du Servo1 dans l'exemple
  Servo2.write(angleServoDroit + 6);
}


@Angel0812 :
J'ai gardé le nom "PROPULSION" pour mes exemples mais généralement on met les constantes en majuscules... À changer, donc.
Le nom des servomoteurs "Servo1" et "Servo2", c'est pas clair. C'est mieux d'utiliser ServoDroit et ServoGauche, ou juste ServoD et ServoG.
(Il faut essayer de prendre l'habitude d'avoir des noms de variables clairs ! C'est plus facile quand on se replonge dans un code des semaines/mois après ou qu'on demande à des forumeurs d'y jeter un œil... )

Et pour le capteur sharp, désolé mais là, on sait rien faire pour toi... Des capteurs sharp il y en a un fameux paquet... Sans les spécificités, c'est comme chercher une aiguille dans une botte de foin, la nuit et sans lampe.

Dernière chose, Un autre tutoriel pour la modification des servomoteurs FutabaS3003, ça peut toujours servir de connaitre les différentes manières de les modifier.

Esprit
*Rêve d'en caser un dans un robot*


#13 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 333 messages
  • Gender:Male

Posté 23 mai 2012 - 05:23

Ok je vois, je ne connaissais pas cette fonction. Et pour le coup je viens aussi de comprendre pourquoi mon servo bougeait un peu quand il était à 90 ! merci ;)

#14 Angel0812

Angel0812

    Nouveau membre

  • Membres
  • 7 messages

Posté 23 mai 2012 - 08:38

Voila je viens de modifier mon programme

#include <Servo.h>
Servo ServoG;
Servo ServoD;

void PROPULSION()
{
ServoG.writeMicroseconds(1300);
ServoD.writeMicroseconds(1350);
} 
void setup()
{
ServoG.attach(10); // neutre=1300, CW<1300, CCW>1300
ServoD.attach(11); // neutre=1350, CW<1350, CCW>1350
}

void loop()
{
PROPULSION();
}

Sinon pour le capteur suiveur de ligne sharp je te passe un lien

capteur Sharp

#15 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 24 mai 2012 - 07:59

Ok je vois, je ne connaissais pas cette fonction. Et pour le coup je viens aussi de comprendre pourquoi mon servo bougeait un peu quand il était à 90 ! merci ;)


Tu n'as pas compris. La fonction "PROPULSION" a été créée par Angel0812. Ce n'est pas une fonction qui existe de base. Enfin, elle a du être codée des milliers de fois mais bon... Tu peux créer de nouvelles fonctions dans ton programmes et les utiliser. (Je te conseille d'aller faire un tour sur des tutoriels de C ou de C++ pour en savoir plus. [Site du Zéro, développez.com, ...])


@Angel0812 :
Change le nom de ta fonction. Mets en minuscules. Les majuscules sont utilisées seulement pour les constantes. Et puis utilise les angles pour piloter tes moteurs, c'est bien plus simple. (Fais une sauvegarde de ton code avant de le modifier si tu as peur de faire des bêtises...)

Je n'ai pas l'impression que ce capteur soit le plus adapté pour cette utilisation... Déjà parce que c'est prévu pour être un capteur de distance. Alors oui, il va sans doute envoyer une valeur différente si tu es sur une ligne noire ou sur du blanc, probablement. Mais ce n'est pas le plus efficace je pense. De plus, en dessous de 4cm, il renvoie une valeur difficilement utilisable. (voir Fig.4, page 3 de la datasheet).

Il y a des capteurs moins chers et prévus pour, par exemple : capteur de ligne de chez DFrobot. Tu as même un bon tutoriel en français sur Mon club élec. C'est moins de la moitié du prix, ce qui permet d'en acheter plusieurs et d'être encore plus efficace.

Esprit
*Rêve d'en caser un dans un robot*


#16 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 333 messages
  • Gender:Male

Posté 24 mai 2012 - 04:31

Ah oui d'accord, j'ai pensé que c'était une fonction d'origine. ^^

#17 Angel0812

Angel0812

    Nouveau membre

  • Membres
  • 7 messages

Posté 24 mai 2012 - 10:25

@Esprit

tu as raison je pense que je vais utiliser le télémètre pour détecter un objet ( obstacle) et le capteur suiveur de ligne pour suivre la ligne ^^

#18 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 25 mai 2012 - 07:14

@Esprit : tu as raison je pense que je vais utiliser le télémètre pour détecter un objet ( obstacle) et le capteur suiveur de ligne pour suivre la ligne ^^


Je pense que c'est mieux, en effet. :lol:

Esprit
*Rêve d'en caser un dans un robot*


#19 69robot

69robot

    Nouveau membre

  • Membres
  • 1 messages

Posté 30 janvier 2013 - 01:33

Salut


C'est peut etre un peu tard mais je mets mon programme
Servomoteur avec capteur ligne et carte arduino


/*
Button

Turns on and off a light emitting diode(LED) connected to digital
pin 13, when pressing a pushbutton attached to pin 2.


The circuit:
* LED attached from pin 13 to ground
* pushbutton attached to pin 2 from +5V
* 10K resistor attached to pin 2 from ground

* Note: on most Arduinos there is already an LED on the board
attached to pin 13.


created 2005
by DojoDave <http://www.0j0.org>
modified 30 Aug 2011
by Tom Igoe

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/Button
*/

// constants won't change. They're used here to
// set pin numbers:
#include <Servo.h>
const int buttonPin = 6; // the number of the pushbutton pin
const int capteurPin = 9;
Servo servo1; // the number of the LED pin
Servo servo2;
int buttonState = 0; // variable for reading the pushbutton state
int capteurState = 0;
void PROPULTION ()
{
}


void setup() {

pinMode(buttonPin, INPUT);
pinMode(capteurPin, INPUT);

servo1.attach(10);
servo2.attach(11);
}

void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
capteurState = digitalRead(capteurPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
PROPULTION();
if (buttonState == HIGH) {
// turn LED on:
servo1.writeMicroseconds(2000);
servo2.writeMicroseconds(50);
}
else {
// turn LED off:
servo1.writeMicroseconds(50);
servo2.writeMicroseconds(50);
}
// read the state of the pushbutton value:
capteurState = digitalRead(capteurPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (capteurState == HIGH) {
// turn LED on:
servo1.writeMicroseconds(2000);
servo2.writeMicroseconds(50);
}
else {
// turn LED off:
servo1.writeMicroseconds(2000);
servo2.writeMicroseconds(2000);
}
}

Apres tout depend de ou tu branche t capteur et t servo tu change les numero



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users