Bonjour à tous,
J’essaie de réaliser un montage avec une carte arduino afin de commander un quadricoptere dji phantom2.
Pour cela j’envoie un signal directement dans la prise écolage à l’arrière de ma radiocommande futaba f8fg pour simuler une autre radio (élevé/pilote)
Le programme est des plus simple, je reproduit simplement le signal PPM qui transite entre les deux radio et commence par mettre un peu de lacet afin de faire tourner mon petit drone sur lui-même.
Je test …
Cela fonctionne, l’engin tourne bien sur lui-même mais dérive pas mal …
Je revérifie avec mon oscilloscope le signal que je balance et ne vois rien d’anormal … (photo)
Je vais dans l’assistant dji pour regarder ce qui se passe sur les voies et la dès que j’enclenche le switch écolage (carte arduino) les curseurs se mettent à danser ? (video)
Je ne comprends vraiment pas.
J’ai tous vérifié et tous semble ok.
Avez-vous une idée du problème ?
Merci à vous
Dan,
Le prog :
J’essaie de réaliser un montage avec une carte arduino afin de commander un quadricoptere dji phantom2.
Pour cela j’envoie un signal directement dans la prise écolage à l’arrière de ma radiocommande futaba f8fg pour simuler une autre radio (élevé/pilote)
Le programme est des plus simple, je reproduit simplement le signal PPM qui transite entre les deux radio et commence par mettre un peu de lacet afin de faire tourner mon petit drone sur lui-même.
Je test …
Cela fonctionne, l’engin tourne bien sur lui-même mais dérive pas mal …
Je revérifie avec mon oscilloscope le signal que je balance et ne vois rien d’anormal … (photo)
Je vais dans l’assistant dji pour regarder ce qui se passe sur les voies et la dès que j’enclenche le switch écolage (carte arduino) les curseurs se mettent à danser ? (video)
Je ne comprends vraiment pas.
J’ai tous vérifié et tous semble ok.
Avez-vous une idée du problème ?
Merci à vous
Dan,
Le prog :
/* arduino_radio_ppm
Daniel Wambach 21 mars 2014
*/
// constantes
// choix des entrées/sorties
const int Sortie_ppm = 8;
// Variables:
int roulis_ppm = 1100;
int tangage_ppm = 1100;
int gaz_ppm = 1100;
int lacet_ppm = 1185; //15 sec
int rd_ppm = 500;
int sr_ppm = 1450;
int se_ppm = 1450;
int nc_ppm = 1100;
int t_entre_imp = 400;
int t_entre_sec = 22000;
int nombre_de_cycle = 0;
void setup() {
// entrée/sortie 8 (Sortie_ppm) est une sortie
pinMode(Sortie_ppm, OUTPUT);
}
void loop()
{
digitalWrite(Sortie_ppm, LOW); // met la broche à 1 (niveau HAUT)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###ROULIS###
delayMicroseconds(roulis_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###TANGAGE###
delayMicroseconds(tangage_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###GAZ###
delayMicroseconds(gaz_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###LACET###
delayMicroseconds(lacet_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###RD###
delayMicroseconds(rd_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###SR###
delayMicroseconds(sr_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###SE###
delayMicroseconds(se_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)###LIBRE###
delayMicroseconds(nc_ppm);
digitalWrite(Sortie_ppm, LOW); // met la broche à 0 (niveau BAS)
delayMicroseconds(t_entre_imp);
t_entre_sec = (22000 - (roulis_ppm + tangage_ppm + gaz_ppm + lacet_ppm + rd_ppm + sr_ppm + se_ppm + nc_ppm +3600));
digitalWrite(Sortie_ppm, HIGH); // met la broche à 1 (niveau HAUT)
delayMicroseconds(t_entre_sec);
nombre_de_cycle=nombre_de_cycle+1;
}