【STM32 .Net MF开发板学习-15】红外遥控智能小车

【STM32 .Net MF开发板学习-15】红外遥控智能小车
2010-09-28 22:59:09
 标签: .NetMF    [ 推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://yfsoft.blog.51cto.com/1635641/398775
我前段时间写了《 PWM驱动智能小车 》和《 红外遥控器编码识别 》两篇博文,分别介绍了如何用PWM 驱动直流电机及红外遥控器编码识别,这一次我们把二者结合起来,用红外遥控器遥控智能小车。
在《 红外遥控器编码识别 》中,我们用面包板搭建简单的电路,来验证红外接收信号,但是放在小车上是不行的,相关器件我们需要进行焊接,最终完成图如下。
 
我们把智能小车和红外板拼装在一起,最终完成图如下:
 
需要注意的是,PWM 信号输出时,对红外接收信号有比较大的干扰,所以尽可能让两路信号离的远一些,杜邦线质量也要好一些。
我们把小车分5 种状态:前进、后退、左转、右转、停止
1、  前进代码
      static void MoveForward()
       {
            Lc.Write(true);
            pwm.Start(PWM.Channels.CH1, 1, PWM.Mode.PWM1); //PA6 
            Rc.Write(true);
            pwm.Start(PWM.Channels.CH2, 1, PWM.Mode.PWM1); //PA7      
       }
    2、  后退代码
static void MoveBack()
  {
            Lc.Write(false);
            pwm.Start(PWM.Channels.CH1, 99, PWM.Mode.PWM1); //PA6   
            Rc.Write(false);
            pwm.Start(PWM.Channels.CH2, 99, PWM.Mode.PWM1); //PA7    
}    
      3、  左转代码
      static void MoveLeft()       {
            Lc.Write(false);
            pwm.Start(PWM.Channels.CH1, 99, PWM.Mode.PWM1); //PA6 
            Rc.Write(true);
            pwm.Start(PWM.Channels.CH2, 1, PWM.Mode.PWM1); //PA7  
       }
         左转代码有两种实现方法,一种是左轮静止,右轮正转,另一种是左轮倒转,右轮正传,这种转圈的速度更快,当然也可以让两轮都正传,左轮转的慢,右轮转的快,也可以进行左转弯。
4、  右转代码
      static void MoveRight()
      {
            Lc.Write(true);
            pwm.Start(PWM.Channels.CH1, 1, PWM.Mode.PWM1); //PA6 
            Rc.Write(false);
            pwm.Start(PWM.Channels.CH2, 99, PWM.Mode.PWM1); //PA7 
     }
      右转处理代码和左转恰好相反。
5、  停止代码
       static void MoveStop()
        {
            Lc.Write(false);
            pwm.Start(PWM.Channels.CH1, 0, PWM.Mode.PWM1); //PA6 
            Rc.Write(false);
            pwm.Start(PWM.Channels.CH2, 0, PWM.Mode.PWM1); //PA7 
            pwm.Stop(PWM.Channels.CH1);
           pwm.Stop(PWM.Channels.CH2);
        } 
红外遥控器我们也没有必须识别全部的按钮编码,我们仅识别5 个按键即可,前后左右和确认键。
        1 、声明红外控制类,并绑定相关处理事件
IRController IR = new IRController(3, (int)GPIO_NAMES.PB12);
   IR.IREvent += new IRController.IREventHandler(IR_Click);
       2 、红外事件处理函数
       static void IR_Click(byte[] buff, DateTime time)
        {
            IRData.Key key = IRData.GetKey(buff);// 编码识别
            if (key != IRData.Key.None)
            {
                switch (key)
                {
                    case IRData.Key.Forward:
                        MoveForward();
                        break;
                    case IRData.Key.Left:
                        MoveLeft();
                        break;
                    case IRData.Key.Right:
                        MoveRight();
                        break;
                    case IRData.Key.Back:
                        MoveBack();
                        break;
                    case IRData.Key.Stop:
                        MoveStop();
                        break;
                }        
            }
      }
      程序编写完毕后,部署到开发板上,拿起遥控器我们就可以遥控小车运行了,相关控制视频如下:
     http://video.sina.com.cn/v/b/38689146-1804832611.html
 
【本文相关模块或组件】
1 )、小车底盘
  http://item.taobao.com/item.htm?id=7218838776
2 )、四路直流电机驱动器
http://item.taobao.com/item.htm?id=7218717808
3 )、.NET Micro Framework 开发板
  http://item.taobao.com/item.htm?id=7117999726
     注: 需要红牛开发板固件在 V1.0.0 以上
本文源码: http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/IRCarTest.rar
MF 快速参考: .NET Micro Framework 快速入门
MF 中文讨论组: http://space.cnblogs.com/group/MFSoft/
微软官方论坛: MSDN 微软中文技术论坛(.NET Micro Framework)
开发板简明手册: http://blog.sina.com.cn/s/blog_6b938f630100kh0k.html
【低价开发板】 http://item.taobao.com/item.htm?id=7117999726
本文出自 “ 叶帆工作室” 博客,请务必保留此出处 http://yfsoft.blog.51cto.com/1635641/398775

你可能感兴趣的:(net,智能,小车,遥控,红外)