Análisis y comparativas
Eventos GuíasNo hay páginas en esta sección.
No hay páginas en esta sección.
Análisis y comparativas
Eventos GuíasNo hay páginas en esta sección.
No hay páginas en esta sección.
Radiocontrol (RC) es la técnica que permite el control de un objeto a distancia y de manera inalámbrica mediante una emisora de control remoto. Fuente: Wikipedia
Los sistemas de radiocontrol -RC- constan de una emisora (o transmisor, TX), un receptor (RX) y un protocolo de comunicaciones entre ambos. Por medio de ellos transmitimos varios datos en número igual al total de canales de la emisora. En mi caso, con la Turnigy FS-MT6, 8 canales.
En muchos casos el receptor tiene un grupo de salidas analógicas (o PWM) igual al número de canales. Y podemos conectar cada uno de ellos a un servo o el equipo que controlemos en cada caso. Pero los receptores también nos pueden dar toda la información en un único pin de varios modos. Uno de ellos, el que vamos a ver aquí, es el PPM.
Una señal PPM es un grupo de pulsos cuadrados en número igual al de canales más uno. La información viaja en forma de la separación entre los pulsos. El tiempo transcurrido entre el primer y el segundo pulso es el primer dato, y así sucesivamente.
Entre dos grupos de pulsos hay un tiempo de espera, más largo que los pulsos en si mismos, que sirve para detectar el comienzo de un nuevo paquete de datos. En otras palabras: para sincronizar la transmisión. Si tenemos dudas de el numero de pulsos y su duración podemos ver la señal con un osciloscopio.
La idea de esta entrada es leer esa información del receptor con un Arduino. De ese modo podremos integrar una emisora RC en cualquier proyecto. Existen varias formas de hacerlo, algunas de ellas utilizando las interrupciones, pero vamos a usar un modo más sencillo: con la función pulseIn de Arduino.
La función pulseIn está pensada para medir el tiempo que tarda en producirse un pulso de entrada en un pin. Debemos declarar el pin como entrada en el setup() y después ya podemos utilizar esa función. Sus argumentos de entrada son el pin de lectura, si debe leer cuando el valor sube o baja, y el límite de tiempo de espera. En mi caso tiene esta pinta
pulseIn(PPMpin, HIGH, 10000)
Ese método devuelve el tiempo que ha pasado -en microsegundos- entre la última bajada a 0v (LOW) y a siguiente subida a 5v (HIGH). Usándolo recursivamente leemos todos los canales consecutivos. Y detectando cuando su valor es muy grande, sincronizamos en inicio de un paquete de datos. En el caso de mi emisora los pulsos válidos tienen entre 500 y 1500 microsegundos, y el pulso de sincronización (que llamo canal cero) siempre es mayor de 3000 microsegundos.
El código de la función completa para leer la señal es.
int readppm() { while(pulseIn(PPMpin, HIGH, 10000)<2000){} //espera al canal 0 for(int i=0; i<chnum; i++) { chval[i]=pulseIn(PPMpin, HIGH, 10000); //lee los canales secuencialmente } return chval[chnum]; // devuelve el resultado }
El código completo para leer la señal ppm y mostrarla en el monitor serie de Arduino está en Github.