arduino/PPM

Futaba, JR, Spektrum, ... Tout sur les radios programmables est ici...
Répondre
tarrinos
Caporal
Messages : 48
Enregistré le : 29 mai 2011, 21:57

arduino/PPM

Message par tarrinos » 10 mai 2014, 14:26

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)

Image


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;

}

DanRZ
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

Message par DanRZ » 10 mai 2014, 19:19

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.

;)
Hélicos : T600N / Nex E6 550 / T150 - Quads : TinyWhoop / Armattan F1-6b - Avions : MXS / UMX Beast.
Le tout piloté par DX7, DSX11. Simu: PhoenixRC, neXt, Liftoff. Clubs : CAMGJM (Vimory), AGMR (Gien).
Localisation : France - 91 Massy (Semaine), 45 Montargis (weekend). Pilote depuis Juin 2007 ...

tarrinos
Caporal
Messages : 48
Enregistré le : 29 mai 2011, 21:57

Re: arduino/PPM

Message par tarrinos » 10 mai 2014, 21:36

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,

DanRZ
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

Message par DanRZ » 10 mai 2014, 21:48

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" ...
Modifié en dernier par DanRZ le 10 mai 2014, 22:05, modifié 2 fois.
Hélicos : T600N / Nex E6 550 / T150 - Quads : TinyWhoop / Armattan F1-6b - Avions : MXS / UMX Beast.
Le tout piloté par DX7, DSX11. Simu: PhoenixRC, neXt, Liftoff. Clubs : CAMGJM (Vimory), AGMR (Gien).
Localisation : France - 91 Massy (Semaine), 45 Montargis (weekend). Pilote depuis Juin 2007 ...

tarrinos
Caporal
Messages : 48
Enregistré le : 29 mai 2011, 21:57

Re: arduino/PPM

Message par tarrinos » 10 mai 2014, 22:03

Un gros merci à toi !!!!!!!!!!

Je pense avoir sous-estimé le signal ppm de ma radio :)

je refouille et replonge dans le code !!!!!!!!!!!!!!!!!!

Dan,

tarrinos
Caporal
Messages : 48
Enregistré le : 29 mai 2011, 21:57

Re: arduino/PPM

Message par tarrinos » 11 mai 2014, 13:02

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.

;)
Arg!

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 :wacko:

Dan,

DanRZ
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

Message par DanRZ » 11 mai 2014, 13:30

Salut, contrôles bien la cohérence de tes masses, ça peut donner des comportements bizarres.
Hélicos : T600N / Nex E6 550 / T150 - Quads : TinyWhoop / Armattan F1-6b - Avions : MXS / UMX Beast.
Le tout piloté par DX7, DSX11. Simu: PhoenixRC, neXt, Liftoff. Clubs : CAMGJM (Vimory), AGMR (Gien).
Localisation : France - 91 Massy (Semaine), 45 Montargis (weekend). Pilote depuis Juin 2007 ...

tarrinos
Caporal
Messages : 48
Enregistré le : 29 mai 2011, 21:57

Re: arduino/PPM

Message par tarrinos » 11 mai 2014, 14:01

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,

Répondre

Retourner vers « Radios/Récepteurs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité