Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Decodifica señales PPM de receptor RC con Arduino: Guía paso a paso

Componentes y suministros

Aplicaciones y servicios en línea

Sobre el proyecto

Un transmisor RC es muy adecuado para proyectos que requieren un enlace inalámbrico, ya que tiene enlaces encriptados con buen alcance.

Todos los receptores RC están hechos para accionar servomotores. Por eso tienen 3 pines por canal: masa, Vcc y señal. Aquí se usa un tipo especial de señal: envía pulsos a intervalos regulares. Cuando el servo recibe un pulso de 1,5 ms se sitúa a 90°, y variando este valor entre 1‑2 ms el servo va a su mínimo y máximo. (En la foto superior se muestra un receptor de 6 canales con pin PPM).

El método fácil sería medir el ancho de pulso en cada pin y mapear esos datos según necesidad. Pero hay dos problemas:

Para resolver esto, muchos receptores traen un pin extra llamado PPM. Este pin PPM transmite los datos de todos los canales en una única señal.

Cómo se compone la señal del pin PPM

Decodifica señales PPM de receptor RC con Arduino: Guía paso a paso
Decodifica señales PPM de receptor RC con Arduino: Guía paso a paso

Esta señal consiste en paquetes de datos separados por espacios en blanco. El espacio entre picos representa el valor del canal. En este caso usé un receptor de 6 canales, así que hay 7 pulsos.

En nuestro código primero debemos detectar el espacio de separación y luego empezar a registrar datos de los pulsos para cada canal.

Como se ve en la segunda imagen, todos los datos están separados por aproximadamente 11500 microsegundos. Después vienen los 6 valores, uno por canal.

Uso del código

Decodifica señales PPM de receptor RC con Arduino: Guía paso a paso

La función read_me() se ejecuta en la interrupción (pin 2 o 3) y toma 15 valores de tiempo almacenándolos en un array.

a = micros();
c = a - b;
b = a;
x[i] = c;
i = i + 1;
if (i == 15) {
  for (int j = 0; j < 15; j++) { ch1[j] = x[j]; }
  i = 0;
}

La función read_rc() busca cualquier espacio superior a 10000 microsegundos (el espacio de separación), y al detectarlo pasa a la siguiente sección. Tras este espacio, los siguientes 6 valores corresponden a cada posición de canal, almacenados en el array ch[1] … ch[6].

Código

unsigned long int a, b, c;
int x[15], ch1[15], ch[7], i;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(2), read_me, FALLING); // interrupción en pin 2
}

void loop() {
  read_rc();
  Serial.print(ch[1]); Serial.print("\t");
  Serial.print(ch[2]); Serial.print("\t");
  Serial.print(ch[3]); Serial.print("\t");
  Serial.print(ch[4]); Serial.print("\t");
  Serial.print(ch[5]); Serial.print("\t");
  Serial.print(ch[6]); Serial.print("\n");
  delay(100);
}

void read_me() {
  // Lee valor del receptor RC desde pin PPM (pin 2 o 3)
  // Da valores de canal 0‑1000
  a = micros();           // almacena tiempo cuando pin cae
  c = a - b;              // calcula tiempo entre dos picos
  b = a;
  x[i] = c;               // almacena 15 valores en array
  i = i + 1;
  if (i == 15) {
    for (int j = 0; j < 15; j++) { ch1[j] = x[j]; }
    i = 0;
  }
  // copia todos los valores del array temporal a otro array tras 15 lecturas
}

void read_rc() {
  int i, j, k = 0;
  for (k = 14; k > -1; k--) {
    if (ch1[k] > 10000) { j = k; }
  } // detecta espacio de separación 10000 µs en el otro array
  for (i = 1; i <= 6; i++) {
    ch[i] = (ch1[i + j] - 1000);
  } // asigna 6 valores de canal tras el espacio de separación
}

Proceso de manufactura

  1. Monitoriza la temperatura de tu casa con un panel Raspberry Pi
  2. Construye un Decodificador DTMF Solo con Arduino – Sin CI Externos
  3. Crea un Impresionante Sistema Ambilight para Monitor con Arduino
  4. Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
  5. Programa fácilmente la serie Atmel AT89 con Arduino Uno – Guía paso a paso
  6. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  7. Monitor de Frecuencia Cardíaca IoT en Tiempo Real con Arduino y MAX30100
  8. Servidor Web Arduino Uno WiFi: Controla un LED desde el Navegador
  9. Contador Inteligente de Plazas de Aparcamiento: Seguimiento en Tiempo Real con Arduino, Processing y PHP
  10. Visualizador LED de Latidos en Tiempo Real con ECG
  11. Automatiza el Juego del Dinosaurio de Chrome con Arduino y Python