Bonjour ,
Je m'appelle Olivier , c'est la première fois que je demande de l'aide sur un forum , je suis ici parce que je me suis mit dans la tête dès le début des vacances d'été de réaliser un drone avec une carte Arduino.
Cela fait déjà 1 mois que je travaille sur ce projet . Mon drone est composé d'une carte Arduino Mega 2560 , de 4 moteurs Brushless (4 hélices ...) et 4 esc et d'un module Mpu6050 (je n'utilise que l'accéléromètre ).
Je vous remets mon programme ci dessous :
#include <Servo.h>
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
Servo moteur1;
Servo moteur2;Servo moteur3;Servo moteur4;
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int vxp = 60;
int vxn=60;
int vpynx =60;
int vnypx =60;
int vpyx =60;
int vnyx =60;
int vyp =60;
int vyn =60;
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("Initialisation I2C ...");
accelgyro.initialize();
Serial.println(accelgyro.testConnection() ? "MPU6050 connection réussi" : "erreur de connection");
moteur1.attach(52);
moteur2.attach(50);moteur3.attach(48);moteur4.attach(46);
ini();
delay(5000);
int v;
for(v=10;v<=60;v +=5){
mot(v);
delay(1000);
}
Serial.println("Moteur ok");
}
void loop(){
vxp<=70;vxn<=70;vpynx <=70;vnypx <= 70;vpyx<=70;vnyx<=70;vyp<=70;vyn<=70;
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
int x = map(ax,-17000,17000,-90,90);
int y = map(ay,-17000,17000,-90,90);
Serial.print(x);
Serial.print(" ");
Serial.print(y);
Serial.println(" ");
if(x >0){
xp(vxp++);
delay(100);
if(y<0){
nypx(vnypx++);
delay(100);}
if(y>0){
pyx(vpyx++);
delay(100);}
}
if(x<0){
xn(vxn++);
delay(100);
if(y<0){
nyx(vnyx++);
delay(100);
}
if(y>0){
pynx(vpynx++);
delay(100);
}
}
if(y<0){yn(vyn++);
delay(100);
if(x<0){
nyx(vnyx++);
delay(100);}
if(x>0){nypx(vnypx++);
delay(100);}}
if(y>0){
yp(vyp++);
delay(100);
if(x>0){pyx(vpyx++);
delay(100);}
if(x<0){
pynx(vpynx++);
delay(100);
}
}
}
void ini(){
mot(0);
}
void mot(int v){
int angle3 = map(v, 0, 100, 0, 180);
moteur1.write(angle3);
moteur2.write(angle3);
moteur3.write(angle3);
moteur4.write(angle3);
}
void xp (int vxp){//x>0
int vx1 = map(vxp,0,100,0,180);
moteur3.write(vx1);
moteur4.write(vx1);
}
void xn(int vxn){//x<0
int vx2 = map(vxn,0,100,0,180);
moteur1.write(vx2);
moteur2.write(vx2);}
void pynx(int vpynx){//y>0, x<0
int vxy1 = map(vpynx,0,100,0,180);
moteur1.write(vxy1);
moteur2.write(vxy1);
moteur3.write(vxy1);}
void nypx (int vnypx){//y<0, x>0
int vxy2 = map(vnypx,0,100,0,180);
moteur1.write(vxy2);
moteur3.write(vxy2);
moteur4.write(vxy2);
}
void pyx (int vpyx){//y>0 x >0
int vyx3 = map(vpyx,0,100,0,180);
moteur3.write(vyx3);
moteur2.write(vyx3);
moteur4.write(vyx3);
}
void nyx(int vnyx){// y<0 x<0
int vyx4 = map(vnyx,0,100,0,180);
moteur4.write(vyx4);
moteur1.write(vyx4);
moteur2.write(vyx4);}
void yp(int vyp){// y>0
int vy1 = map(vyp,0,100,0,180);
moteur3.write(vy1);
moteur2.write(vy1);
}
void yn (int vyn){//y<0
int vy2 = map(vyn,0,100,0,180);
moteur4.write(vy2);
moteur1.write(vy2);}
Mon problème est celui-ci : Je ne sais pas si mon programme est adapté afin de stabiliser mon drone , malheureusement je ne peux pas le tester car j'ai cramé un esc le temps que le colis soit livré je voudrais optimiser mon programme c'est pourquoi je suis ici
.
(J'utilise l’accéléromètre pour calculer la rotation du drone sur l'axe x et y).
Le but de ce projet est de réaliser un drone qui communiquera directement avec mon smartphone Android via le bluetooth (programme terminé), ainsi je donnerai au drone la faculté de discuté avec son utilisateur grâce au "text to speech" mais aussi de recevoir une commande par l’intermédiaire de la commande vocale .
(Je ne sais pas si cela est utile de dire ça mais si l'un d'entre vous me demander pourquoi faire un drone .)
A+ et Help me! ![]()
Ps : Je vous envoie un croquis avec ses 2 axes x et y mais aussi le positionnement des moteurs par rapport aux axes pour mieux comprendre le code .
