Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Decodifique Sinais PPM de Receptor RC com Arduino: Guia Passo a Passo

Componentes e Materiais

Aplicativos e Serviços Online

Sobre o Projeto

Transmissores RC são muito adequados para projetos que requerem link sem fio, pois têm links criptografados com bom alcance.

Todos receptores RC são feitos para acionar servomotores. Portanto, há 3 pinos por canal: terra, Vcc e sinal. Um tipo especial de sinal é usado: envia pulsos em intervalos. Quando o servo recebe pulso de 1,5ms, posiciona a 90°; variando de 1-2ms, vai ao mínimo e máximo.

O Problema

A Solução: Pino PPM

Muitos receptores vêm com um pino extra chamado PPM. Este pino transmite dados de todos os canais em um único sinal.

Como o Sinal PPM é Composto

O sinal consiste em pacotes de dados separados por espaços em branco. O espaço entre picos representa o valor do canal. No caso, usei receptor de 6 canais, então há 7 pulsos.

No código, primeiro detectamos o espaço de separação e depois começamos a gravar dados dos pulsos para cada canal.

Como visto nas imagens, todos os dados são separados por aproximadamente 11500 microssegundos. Em seguida, 6 valores correspondem a cada canal.

Usando o Código

A função read_me() roda no pino de interrupção e captura 15 valores de tempo, armazenando em array.

A função read_rc() procura por qualquer espaço maior que 10000µs (espaço de separação). Ao detectar, move para a próxima seção. Após esse espaço, os 6 valores seguintes são as posições de cada canal, armazenados no array ch[1] a ch[6].

Código para Leitura de Canais RC

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);
}

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() {
  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;
  }
}

void read_rc() {
  int i, j, k = 0;
  for (k = 14; k > -1; k--) {
    if (ch1[k] > 10000) {
      j = k;
    }
  }
  for (i = 1; i <= 6; i++) {
    ch[i] = (ch1[i + j] - 1000);
  }
}

Processo de manufatura

  1. Monitore a Temperatura da Sua Casa com Dashboard no Raspberry Pi
  2. Construa um Decodificador DTMF Usando Apenas um Arduino – Sem CIs Externos
  3. Crie um Sistema Ambilight Impressionante para Monitor com Arduino
  4. Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
  5. Programe Facilmente a Série Atmel AT89 com Arduino Uno – Guia Passo a Passo
  6. Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
  7. Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
  8. Servidor Web Arduino Uno WiFi: Controle LED via Navegador
  9. Contador Inteligente de Vagas: Rastreamento de Veículos em Tempo Real com Arduino, Processing e PHP
  10. Visualizador de Batimentos Cardíacos em Tempo Real com LED Alimentado por ECG