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.pswp.cn/news/270461.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270461.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270461.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac版本Navicat下載

提供navicat安裝包 鏈接&#xff1a;https://pan.baidu.com/s/1mQddUOuaxovVkhNOT9vUJw 密碼&#xff1a;tted

電腦技巧:鍵盤上的這幾個鍵,不常用,但有必要了解一下

目錄 鍵盤上三個特殊的鍵 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;或者說能用…

lamba List 轉 Map

Java 8 以前的寫法&#xff1a; Map<Long, User> userMap new HashMap<Long, User>(); for (User user : users) {userMap.put(user.getId(), user); } Java 8 寫法&#xff1a; Map<Long, User> userMap users.stream().collect(Collectors.toMap(User:…

電腦技巧:電腦識別不出字,一些漢字都變成框框了

目錄 一、區域語言設定 二、系統內部編碼 三、字體庫被破壞 四、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。有些代碼前文多次…

硬件知識:u-boot和bootloader的區別

目錄 1、Bootloader 2、uboot 2.1.硬件管理 2.2.能夠完成鏡像燒錄&#xff08;刷機&#xff09; 2.3.uboot的“生命周期” 2.4.uboot要提供命令式shell界面 3、bootloader 與 uboot的區別 嵌入式軟件工程師聽說過 u-boot 和 bootloader&#xff0c;但很多工程師依然不知道他們到…

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; ...... 這些打印時遇到…

vuejs 中如何優雅的獲取 Input 值

http://www.sunzhongwei.com/how-to-get-input-value-in-vuejs轉載于:https://www.cnblogs.com/benpaodexiaopangzi/p/6093275.html

線程池和線程詳細教程

1. 線程池的概念&#xff1a; 線程池就是首先創建一些線程&#xff0c;它們的集合稱為線程池。使用線程池可以很好地提高性能&#xff0c;線程池在系統啟動時即創建大量空閑的線程&#xff0c;程序將一個任務傳給線程池&#xff0c;線程池就會啟動一條線程來執行這個任務&#…