【.NET MF 学习笔记系列(五)】MF红外遥控小车(PWM驱动直流电机)

      之前写的一篇【.NET MF 学习笔记系列(四)】MF控制小车(PWM驱动直流电机)的文章,目前已经能控制小车前进后退左转右转了,现在想要实现红外遥控控制,自行研究了下红外接收头,未果,最后还是采购了一些硬件根据老大的电路图自己焊接,红外接收模块电路如下

 

我所选取的具体器件型号如下:

 1100欧电阻

220K欧电阻 (两个10K电阻串联)

3、电解电容0.47uF

4红外接收头(型号未知)

       5、电压接入3.3v

 

最后的成果如下

 

 

接上开发板的样子如下

 

 

 

我所使用的遥控器

 

 

      焊接好了接上电之后用万用表测试GND和输出端,遥控器对着红外接收头按键,意外的发现万用表上数字变化了,从此确认硬件没有故障,接上红牛开发板,下载好组长的示例(http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/IRCarTest.rar),开始部署程序。

 

       因为这次没有针对某个红外遥控器进行编码解码,只是对红外信号的高低电平进行匹配,就是说提前采集好某个按钮的电平高低特征,程序中根据接收到的信号去匹配,然后得出是哪个按钮。

      比如前进按钮的特征数组如下,因为两次按下编码不同,所以这里有两个数组表示

 

       //按键数据
        static byte[] bytForward0 = new byte[] { 11, 34, 12, 11, 10, 34, 12, 11, 11, 11, 12, 10, 13, 10, 11, 12, 11, 11, 12, 33, 12, 10, 12, 33, 12, 33, 10, 34, 13, 32, 12, 33, 11, 12, 11, 33, 11, 12, 12, 33, 10, 12, 12, 10, 12, 11, 10, 12, 12, 33, 11, 12, 11, 33, 11, 12, 12, 32, 11, 34, 12, 33, 12, 33, 11 };

 

        static byte[] bytForward1 = new byte[] { 12, 33, 11, 12, 10, 34, 11, 12, 11, 11, 11, 12, 10, 12, 11, 12, 10, 12, 10, 35, 10, 12, 11, 34, 10, 35, 11, 33, 11, 34, 11, 34, 12, 33, 11, 34, 10, 34, 12, 11, 10, 35, 11, 11, 11, 11, 11, 12, 11, 12, 10, 12, 10, 12, 12, 33, 11, 11, 12, 33, 11, 34, 10, 35, 11 };

 

      现实总是比想象的要难,采集好前后左右暂停五个按键特征后开始正式遥控小车了,此时发现似乎遥控器不太灵光,一旦小车动起来后再按了就是没有反应,此时想到之前组长说的干扰问题,说PWM输出线跟红外信号线不能靠太近,稍微调整了之后的确好多了。但还是存在不灵光的现象,电脑接上开发板的串口查看输出信息发现老是有一些长度为1的信号,后来百度查找减少干扰的解决方案,无意中发现日光灯居然对红外信号也有很大影响,拿到黑暗的地方遥控就运作自如了。

 

      因为红外信号的特征是一个byte类型的数据,看到组长示例代码中匹配特征的方法并不是直接相等的,而且两个byte相差小于4即认为是相等的,估计就是考虑到干扰的问题

        //检测按键数据
        private static bool CheckData(byte[] data, byte[] flag, int count)
        {
            if (data.Length != flag.Length || data.Length != count) return false;

            for (int i = 0; i < count; i++)
            {
                if (System.Math.Abs(data[i] - flag[i]) > 3) return false;
            }
            return true;
        }

 

以下是检测哪个按键的方法

       //检测遥控器按键
        public static Key GetKey(byte[] buff)
        {
            if (CheckData(buff, bytForward0, bytForward0.Length)) return Key.Forward;
            if (CheckData(buff, bytForward1, bytForward1.Length)) return Key.Forward;

            if (CheckData(buff, bytLeft0, bytLeft0.Length)) return Key.Left;
            if (CheckData(buff, bytLeft1, bytLeft1.Length)) return Key.Left;

            if (CheckData(buff, bytRight0, bytRight0.Length)) return Key.Right;
            if (CheckData(buff, bytRight1, bytRight1.Length)) return Key.Right;

            if (CheckData(buff, bytBack0, bytBack0.Length)) return Key.Back;
            if (CheckData(buff, bytBack1, bytBack1.Length)) return Key.Back;

            if (CheckData(buff, bytStop0, bytStop0.Length)) return Key.Stop;
            if (CheckData(buff, bytStop1, bytStop1.Length)) return Key.Stop;

            return Key.None;
        }

 

更加专业的博客请参阅组长写的【STM32 .Net MF开发板学习-14】红外遥控器编码识别

 

未完待续。。。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值