999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

樹莓派繪制超聲波測(cè)距軌跡曲線

2021-12-13 12:49:54牟曉東
電腦報(bào) 2021年46期
關(guān)鍵詞:設(shè)置

牟曉東

在開源硬件編程中,我們都會(huì)實(shí)時(shí)獲取測(cè)量生成的實(shí)驗(yàn)數(shù)據(jù),比如溫濕度傳感器對(duì)環(huán)境溫度和濕度進(jìn)行監(jiān)測(cè)而產(chǎn)生的數(shù)據(jù)。通常情況下,我們會(huì)先將這些實(shí)驗(yàn)數(shù)據(jù)寫入文件(比如CSV格式文件),然后進(jìn)行數(shù)據(jù)整理,再繪制擬合圖像,最終總結(jié)得出實(shí)驗(yàn)結(jié)論。其實(shí),對(duì)于一些非常直觀的測(cè)量數(shù)據(jù),我們可以“跳”過數(shù)據(jù)整理,直接將它們“畫”出來,以動(dòng)態(tài)曲線的形式進(jìn)行展示。以超聲波傳感器的“測(cè)距值”為例,我們?cè)跇漭芍蟹謩e通過Python代碼編程和古德微“積木”圖形化編程兩種方法,來實(shí)現(xiàn)超聲波測(cè)距軌跡曲線的動(dòng)態(tài)繪制。

實(shí)驗(yàn)器材包括樹莓派3B+和古德微擴(kuò)展板各一塊,HC-SR04超聲波傳感器一個(gè),移動(dòng)電源一個(gè)。首先,將超聲波傳感器的四個(gè)引腳(VCC、Trig、Echo和GND)對(duì)應(yīng)插入擴(kuò)展板的20和21號(hào)引腳,方向朝外;然后,通過數(shù)據(jù)線將樹莓派與移動(dòng)電源連接,通電,啟動(dòng)操作系統(tǒng)(如圖1)。

一、Python代碼編程繪制超聲波測(cè)距軌跡曲線

1.遠(yuǎn)程登錄樹莓派,導(dǎo)入待用的庫模塊

運(yùn)行Windows的“遠(yuǎn)程桌面連接”,輸入樹莓派的IP地址(比如192.168.1.116),登錄成功后點(diǎn)擊“編程”-“Thonny Python IDE”菜單,啟動(dòng)Python編輯器,導(dǎo)入庫模塊:“import numpy as np”、“import matplotlib.pyplot as plt”、“from matplotlib import animation”、“from gpiozero import DistanceSensor”和“import time”(如圖2),其中的numpy、matplotlib.pyplot和animation是負(fù)責(zé)數(shù)據(jù)生成和繪制曲線圖像的,gpiozero庫中DistanceSensor類是用來控制超聲波傳感器的。

2.初始化及數(shù)據(jù)獲取

首先,建立變量sensor,對(duì)超聲波傳感器的類進(jìn)行實(shí)例化:“sensor = DistanceSensor(echo=21,trigger=20,max_distance=4)”,注意其中的“echo=21”和“trigger=20”分別對(duì)應(yīng)超聲波傳感器的信號(hào)回收與發(fā)射引腳號(hào)21和20,而“max_distance=4”的作用是設(shè)置超聲波傳感器的最大檢測(cè)距離為4(單位是“米”),如果不設(shè)置,則最大只能測(cè)量至1米的極限值(HC-SR04超聲波傳感器可提供2cm-400cm的非接觸式距離感測(cè)功能)。

接著,進(jìn)行圖像繪制前的數(shù)據(jù)準(zhǔn)備,橫坐標(biāo)x是通過numpy庫中的linspace()來生成,范圍為從0至100:“x = np.linspace(0,100,100)”;縱坐標(biāo)y先設(shè)置為一個(gè)“空列表”:“y = []”,建立變量dis,作用是保存超聲波傳感器的“測(cè)距”值,初值為0:“dis = 0”;然后建立一個(gè)for循環(huán)結(jié)構(gòu)(for i in range(100):),其中的第一行語句“dis = round(sensor.distance,2)”作用是為變量dis賦值,通過round()函數(shù)來保留兩位小數(shù);第二行語句“print(dis)”是將dis保存的測(cè)距值在屏幕上同步輸出顯示;第三行語句“y.append(dis)”作用是將測(cè)距值追加至列表y中;第四行語句“time.sleep(0.1)”是控制程序暫停0.1秒鐘,然后進(jìn)入下一次循環(huán),獲取下一個(gè)測(cè)距值(如圖3)。

3.繪制“測(cè)距值”軌跡動(dòng)態(tài)曲線圖

繪制動(dòng)態(tài)(包括靜態(tài))曲線圖需要?jiǎng)?chuàng)建畫布和子圖:“fig,ax = plt.subplots(dpi=200)”,其中的“dpi=200”是設(shè)置顯示分辨率的,可根據(jù)情況自行設(shè)置;接著,進(jìn)行曲線的繪制:“l(fā)ine, = ax.plot(x,y,ls='-',lw=1,color='cornflowerblue')”,其中的參數(shù)含義分別是橫坐標(biāo)值x、縱坐標(biāo)值y、繪制線的類型與寬度,以及線的顏色;然后,自定義建立一個(gè)幀畫布的更新函數(shù)update(),其中的第一個(gè)語句是“l(fā)ine.set_data(x[:i],y[:i])”,作用是將動(dòng)態(tài)檢測(cè)生成的每一組數(shù)據(jù)(橫坐標(biāo)x值和縱坐標(biāo)y值)進(jìn)行“切片”操作后,作為數(shù)據(jù)源提供給后面的animation.FuncAnimation進(jìn)行曲線繪制;第二個(gè)語句“return line,”是將line值返回。

接著,進(jìn)行曲線動(dòng)畫的生成,建立變量ani,調(diào)用animation.FuncAnimation()并進(jìn)行相關(guān)參數(shù)的設(shè)置,其中包括:語句“fig=fig”,作用是設(shè)置繪制動(dòng)態(tài)圖的畫布名稱;語句“func=update”,作用是調(diào)用自定義動(dòng)畫函數(shù)update(),注意不要帶括號(hào);語句“fargs=(line,)”,作用是除frames之外需要向func傳遞的參數(shù);語句“frames=len(x)”,作用是控制生成的動(dòng)畫長(zhǎng)度(一次循環(huán)所包含的幀數(shù)目);語句“interval=50”,作用是設(shè)置更新的頻率,單位是ms(毫秒);語句“blit=True”,作用是選擇更新所有點(diǎn)還是僅更新產(chǎn)生變化的點(diǎn);最后,通過語句“plt.show()”將圖像進(jìn)行顯示(如圖4)。

4.程序的運(yùn)行測(cè)試

將程序保存為“超聲波測(cè)距軌跡曲線”后點(diǎn)擊“運(yùn)行”按鈕,然后控制樹莓派帶動(dòng)超聲波傳感器轉(zhuǎn)動(dòng),或朝向墻面等障礙物靠近與遠(yuǎn)離,大約持續(xù)10秒鐘后(程序的循環(huán)結(jié)構(gòu):100×0.1=10),此時(shí),就會(huì)在屏幕上看到有超聲波傳感器“測(cè)距值”數(shù)據(jù)不斷出現(xiàn):0.46、0.49……接著,就會(huì)彈出一個(gè)名為“Figure 1”的圖片窗口,繪制的正是動(dòng)態(tài)的超聲波測(cè)距軌跡曲線,而且會(huì)不斷循環(huán)播放之前程序所監(jiān)測(cè)獲取的100個(gè)數(shù)據(jù)(如圖5)。

程序可以重復(fù)運(yùn)行,獲取到不同的超聲波測(cè)距值,對(duì)應(yīng)不同的動(dòng)態(tài)軌跡曲線。而且,我們還可以修改程序中的循環(huán)次數(shù)(比如300),或是修改曲線繪制的速度(在變量ani調(diào)用animation.FuncAnimation()中“interval=50”處設(shè)置),當(dāng)然也包括曲線的顏色、寬度等,都可以嘗試。

二、圖形化編程繪制超聲波測(cè)距軌跡曲線

1.登錄古德微機(jī)器人平臺(tái),完成“積木”圖形化編程

訪問古德微機(jī)器人網(wǎng)站(http://www.gdwrobot.cn),登錄進(jìn)入自己賬號(hào)后點(diǎn)擊“設(shè)備控制”進(jìn)入“積木”界面。

首先,進(jìn)行物聯(lián)網(wǎng)服務(wù)器的設(shè)置,從左側(cè)“物聯(lián)網(wǎng)”-“常用”中將“設(shè)置物聯(lián)網(wǎng)服務(wù)器”功能模塊拖動(dòng)至主界面,保持其默認(rèn)的服務(wù)器“www.gdwrobot.top”和端口“1883”不變,下方的用戶名和密碼均保持為空;接著,建立一個(gè)重復(fù)執(zhí)行100次的循環(huán)結(jié)構(gòu),建立名為“超聲波測(cè)距”的變量,為其賦值為“智能硬件”-“常用”中的“超聲波測(cè)距”項(xiàng),并進(jìn)行保留兩位小數(shù)的四舍五入處理;然后通過“輸出調(diào)試信息‘超聲波測(cè)距”,在LOG調(diào)試信息區(qū)將超聲波傳感器每次獲取的“測(cè)距”值進(jìn)行顯示輸出;接著,從“物聯(lián)網(wǎng)”-“常用”中拖動(dòng)出“發(fā)送主題”功能模塊,并且設(shè)置好對(duì)應(yīng)的信息:“向‘luke007發(fā)送主題‘distance的數(shù)據(jù)‘超聲波測(cè)距”,其中的“l(fā)uke007”對(duì)應(yīng)自己的登錄賬號(hào),主題名為“distance”;最后,添加一條“等待0.3秒”的循環(huán)間隔時(shí)間,點(diǎn)擊“保存”按鈕將程序保存為“繪制超聲波測(cè)距軌跡曲線”(如圖6)。

2.設(shè)置動(dòng)態(tài)曲線繪制參數(shù)

點(diǎn)擊“更多功能”按鈕后再點(diǎn)擊“采集數(shù)據(jù)”按鈕,進(jìn)行動(dòng)態(tài)曲線繪制的相關(guān)設(shè)置:將“采集標(biāo)題”設(shè)置為“繪制超聲波測(cè)距軌跡曲線”;第二行的服務(wù)器地址和端口號(hào)同樣均保持默認(rèn)不變(與“積木”圖形化編程一致),可嘗試點(diǎn)擊后面的“測(cè)試連接”按鈕進(jìn)行測(cè)試,正常的話會(huì)出現(xiàn)“連接成功”的提示;第三行的“功能描述”設(shè)置為“使用超聲波傳感器進(jìn)行繪圖”(可自定義),“樹莓派編號(hào)”處填寫為“l(fā)uke007”、“主題”填寫為“distance”,同樣是與圖形化編程一一對(duì)應(yīng),后面的數(shù)值單位設(shè)置為“厘米”;最后,點(diǎn)擊“保存”按鈕,將本次的數(shù)據(jù)采集參數(shù)設(shè)置項(xiàng)目保存(如圖7)。

3.程序的運(yùn)行測(cè)試

點(diǎn)擊“開始采集”按鈕后再次返回到“積木”區(qū),點(diǎn)擊“連接設(shè)備”按鈕再點(diǎn)擊“運(yùn)行”按鈕,同時(shí)再移動(dòng)樹莓派帶動(dòng)超聲波傳感器做各種轉(zhuǎn)向和移動(dòng)操作;LOG調(diào)試顯示區(qū)每隔0.3秒鐘就會(huì)出現(xiàn)一個(gè)“測(cè)距值”,同時(shí)在“圖表展示”窗口就會(huì)出現(xiàn)一個(gè)名為“繪制超聲波測(cè)距軌跡曲線”在動(dòng)態(tài)變化,描繪的正是超聲波傳感器所測(cè)量的與障礙物間的距離值(如圖8)。

程序的升級(jí)改進(jìn)建議:

如果將舵機(jī)連接至樹莓派,同時(shí)再借助于滑環(huán)將超聲波傳感器的連接線與擴(kuò)展板進(jìn)行“轉(zhuǎn)接”;然后在程序中加入控制舵機(jī)進(jìn)行360度旋轉(zhuǎn),或是循環(huán)“擺頭”式往返旋轉(zhuǎn),帶動(dòng)超聲波傳感器對(duì)周圍的障礙物進(jìn)行“半自動(dòng)”式掃描,就可以對(duì)應(yīng)生成更為有趣的超聲波測(cè)距軌跡曲線動(dòng)態(tài)圖。如果在Python代碼中使用matplotlib.pyplot不是進(jìn)行折線圖的繪制,而是極坐標(biāo)圖像,這樣就可以得到類似于影視劇中雷達(dá)掃描的實(shí)時(shí)監(jiān)控畫面了,大家不妨一試。

猜你喜歡
設(shè)置
中隊(duì)崗位該如何設(shè)置
船舶防火結(jié)構(gòu)及設(shè)置的缺陷與整改
水上消防(2020年5期)2020-12-14 07:16:18
中外醫(yī)學(xué)專業(yè)與專科設(shè)置對(duì)比分析及啟示
特殊場(chǎng)景下列控等級(jí)轉(zhuǎn)換的設(shè)置方案
7招教你手動(dòng)設(shè)置參數(shù)
動(dòng)車段(所)股道有效長(zhǎng)設(shè)置研究
我國(guó)中小學(xué)將設(shè)置人工智能相關(guān)課程
玩具世界(2017年9期)2017-11-24 05:17:29
吃紙的妖怪
本刊欄目設(shè)置說明
中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
主站蜘蛛池模板: 福利视频一区| 久久精品中文无码资源站| 国产精品粉嫩| 婷婷丁香在线观看| 国产综合在线观看视频| 欧美日韩动态图| 欧美色图第一页| 日韩精品一区二区三区视频免费看| 麻豆精品在线| 免费一级大毛片a一观看不卡| 依依成人精品无v国产| 欧美国产日韩在线观看| 久精品色妇丰满人妻| 91福利在线看| 国产区在线观看视频| 日本一本在线视频| swag国产精品| 国产成人喷潮在线观看| 996免费视频国产在线播放| 91精品久久久无码中文字幕vr| 国产高清在线观看| 国产欧美高清| 亚洲国内精品自在自线官| 乱人伦中文视频在线观看免费| 欧美一级视频免费| 一级毛片免费高清视频| 天天综合网色| 亚洲综合18p| www.亚洲色图.com| 国产va欧美va在线观看| 国产综合另类小说色区色噜噜| 国产喷水视频| 在线播放真实国产乱子伦| 亚洲天堂.com| 99无码中文字幕视频| 四虎永久免费网站| 精品亚洲麻豆1区2区3区| 欧美中文字幕在线播放| 成年女人a毛片免费视频| 国产精品无码在线看| 国产青榴视频| 亚洲免费三区| 91在线国内在线播放老师| 亚洲视频一区| 亚洲码一区二区三区| 国产成人精品一区二区| 色久综合在线| 国产区精品高清在线观看| 欧美三级不卡在线观看视频| 久久久无码人妻精品无码| 国产电话自拍伊人| 91网址在线播放| 久久精品无码一区二区日韩免费| 亚洲成肉网| 92精品国产自产在线观看| 国产免费福利网站| 五月激激激综合网色播免费| 高清久久精品亚洲日韩Av| 久久人妻系列无码一区| 国产一级视频在线观看网站| 九九精品在线观看| 国产高清精品在线91| 国产丝袜无码一区二区视频| 久久美女精品国产精品亚洲| 欧美五月婷婷| 婷婷亚洲视频| 免费在线播放毛片| 免费高清a毛片| 成人在线不卡视频| 一级毛片在线免费视频| 亚洲AV无码久久精品色欲| 国产a v无码专区亚洲av| 在线无码九区| 91久久偷偷做嫩草影院电| 2020久久国产综合精品swag| 自拍中文字幕| 久久精品视频亚洲| 操美女免费网站| 免费一级大毛片a一观看不卡| 国产一级毛片网站| 天天躁夜夜躁狠狠躁图片| 欧美成人精品在线|