Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



ROV par Arduino


 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Projets -> Vos projets
Sujet précédent :: Sujet suivant  
Auteur Message
Meiko
Débutant

Hors ligne

Inscrit le: 21 Jan 2013
Messages: 7
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Lun 21 Jan - 23:33 (2013)    Sujet du message: ROV par Arduino Répondre en citant

PublicitéSupprimer les publicités ?
Bonsoir à tous,

J'espère que vous puissiez m'aider.

Comme je l'expliquait brièvement sur ma présentation, je suis en train de réalisé un robot sous marin appelé ROV (remotely operated vehicle)

En partie technique celui-ci est plutôt bien avancé, je ne sais pas si je peux me permettre mais voici le lien d'un forum dédier au sous marin ou l’appareil est présenter: http://www.forumsousmarin.fr/forum/viewtopic.php?f=47&t=1188
Je suis sous le psedo "Oniff".

Le forum en question est super pour les technique et astuces dans le domaine, mais l'arduino n'est quasiment pas exploitée car la plupart des modèles réduit sont pilotés via émetteur/ récepteur à plusieurs voies, donc l'utilisation d'une arduino n'est pas indispensable.

Pour mon appareil, voici grosso modo se qu'il en est:


 Sur le schéma, les branchements ne sont pas à prendre en compte, c'est juste pour le concept. j'y est aussi mi des cartes
tb6612fng pour gérer les moteurs en marche avant/ marche arrière peut être que je me trompe complètement.
Les moteurs utiliser sont des motoréducteurs 12V DC.

Ces moteurs réductés sont au nombre de 7.

L’appareil est munit de 2 bras manipulateur.
1 moteur pour la rotation, 1 pour l'allongement, un servo pour l'ouverture et fermeture d'une pince. X2 car il y a 2 bras Wink

Pour la propulsion, il y a 2 moteurs tournant en contra-rotation avec un pas d'hélice à gauche pour le propulseur gauche et un pas à droite pour l'autre, afin que l’appareil ne vire pas  dans un sens ou dans l'autre quand il est censé aller tout droit.
Ils devront être capable d'aller en marche AV/ marche AR.
Et de tourner dans le même sens horaire/ anti horaire afin de pouvoir le diriger. Gauche/ droite.

Pour la plongée, un moteur suffira Marche AV/AR

Tous ces moteurs n'on pas besoin de variation de vitesse ON/OFF simplement.

Je devrais contrôler l’intensité de 3 Leds de 1W minimum.

Et un autre servo qui assurera la position de la caméra.

La caméra n'a pas besoin de passer par arduino car elle sera complètement indépendante. (composite vidéo)
Elle aura sa propre alimentation.  

Je souhaiterais contrôler le tout via un ordinateur, pas forcement avec un joystick, je sais pas si c'est faisable avec les touches clavier comme un jeux vidéo, ça ne serait pas mal non plus.

L’appareil sera filoguidé.   

Étant novice, je me suis attaquer à quelque chose d’assez complexe du moins pour moi.
J'aimerais juste savoir si au moins c'est réalisable et si oui se que je peux exploiter comme extension Arduino afin de faire bouger tout ça.



Je viens de commander une arduino uno r3 que je devrais recevoir ces jours ci. (c'est un début)

Bien cordialement.
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mar 22 Jan - 16:14 (2013)    Sujet du message: ROV par Arduino Répondre en citant

Salut alors écoutes je vais sans doute t'apporter quelques bonnes nouvelles mais aussi te poser des questions:
- Moto réducteurs... Je vois vaguement ce que c'est laisse le temps de chercher (pourquoi pas mettre direct un moteur ?)
- tout les moteurs doivent pouvoir tourner dans 2 sens différent ?? (utilisation de pont en H ou de relais reviendrais sans doute moins cher qu'acheter une carte d'interface dédiée
- filoguidée... J'ai dejà l'assurance pour toi qu'avec (je pense) 2 arduinos UNO et 1 joystick tout marche bien (petit plus même tu peux piloter par bluetooth avec module Xbee
- pour revenir au controle joystick/ordinateur je pense que l'ordi est inutile pour controler ton robot s'il est filoguidé puisque (pour revenir sur l'idée précédente) 1 arduino et ton joystick en surface relié par des fils au entrés arduino te permettrais de contrôler le tout aisément.
- pourquoi des Moto réducteurs ????? Evil or Very Mad  (je sais plus trop ce que sais mais bon tu me rafraichira la mémoire :mrgreen: )

-Voilà je crois que, pour le moement c'est tout.

PS : Sans vouloir être méchant, ton projet est légèrement ambitieux pour quelqu'un qui n'a pas encore reçu/découvert/appris l'arduino et sa programmation
____________________________
http://simple-duino.com
Revenir en haut
Meiko
Débutant

Hors ligne

Inscrit le: 21 Jan 2013
Messages: 7
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Mar 22 Jan - 19:59 (2013)    Sujet du message: ROV par Arduino Répondre en citant

Bonjour,
Ambitieux oui, je n'imaginais pas sur le coup la complexité de la partie électronique.
Mais cela m’embêterait de ne pas arriver au but.

Le moto réducteur est un moteur qui dispose d' une boite à engrenages afin de faire réduire sa vitesse nominale tout en augmentant le couple.
Car si on immerge un moteur standard (non équipé de réduction) dans l'eau, celui-ci perd une grande partie de sa puissance et du coup consomme plus qui n'en faut. Par la forme de l'hélice et le débit d'eau déplacé les moteurs sont freinés.
 Avec un moto-réducteur, une fois la vitesse réduite par engrenage qui pour le coup est de 1200tr/min pour la propulsion, je dispose d'un couple élevé qui ne fait pas ou très peu varié la vitesse une fois immergé.

Les moteurs devrons effectivement tourner dans les deux sens.
J'ai pensé contrôler le tout via l'ordi car il y a du monde à faire bouger, mais je ne suis pas contre le joystick au contraire. Wink
Bluetooth, je ne suis pas fan. Je préfère filaire.

En gros les commandes seront:

                                                          DIRECTION:

                        (Les moteurs n'ont pas besoin de variateur/potentiomètre.)

              1) Commande marche AV / marche AR.......moto réducteur 1200tr/min............12V DC
                                        (les moteurs 1) et 2) tournent en contra-rotation)  l'inclinaison des hélices droite et gauche est inversée.

              2) Direction à gauche / direction à droite..........moto réducteur 1200tr/min.......12V DC
                                        (les moteurs 1) et 2) tournent dans le même sens) du coup.


              3) Descente / montée................................moto réducteur 1200tr/min............12V DC =marche Av/marche AR

Disposition des propulseurs:




                                                                          MANIPULATION:
                                                 
                      (pour les moteurs, des limiteurs de couple sécuriseront et assureront la fin de course)
                                                            (rotation dans les deux sens)

              4)  Rotation bras manipulateur n°1..............moto réducteur 8tr/min......... 12V DC
              5 ) Allongement bras manipulateur n°1........moto réducteur 500tr/min......   //
              6 ) Ouverture pince bras manipulateur n°1......servo 

              7)  Rotation bras manipulateur n°2..............moto réducteur 8tr/min......12V DC
              8 ) Allongement bras manipulateur n°2........moto réducteur 500tr/min....   //
              9 ) Ouverture pince bras manipulateur n°2......servo

                                          Caractéristique servo pinces:

Moteur Coreless
Alimentation: 3-7,2V
Courant: 8mA (repos) - 350mA (à vide)
Amplitude: 190°
Couple a 4,8V: 11kg/cm
Couple a 6,0V: 13kg/cm
Vitesse a 4,8V: 0,16s/60°
Vitesse a 6,0V: 0,13s/60°
36,5*20*40mm
Poids: 56g

SHEMA BRAS MANIPULATEUR:




                                                          ÉCLAIRAGE:

             10) Réglage intentionnée lumineuse LED 1&2...................1W minimum
             11)Réglage intentionnée lumineuse LED  3*.........................  //

             12) Inclinaison caméra..................................servo standard, (LED 3* est disposée sur le même servo de position de caméra.)

Pour l'arduino, je mis met, je regarde et essais de comprendre les programme sur le net.

Merci beaucoup pour la réponse. Very Happy
      
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mer 23 Jan - 16:53 (2013)    Sujet du message: ROV par Arduino Répondre en citant

Ok donc pour le pont en H pour inverser le sens de rotation du moteurs c'est comme ça

____________________________
http://simple-duino.com
Revenir en haut
Meiko
Débutant

Hors ligne

Inscrit le: 21 Jan 2013
Messages: 7
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Mer 23 Jan - 18:52 (2013)    Sujet du message: ROV par Arduino Répondre en citant

Merci pour le pont en H, mais je n'arrive pas à voir l'image.
Sinon, je ne comprend pas l’utilité d'utiliser deux cartes arduino, une pour le joystick et l'autre pour le robot?
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Jeu 24 Jan - 12:54 (2013)    Sujet du message: ROV par Arduino Répondre en citant

oaui les deux cartes arduino sont une erreur de ma part c'était pour le bluetooth mais t'as juste besoin d'une en faite


L'image du pont en H je corrige ça ce soir
____________________________
http://simple-duino.com
Revenir en haut
Meiko
Débutant

Hors ligne

Inscrit le: 21 Jan 2013
Messages: 7
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Ven 1 Mar - 14:17 (2013)    Sujet du message: ROV par Arduino Répondre en citant

Yes, trouvé Wink
J'ai réussi à réaliser le programme. Et tout fonctionne correctement.
Les ponts H sont des L298.
Citation:

Citation:

//                     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);
    }
  }
}





Citation:






Dernière édition par Meiko le Mer 6 Mar - 17:54 (2013); édité 1 fois
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Ven 1 Mar - 19:42 (2013)    Sujet du message: ROV par Arduino Répondre en citant

et ça ,marche nan ?
____________________________
http://simple-duino.com
Revenir en haut
Meiko
Débutant

Hors ligne

Inscrit le: 21 Jan 2013
Messages: 7
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Sam 2 Mar - 09:01 (2013)    Sujet du message: ROV par Arduino Répondre en citant

Oui, ça fonctionne.
Le seul truc, est que j'ai un laps de temps assez dérangeant entre un ordre et une action.
Par exemple lorsque je bascule le manche d'un joystick à fond je vais avoir 1/2 seconde avant que le moteur ne se mette à tourner.
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Sam 9 Mar - 20:13 (2013)    Sujet du message: ROV par Arduino Répondre en citant

ouai mais c'est dut à la longueur du programme, hélas tu pourras pas faire mieux car l'horloge interne de l'arduino sera pas plus rapide


et puis... 1/2 seconde, c'est pas énorme nan ?
____________________________
http://simple-duino.com
Revenir en haut
Meiko
Débutant

Hors ligne

Inscrit le: 21 Jan 2013
Messages: 7
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Sam 9 Mar - 21:24 (2013)    Sujet du message: ROV par Arduino Répondre en citant

C'est bon, c'est ma faute, le problème est résolu, j'avais laisser un "delay 1000" au niveau de mon capteur d'eau qui me ralentissait tout le programme pour le coup.
La, ça fonctionne au quart de tour.
http://youtu.be/X9-E3vMM6jU
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mar 12 Mar - 10:15 (2013)    Sujet du message: ROV par Arduino Répondre en citant

ah ok mais sinon ça arrive avec un long programme que ça prenne du temps
____________________________
http://simple-duino.com
Revenir en haut
arnaud39
Débutant

Hors ligne

Inscrit le: 01 Avr 2013
Messages: 378
Masculin
Niveau d'éléctronique: Dieu vivant

MessagePosté le: Ven 5 Avr - 20:23 (2013)    Sujet du message: ROV par Arduino Répondre en citant

Bon projet :-)
____________________________
Ancien admin du forum, co-fondateur tutoarduino.com
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 04:15 (2017)    Sujet du message: ROV par Arduino

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Projets -> Vos projets Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino