système arduino
Publié : Lun Mars 04, 2013 10:45 pm
Bonsoir à tous,
Juste pour vous présenter se système assez avantageux pour avoir le minimum de connaissances en électronique.
Wikipédia vous l'expliquera mieux que moi: http://fr.wikipedia.org/wiki/Arduino
C'est pas cher, facile à mettre en oeuvre... pas forcement le plus compacte mais bon.
Le modèle de carte utilisée pour mon ROV est la "ARDUINO MEGA 2560". Les ponts en H sont des L298N (fonctionnent en 12V)
Je contrôle tout avec cette carte soit: 7 moteurs 12V DC; 3 servomoteurs, 3 LED (intensité), des capteurs voie d'eau et j'en exploite même pas la moitié.
Les moteurs de propulsion tournent en contra-rotation.
Le programme, ça donne ça: (pour mon utilisation)
Il y à plein de forums et de tutos permettant d'apprendre et comprendre les bases et de réaliser son propre code.
Je vous met une vidéo de l'aperçu du ROV, tout les éléments à contrôler n'y sont pas encore:
http://youtu.be/X9-E3vMM6jU
Juste pour vous présenter se système assez avantageux pour avoir le minimum de connaissances en électronique.
Wikipédia vous l'expliquera mieux que moi: http://fr.wikipedia.org/wiki/Arduino
C'est pas cher, facile à mettre en oeuvre... pas forcement le plus compacte mais bon.
Le modèle de carte utilisée pour mon ROV est la "ARDUINO MEGA 2560". Les ponts en H sont des L298N (fonctionnent en 12V)
Je contrôle tout avec cette carte soit: 7 moteurs 12V DC; 3 servomoteurs, 3 LED (intensité), des capteurs voie d'eau et j'en exploite même pas la moitié.
Les moteurs de propulsion tournent en contra-rotation.
Le programme, ça donne ça: (pour mon utilisation)
// CONTROLE DU ROV "WASP"
//.........................................................................................
#define motorPin1a 22 // broche 22 digital, moteur 1 marche AV (propulsion)
#define motorPin1b 23 // broche 23 digital, moteur 1 marche AR (propulsion)
#define motorPin2a 24 // broche 24 digital, moteur 2 marche AV (propulsion)
#define motorPin2b 25 // broche 25 digital, moteur 2 marche AR (propulsion)
#define motorPin3a 26 // broche 26 digital, moteur vertical marche AV (plongée)
#define motorPin3b 27 // broche 27 digital, moteur vertical marche AR (plongée)
#define motorPin4a 28 // broche 28 digital, moteur allongement bras gauche marche AV (manip)
#define motorPin4b 29 // broche 29 digital, moteur allongement bras gauche marche AR (manip)
#define motorPin5a 30 // broche 30 digital, moteur rotation bras gauche marche AV (manip)
#define motorPin5b 31 // broche 31 digital, moteur rotation bras gauche marche AR (manip)
#define motorPin6a 32 // broche 32 digital, moteur allongement bras droit marche AV (manip)
#define motorPin6b 33 // broche 33 digital, moteur allongement bras droit marche AR (manip)
#define motorPin7a 34 // broche 34 digital, moteur rotation bras droit marche AV (manip)
#define motorPin7b 35 // broche 35 digital, moteur rotation bras droit marche AR (manip)
#define ledPin36 36 // broche 36 digital, LED capteur d'eau
#include <Servo.h>
Servo myservo1; // créer un objet servo 1 pour le contrôler; servo camera
Servo myservo2; // créer un objet servo 2 pour le contrôler; servo pince gauche
Servo myservo3; // créer un objet servo 3 pour le contrôler; servo pince droite
int sensorPin1 = A0; // borne analogique potentiomètre moteur 1 propulsion.......(digital 22/23)
int sensorPin2 = A1; // borne analogique potentiomètre moteur 2 propulsion.......(digital 24/25)
int sensorPin3 = A2; // borne analogique potentiomètre moteur plongée............(digital 26/27)
int sensorPin4 = A3; // borne analogique potentiomètre moteur allong bras gauche.(digital 28/29)
int sensorPin5 = A4; // borne analogique potentiomètre moteur rota bras gauche...(digital 30/31)
int sensorPin6 = A5; // borne analogique potentiomètre moteur allong bras droit..(digital 32/33)
int sensorPin7 = A6; // borne analogique potentiomètre moteur rota bras droit....(digital 33/34)
int potpin8 = A7; // borne analogique potentiomètre servo camera..............(PWM 9)
int potpin9 = A8; // borne analogique potentiomètre servo pince gauhe.........(PWM 10)
int potpin10 = A9; // borne analogique potentiomètre servo pince droite........(PWM 11)
int pinPot1 = A10; // borne analogique potentiomètre LED 1.....................(PWM 12)
int pinPot2 = A11; // borne analogique potentiomètre LED 2 & 3.................(PWM 13&8)
int capteurEau = 37; // borne digitale capteur voie d'eau
int pinLed1 = 12; // borne PWM LED 1
int pinLed2 = 13; // borne PWM LED 2
int pinLed3 = 8; // borne PWM LED 3
int potValue1 = 0; // variable du potentiomètre LED 1
int potValue2 = 0; // variable du potentiomètre LED 2&3
int sensorValue = 0; // variable des potentiomètres moteurs
int val1; // variable du potentiomètre servo caméra
int val2; // variable du potentiomètre servo pince gauche
int val3; // variable du potentiomètre servo pince droite
void setup() {
// declare les broches en sorties:
pinMode(motorPin1a , OUTPUT);// digital 22
pinMode(motorPin1b , OUTPUT);// digital 23
pinMode(motorPin2a , OUTPUT);// digital 24
pinMode(motorPin2b , OUTPUT);// digital 25
pinMode(motorPin3a , OUTPUT);// digital 26
pinMode(motorPin3b , OUTPUT);// digital 27
pinMode(motorPin4a , OUTPUT);// digital 28
pinMode(motorPin4b , OUTPUT);// digital 29
pinMode(motorPin5a , OUTPUT);// digital 30
pinMode(motorPin5b , OUTPUT);// digital 31
pinMode(motorPin6a , OUTPUT);// digital 32
pinMode(motorPin6b , OUTPUT);// digital 33
pinMode(motorPin7a , OUTPUT);// digital 34
pinMode(motorPin7b , OUTPUT);// digital 35
pinMode( pinLed1, OUTPUT); // PWM 12
pinMode( pinLed2, OUTPUT); // PWM 13
pinMode( pinLed3, OUTPUT); // PWM 8
analogWrite( pinLed1, 0 ); // Eteint la LED 1 (PWM 0%)
analogWrite( pinLed2, 0 ); // Eteint les LED 2&3 (PWM 0%)
myservo1.attach(9); // borne 9 PWM servo caméra
myservo2.attach(10); // borne 10 PWM servo pince gauche
myservo3.attach(11); // borne 11 PWM servo pince droite
}
void loop () {
sensorValue = analogRead(sensorPin1); // moteur propulsion 1
if (sensorValue> 540){
//marhe avant
digitalWrite(motorPin1a , HIGH);
digitalWrite(motorPin1b , LOW);
digitalWrite(motorPin2a , LOW);
digitalWrite(motorPin2b , HIGH);
} else
if (sensorValue< 500) {
//marhe arriere
digitalWrite(motorPin1a , LOW);
digitalWrite(motorPin1b , HIGH);
digitalWrite(motorPin2a , HIGH);
digitalWrite(motorPin2b , LOW);
}
else {
//stop
digitalWrite(motorPin1a , LOW);
digitalWrite(motorPin1b , LOW);
digitalWrite(motorPin2a , LOW);
digitalWrite(motorPin2b , LOW);
}
sensorValue = analogRead(sensorPin2); //moteur propulsion 2
if (sensorValue> 520) {
//gauche
digitalWrite(motorPin1a ,LOW);
digitalWrite(motorPin1b , HIGH);
digitalWrite(motorPin2a , LOW);
digitalWrite(motorPin2b , HIGH);
} else
if (sensorValue< 500) {
//droite
digitalWrite(motorPin1a , HIGH);
digitalWrite(motorPin1b , LOW);
digitalWrite(motorPin2a , HIGH);
digitalWrite(motorPin2b , LOW);
}
sensorValue = analogRead (sensorPin3); // moteur vertical
if (sensorValue>535){
//marche AV
digitalWrite(motorPin3a , HIGH);
digitalWrite(motorPin3b , LOW);
} else
if (sensorValue<495) {
//marche AR
digitalWrite(motorPin3a , LOW);
digitalWrite(motorPin3b , HIGH);
}
else {
//stop
digitalWrite(motorPin3a , LOW);
digitalWrite(motorPin3b , LOW);
}
sensorValue = analogRead (sensorPin4); // moteur along bras gauche
if (sensorValue> 990) {
//marche AV
digitalWrite(motorPin4a , HIGH);
digitalWrite(motorPin4b , LOW);
} else
if (sensorValue< 977) {
//marhe AR
digitalWrite(motorPin4a , LOW);
digitalWrite(motorPin4b , HIGH);
}
else {
//stop
digitalWrite(motorPin4a , LOW);
digitalWrite(motorPin4b , LOW);
}
sensorValue = analogRead(sensorPin5); // moteur rota bras gauhe
if (sensorValue> 993) {
//marche AV
digitalWrite(motorPin5a , HIGH);
digitalWrite(motorPin5b , LOW);
} else
if (sensorValue< 980) {
//marche AR
digitalWrite(motorPin5a , LOW);
digitalWrite(motorPin5b , HIGH);
}
else {
//stop
digitalWrite(motorPin5a , LOW);
digitalWrite(motorPin5b , LOW);
}
sensorValue = analogRead(sensorPin6); // moteur allong bras droit
if (sensorValue> 996) {
//marhe AV
digitalWrite(motorPin6a , HIGH);
digitalWrite(motorPin6b , LOW);
} else
if (sensorValue<988) {
//marche AR
digitalWrite(motorPin6a , LOW);
digitalWrite(motorPin6b , HIGH);
}
else {
//stop
digitalWrite(motorPin6a , LOW);
digitalWrite(motorPin6b , LOW);
}
sensorValue = analogRead(sensorPin7); // moteur rota bras droit
if (sensorValue> 985) {
// marche AV
digitalWrite(motorPin7a , HIGH);
digitalWrite(motorPin7b , LOW);
}
else
if (sensorValue< 970) {
// marche AR
digitalWrite(motorPin7a , LOW);
digitalWrite(motorPin7b , HIGH);
}
else {
//stop
digitalWrite(motorPin7a , LOW);
digitalWrite(motorPin7b , LOW);
}
{ // 3 servos
// servo camera
val1 = analogRead(potpin8); // lire la valeur du potentiomètre 1
val1 = map(val1, 0, 1023, 0, 179); // la discrétiser pour l'utiliser avec un servomoteur
// servo pince gauche
val2 = analogRead(potpin9); // lire la valeur du potentiomètre 2
val2 = map(val2, 0, 1023, 0, 179); // la discrétiser pour l'utiliser avec un servomoteur
// servo pince droite
val3 = analogRead(potpin10); // 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
}
{ // LED 1
potValue1 = analogRead( pinPot1 );
// ramener la valeur de 0-1024 à 0-255 pour PWM
int ledPower = potValue1/4;
ledPower = constrain( ledPower, 0, 255 );
// Modifier la puissance de la LED 1
analogWrite( pinLed1, ledPower );
}
{ // LED 2&3
potValue2 = analogRead( pinPot2 );
// ramener la valeur de 0-1024 à 0-255 pour PWM
int ledPower = potValue2/4;
ledPower = constrain( ledPower, 0, 255 );
// Modifier la puissance de la LED 2&3
analogWrite( pinLed2, ledPower );
analogWrite( pinLed3, ledPower );
}
{
//capturer évenement (capteuru eau)
if (digitalRead(capteurEau) == LOW) {
//voie eau dedectée
digitalWrite(ledPin36 , HIGH);
}
else {
//voie eau non detectée
digitalWrite(ledPin36 , LOW);
}
}
}
Il y à plein de forums et de tutos permettant d'apprendre et comprendre les bases et de réaliser son propre code.
Je vous met une vidéo de l'aperçu du ROV, tout les éléments à contrôler n'y sont pas encore:
http://youtu.be/X9-E3vMM6jU