該項(xiàng)目旨在介紹用Arduino讓傳感器工作的一個(gè)電子作品。此次的分享嘉賓是福田和宏先生!他過(guò)去曾在DevicePlus上連載過(guò)“Arduino基礎(chǔ)”等作品。
在第2篇中,我們了解了小雞賽車(chē)中使用的電子部件的工作情況以及整個(gè)電子電路的制作過(guò)程。本文是第3篇,也是本項(xiàng)目的最后一篇,在這里我們將制作殼體和程序,徹底完成小雞賽車(chē)。
制作殼體
我決定使用第1篇中提到的“圓形機(jī)器人底盤(pán)套件”來(lái)制作殼體。利用圓形機(jī)器人底盤(pán)套件中的兩枚金屬板做成兩層,再安裝上電機(jī)和車(chē)輪,即可輕松完成能行駛的車(chē)身了。
但是,對(duì)于這次需要安裝兩塊電路板、兩節(jié)電池、還有超聲波距離傳感器和微動(dòng)開(kāi)關(guān)的情況而言,實(shí)在是顯得太擁擠了。另外,僅憑圓形機(jī)器人底盤(pán)套件附帶的前輪用球頭難以直行,而且一旦有點(diǎn)臺(tái)階,行進(jìn)方向還可能會(huì)發(fā)生偏移。
因此,我決定使用3D打印機(jī)自己制作所需部件,以完成殼體制作。我使用的是3D打印機(jī),這種打印機(jī)也可以加工板子類(lèi)的部件,大家也可以試試。
安裝電機(jī)和車(chē)輪
在最底下的一層,除了左右兩個(gè)電機(jī)外,還需要安裝第2篇中制作的用來(lái)控制電機(jī)的電路板。另外,我在賽車(chē)的前部安裝了自己用3D打印機(jī)制作的支架,使之起到加長(zhǎng)的作用,以便安裝迷你四驅(qū)車(chē)輪作為前輪。此外,還在與前方墻壁碰撞的部分安裝了左右兩個(gè)微動(dòng)開(kāi)關(guān)。
安裝超聲波傳感器和電池
在電機(jī)上方一層安裝電池。這次,我分別準(zhǔn)備了Arduino和電機(jī)工作用的電池。兩者都是可提供9V電壓的006P電池。小雞賽車(chē)會(huì)受到諸如與墻壁碰撞等的沖擊。因此,如果不將電池安裝牢固,就可能會(huì)脫落。另外,由于電機(jī)的用電量較大,所以很容易耗盡電池電量。為了便于在沒(méi)電時(shí)更換電池,我用3D打印機(jī)做了一個(gè)電池盒,這樣就能從背面很方便地更換電池了。
除此之外,還在前方安裝了超聲波傳感器,以測(cè)量到墻壁之間的距離。這次使用的超聲波傳感器“HC-SR04”無(wú)法測(cè)量小于2cm的距離。出于這個(gè)原因,超聲波傳感器應(yīng)安裝在至少離小雞賽車(chē)頭部(微動(dòng)開(kāi)關(guān)被按下的位置)之后2cm的位置。
安裝主板
將主板安裝到賽車(chē)頂部。我用3D打印機(jī)制作了電池盒的頂蓋,這樣,就可以將主板安裝在它上面了。
組裝好車(chē)身后,安裝車(chē)輪,然后將每個(gè)電子部件的導(dǎo)線連接到主板上,就完成了。
另外,由于控制開(kāi)關(guān)是用導(dǎo)線連接的,因此需要準(zhǔn)備幾米左右的導(dǎo)線并將其接到開(kāi)關(guān)上。
用保險(xiǎn)杠吸收沖擊
如果玩家未能在最后一刻將賽車(chē)停下來(lái),那么小雞賽車(chē)就會(huì)撞到墻上。而撞到墻上后,車(chē)身就會(huì)受到?jīng)_擊。特別是如果有像這次這樣的由3D打印機(jī)打印的部件時(shí),它們可能會(huì)因撞擊而開(kāi)裂。而且,超聲波距離傳感器也可能會(huì)錯(cuò)位,從而無(wú)法準(zhǔn)確地測(cè)量距離。
基于這些可能出現(xiàn)的問(wèn)題,我給小雞賽車(chē)安裝了“保險(xiǎn)杠”,以緩沖賽車(chē)與墻壁碰撞時(shí)的沖擊力,防止車(chē)身斷裂。保險(xiǎn)杠上帶有彈簧,可以吸收撞擊墻壁時(shí)的沖擊力,從而避免其影響車(chē)身。
這次我使用了通過(guò)3D打印機(jī)制作的保險(xiǎn)杠。另外,在保險(xiǎn)杠上面還裝上了兩個(gè)微動(dòng)開(kāi)關(guān),用來(lái)檢測(cè)與墻壁的碰撞。安裝位置要確保墻壁碰到保險(xiǎn)杠時(shí)開(kāi)關(guān)被按下。
當(dāng)然,如果您打算以低速行駛賽車(chē),即使有碰撞也不會(huì)產(chǎn)生多大的沖擊力,那么就不需要安裝保險(xiǎn)杠。
創(chuàng)建程序
殼體做好后,我們還需要完成編程工作。程序的主要結(jié)構(gòu)如下:
要想實(shí)現(xiàn)各個(gè)功能,就需把第1篇和第2篇中介紹過(guò)的讓每個(gè)零部件工作的方法通過(guò)編程結(jié)合起來(lái)。例如,賽車(chē)行駛起來(lái)之后,判斷控制開(kāi)關(guān)被按下了還是保險(xiǎn)杠被撞了的程序如下:
lcddisp.clear(); lcddisp.move( 0x00, 0x00 ); lcddisp.charwrite( " G O ! " ); digitalWrite( MOTOR1_PIN, HIGH ); flag = 0; while( 1 ){ if( digitalRead( BUMPER_PIN ) == LOW ){ flag = 2; break; } if( digitalRead( SW_PIN ) == LOW ){ flag = 1; break; } } digitalWrite( MOTOR1_PIN, LOW );
第1行到第3行,是在液晶顯示器上顯示“GO!”,讓玩家知道即將開(kāi)始行駛。通過(guò)第5行的digitalWrite() 將連接到電機(jī)驅(qū)動(dòng)器的引腳設(shè)置為“HIGH”,電機(jī)旋轉(zhuǎn),賽車(chē)向前行駛。
通過(guò)第8行的while(),一直持續(xù)行駛,直到控制開(kāi)關(guān)被按下或保險(xiǎn)杠的微動(dòng)開(kāi)關(guān)被按下。在保持行進(jìn)過(guò)程中,會(huì)隨時(shí)確認(rèn)控制開(kāi)關(guān)和微動(dòng)開(kāi)關(guān)的狀態(tài)。
第9行用來(lái)判斷保險(xiǎn)杠的開(kāi)關(guān)是否被按下,即是否撞到了墻壁。通過(guò)digitalRead來(lái)確認(rèn)微動(dòng)開(kāi)關(guān)所連接的引腳的狀態(tài),若為L(zhǎng)ow,則判斷微動(dòng)開(kāi)關(guān)已被按下。通過(guò)將flag變量置“2”來(lái)記錄撞到了墻壁。通過(guò)第11行的“break”退出while循環(huán)。
第13行用來(lái)判斷控制開(kāi)關(guān)被按下,即玩家按下停止開(kāi)關(guān)。和微動(dòng)開(kāi)關(guān)的情況一樣,通過(guò)確認(rèn)控制開(kāi)關(guān)所連接的引腳的狀態(tài),當(dāng)變?yōu)椤癓ow”時(shí),判斷開(kāi)關(guān)已被按下。在flag變量中記錄“1”并通過(guò)break退出循環(huán)。
退出循環(huán)后,通過(guò)第19行,將電機(jī)驅(qū)動(dòng)器所連接的引腳置“Low”,使電機(jī)停止運(yùn)行。
然后,確認(rèn)flag變量并進(jìn)行相應(yīng)的處理。如果為“1”,則判斷“成功”,通過(guò)超聲波距離傳感器測(cè)量到墻壁的距離,并顯示在液晶顯示器上。如果為“2”,則在液晶顯示器上顯示“Fail …”,表示挑戰(zhàn)失敗。
整個(gè)程序可以從以下鏈接下載:
下載程序(chickenracer.zip)
關(guān)于其他處理,請(qǐng)參考下載的程序。您可以通過(guò)Arduino IDE打開(kāi)文件,并將程序傳輸?shù)紸rduino Nano,即可用于小雞賽車(chē)。
還配備了距離校準(zhǔn)功能
在測(cè)量到墻壁之間的距離時(shí),需要使撞墻狀態(tài)下的距離為“0cm”。這個(gè)可以通過(guò)從超聲波距離傳感器測(cè)得的距離中減去超聲波傳感器和微動(dòng)開(kāi)關(guān)之間的距離來(lái)計(jì)算。例如,超聲波距離傳感器和微動(dòng)開(kāi)關(guān)之間的距離是3.5cm,測(cè)得的距離是5.1cm,那么到墻壁的距離可以計(jì)算得出“1.6cm”。
但是,在使用過(guò)程中,安裝位置可能會(huì)發(fā)生偏移,超聲波距離傳感器和微動(dòng)開(kāi)關(guān)之間的距離可能會(huì)發(fā)生變化。這樣的話,即使撞墻,也不會(huì)是0cm,成功時(shí)測(cè)得的距離甚至可能會(huì)顯示為負(fù)數(shù)。
在這種情況下,需要每次在程序中改寫(xiě)計(jì)算公式并將其傳輸?shù)紸rduino,這需要花費(fèi)大量的時(shí)間和精力。因此,我決定安裝一個(gè)可以輕松調(diào)整距離校準(zhǔn)值的功能。
要進(jìn)行校正,請(qǐng)確保小雞賽車(chē)處于撞墻狀態(tài)(微動(dòng)開(kāi)關(guān)被按下的狀態(tài)),然后按下位于液晶顯示器右下方的距離校準(zhǔn)開(kāi)關(guān)。接著,測(cè)量到墻壁的距離,通過(guò)從實(shí)際測(cè)量值中減去該值,即可得到正確的距離。
讓小雞賽車(chē)跑起來(lái)
現(xiàn)在,讓我們?cè)囋囎龊玫男‰u賽車(chē)能不能跑起來(lái)。打開(kāi)電源開(kāi)關(guān)后,液晶顯示器將顯示“Chicken Racer”。想玩賽車(chē)比賽游戲時(shí),請(qǐng)按下有線連接的控制開(kāi)關(guān)。然后,LED將開(kāi)始倒計(jì)時(shí)。
當(dāng)?shù)褂?jì)時(shí)LED變?yōu)榫G燈時(shí),小雞賽車(chē)開(kāi)始向前行駛。在快要撞上墻壁之前,按下控制開(kāi)關(guān),讓小雞賽車(chē)停下來(lái)。
如果您可以在不撞墻的情況下停下來(lái),液晶顯示器上將會(huì)顯示出與墻壁之間的距離。如果失敗,則會(huì)顯示“Fail …”,讓您知道失敗了。如果在游戲結(jié)束后按下保險(xiǎn)杠上的微動(dòng)開(kāi)關(guān),就會(huì)被重置,您可以重新開(kāi)始游戲。
到這里,小雞賽車(chē)就大功告成了。本系列連載文章中介紹的電子部件的操作方法和制作過(guò)程,在創(chuàng)作其他作品時(shí)也會(huì)用得到,歡迎參考并嘗試使用Arduino挑戰(zhàn)各種電子作品的創(chuàng)作!
福田和宏
作家,居住在日本札幌。喜歡撰寫(xiě)有關(guān)電子創(chuàng)作、電腦、Linux、智能手機(jī)等方面的文章。在為“Raspberry Pi Magazine”和“日經(jīng)Linux”供稿。著有《這本書(shū)足夠!Raspberry Pi超簡(jiǎn)單入門(mén)教程》(SOTECHSHA)、《學(xué)習(xí)各種電子元器件的控制!Arduino電子創(chuàng)作 實(shí)戰(zhàn)教程》(SOTECHSHA)、《Arduino實(shí)用入門(mén)》(技術(shù)評(píng)論出版社)等書(shū)籍。目前,創(chuàng)辦了“札幌電子工藝部”(https://sapporo-elec.com/),這里匯集了眾多電子創(chuàng)作發(fā)燒友,大家使用各自的電子技能創(chuàng)作各種作品。任何人都可以參加,也期待您的加入!
審核編輯黃宇
-
傳感器
+關(guān)注
關(guān)注
2562文章
52560瀏覽量
763679 -
機(jī)器人
+關(guān)注
關(guān)注
213文章
29482瀏覽量
211546 -
電機(jī)
+關(guān)注
關(guān)注
143文章
9248瀏覽量
148347 -
Arduino
+關(guān)注
關(guān)注
188文章
6491瀏覽量
190096 -
距離傳感器
+關(guān)注
關(guān)注
3文章
76瀏覽量
15370
發(fā)布評(píng)論請(qǐng)先 登錄
基于Arduino Nano和HC-SR04超聲波傳感器制作社交距離項(xiàng)目
使用超聲波傳感器HC SR04和Arduino Uno制作超聲波距離傳感器

使用Arduino Uno和PIR傳感器的社交距離項(xiàng)目

使用Arduino和火焰傳感器制作火災(zāi)探測(cè)系統(tǒng)

使用Labview、Arduino和超聲波傳感器制作距離/測(cè)距程序

使用Arduino制作停車(chē)傳感器

如何使用Arduino制作LED運(yùn)動(dòng)傳感器

在最后一刻停下來(lái)!用Arduino和距離傳感器制作小雞賽車(chē)!(第1篇)

一款用Raspberry Pi和傳感器制作的可穿戴式小型健康管理設(shè)備!第四部分?劇終篇

用Raspberry Pi和傳感器制作“可自動(dòng)營(yíng)造舒適空間的裝置” 第四部分?劇終篇

評(píng)論