Electroensaimada DIY, Raspberry Pi, Arduino ...
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje

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.
Imagen
Mando HobbyKing
Imagen
Receptor.
El receptor dispone de tres pines por canal.
  • GND (Marron)
  • +5V (Rojo)
  • Señal del canal (Naranja)
Vamos a usar el cable que viene con el receptor que tiene la misma nomenclatura de colores que los servos. Gracias a la placa para Arduino simplemente tenemos que conectar el cable a uno de los puertos, en nuestro caso en el 10 y 11 aunque cualquiera puede servir.
Alimentamos la placa por el conector externo y encendemos el mando. Veremos como el receptor enciende el led rojo.

Imagen
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.
  • 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.
Ahora haremos la primera prueba y leeremos solo un pulso y imprimiremos por el terminal Serial el valor medido. Dado que en la placa no están juntas las salidas de los reguladores de 5V y el pin +5V de Arduino,si queremos solo alimentar por el USB podemos juntarlos cogiendo un pin de 5v de uno de los puertos para Servos y el pin +5V de Arduino.

Imagen
Imagen
receptorrc_1ch.ino
File Size: 0 kb
File Type: ino
Descargar archivo

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.
Imagen
Imagen
Imagen
receptor_rc_2ch.ino
File Size: 0 kb
File Type: ino
Descargar archivo

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.
Con tecnologĂ­a de Crea tu propio sitio web Ășnico con plantillas personalizables.
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje