您现在所在的是:

微软嵌入式

回帖:0个,阅读:1135 [上一页] [1] [下一页]
884
yefanqiu
文章数:33
年度积分:50
历史总积分:884
注册时间:2004/8/19
发站内信
发表于:2010/9/28 23:05:02
#0楼
我前段时间写了《
用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 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  
      }
3、 左转代码
     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
      }
     左转代码有两种实现方法,一种是左轮静止,右轮正转,另一种是左轮倒转,右轮正传,这种转圈的速度更快,当然也可以让两轮都正传,左轮转的慢,右轮转的快,也可以进行左转弯。
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://blog.gkong.com/more.asp?id=125814&Name=yefanqiu

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003