亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 Arduino 读取 RC 接收器 PPM 信号

组件和用品

Arduino UNO
× 1

应用和在线服务

Arduino IDE

关于这个项目

RC发射器非常适合需要无线链路的项目,因为它具有良好的范围的加密链路。

所有 RC 接收器都是用来驱动伺服电机的。因此每个通道有 3 个引脚:接地、Vcc 和信号。这里使用了一种特殊的信号。它以某个时间间隔发送脉冲。当伺服接收 1.5ms 脉冲时,它设置为 90 度,通过改变这个值从 1-2ms 伺服进入最小值和最大值。 (上图中显示的是带有 PPM 引脚的 6 通道接收器)

如此简单的方法是测量每个引脚上的脉冲宽度并根据需要映射该数据。但这里的问题是:

  • 对于接收器的每个通道,我们需要将一根电线连接到 Arduino 引脚。这不仅需要大量连接,而且会消耗 Arduino 上的大量引脚。
  • 大多数 Arduino 只有 2 个中断引脚,因此如果我们使用 2 个以上的通道读取它以向我们的代码添加一些延迟,这可能对某些应用程序有问题。

为了解决这个问题,许多接收器带有一个称为 PPM 的额外引脚。该PPM引脚在一个信号中传输所有通道的数据。

PPM 引脚信号是如何组成的?

该信号由由空格分隔的数据包组成。这里峰值之间的空间代表通道的值。在这种情况下,我使用了 6 通道接收器,因此有 7 个脉冲。

所以在我们的代码中,首先需要检测分离空间,然后从每个通道的脉冲开始记录数据。

从第二张图可以看出,

所有数据都以大约 11500 微秒的时间分开。每个通道超过 6 个值。

使用代码:

这里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; } } 

这部分运行在中断引脚上,取15个时间值并存储在一个数组中。

另一个函数read_rc()

这部分查找任何大于 10000 微秒的空间,在我们的例子中它检测分离空间,并在检测到空间代码移动到下一部分时。

在这个空间之后接下来的 6 个值是每个通道位置的值,它存储在名为 ch[ 通道编号] 的数组中,这里 ch[1], ch[2], ch[3], ch[4], ch[5] ], ch[6] 代表每个渠道的价值。

代码

  • RC 接收器通道读取代码
RC 接收器通道读取代码Arduino
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); // 在引脚 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() { //此代码从 PPM 引脚(引脚 2 或 3)读取来自 RC 接收器的值 //此代码提供 0-1000 个值的通道值 // -:ABHILASH :- //a=micros(); //当引脚值下降c=a-b时存储时间值a; //计算两个峰之间的时间b=a; // x[i]=c; //在arrayi=i+1中存储15个值; if(i==15){for(int j=0;j<15;j++) {ch1[j]=x[j];} i=0;}}//将临时数组中的所有值复制到另一个数组中阅读 15 次后 void read_rc(){int i,j,k=0; for(k=14;k>-1;k--){if(ch1[k]>10000){j=k;}} //在另一个数组中检测间隔空间10000us for(i=1;i<=6;i++){ch[i]=(ch1[i+j]-1000);}} //分离空间后分配6个通道值

制造工艺

  1. 使用 Raspberry Pi 监控家中温度
  2. 仅使用 Arduino 的 DTMF 解码器
  3. 使用 Arduino 制作流光溢彩监视器
  4. 使用 ARDUINO 的超声波悬浮机器
  5. 通过 Arduino 对 Atmel AT89 系列进行编程
  6. 使用 Arduino 和智能手机的 DIY 电压表
  7. 使用物联网的心率监测器
  8. WebServerBlink 使用 Arduino Uno WiFi
  9. Car Counter using Arduino + Processing + PHP
  10. 使用心电图的心跳指示器
  11. 使用 arduino 的自动化恐龙游戏
  12. 使用 Arduino 和 RDA8057M 的 FM 收音机