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

本帖最后由 xiebb5688 于 2017-12-4 09:06 编辑

虽然学的是机械,可也接触过C语言,MATLAB等程序,每次编程的时候,能够把BUG一个个解决掉,会带来不小的成就感。于是感觉到自己骨子还是挺喜欢代码的。于是

也不知何时了解了Arduino,就迅速开始入坑了。买了初级套装,从DF论坛上的学习区域一步步学过来。然后又知道了ARDUINO中文论坛和极客工坊等,慢慢的接触了一个又一个好玩的项目。

看了那么创客的项目,学做了几个,真的是很感谢各位大师,不但提供源代码,也讲解步骤,列出元件清单。

今天,我也来贡献自己的一份子,分享一下自己的小创作-------超声波测距仪。

先来一个成品图片

thread-74282-1-1.html

使用方法:打开测距仪开关,显示屏亮,将超声波测距模块对准被测物体,按下测量按钮(按钮是复位开关,要一直按下,才会测量),屏幕显示测量数值。松开测量按钮,屏幕显示的是最后的测量值。

下图为充电口,使用的是android手机常用的micro usb2.0口。

thread-74282-1-1.html

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

thread-74282-1-1.html

电子水平有限,请原谅我的电路图画的实在是太难看了,大家能看懂就可以了。

thread-74282-1-1.html

元件清单:

US-015超声波测距模块一个

0.96寸OLED12864屏一个

充电升压保护板一个

Promini板一个

18650锂电池一个

拨码开关一个

按钮一个

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

thread-74282-1-1.html

过程中的一个问题:

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

thread-74282-1-1.html

下面是代码。

[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

{

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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑技巧:键盘上的这几个键,不常用,但有必要了解一下

目录 键盘上三个特殊的键 Print Screen&#xff08;或 Prt Scn&#xff09; Scroll Lock&#xff08;或 Scr Lk&#xff09; Pause/Break ​​​​​​​ 键盘上三个特殊的键 通过前几期的文章&#xff0c;我们已经讨论了几乎所有可能要用到的键。但为了真正彻底地了解键盘&…

ip访问php $_files空,PHP中表单没有问题但$_FILES为空怎么办?

PHP中表单没有问题&#xff0c;但“$_FILES”为空的解决方法&#xff1a;首先在form中加代码为“enctype"multipart/form-data”&#xff1b;然后开启“file_uploads”并设置“file_uploadson”即可。PHP中表单没有问题但是$_FILES为空的解决办法在文件上传中$_FILES接收不…

一张图看透微信公众号、企业号、小程序

对于微信小程序&#xff0c;推荐了解关键词&#xff1a;“progress web app” 我觉得微信小程序跟原生app之间也没有什么好争议的&#xff0c;就如微信和手机qq一样&#xff0c;有了微信&#xff0c;手机QQ也没有死掉&#xff0c;微信小程序适合小型应用&#xff0c;或者说能用…

电脑技巧:电脑识别不出字,一些汉字都变成框框了

目录 一、区域语言设定 二、系统内部编码 三、字体库被破坏 四、Office工具修复 五、美化主题的问题 六、中毒&#xff0c;杀毒。 电脑识别不出字&#xff0c;一些汉字都变成框框了&#xff0c;该怎么办&#xff1f; 一、区域语言设定 控制面板——区域和语言选项——选项和高级…

const没define好用 php,3分钟短文|PHP 定义常量,我该用define还是const?这下不迷茫了...

引言我们今天说一下 PHP 编程中&#xff0c;定义一个常量所使用的两种方法。有哪些区别&#xff0c;以及哪种是最佳实践&#xff1f;问题有开发者说&#xff0c;我在学习编写 PHP&#xff0c;可是定义常量的方法很是让人迷惑。比如有下面这样的写法&#xff1a;define(FOO, 1);…

springboot+mybatis集成自定义缓存ehcache用法笔记

今天小编给大家整理了springbootmybatis集成自定义缓存ehcache用法笔记&#xff0c;希望对大家能有所办帮助&#xff01;一、ehcache介绍EhCache 是一个纯Java的进程内缓存管理框架&#xff0c;属于开源的Java分布式缓存框架&#xff0c;主要用于通用缓存,Java EE和轻量级容器。…

Java取绝对值

在Java中可以使用Math.abs()方法来方便的进行绝对值计算&#xff0c;例如&#xff1a; 输入的是正数的时候直接返回即可&#xff0c;当是负数的时候返回它的相反数即可。 使用三目运算符可以使用一行代码就能做到 int value Math.abs(-90);System.out.println(value);System…

PHP怎么做一个加法口诀,神奇的手指速算口诀,100以内的加减法一分钟学会

手指速算是一套手、心、脑并用的科学计算方法&#xff0c;教孩子学会&#xff0c;既能开发大脑、增强动作协调能力和记忆力&#xff0c;还能增强学习兴趣哦~学起来并不难哦&#xff0c;爸爸妈妈可以和孩子一起算一算&#xff0c;比比看谁更快&#xff01;手指速算秘诀准备&…

Android_Layout (一)

layout &#xff08;布局&#xff09; --->Android 有五大布局&#xff0c;分别是&#xff1a; LinearLayout : 线性布局&#xff0c;子组件按照垂直或者水平方向来布局。RelativeLayout &#xff1a;相对布局&#xff0c;按照控件之间的相互位置进行参照物的概念排布&…

前端:uniapp封装网络请求笔记

uniapp作为开发移动端的前端框架&#xff0c;目前国内是非常流行的&#xff0c;使用HbuilderX开发工具基于uniapp框架开发的系统可以方便的转换为小程序、APP等移动端程序&#xff0c;大大降低了移动开发的成本。网络请求更是每个前端项目必备的技术&#xff0c;所以有必要进行…

java中instanceof使用详细介绍

instanceof是Java语言中的一个二元运算符&#xff0c;它的作用是&#xff1a;判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例&#xff0c;即它左边的对象是否是它右边的类的实例&#xff0c;该运算符返回boolean类型的数据。 boolean result obj…

javaWEB总结(9):自定义HttpServlet

前言:我们知道 MyHttpServlet是MyGenericServlet的子类&#xff0c;MyHttpServlet会继承父类的方法&#xff0c;可是却很少去追问MyHttpServlet中的doGet方法和doPost方法是如何进行判断的&#xff0c;本文主要做一个小例子&#xff0c;进一步理解HttpServlet。有些代码前文多次…

Java中局部变量必须初始化

Java中有两种变量&#xff0c;局部变量和成员变量。 成员变量可以不进行初始化&#xff0c;虚拟机也会确保它有一个默认的值。 局部变量不能这样做&#xff0c;我们必须对它进行赋值&#xff0c;才能使用它。

php 直播服务器搭建,基于Nginx搭建RTMP/HLS视频直播服务器

1、Nginx环境搭建(基于lnmp环境)//下载并安装lnmp环境wget -c http://soft.vpser.net/lnmp/lnmp1.3.tar.gz && tar zxf lnmp1.3.tar.gz && cd lnmp1.3 && ./install.sh lnmp安装完成安装完成后访问服务器地址会出现如下界面lnmpPS&#xff1a;安装时生…

办公:office办公软件Excel表格的打印技巧

很多新手使用办公软件过程中&#xff0c;对于Excel的打印出现了诸多问题&#xff0c;今天我们就一起来看看表格打印的几个技巧&#xff01; 打印预览时网格线怎么不见了&#xff1f; 如何调整打印区域的页边距&#xff1f; 如何设置单色打印&#xff1f; ...... 这些打印时遇到…

线程池和线程详细教程

1. 线程池的概念&#xff1a; 线程池就是首先创建一些线程&#xff0c;它们的集合称为线程池。使用线程池可以很好地提高性能&#xff0c;线程池在系统启动时即创建大量空闲的线程&#xff0c;程序将一个任务传给线程池&#xff0c;线程池就会启动一条线程来执行这个任务&#…

虚拟主机 php .htacess,LiteSpeed添加虚拟主机+支持htaccess图文教程

上次给大家简单介绍了Debian下手动安装LiteSpeedMySQLPHP的教程(点击查看)&#xff0c;但是这个教程还没完&#xff0c;想要使用litespeed还要进入后台进行设置&#xff0c;包括添加虚拟主机和.htaccess伪静态的支持&#xff0c;本文就继续这个话题给大家详细做个图文教程吧~为…

前端:uniapp封装组件用法笔记

大家在做前端项目开发的时候&#xff0c;经常会遇到公用的一些页面&#xff0c;比如搜索、列表、商品详情卡片、评论列表等。为了提高开发效率、使代码看起来更加简洁&#xff0c;这个时候封装相应的组件是最好的解决方案。今天小编给大家介绍一下如何在uniapp中封装组件&#…

Angular的工作原理

首先上一小段代码&#xff08;index.html&#xff09;&#xff0c;结合代码我们来看看&#xff0c;angular一步一步都做了些什么。 <!doctype html> <html ng-app><head><script src"angular.js"></script></head><body>&…

网络知识:四个网络命令ping、arp、tracert、route的用法介绍

网络相关的从业人员&#xff0c;都需要面对检测和解决网络故障的各种问题&#xff0c;实际案例中因为网络导致的故障也是最多的&#xff0c;今天我们和大家一起来学习一下解决网络故障时使用最多的四个网络命令。希望对大家以后的实际工作中的故障排除起到作用。 1、Ping命令的…