Come interfacciare un radiocomando ad Arduino

Ciao!

Questa è sia una recensione che un tutorial,
infatti vedremo come collegare e leggere i segnali di un radiocomando con Arduino.

Il radiocomando di cui vi parlerò è il Flysky FS-I6 che ho trovato su GearBest (a questo link) ad un prezzo di circa 40 dollari (!!!)



Il Radiocomando è un 6 canali molto semplice e compatto.
Considerando anche il costo di questo tipo di dispositivi, questo ha davvero un ottimo rapporto qualità prezzo.


Nella confezione troverete:

- Il radiocomando FS-i6
- Una ricevente FS-iA6
- Un cavetto per l'accoppiamento
- Un cd con il manuale


Il radiocomando arriva già accoppiato alla ricevente presente nella scatola, nella confezione è presente anche il cavetto per eventualmente accoppiare la ricevente ad un altro radiocomando.


Passiamo ora a vedere come interfacciare il tutto con il nostro Arduino, per prima cosa ho collegato un canale ad il mio utilissimo mini oscilloscopio (di cui vi avevo parlato qui). Grazie ad esso ho potuto capire il comportamento dell'uscita agendo su uno stick del radiocomando.



Come potete vedere, agendo sullo stick di sinistra varia la durata dell'impulso a livello alto del segnale in uscita sul canale 3 della ricevente.
In basso a destra, sul display dell'oscilloscopio, potete vedere che il duty cycle varia dal 5 al 10%.

Di default la frequenza del segnale è 50hz (modificabile dal menu del radiocomando), di conseguenza il periodo è di 0.02secondi (1/50hz).
Avendo il livello logico alto una durata compresa tra il 5% e il 10% dell'intero segnale, esso durerà tra i 1000 e i 2000 microsecondi (il 5% e il 10% del periodo).


Dopo aver osservato questo, il passo successivo sarà collegare i 6 canali della ricevente ad altrettanti ingressi del nostro Arduino e leggere la durata del segnale a livello logico alto per capire lo stato degli stick del radiocomando.

Colleghiamo la ricevente ad Arduino in questo modo:



Per leggere la durata degli impulsi della ricevenete utilizzeremo la funzione PulseIn, che restituisce la durata dell'impulso a livello logico alto (o basso) sul pin indicato.

ecco lo sketch, è molto semplice, il tutto è ripetuto per i 6 canali:


Adesso, aprendo il serial monitor, potrete vedere lo stato dei 6 canali.

Per default al canale 1 è associato il "pitch" (stick di destra a sinistra/destra), al canale 2 il "pitch" "roll" (stick di destra su/giù), al 3 il "throttle" (stick di sinistra su/giù) e al canale 4 il "yaw" (stick di sinistra a sinistra/destra).
La scelta dei canali 5 e 6 si configura dal menu Auxiliary channels io ad esempio ho deciso di associare al canale 5 il potenziometro "VRA" e al canale 6 lo switch "SWD"


Ora che abbiamo imparato a leggere con Arduino i segnali provenienti dalla ricevente possiamo utilizzarli per fare ciò che vogliamo, quindi non necessariamente mezzi radiocomandati ma qualunque cosa comandabile a distanza.
In questo semplicissimo esempio ho utilizzato il radiocomando per controllare una striscia di led.




Certo, a meno che non abbiate una striscia di led a 100 metri di distanza la cosa potrà sembrare poco utile, ma questo è solo una piccola dimostrazione di come è semplice controllare qualunque cosa a distanza con un radiocomando e Arduino.

Questo è lo sketch che ho usato per il video sopra:




Questo è tutto!
Non sono un esperto del mondo modellistico, ma avendo provato questo radiocomando posso dirvi che mi è piaciuto davvero molto.
Esteticamente può sembrare un po' "cheap", ma le informazioni sul display sono molto utili (livello batteria sia del trasmettitore che del ricevitore) e il menù è molto intuitivo e ben fatto.
In definitiva per un costo di circa 40 dollari vi potete far arrivare un radiocomando 6 canali molto utile per qualsiasi tipo di progetto. Ecco il link a cui potete trovarlo.

Per qualsiasi domanda lasciate un commento qui sotto, ciao!

Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

9 commenti:

  1. Ciao, complimenti
    se io volessi che arduino invii un impulso di durata fra 1000 e 1200 al canale due senza toccare il radioccomando, che istruzioni devo scrivere ?

    Fabio

    RispondiElimina
    Risposte
    1. Ciao Fabio,
      Non so se ho capito bene la domanda, vuoi che la comunicazione avvenga dalla ricevente al radiocomando?

      Elimina
  2. Ciao Daniele, ti giro questo semplicissimo sketch, ho avuto la necessità di crearlo perchè l'utente finale non è dotato di radiocomando evoluto con le funzioni di tuning
    Tengo a precisare che le info che regolarmente trovo da te sono sempre il mio punto d'inizio, Nick

    /* Questo sketch serve semplicemente a tradurre una condizione imposta da un deviatore su un radiocomando R/C
    per rendere un valore modificabile a piacimento e farlo combaciare alle funzioni imposte dal software della
    controller di volo, nello specifico serve a far combaciare le funzioni GSM-ATTITUDE-MANUAL nei campi necessari
    quando il radiocomando non è dotato di strumenti di tuning - Nick iz4yge */
    ///////////////////////////////////////////////////
    int deviatore; // variabile
    #define SENSOR 13 // pin al radiocomando
    #define MODE 9 // pin alla controller volo
    ///////////////////////////////////////////////////
    void setup() //
    { //
    pinMode(SENSOR, INPUT); // stato pin radiocomando
    pinMode(MODE, OUTPUT); // stato pin controller volo
    } //
    void loop() //
    { //
    deviatore = pulseIn(13, HIGH, 25000); // verifica del range degli impulsi del deviatore
    if(deviatore<=1000) // range da modificare posizione 1 deviatore dal radiocomando
    { //
    delay(10); //
    analogWrite(MODE, 255); // valore da modificare posizione 1 deviatore alla controller volo
    } //
    if(deviatore>=1400 && deviatore<=1500) // range da modificare posizione 2 deviatore dal radiocomando
    { //
    delay(10); //
    analogWrite(MODE, 128); // valore da modificare posizione 2 deviatore alla controller volo
    } //
    if (deviatore>=1800) // range da modificare posizione 3 deviatore dal radiocomando
    { //
    delay(10); //
    analogWrite(MODE, 0); // valore da modificare posizione 3 deviatore alla controller volo
    } //
    } // fine sketch
    ///////////////////////////////////////////////////

    RispondiElimina
    Risposte
    1. Ciao Nicola,
      Grazie mille per il tuo contributo, tornerà sicuramente utile!

      Daniele

      Elimina
  3. Grande Daniele, posso usare il telecomando per guidare un ROVER? Posso usare lo sketch da te FORNITO? grazie
    Salvatore

    RispondiElimina
  4. Bravo. Insegno Telecomunicazioni ad un ITI ed in questo periodo sto facendo Arduino....se mi autorizzi utilizzerò il tuo esperimento per un'esercitazione agli studenti (appena rientriamo a scuola). Grazie Eugenio

    RispondiElimina
  5. Ciao, bellissimo tutorial. Una domanda da inesperto che si sta approcciando ad arduino da qualche giorno, una volta interpretato il comando in uscita dalla ricevente, come potrei pilotare una elettrovalvola pwm? In pratica io vorrei comandare a distanza un distributore idraulico a due vie per far girare due motori idrostatici. Generalmente le bobine delle ev sono a 24vdc. Grazie!

    RispondiElimina
  6. Ciao Daniele complimenti per il tutorial utilissimo.
    Sono un appassionato di modellismo ,ma purtroppo non ho molta dimestichezza con la programmazione,ho realizzato un robot con lego technic e tramite un radiocoando e una ricevente 8 canali che uso per i droni vorrei renderlo pilotato a distanza in FPV,ho anche un L298n che mi trmetterebbe di far funzionare i motori. potresti aiutarmi a realizzarlo?

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post