zoukankan      html  css  js  c++  java
  • 【STM32 .Net MF开发板学习22】超声波测距模块研究

    智能小车目前已经可以通过各种方式进行遥控了,不过做到这一步还远远不够,我们需要智能小车有自己的“思维”,根据需要进行进退、转向或停止。要做到这一步,必须让智能小车有自己的感知“器官”,第一步我们先添加测距传感器,以后我们会陆续研究寻际、摄像头等传感器,让所谓的智能小车,更加“智能”。

    目前市面上的超声波模块有两种硬件接口,一种是触发和脉冲输出方式,一种是串口通信(RS232),后一种编写通信接口程序比较简单,就是简单的串口编程,不过售价比较高。前一种对实时性要求很高,其测量精度和你的程序实现相关。

    我们仅介绍前一种通信方式,模块的工作原理如下:

    (1)采用IO触发测距,给至少10us的高电平信号;

    (2)模块自动发送840khz的方波,自动检测是否有信号返回;

    (3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.

    测试距离=(高电平时间*声速(340M/S))/2;

    从超声波模块的工作原理我们就可以知道,测距和高电平持续的时间相关,我们只要能准确获取高电平的持续时间,就可以精确获得探测的距离。

    当然如此高精度,用C#托管代码是无法直接开发的,需要我们采用C/C++代码开发,并且必须用时钟进行信号采集,然后封装成一个接口供上层托管代码调用。

        (实际测试发现,该超声波的测量精度还是蛮高的,是3mm级别的)

    接线方式如下:

    序号

    超声波模块

    .NET MF开发板

    1

    Echo

    PA0

    2

    Trig

    PC4

    3

    GND

    GND

    4

    VCC

    3.3v

    封装后的托管库如下:

    using System;

    namespace YFSoft.Hardware

    {

            public sealed class Ultrasonic

            {

               public Ultrasonic(byte timer, int pin);

            public uint GetValue();

            }

    }

    相关的测试代码如下:

       public static void Main()

        { 

                //超声波探头

                //Timer2 - 1(必须是1) PA0(必须是PA0) - Echo PC4(可以任选一个空闲Pin脚) - Trig

                Ultrasonic ultrasonic = new Ultrasonic(1, (int)GPIO_NAMES.PC4);

                uint value = 0;

                Graphics.Clear(Color.Black);      

                while (true)

                {  

                    value = ultrasonic.GetValue();

                    Debug.Print(value.ToString());  

                   // Graphics.SuspendLayout();

                    Graphics.FillRectangle(100, 100, 50, 20, Color.Black);

                    Graphics.DrawString(100, 100, value.ToString(), Color.Yellow);

                   // Graphics.ResumeLayout();

                    Thread.Sleep(100);

                }                  

        }           

       使用非常简单,通过一个简单的GetValue函数就可以获取超声波模块的测距值了,所以这里就不过多介绍了,如果和智能小车配合使用,其安装后的效果图如下:

      

        和智能小车相配合,而表现出一定智能的代码,我们在后续的博文中再进行介绍,不过相关这部分的示例源码已经在本文的末尾列出,性急的网友可以先参考一下。

     

    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

    4)、超声波模块

     http://item.taobao.com/item.htm?id=8596342452

     

       注:需要红牛开发板固件在 V1.1.0以上

    本文源码:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/UltrasonicTest.rar

    本文源码:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/MF_Car_01.rar

    本文源码:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/ PC_Control_01.rar

    MF快速参考: .NET Micro Framework 快速入门

    MF中文讨论组:http://space.cnblogs.com/group/MFSoft/

     

    最近参加了2010中国十大杰出IT博客大赛,请大家投票支持一下,谢谢!

    http://2010blog.51cto.com/1635641

  • 相关阅读:
    如何将 DataTable 转成 IEnumerable<T> ?
    CodeMonkey少儿编程第7章 函数
    CodeMonkey少儿编程第6章 for循环
    CodeMonkey少儿编程第5章 数组与索引
    CoeMonkey少儿编程第4章 变量
    CodeMonkey少儿编程第3章 times循环
    CodeMonkey少儿编程第2章 turnTo对象
    CodeMonke少儿编程第1章 step与turn
    Web高级 Webpack编译提速思路
    RPC框架
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/1892553.html
Copyright © 2011-2022 走看看