Pages: [1]   Go Down
Author Topic: Code servomoteur/ moteur DC  (Read 906 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous.

Je débute en arduino et je souhaite réaliser un code me permettant de contrôler un servo moteur et un moteur DC via potentiomètre.
Le servo et le moteur seront connectés en sorties digitales pin 22 et 23 par exemple pour une arduino méga.
J'ai trouver sur le net un exemple d'utilisation d'un servo moteur contrôler par potar. J'ai donc pu voir qu'une bibliothèque était prévu à cet effet (servo).
Par contre pour le moteur DC, existe t'il une bibliothèque appropriée, ou bien je peu déclarer celui-ci comme un servomoteur? car le moteur est connecter à un L298 sans avoir besoin du contrôle de la vitesse (tout ou rien). Donc 4 pin seront utilisées pour ce moteur.
Pour la déclaration, si je prend se bout de code par exemple?

//analog 0
(def pot-pin 0)                                                 
//digital 22                                                                     
(def servo-pin 22)                                                             
//analog 1                                                                 
(def pot-pin 1)
//digital 23
(def motor-pin 23)
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Pour le L298 il n'existe pas de librairie, en fait c'est tellement simple qu'il n'y en a pas besoin smiley-wink

http://arduino103.blogspot.fr/2011/06/controle-moteur-dc-via-l298.html
(voir en bas de page le tableau)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3195
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Servo directement branché à l'arduino ?
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yes, merci en effet c'est tip top smiley-wink
Donc pour les servos, je prend la bibliothèque "servo" #include <Servo.h>
Et pour le moteur "l298" je prend rien en compte juste la déclaration des pins.
Pour passer de #include <Servo.h> à autre chose comme contrôler des sorties digitales pour l298 pour le coup ou une LED par exemple,
il faut que je boucle la déclaration "servo" avant de déclarer les entrées/sortie d'autres éléments?
J'suis désoler, je commence juste.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Desoler B@tto, j'ai écrit le mesage en même temps.
Oui, le servo est connecter directement à l'arduino.
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3195
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

T'as vérifier si la conso est compatible ?
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

compatible??
par rapport à quoi? le servo via sorties digitale?

Les servo: Alimentation: 3-7,2V; Courant: 8mA (repos) - 350mA (à vide)
Les moteur: 12V DC;  120mA

Sinon, je vais les alimentés via une batterie.

J'ai trouver ce code pour contrôler deux moteurs via joystick, je peux le modifier afin de retirer le contrôle de vitesse et passer du tout ou rien?

Quote

/*
Contrôle de la base de robot au moyen d'un joystick
3-7 janvier 2012

*/

#define motorPin1a 3 // Marche avant du premier moteur
#define motorPin1b 4 // Marche arrière du premier moteur
#define speedPin1 9 // L293D enable pin pour le premier moteur
#define motorPin2a 5 // Marche avant du deuxième moteur
#define motorPin2b 6 // Marche arrière du deuxième moteur
#define speedPin2 10 // L293D enable pin pour le deuxième moteur
#define JoyStickPin1 1  //analog 1
#define JoyStickPin2 2  //analog 2

int Mspeed= 0;
int Mspeed1 = 0;
int Mspeed2 = 0; 

unsigned long time;

void setup() {

// réglage des broches Ã  output
pinMode(motorPin1a, OUTPUT);
pinMode(motorPin1b, OUTPUT);
pinMode(speedPin1, OUTPUT);
pinMode(motorPin2a, OUTPUT);
pinMode(motorPin2b, OUTPUT);
pinMode(speedPin2, OUTPUT);
}

void loop() {
  Mspeed1 = (analogRead(JoyStickPin1)-511)/2;
  Mspeed1 = Mspeed1 - (analogRead(JoyStickPin2)-511)/2;
  if (Mspeed1 > 255) {
    Mspeed1 = 255;
  }
    if (Mspeed1 < -255) {
    Mspeed1 = -255;
  }
  
  Mspeed2 = (analogRead(JoyStickPin1)-511)/2;
  Mspeed2 = Mspeed2 + (analogRead(JoyStickPin2)-511)/2;
  if (Mspeed2 > 255) {
    Mspeed2 = 255;
  }     
  if (Mspeed2 < -255) {
    Mspeed2 = -255;
  }
  
  if (Mspeed1 > 0)  // donc marche arrière
  {
    analogWrite(speedPin1, abs(Mspeed1));
    digitalWrite(motorPin1a, LOW);
    digitalWrite(motorPin1b, HIGH);
  }
  else {   // donc marche avant (ou repos)
    analogWrite(speedPin1, abs(Mspeed1));
    digitalWrite(motorPin1a, HIGH);
    digitalWrite(motorPin1b, LOW);
  }
  
  if (Mspeed2 > 0)  // donc marche arrière
  {  
    analogWrite(speedPin2, abs(Mspeed2));
    digitalWrite(motorPin2a, LOW);
    digitalWrite(motorPin2b, HIGH);   
  }
  else  // donc marche avant (ou repos)
  {   
    analogWrite(speedPin2, abs(Mspeed2));
    digitalWrite(motorPin2a, HIGH);
    digitalWrite(motorPin2b, LOW);
  }
}


Et un autre pour controler 3 servos via potentiomètres:
Quote
// Contrôler la position de servomoteurs avec des potentiomètres (résistance variable)

#include <Servo.h>
 
Servo myservo1;   // créer un objet servo 1 pour le contrôler
Servo myservo2;   // créer un objet servo 2 pour le contrôler
Servo myservo3;   // créer un objet servo 3 pour le contrôler
 
int potpin1 = 0;  // borne analogique pour connecter le potentiomètre 1
int potpin2 = 1;  // borne analogique pour connecter le potentiomètre 2
int potpin3 = 2;  // borne analogique pour connecter le potentiomètre 3
int val1;         // variable pour stocker la valeur du potentiomètre 1
int val2;         // variable pour stocker la valeur du potentiomètre 2
int val3;         // variable pour stocker la valeur du potentiomètre 3
 
void setup()

  myservo1.attach(9);  // brancher le servomoteurs 1 sur l'entrée 9
  myservo2.attach(10);  // brancher le servomoteurs 2 sur l'entrée 10
  myservo3.attach(11);  // brancher le servomoteurs 3 sur l'entrée 11

 
void loop()
{
  val1 = analogRead(potpin1);         // lire la valeur du potentiomètre 1
  val1 = map(val1, 0, 1023, 0, 179);  // la discrétiser pour l'utiliser avec un servomoteur
  val2 = analogRead(potpin2);         // lire la valeur du potentiomètre 2
  val2 = map(val2, 0, 1023, 0, 179);  // la discrétiser pour l'utiliser avec un servomoteur
  val3 = analogRead(potpin3);         // lire la valeur du potentiomètre 3
  val3 = map(val3, 0, 1023, 0, 179);  // la discrétiser pour l'utiliser avec un servomoteur
  myservo1.write(val1);               // mettre le servomoteur 1 dans la bonne position
  myservo2.write(val2);               // mettre le servomoteur 2 dans la bonne position
  myservo3.write(val3);               // mettre le servomoteur 3 dans la bonne position
  delay(5);                           // attendre que les servomoteurs aillent dans leur position



 J'ai pile poil 3 servo à contrôler, je pensais les connecter au broches digitales, ou au pwm (au mieux)
Pour bien faire, il me faudrait une "fusion" de ces deux code.
« Last Edit: February 20, 2013, 07:53:44 pm by meiko » Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour les moteurs il faudra une alimentation externe smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yes, smiley-wink

J'ai essayer de faire un code pour contrôler deux moteurs DC avec L298 et deux potentiomètres (1 joystick X, Y) . En tout ou rien.
Vous parait il correcte?
Donc c'est pour une Mega le L293 est sur les broches digitales 22; 23; 24 et 25
Quote
#define motorPin1a 22 // corespond à la broche 22 digitale , moteur 1 marche AV
#define motorPin1b 23 // corespond à la broche 23 digitale, moteur 1 marche AR
#define motorPin2a 24 // corespond à la broche 24 digitale , moteur 2 marche AV
#define motorPin2b 25 // corespond à la broche 25 digitale, moteur 2 marche AR

int sensorPin1 = A0; // Joystick x entrée analog
int sensorPin2 = A1; // Joystick y entrée analog
int sensorValue = 0; // variablble to store from the  sensor



void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(motorPin1a , OUTPUT); 
  pinMode(motorPin1b , OUTPUT); 
  pinMode(motorPin2a , OUTPUT); 
  pinMode(motorPin2b , OUTPUT); 
}

void loop () {
sensorValue = analogRead(sensorPin1);   

if (sensorValue> 150){
   //marhe avant
   digitalWrite(motorPin1b , LOW); 
   digitalWrite(motorPin1a , HIGH); 
   } else
      if (sensorValue< 100)   {
         //marhe arriere 
                     digitalWrite(motorPin1a , LOW); 
         digitalWrite(motorPin1b  , HIGH); 
         }
      else {
         //stop 
         digitalWrite(motorPin1a , LOW); 
         digitalWrite(motorPin1b  , LOW); 
         }

sensorValue = analogRead(sensorPin2);   
 
if (sensorValue> 150)   {
   //marche AV
   digitalWrite(motorPin2b  , LOW); 
   digitalWrite(motorPin2a , HIGH); 
   } else
      if (sensorValue< 100)   {
         //marche AR
         digitalWrite(motorPin2a  , LOW); 
         digitalWrite(motorPin2b  , HIGH); 
         }
      else {
      //stop
      digitalWrite(motorPin2a  , LOW); 
      digitalWrite(motorPin2b  , LOW); 
}
}


« Last Edit: February 22, 2013, 01:15:12 pm by meiko » Logged

Pages: [1]   Go Up
Jump to: