Téléphone : 09 83 00 63 69
[Tuto] Commander un montage Arduino avec une radiocommande FS-i6
[Tuto] Commander un montage Arduino avec une radiocommande FS-i6
Nous utiliserons tout au long de ce tutoriel une radiocommande Flysky référence FS-i6 et son récepteur associé FS-IA6.
Cette radiocommande est une 6 canaux. Elle peut aussi être upgradé à 10 canaux. Du coté radio, elle fonctionne avec 16 channels autour d'une fréquence de 2,4GHz.
Fonctionnement de la Flysky FS-I6
Par défaut l'affectation des 6 canaux est le suivant:
- Channel 1 – Mannette droite, Gauche / droite
- Channel 2 – Mannette droite, Haut / Bas
- Channel 3 – Mannette gauche, Haut / Bas
- Channel 4 – Mannette gauche, Gauche / droite
- Channel 5 – VRA (Potentiomètre au centre à gauche)
- Channel 6 – VRB (Potentiomètre au centre à droite)
Raccordement avec l'Arduino UNO
Pour le raccordement à l'Arduino, les signaux issus du récepteur doivent être envoyé sur les broches PWM de l'Arduino.
Sur le récepteur le câblage se fait par ligne en respectant l'ordre - (GND) / + (5V) / S (Signal). Un seul 5V et GND suffisent.
Programmation de l'Arduino
Pour le premier logiciel, nous avons repris le code présent sur ce site.
// Entrèes utilisées
#define CH1 3
#define CH2 5
#define CH3 6
#define CH4 9
#define CH5 10
#define CH6 11
// Valeurs lues
int ch1Value;
int ch2Value;
int ch3Value;
int ch4Value;
int ch5Value;
int ch6Value;
bool ch6Bool;
// Cette fonction permet de lire la valeur des entrées analogiques (Les potentiomètres)
int readChannel(int channelInput, int minLimit, int maxLimit, int defaultValue){
int ch = pulseIn(channelInput, HIGH, 30000);
if (ch < 100) return defaultValue;
return map(ch, 1000, 2000, minLimit, maxLimit);
}
// Cette fonction permet de lire la valeur des entrées digitales(Les boutons)
bool readSwitch(byte channelInput, bool defaultValue){
int intDefaultValue = (defaultValue)? 100: 0;
int ch = readChannel(channelInput, 0, 100, intDefaultValue);
return (ch > 50);
}
void setup(){
// Initialisation de la communication Serial
Serial.begin(115200);
// Mettre les pins en input
pinMode(CH1, INPUT);
pinMode(CH2, INPUT);
pinMode(CH3, INPUT);
pinMode(CH4, INPUT);
pinMode(CH5, INPUT);
pinMode(CH6, INPUT);
// Régler la LED de la carte en sortie
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// Récupérer les valeurs de chaque entrée
ch1Value = readChannel(CH1, -100, 100, 0);
ch2Value = readChannel(CH2, -100, 100, 0);
ch3Value = readChannel(CH3, -100, 100, -100);
ch4Value = readChannel(CH4, -100, 100, 0);
ch5Value = readChannel(CH5, -100, 100, 0);
ch6Value = readChannel(CH6, -100, 100, 0);
ch6Bool = readSwitch(CH6, false);
// Afficher les résultats dans le moniteur série
Serial.print("Ch1: ");
Serial.print(ch1Value);
Serial.print("tCh2: ");
Serial.print(ch2Value);
Serial.print("tCh3: ");
Serial.print(ch3Value);
Serial.print("tCh4: ");
Serial.print(ch4Value);
Serial.print("tCh5: ");
Serial.print(ch5Value);
Serial.print("tCh6: ");
Serial.println(ch6Value);
// Mettre en place un seuil pour contrôler la LED
digitalWrite(LED_BUILTIN, ch6Bool);
delay(500);
}
Voici ce que vous devriez voir sur le moniteur série:
Et sur la LED:
Connectez-vous pour commenter
Se connecter