[arduino]红外接收测试工装

来龙去脉

  • 因为项目需要使用红外传感器来辨别方向,而且还是用的非标红外通讯协议(协议主要是通过载波脉冲的间隔时间来区别);
  • 需要直观地显示/测试红外信号的信息/质量,了解红外信号的在空间上的分布情况。
    故做了一个小工装,能够显示接收标准代码数据和自定义的代码数据;

目标功能

  • 接收38KHz红外载波信号,通过led闪烁表示接收到红外信号;
  • 解码信息/调试信息能够显示在OLED屏幕上;
  • 实现自定义和标准(如NEC)数据的解码;
  • [TODO]增加旋转编码器
  • [TODO]增加led UI,优化UI

硬件组成

  • nano,(红外接收头的引脚只做输入电平的检测,故使用普通的引脚即可)
  • 1838B红外接收头,带屏蔽罩一体化(集成了信号处理);
  • oled 0.96寸 I2C通讯
  • 支持NEC码的遥控器,用于测试

软件设计

IRremote库-通过测试NEC码,了解其工作原理

  • IRremote的工作原理:在周期是50us的中断函数isr中有个红外接收装态机(https://mc.dfrobot.com.cn/thread-440-1-1.html)
  • 在该状态机中记录了脉冲边沿的间隔时间计数值tick,以及间隔的次数 results.rawlen,保存在results.rawbuf[i] ;实际时间 = 50us*tick;
  • 同时结果还包含了解码的类型 results.decode_type,定义在 decode_type_t中,如 NEC=8
  • 接收到间隔数据后,就根据定义的解码方式进行解码,通常第一个数据为两个帧之间的间隔时间,处理时先跳过;
  • NEC编码的特点是 起始位为固定560us,然后载波之后的空格space不一样来区别0/1
  • 通过打印NEC码原始时间间隔数据;匹配到了与协议相符的时间数据;验证NEC的编码的解码方式,
    在这里插入图片描述+ 接下来就是根据自定义的时间间隔去匹配逻辑0/1

显示库

Adafruit_SSD1306

其他问题

测试中发现红外的散射能力太强,如果要测试红外信号分布的话,需要设计好光路,否则无法判别方向;

参考资源

  • 红外编码原理(https://blog.csdn.net/wuhenyouyuyouyu/article/details/105900088)
  • 太极创客(http://www.taichi-maker.com/oled-weather-time-tv/)
  • 显示参考(https://www.jianshu.com/p/82ba466a5369)
  • 红外参考(http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/irremote-library/ir-send-example-1/)
  • Adafruit参考(https://blog.csdn.net/dpjcn1990/article/details/103376058)
又是填坑的一天
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值