Pages: [1] 2   Go Down
Author Topic: Probleme Arduino Drone !  (Read 2964 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour!
Je réalise avec mon IUT, un projet de drone birotor.
Le probleme, c'est que j'arrive à lire mon capteur 9dof IMU, mais faire fonctionner les servomoteurs en même temps pose probleme.
J'ai beau chercher, je trouve pas la solution.
Donc je vous met mon programme au cas ou vous trouverez la solution :

/////////////////////////////////////////////////////////////////////////////////

  #include <NewSoftSerial.h>
  #include <Servo.h>

  int RESET = 7;
  const int servo1 = 10;
  Servo mon_servo1;
  const int servo2 = 9;
  Servo mon_servo2;
  byte pinRx=6;
  byte pinTx=8;
  char TabX[10],TabY[10],TabZ[10];
  byte Resultat=0;
  int Calc=0,i=0,Res=0,Res2=0;


  NewSoftSerial IMU(pinRx,pinTx);

  void setup()
  {
    pinMode(RESET,OUTPUT);
    Serial.begin(115200);
    IMU.begin(9600);
    pinMode(pinRx, INPUT);
    pinMode(pinTx, OUTPUT);
    pinMode(servo1, OUTPUT);
    pinMode(servo2, OUTPUT);  
    mon_servo1.attach(servo1);
    mon_servo2.attach(servo2);
  }
  
  void loop()
  {
    int X1=0,Y1=0,Z1=0;
    int x=0,y=0,z=0;
    delay(1);
    if(IMU.available()>0)
      {
      Resultat=IMU.read();
      if(Resultat==':'){
      do{
      if(IMU.available()>0)
      {
      Resultat=IMU.read();
      if(Resultat!=','){
      TabX
  • =Resultat;
     x++;}
      }
      }while(Resultat!=',');
      TabX
  • ='\0';
     do{
      if(IMU.available()>0)
      {
      Resultat=IMU.read();
      if(Resultat!=','){
      TabY[y]=Resultat;
      y++;}
      }
      }while(Resultat!=',');
      TabY[y]='\0';  
      do{
      if(IMU.available()>0)
      {
      Resultat=IMU.read();
      if(Resultat!=0xD){
      TabZ[z]=Resultat;
      z++;}
      }
      }while(Resultat!=0xD);
      TabZ[z]='\0';
      X1=atoi(TabX);
      //Serial.print("X = ");
      //Serial.print(X1);
      //Serial.print("    ");
      Y1=atoi(TabY);
      Serial.print("Y = ");
      Serial.println(Y1);
     // Serial.print("    ");
      Z1=atoi(TabZ);
      //Serial.print("Z = ");
      //Serial.println(Z1);
      }
      }
      Res=90-(2*Y1);
      Res2=90+(2*Y1);
      if((Res2>=0)&&(Res2<=150)){
      mon_servo1.write(Res2);}
      if((Res>=30)&&(Res<=180)){
      mon_servo2.write(Res);}
      if(Res2<0){
      Res2=0;
      mon_servo1.write(Res2);  
      }
      if(Res>180){
      Res=180;
      mon_servo2.write(Res);  
      }
      delay(20);      
  }

//////////////////////////////////////////////////////////////////////////////

La vitesse que j'ai choisis pour mon IMU et de 9600.

Voilà, si vous avez sinon un programme simple, pour m'inspirer la solution, pour que je puisse lire les valeurs de l'IMU en même temps que de commander les servo.

Sinon, j'ai une intuition sur les temps de communication, car l'IMU est a 960Hz et les servo a 50Hz.

merci d'avance de votre aide.
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Surement que IMU et servo se bouffent le nez, tu as vérifié qu'ils n'utilisent pas le même timer.

L'ancienne version d'ArduImu utilisait un 328 tu peux regarder comment ils ont fait :
http://diydrones.com/

A+ Teiva

www.Zartronic.fr : Robots & Arduino
Logged


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour!

J'ai mon programme qui lit correctement mon IMU en dissociant L'axe X, Y et Z. Grace à la librairie <NewSoftSerial.h>, qui crée un RX et TX supplémentaire sur les broches digital. Car attention, mon IMU 9dof razor est tout nouveau, il fonctionne donc en série.
Donc là, pas de probleme, mais quand j'ajoute la librairie <servo.h>, même sans instruction, la lecture de l'IMU bug ainsi que les servos.

Enfin, j'ai cherché des solutions sur internet mais pas moyen de ressoudre mon probleme.

S'il vous plait, aidez-moi, je conçois en ce moment même, un drône différent de tous les autres, j'espere que vous pourrez m'aider à résoudre ce probleme.

J'attend vos réponses, merci.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour!
J'actualise mon sujet, car j'attend une réponse.
merci.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le probleme est exactement le meme que dans ce sujet :
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1262033431/all

Mais les conseils ne m'aide pas, si vous trouvez une solution.
merci de m'aider.
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Essaye en mettant la même valeur de Baudrate pour les deux:

Code:
Serial.begin(115200);
   IMU.begin(9600);
« Last Edit: December 29, 2010, 04:11:25 am by jfs » 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

Dans l'Espace
Offline Offline
Sr. Member
****
Karma: 1
Posts: 294
ArduinoBot builder \^^/
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut smiley

je vais peut être dire une connerie mais tu déclare :

 int RESET = 7;
 const int servo1 = 10;
 Servo mon_servo1;
 const int servo2 = 9;
 Servo mon_servo2;

tu devrais pas plus tôt déclarer :  :-?

 int RESET = 7;
 const int mon_servo1 = 10;
 Servo mon_servo1;
 const int mon_servo2 = 9;
 Servo mon_servo2;


car sinon t'es servo ne sont déclarés qu'à moitié, non ?
enfin je dis ça, je dis rien  smiley-razz

Voilà @plus et bon courage smiley-wink
Logged

Proverbe Tibétain : Un mensonge est un saut du haut du toit

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

En fait servo1 et servo2 sont utilisées comme paramètre de l'opération attach donc les servomoteurs sont bien déclarés, pas de souci de ce côté là.

Il faut utiliser une autre librairie pour les servos, à cause du problème d'interruptions désactivées dans NewSoftSerial.

++

« Last Edit: December 29, 2010, 10:19:41 am by julien@pobot.org » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour!
Je connais bien le club pobot de sophia-antipolis, j'habite pas très loin, un jour je viendrais apporter ma contribution à ce club, enfin quand j'arriverais a avoir mon permit. lol.
En tout cas, j'aime beaucoup ce que vous faites.

Sinon, pour revenir à mon sujet :
Il faut trouver une solution pour contourner le probleme des librairies, car il y a un conflit entre les deux.

Pour vous décrires le probleme:
l'IMU commence à envoyer les données à l'arduino, le servo réagit, puis plantage de l'IMU aucune donnée n'est envoyé, le servo ne réagit plus, et même le bluetooth semble se désactiver.

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour!!!
Et Biensûr, Bonne Annee 2011 à tous!!!!!

Voilà, lundi j'attaque une semaine de projet sur mon drone, et j'aimerais bien terminer mon cahier des charges, pour le voir enfin  décoler.
Mais bon, le probleme de conflit, me pose vraiment une colle.
Par contre, je ne sais pas si augmenter le baudrate, va changer quelquechose, car l'arduino va accumuler les informations en masse et j'ai peur qu'il ne suit plus.
Après, normalement, un seul microcontroleur devrait suffir, car j'ai déjà vu des drones pilotés par des mini arduino.

Enfin voilà, d'autres idée ?
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu devrais plutôt aller vers une valeur moyenne pour le Baudrate.
« Last Edit: January 01, 2011, 01:42:54 pm by jfs » 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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 16
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous!
Bon, je voulais garder l'exclusivité, ou la surprise, mais bon.
Je vous présentes mon drone birotor arduino de type V22 Osprey.





Bientôt, je ferait un site internet avec le projet open source.
J'espere que maintenant, cette initiative va permettre de motiver certain, pour m'aider, un peu plus.

Mon soucis premier est un conflit entre la bibliotheque servo et newsoftserial. Un probleme d'interruption perturbé.

Mon deuxieme soucis est du choix de lecture du capteur, ainsi que de son asservissement.

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir et bonne Année

je vais peut etre commencer l'année par une conner....e
mais
pourquoi utiliser NewSoftSerial avec une arduino méga
tu peut gérer plusiieurs séries

j'ai un projet en quadri mais pas assez de temps et je bloque
sur un 6DOF mon cerveau a du mal a comprendre la difference entre
gyroscope et accelerometre

A+
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 34
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour infos, sur internet tout est déjà dispo en tri, quadri, ...
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 34
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voilà le lien pour inspiration:

http://radio-commande.com/experimental_projects/triwiicopter/
Logged

Pages: [1] 2   Go Up
Jump to: