Pages: [1]   Go Down
Author Topic: Mon petit projet Arduino :)  (Read 1982 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello tout le monde smiley-wink

Voilà j'ai depuis peu une carte Arduino UNO et j'aimerais dans un premier temps me construire un robot qui évite les obstacles.
Hier j'ai modifié deux servos pour qu'ils fonctionnent en rotation continue. Cependant j'ai remarqué qu'ils ne tournent pas tous les 2 à la même vitesse (j'ai suivi ce tuto http://www.robotix.fr/tutoriel-1-53-modification-dun-servomoteur-en-moteur-a-courant-continu.html) le neutre est correctement configuré et je ne vois pas trop ce qui cloche :/

Voici le programme que j'ai écrit pour le moment (il y a juste un potard qui permet de choisir entre 4 vitesses dont l'arrêt et un BP pour l'inversion du sens de rotation). Attention je ne suis pas un pro en C :p

Code:
#include <Servo.h>
Servo moteurGauche, moteurDroit;
int neutreGauche = 75, neutreDroit = 164;

void setup()
{
  moteurGauche.attach(9);
  moteurDroit.attach(10);
  pinMode(12, INPUT); //BP inversion
  pinMode(7, OUTPUT); //LED sens 1
  pinMode(8, OUTPUT); //LED sens 2
}

void loop()
{
  int sens = digitalRead(12);
  int vitesse = map(analogRead(A0),0,1023,0,3);
  rotationMoteur(moteurGauche,neutreGauche,sens,vitesse);
  rotationMoteur(moteurDroit,neutreDroit,sens,vitesse);
  delay(50);
}

void rotationMoteur(Servo servo, int neutre, int sens, int vitesse)
{
  int v[6] = {0,5,10,50};
 
  if (sens) {
    int out = neutre + v[vitesse];
    servo.write(out);
    digitalWrite(7, LOW);
    digitalWrite(8, HIGH);
  }
  else {
    int out = neutre - v[vitesse];
    servo.write(out);
    digitalWrite(7, HIGH);
    digitalWrite(8, LOW);
  }
}

Ensuite j'aimerais avoir votre avis concernant l'alimentation de mes servos. Pour le moment ils sont alimentés par la carte UNO mais je pense peut-être me faire un shield qui combinerait la gestion de l 'alimentation pour mes 2 servos (Je compte en rajouter plus tard pour éventuellement une pince ou gadget du genre) et une sorte de proto-shield. Reste à voir pour l'encombrement...

Voici à quoi ressemble mon "montage" pour le moment (qualité portable dsl) :



J'attends vos commentaires et critiques smiley
Logged

Offline Offline
God Member
*****
Karma: 5
Posts: 688
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salut
as-tu calibré tes servos
car à moins de dire des conneries , je pense qu'il y a une ajustable sur le servo , quand tu déclare une valeur (d'arret des servos ) celles-ci ne doivent pas tourner ,si ce n'est pas le cas, il faut tourner le potar afin  d'avoir l'arret de celles-ci.
et pourquoi ne pas avoir pris des servos à rotation continue de chez parallax (pas plus cher) ??

mais ne prends pas ça pour argent comptant ,je dis peut-etre une bétise (je n'ai pas épluché ton programme)
@+
Logged

The truth is elsewhere !!

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut ! smiley

Je n'ai pas pris de servos parallax car je fais également de l'aéro/automodélisme et j'ai une floppée de vieux servos dont je ne me sers plus :p
Calibré mes servos ? En fait avec la méthode que j'ai linkée plus haut, on supprime le portard du servo et le remplace par un pont diviseur de tension.. Il faut ensuite déterminer le "neutre" du servo, quand il est à l'arrêt. Dans mon cas j'en ai un a 75° et un à 164° .
Logged

Offline Offline
God Member
*****
Karma: 5
Posts: 688
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pardon ,je m'incline  smiley-roll smiley-roll

toujours est-il quand tu declare le stop des servos ,est-ce que tes servos s'arretent ..
les parallax sont aussi des servos modifies ,ils ont gardé le potar ,et supprimé la butée mécanique (je crois !) (marque Futaba)
de mon coté j'ai ce bout de programme (pour parallax avec un potar sur une entrée ana qui modifie le sens de rotation)

Quote
#include <Servo.h>
 
Servo myservo;  // create servo object to control a servo
 
int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin
 
void setup()
{
   Serial.begin(9600);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}
 
void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 650, 850);     //  use it with the Parallax servo (value between 650 and 850)
  myservo.write(val);                  // sets the servo position according to the scaled value
 Serial.println(val);
  delay(15);                           // waits for the servo to get there
} /quote]

@+
Logged

The truth is elsewhere !!

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3624
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Les 2 servos sont identiques?
Quote
Il faut ensuite déterminer le "neutre" du servo, quand il est à l'arrêt. Dans mon cas j'en ai un a 75° et un à 164°
L'écart entre les deux neutres donne à penser qu'ils sont assez différents dans leur performances et cela pourrait expliquer ton problème.
De toute façon, il ne faut pas se leurrer, tu ne trouveras jamais 2 moteurs qui tournent à la même vitesse. Il y aura toujours un décalage qui entrainera une dérive de ta plateforme.

Première étape tu peux faire 2 tables de vitesse (au lieu de ta table 0,5,10,50) pour essayer d'appairer de manière empirique la vitesse des moteurs.
La deuxième étape c'est de placer des codeurs sur les roues pour faire un asservissement de vitesse.
« Last Edit: February 17, 2011, 03:40:36 am by fdufnews » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, c'est 2 servos Futaba S3003. Faire une deuxième table j'y ai pensé oui... Je vais p-e être d'abord essayer de simplement obtenir deux vitesses identiques et on verra par après pour la faire varier... Dommage smiley-sad
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Normalement les servos sont alimentés en 5 Volts, tu peux essayer de "sous" alimenter le servo qui va le plus vite.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je viens de remplacer toutes mes résistances que j'ai mis à la place du pot. j'en ai mis 4 de 2K2 (comme dans le tuto, 2 par servo ^^ ) je trouve qu'ils tournent déjà un peu plus à la même vitesse mais par contre pour en stoper un, j'ai du mal car le neutre est pile etre 74 et 75. Que faire ? chercher dans les décimales pour l 'arrêt ?
Logged

Pages: [1]   Go Up
Jump to: