超声波测距仪制作-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17004|回复: 14

超声波测距仪制作

[复制链接]
发表于 2017-12-3 17:25 | 显示全部楼层 |阅读模式
本帖最后由 xiebb5688 于 2017-12-4 09:06 编辑

虽然学的是机械,可也接触过C语言,MATLAB等程序,每次编程的时候,能够把BUG一个个解决掉,会带来不小的成就感。于是感觉到自己骨子还是挺喜欢代码的。于是
也不知何时了解了Arduino,就迅速开始入坑了。买了初级套装,从DF论坛上的学习区域一步步学过来。然后又知道了ARDUINO中文论坛和极客工坊等,慢慢的接触了一个又一个好玩的项目。
看了那么创客的项目,学做了几个,真的是很感谢各位大师,不但提供源代码,也讲解步骤,列出元件清单。
今天,我也来贡献自己的一份子,分享一下自己的小创作-------超声波测距仪。
先来一个成品图片

使用方法:打开测距仪开关,显示屏亮,将超声波测距模块对准被测物体,按下测量按钮(按钮是复位开关,要一直按下,才会测量),屏幕显示测量数值。松开测量按钮,屏幕显示的是最后的测量值。
下图为充电口,使用的是android手机常用的micro usb2.0口。

经过外部校准后,在外壳上标记原点位置。

电子水平有限,请原谅我的电路图画的实在是太难看了,大家能看懂就可以了。
元件清单:
US-015超声波测距模块一个
0.96寸OLED12864屏一个
充电升压保护板一个
Promini板一个
18650锂电池一个
拨码开关一个
按钮一个

板子空间位置布局如下图所示,本来想上实物给大家看的,怎奈我焊的实在太凌乱了。先摆好,再用洞洞板焊上,这一步挺简单的。

过程中的一个问题:

PROmini板上的RST如果直接和12864屏上的RES接,显示屏也是可以工作的,但是会经常出项乱码,如下图所示。只能按PRO mini上的重启按钮才能显示正常,试了很多代码也不知道如何解决。后来没办法,只能从PRO mini上的数字引脚2接到12864屏上的RES,然后再在程序里的SETUP里面复位一下,具体原理我也道不清楚,在此抛砖引玉了。希望有大神能来解释了.

下面是代码。
[mw_shl_code=c,true]
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
unsigned int TrigPin = 5, EchoPin = 4; //HC-SR04触发信号,回波检测,回波时间
unsigned int RST=2;//接12864屏RES管脚
unsigned int Len_Echo = 0;//超声波测量值
unsigned int value=0;//屏幕显示值
const char HZsize=16;//汉字分辨率,
static char tfont16[]=
{
0x02,0x01,0x12,0x06,0x12,0xF8,0x12,0x04,0xFF,0xFE,0x12,0x22,0x12,0x22,0x42,0x02,
0x45,0xF2,0x79,0x12,0x41,0x12,0x45,0x12,0x43,0x12,0x7D,0xF2,0x00,0x02,0x00,0x00,/*"超",0*/
0x20,0x01,0x28,0x06,0x2B,0xF8,0x2A,0x40,0x2A,0x40,0x2A,0x40,0x2A,0x40,0xFB,0xC0,
0x2A,0x40,0x2A,0x40,0x2A,0x40,0x2A,0x40,0x2B,0xC0,0x28,0x00,0x20,0x00,0x00,0x00,/*"声",1*/
0x08,0x20,0x06,0x20,0x40,0x3E,0x30,0xC0,0x03,0x01,0x00,0x06,0x1F,0xF8,0x11,0x01,
0x11,0xC2,0x11,0x34,0xFF,0x08,0x11,0x14,0x11,0x62,0x15,0x81,0x18,0x01,0x00,0x00,/*"波",2*/
0x08,0x20,0x06,0x20,0x40,0x7E,0x31,0x80,0x00,0x01,0x7F,0xE2,0x40,0x0C,0x4F,0xF0,
0x40,0x08,0x7F,0xE4,0x00,0x00,0x1F,0xE2,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,/*"测",3*/
0x00,0x04,0x7C,0xFC,0x44,0x04,0x47,0xF8,0x44,0x88,0x7C,0x88,0x00,0x00,0x7F,0xFE,
0x44,0x22,0x44,0x22,0x44,0x22,0x44,0x22,0x44,0x22,0x47,0xE2,0x40,0x02,0x00,0x00,/*"距",4*/
0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x00,0x01,0x38,0x02,0x07,0x04,
0x80,0xC8,0x60,0x30,0x00,0xC8,0x07,0x04,0x78,0x02,0x00,0x01,0x00,0x01,0x00,0x00,/*"仪",5*/
0x20,0x00,0x20,0x7F,0x20,0x40,0x2F,0x40,0x21,0x48,0x2B,0x5C,0xA5,0x68,0x65,0xC8,
0x25,0x48,0x2B,0x58,0x21,0x4C,0x2F,0x42,0x20,0x41,0x20,0x7E,0x20,0x00,0x00,0x00,/*"离",1*/

};
void Show_CH_Font16(int x,int y,int FontPos) //FontPos汉字顺序
{
  char temp,t1;
  byte t=0;
  byte y0=y;

// const int HZbye_num=HZsize*HZsize/8;//每个汉字包含的字节,例如每个16*16的汉字点阵 有32个字节
  for(t=0;t<HZsize*HZsize/8;t++)
  {   
    temp=tfont16[t+HZsize*HZsize/8*FontPos];                    
    for(t1=0;t1<8;t1++)
    {
        if(temp&0x80)
              {
             //  ucg.setColor(r, g, b);
                u8g.drawPixel(x,y);
              }
        temp<<=1;
        y++;
        if((y-y0)==HZsize)
        {
            y=y0;
            x++;
            break;
        }
      }   
  }   
}

void draw(void) {
   Show_CH_Font16(5,0,0);   //超
  Show_CH_Font16(25,0,1);   //声
Show_CH_Font16(45,0,2);   //波
  Show_CH_Font16(65,0,3);   //测
   Show_CH_Font16(85,0,4);   //距
  Show_CH_Font16(105,0,5);   //仪
  Show_CH_Font16(3,20,4);   //距
  Show_CH_Font16(20,20,6);   //离
  // graphic commands to redraw the complete screen should be placed here  
  u8g.setFont(u8g_font_fub30n);
  u8g.setFontPosTop();
   u8g.setPrintPos(35,25);
u8g.print(value);
  u8g.setFont(u8g_font_timR10);
    u8g.setPrintPos(0,50);
u8g.print("(mm)");
u8g.drawHLine(35, 25+33, 90);    // All other procedures are also affected
u8g.drawHLine(35, 25+34, 90);    // All other procedures are also affected
  u8g.drawHLine(35, 25+35, 90);    // All other procedures are also affected
  u8g.undoScale();          // IMPORTANT: Switch back to normal mode

}

void setup(void) {
  //  Serial.begin(9600);
  pinMode(EchoPin, INPUT); //超声波测距
  pinMode(TrigPin, OUTPUT);
  digitalWrite(TrigPin, LOW);
  //////////////////////////////////0.96寸OLED12864屏RES引脚复位
  pinMode(RST, OUTPUT);
  digitalWrite(RST, LOW);
  delay(50);
  digitalWrite(RST, HIGH);
////////////////////////////////////////

  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }

}

void loop(void)
{
        digitalWrite(TrigPin, HIGH); //发送超声波测量触发脉冲
        delayMicroseconds(10);
        digitalWrite(TrigPin, LOW);
        Len_Echo = pulseIn(EchoPin, HIGH)/5.8; //回波时间测量
        if (Len_Echo>0)
       {
         value=Len_Echo;
       }
        u8g.firstPage();  
       do {
        draw();
       } while( u8g.nextPage() );
      // rebuild the picture after some delay
       delay(500);
  }


[/mw_shl_code]
超声波测距.jpg
超声波测距2.jpg
as.png
线路图.jpg
组装示意图.jpg
乱码.jpg

超声波测距仪外壳模型.zip

123 KB, 下载次数: 59

文件大小限制了精度,需要更精细的文件发私信给我

 楼主| 发表于 2017-12-4 08:56 | 显示全部楼层
solarcn 发表于 2017-12-3 23:49
请问,你的这个外壳是怎么做的? 3D打印吗? 成本多少?

外壳是3D打印的,自己组装的打印机,没成本。
稍后我把模型上传
发表于 2017-12-3 23:49 | 显示全部楼层
请问,你的这个外壳是怎么做的? 3D打印吗? 成本多少?
发表于 2017-12-4 10:59 | 显示全部楼层
模型好像超人变身器
发表于 2017-12-4 13:55 | 显示全部楼层
xiebb5688 发表于 2017-12-4 08:56
外壳是3D打印的,自己组装的打印机,没成本。
稍后我把模型上传

diy套件么?还是纯自己拼的?
 楼主| 发表于 2017-12-4 15:00 | 显示全部楼层
胡小帅 发表于 2017-12-4 13:55
diy套件么?还是纯自己拼的?

不是套件,用几个模块自己组装起来的。
 楼主| 发表于 2017-12-4 15:01 | 显示全部楼层
胡小帅 发表于 2017-12-4 13:55
diy套件么?还是纯自己拼的?

其实还是很简单的。
发表于 2017-12-6 09:17 | 显示全部楼层
焊接水平确实该提升一下,这焊点没虚焊已经运气不错了
 楼主| 发表于 2017-12-7 10:29 | 显示全部楼层
上海老王 发表于 2017-12-6 09:17
焊接水平确实该提升一下,这焊点没虚焊已经运气不错了

呵呵,焊完我一般用力拉拉看。就是难看点。
还得练练。
发表于 2018-2-2 13:25 | 显示全部楼层
我也是学机械的,跟你差不多,c#编程和MATLAB,一直想搞点嵌入式的东西,苦于琐事太多没时间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:43 , Processed in 0.217922 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表