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

Leitura do sinal PPM do receptor RC usando Arduino

Componentes e suprimentos

Arduino UNO
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


O transmissor RC é muito adequado para projetos que requerem um link sem fio, pois ele tem links criptografados com um bom alcance.

Todo receptor RC é feito para acionar servo motores. portanto, há 3 pinos para cada canal:terra, Vcc e sinal. aqui, um tipo especial de sinal é usado. Ele envia pulsos em algum intervalo. Quando o servo recebe 1,5 ms de pulso, ele se ajusta a 90 graus e, variando esse valor de 1-2 ms, o servo vai para o valor mínimo e máximo. (Na foto acima, um receptor de 6 canais é mostrado com o pino PPM)

O método mais fácil é medir a largura de pulso em cada pino e mapear os dados de acordo com os requisitos. mas aqui o problema é que:
  • Para cada canal do receptor, precisamos conectar um fio ao pino do Arduino. Isso não só requer muitas conexões, mas também consome muitos pinos em um Arduino.
  • A maior parte do Arduino tem apenas 2 pinos de interrupção, portanto, se usarmos mais de 2 canais, leia-o para adicionar algum atraso ao nosso código, o que pode ser problemático para algumas aplicações.

Para resolver esse problema, muitos receptores vêm com um pino extra chamado PPM. este pino PPM transmite dados de todos os canais em um único sinal.






Como o sinal do pino PPM é composto?


Este sinal consiste em pacotes de dados separados por um espaço em branco. Aqui, o espaço entre os picos representa o valor do canal. neste caso, usei um receptor de 6 canais, portanto, há 7 pulsos.

Portanto, em nosso código primeiro, precisamos detectar o espaço de separação e, em seguida, começar a registrar os dados dos pulsos para cada canal.

Como pode ser visto na segunda imagem,

todos os dados são separados com aproximadamente 11500 microssegundos de tempo. do que 6 valores são para cada canal.





Usando o código:


Aqui read_me () especificada como função:
  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; }}  

esta parte é executada em um pino de interrupção e pega 15 valores de tempo e os armazena em um array.

outra função read_rc ()

esta parte procura por qualquer espaço que seja superior a 10000 microssegundos, em nosso caso ela detecta espaço de separação, e conforme detecta que o código de espaço se move para a próxima seção.

após este espaço, os próximos 6 valores são para cada posição de canal, ela é armazenada na matriz chamada ch [canal no], aqui ch [1], ch [2], ch [3], ch [4], ch [5 ], ch [6] representa o valor de cada canal.

Código

  • Código para leitura do canal receptor RC
Código para canal do receptor RC lido Arduino
 unsigned long int a, b, c; int x [15], ch1 [15], ch [7], i; // especificando matrizes e variáveis ​​para armazenar valores void setup () {Serial.begin (9600); pinMode (2, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), read_me, FALLING); // habilitando a interrupção no pino 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 () {// este código lê o valor do receptor RC do pino PPM (Pino 2 ou 3) // este código fornece valores de canal de 0-1000 valores // -:ABHILASH:- // a =micros (); // armazena o valor do tempo a quando o valor do pino fallingc =a-b; // calculando o tempo entre dois peaksb =a; // x [i] =c; // armazenando 15 valores em arrayi =i + 1; if (i ==15) {for (int j =0; j <15; j ++) {ch1 [j] =x [j];} i =0;}} // copiar armazenar todos os valores da matriz temporária de outra matriz após 15 leituras void read_rc () {int i, j, k =0; for (k =14; k> -1; k -) {if (ch1 [k]> 10000) {j =k;}} // detectando espaço de separação 10000us nessa outra matriz para (i =1; i <=6; i ++) {ch [i] =(ch1 [i + j] -1000);}} // atribuir 6 valores de canal após espaço de separação 

Processo de manufatura

  1. Monitore a temperatura de sua casa usando o Raspberry Pi
  2. Decodificador DTMF usando apenas Arduino
  3. Faça Monitor Ambilight usando Arduino
  4. Máquina de LEVITAÇÃO ULTRASÔNICA Usando ARDUINO
  5. Programação da série Atmel AT89 via Arduino
  6. Faça você mesmo voltímetro usando Arduino e Smartphone
  7. Monitor de freqüência cardíaca usando IoT
  8. WebServerBlink usando Arduino Uno WiFi
  9. Contador de carros usando Arduino + Processing + PHP
  10. Indicador de batimento cardíaco usando ECG