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


    我前段时间写了《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

  • 相关阅读:
    用GUI完成了斗地主发牌
    地主发牌
    用三种循环完成了累加
    DataSet、DataTable、DataRow的数据复制方法
    C# Merge into的使用详解
    grid+report 怎么在项目中使用
    SQL Server 2008 R2:error 26 开启远程连接详解
    EF框架的优点是什么?
    Oracle中的case when then else end 应用
    SQL中的case when then else end用法
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/1837927.html
Copyright © 2020-2023  润新知