[Tuto] Commander un montage Arduino avec une radiocommande FS-i6

Posté sur: mars 20, 2023

Catégories: Arduino

Auteur: Fabien

Tags: FS-i6 , Arduino , radiocommande , Flysky , FS-IA9 , récepteur

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

laissez un commentaire

Se connecter