Bonjour
Ce week-end j'ai récupérer un récepteur radio commander.
Est il possible de le raccorder sur Arduino ???
Si oui comment fait ton car il y a beaucoup de broches ????
merci d’avance de vos réponse
Salut,
Les prises servo sont normées, regarde sur google. Je ne connais pas l'ordre de mémoire, mais tu auras VCC, GND et signal. Le signal est lisible sur Arduino via fonction pulseIn(). Attention : ça ne sera surement pas du 5V mais plus haut : il faut adapter le signal sans quoi tu vas griller ta carte ...
The HK-TR6A-V2 receiver is designed to drive standard model radio control servos, which require 4.8~6V and a PWM signal that varies in width from 1~2ms at a frequency about 50Hz (20ms frame time). On this receiver the pin next to each channel label is signal, the center pin is Vcc, and the pin closest to the end of the case is Gnd. Power rails are common to all channels. A separate battery port is also provided to feed power into, in case all the channels have servos plugged into them.
là
merci de vos réponces
J'ai trouvé ce tuto qui marche très bien Tutoriels pour Arduino • Afficher le sujet - Récepteur de radiocommande de modélisme 2.4 Ghz avec Arduino
Existe t-il un moyen de stabiliser les données dans le moniteur série, elle varie plus ou moins de 10.
Voici mon code :
int ch4;
int ch1;
void setup() {
pinMode(6, INPUT);
pinMode(9, INPUT);
Serial.begin(9600);
}
void loop() {
ch4 = pulseIn(6, HIGH, 20000);
ch1 = pulseIn(9, HIGH, 20000);
Serial.print(" Ch4 = ");
Serial.println(ch4);
Serial.print(" Ch1 = ");
Serial.println(ch1);
delay(2000);
}
tu es bien conscient que la durée retournée est en microsecondes et que l'instruction pulseln est annoncée comme pouvant ne pas être parfaitement précise.
The timing of this function has been determined empirically and will probably show errors in longer pulses. Works on pulses from 10 microseconds to 3 minutes in length.
Existe t-il une autre fonction ou technique pour éviter ces erreur pour être plus précis ?
tout est dans ton lien
la fonction pulsin() permet de détecter le passage à l'état high ou low d'une broche et de chronométrer cette durée.
Toutefois cette méthode n'est pas optimale, avec 20ms de temps mort des milliers de cycles d'horloge du micro contrôleur sont perdus en temps d'attente.
et tu y trouves un autre lien:
Pour les projets complexes, utiliser la librairie #include <RCArduinoFastLib.h>
Le gestionnaire d'interruptions scrute les entrées.
Si une broche passe sur high, on stocke en mémoire l'instant actuel.
Quand elle repasse à low, on en déduit la largeur d'impulsion en soustrayant l'instant actuel à la valeur stockée lors du front montant précédent (résolution 4 micro secondes).
la librairie #include <RCArduinoFastLib.h> est pour l'instant trop compliquer pour mon niveau.
Imaginons que dans mon moniteur série je collecter ces données
1523
1530
1535
1522
existe t-il un moyen de faire une moyenne pour éviter ces variation ??
la seule façon, à mon avis est de faire une série de 10 acquisitions, virer la plus basse et virer la plus haute, puis de faire la moyenne des huit restantes
as tu une idée du code pour faire cela ?
je viens de te faire un code, il reprend tes labels
il fonctionne, et est commenté. mettre le moniteur en 57600
par contre il n'est pas fonctionnel directement pour ton application.
à toi de l'étudier et de l'adapter pour y inclure tes modifications ensuite.
le but du forum étant d'aider à apprendre de façon à rendre les utilisateurs à être autonomes.
int ch4;
int ch1;
int memo_ch4[15];//11
int memo_ch5[15];
float tampon_ch4;
float tampon_ch5;
void setup()
{
pinMode(6, INPUT);
pinMode(9, INPUT);
Serial.begin(57600);
}
void loop()
{ //init tableau memo_5 en dur et en désordre
memo_ch5[0] = 146;
memo_ch5[1] = 86;
memo_ch5[2] = 76;
memo_ch5[3] = 136;
memo_ch5[4] = 66;
memo_ch5[5] = 96;
memo_ch5[6] = 116;
memo_ch5[7] = 126;
memo_ch5[8] = 36;
memo_ch5[9] = 56;
memo_ch5[10] = 26;
for (int f = 0; f <= 10; f++)
{
Serial.print(memo_ch5[f]);
Serial.print(" ");
} Serial.println(" attendu 146, 86,...");// attendu 146, 86,...
for (int f = 0; f <= 10; f++)
{
memo_ch4[f] = (10 - f); //init et affiche tableau memo_4 en ordre décroissant
Serial.print(memo_ch4[f]);
Serial.print(" ");
} Serial.println(" attendu 10 9 8.. "); //attendu 10 9 8...
for (int gg = 1; gg <= 10; gg++)
{
for (int f = 0; f <= 10; f++) //classe en ordre croissant memo_4
{
if (memo_ch4[f] > memo_ch4[gg])
{
tampon_ch4 = memo_ch4[gg];
memo_ch4[gg] = memo_ch4[f];
memo_ch4[f] = tampon_ch4;
}
}
for (int f = 0; f <= 10; f++) //classe en ordre croissant memo_5
{
if (memo_ch5[f] > memo_ch5[gg])
{
tampon_ch5 = memo_ch5[gg];
memo_ch5[gg] = memo_ch5[f];
memo_ch5[f] = tampon_ch5;
}
}
}
Serial.println(" ");
for (int f = 0; f <= 10; f++) //affiche memo_4 en ordre croissant
{
Serial.print(memo_ch4[f]); Serial.print(" ");
} Serial.println(" attendu 0,1,2,3...."); //attendu 0,1,2,3...........
for (int f = 0; f <= 10; f++) //affiche memo_5 en ordre croissant
{
Serial.print(memo_ch5[f]); Serial.print(" ");
} Serial.println(" attendu 26,36,56,66,..."); //attendu 26,36,56,66,...
Serial.println(" ");
for (int f = 1; f <= 9; f++) //affiche memo_4 sans la 1ère et la dernière case
{
Serial.print(memo_ch4[f]); //attendu 1,2,3,4,5,6,7,8,9
Serial.print(" ");
} Serial.println(" attendu 1,2,3,4,5,6,7,8,9 ");
for (int f = 1; f <= 9; f++) //affiche memo_5 sans la 1ère et la dernière case
{
Serial.print(memo_ch5[f]); //attendu 36,56,66,76,86,96,116,126,136
Serial.print(" ");
} Serial.println(" attendu 36,56,66,76,86,96,116,126,136 ");
Serial.println(" ");
tampon_ch4 = 0; //raz du tampon de calcul memo_4
tampon_ch5 = 0; //raz du tampon de calcul memo_5
for (int f = 1; f <= 9; f++)
{
tampon_ch4 = (tampon_ch4 + memo_ch4[f]); //effectue la somme des cases memo_4
}//Serial.print(" => ");Serial.println(tampon_ch4);}
for (int f = 1; f <= 9; f++) { //effectue la somme des cases memo_5
tampon_ch5 = (tampon_ch5 + memo_ch5[f]);
}
//affiche les sommes des cases et la moyenne calculée pour memo_4 et memo_5
Serial.print(" => "); Serial.print(tampon_ch4); tampon_ch4 = (tampon_ch4 / 8); Serial.print(" / 8 = "); Serial.println(tampon_ch4);
Serial.print(" => "); Serial.print(tampon_ch5); tampon_ch5 = (tampon_ch5 / 8); Serial.print(" / 8 = "); Serial.println(tampon_ch5);
while (1) {};
}