arduino/PPM
-
- Caporal
- Messages : 48
- Enregistré le : 29 mai 2011, 21:57
arduino/PPM
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)
http://youtu.be/gk8Vh8jsnOE
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)
http://youtu.be/gk8Vh8jsnOE
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;
}
-
- Maître Jedi
- Messages : 4646
- Enregistré le : 02 juil. 2007, 09:49
- Localisation : France : Massy ( 91 ) / Châlette sur Loing ( 45 )
- Contact :
Re: arduino/PPM
Salut, essayes de t'inspirer de ça par exemple :
https://code.google.com/p/generate-ppm- ... loads/list
( Télécharges le .ino c'est le code qui t'intéresse je pense )
Il doit y avoir un soucis de séquençage dans ton code et ça agit bizarrement.

https://code.google.com/p/generate-ppm- ... loads/list
( Télécharges le .ino c'est le code qui t'intéresse je pense )
Il doit y avoir un soucis de séquençage dans ton code et ça agit bizarrement.

-
- Caporal
- Messages : 48
- Enregistré le : 29 mai 2011, 21:57
Re: arduino/PPM
Merci beaucoup pour ta réponse 
j'ai vu ces codes, mais avoue être un peu largué ....
j'aime encore bien comprendre tous ce que j'envoie dans mon ptit drone
Dan,

j'ai vu ces codes, mais avoue être un peu largué ....
j'aime encore bien comprendre tous ce que j'envoie dans mon ptit drone
Dan,
-
- Maître Jedi
- Messages : 4646
- Enregistré le : 02 juil. 2007, 09:49
- Localisation : France : Massy ( 91 ) / Châlette sur Loing ( 45 )
- Contact :
Re: arduino/PPM
Salut, oué je comprends.
Je viens de regarder un peu plus loin et là où toi tu comptabilises tes temps de traitement avec tes delayMicroseconds
le code du lien calcule les vrais délais écoulés entre chaque action LOW/HIGH.
On le voit à la ligne 59 : "wait till servo signal time (values from the ppm array) has passed"
Quand tu attends un delayMicroseconds tu perds le temps passé par tes digitalWrite ...
Le code du lien calcule le temps effectivement écoulé avec des micros() qui doit retourner les microsecondes écoulées.
Si tu appelles micros() une fois, l'appel à micros() suivant te donnera le temps écoulé réellement.
Par différence, tu peux déduire si tu passes au signal suivant ou pas.
A mon avis, tu viens de mettre le doigt sur un problème de codage en "temps réel" ...
Je viens de regarder un peu plus loin et là où toi tu comptabilises tes temps de traitement avec tes delayMicroseconds
le code du lien calcule les vrais délais écoulés entre chaque action LOW/HIGH.
On le voit à la ligne 59 : "wait till servo signal time (values from the ppm array) has passed"
Quand tu attends un delayMicroseconds tu perds le temps passé par tes digitalWrite ...
Le code du lien calcule le temps effectivement écoulé avec des micros() qui doit retourner les microsecondes écoulées.
Si tu appelles micros() une fois, l'appel à micros() suivant te donnera le temps écoulé réellement.
Par différence, tu peux déduire si tu passes au signal suivant ou pas.
A mon avis, tu viens de mettre le doigt sur un problème de codage en "temps réel" ...
Modifié en dernier par DanRZ le 10 mai 2014, 22:05, modifié 2 fois.
-
- Caporal
- Messages : 48
- Enregistré le : 29 mai 2011, 21:57
Re: arduino/PPM
Un gros merci à toi !!!!!!!!!!
Je pense avoir sous-estimé le signal ppm de ma radio
je refouille et replonge dans le code !!!!!!!!!!!!!!!!!!
Dan,
Je pense avoir sous-estimé le signal ppm de ma radio

je refouille et replonge dans le code !!!!!!!!!!!!!!!!!!
Dan,
-
- Caporal
- Messages : 48
- Enregistré le : 29 mai 2011, 21:57
Re: arduino/PPM
Arg!DanRZ a écrit :Salut, essayes de t'inspirer de ça par exemple :
https://code.google.com/p/generate-ppm- ... loads/list
( Télécharges le .ino c'est le code qui t'intéresse je pense )
Il doit y avoir un soucis de séquençage dans ton code et ça agit bizarrement.
Je viens d'essayer ce code et les curseurs ont la bougeotte comme sur ma vidéo .
Je ne comprends plus ... J'ai tous remis à jour et même changé de carte arduino

Dan,
-
- Maître Jedi
- Messages : 4646
- Enregistré le : 02 juil. 2007, 09:49
- Localisation : France : Massy ( 91 ) / Châlette sur Loing ( 45 )
- Contact :
Re: arduino/PPM
Salut, contrôles bien la cohérence de tes masses, ça peut donner des comportements bizarres.
-
- Caporal
- Messages : 48
- Enregistré le : 29 mai 2011, 21:57
Re: arduino/PPM
Merci,
la masse de l'arduino est bien sur la masse de ma prise écolage qui est la même que l'alimentation de ma radio ....
j'ai aussi ça : http://www.linkedin.com/groups/Ive-made ... S.94690328
avec l'exemple ppmout, mais je ne comprend rien au code et n'arrive pas à mettre 8 voies en remplaçant les potentiomètre par des valeurs fixes .
Si quelqu'un pouvait m'aider à ajuster ce code pour le tester ...
Dan,
la masse de l'arduino est bien sur la masse de ma prise écolage qui est la même que l'alimentation de ma radio ....
j'ai aussi ça : http://www.linkedin.com/groups/Ive-made ... S.94690328
avec l'exemple ppmout, mais je ne comprend rien au code et n'arrive pas à mettre 8 voies en remplaçant les potentiomètre par des valeurs fixes .
Si quelqu'un pouvait m'aider à ajuster ce code pour le tester ...
Dan,
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité