Tutorial Arduino : Mando Radiocontrol
En el siguiente tutorial de Arduino vamos a ver como usar un mando de radiocontrol con nuestro Arduino. Para llevar a cabo este tutorial vamos a usar la placa para servomotores que puedes adquirir en la Tienda. El uso de estos mandos es una muy buena manera para poder manejar robots, coches, UAV o lo que diseñemos. Normalmente tienen amplios rangos como 1km.
En mi caso voy a usar un mando y su receptor de hobbyking a 2.4Ghz con 6 canales, aunque la mayoría de mandos y receptores tienen el mismo funcionamiento.
El funcionamiento de estos mandos es relativamente simple. Nos envían la información de cada canal mediante un ancho de pulso, es lo mismo que los servomotores pero al revés.
En concreto los pulsos son cada 20 ms es decir con una frecuencia de 50Hz y el ancho depende del recorrido de la palanca y del limite que este configurado en el mando. Normalmente entre 500 us y 2 ms.
En mi caso voy a usar un mando y su receptor de hobbyking a 2.4Ghz con 6 canales, aunque la mayoría de mandos y receptores tienen el mismo funcionamiento.
El funcionamiento de estos mandos es relativamente simple. Nos envían la información de cada canal mediante un ancho de pulso, es lo mismo que los servomotores pero al revés.
En concreto los pulsos son cada 20 ms es decir con una frecuencia de 50Hz y el ancho depende del recorrido de la palanca y del limite que este configurado en el mando. Normalmente entre 500 us y 2 ms.
El receptor dispone de tres pines por canal.
Alimentamos la placa por el conector externo y encendemos el mando. Veremos como el receptor enciende el led rojo.
- GND (Marron)
- +5V (Rojo)
- Señal del canal (Naranja)
Alimentamos la placa por el conector externo y encendemos el mando. Veremos como el receptor enciende el led rojo.
Ahora vamos a empezar con nuestro código de Arduino. Para poder leer pulsos tenemos una funcion en Arduino que se llama
pulseIn(pin, tipo_pulso, timeout) donde le pasamos los siguientes parámetros.
pulseIn(pin, tipo_pulso, timeout) donde le pasamos los siguientes parámetros.
- pin: Es el pin donde leeremos el pulso en nuestro caso sera el 10 y 11.
- tipo_pulso: le indicamos si el pulso es alto o bajo, con HIGH o LOW, en nuestro caso HIGH.
- timeout: La función pulseIn se por defecto se queda esperando hasta que encuentre un pulso, esto obliga a detener el programa, con este parámetro indicamos el tiempo máximo (en us) de espera desde que se llama la función hasta que empieza a leer un pulso. En nuestro caso podemos poner 4000 que son 4 ms.

receptorrc_1ch.ino | |
File Size: | 0 kb |
File Type: | ino |
Dado que tenemos un delay de 15 ms todas las veces se produce una lectura buena. Recordad que como tenemos timeout si no estuviese ese delay, a veces la función pulseIn nos devolvería un 0 ya que habría expirado en timeout.
Ahora vamos a realizar un código que nos permita leer dos canales o mas. Dado que la lectura del pulso interrumpe el ciclo del programa, los que vamos a hacer es leer los canales por turnos. Con la función ReadRC leemos los pulsos por turnos, esos turnos son indicados por la variable CHRead. Ademas nos aseguramos que hemos leído el pulso ya que en caso de que la función devuelva 0 no lo tenemos en cuenta para actualizar el valor.
Ahora vamos a realizar un código que nos permita leer dos canales o mas. Dado que la lectura del pulso interrumpe el ciclo del programa, los que vamos a hacer es leer los canales por turnos. Con la función ReadRC leemos los pulsos por turnos, esos turnos son indicados por la variable CHRead. Ademas nos aseguramos que hemos leído el pulso ya que en caso de que la función devuelva 0 no lo tenemos en cuenta para actualizar el valor.

receptor_rc_2ch.ino | |
File Size: | 0 kb |
File Type: | ino |
Ahora simplemente podemos tratar esos datos como deseemos, ya que dependiendo de cada aplicación el ancho de pulso puede significar una cosa u otra.