到目前為止,我們已經在DevicePlus上介紹過Arduino的使用方法和一些應用案例。在本文中,我們將嘗試一個用Arduino讓傳感器工作的電子作品。此次的分享嘉賓是福田和宏先生!他過去曾在DevicePlus上連載過“Arduino基礎”等作品。
◆◆◆
大家好!讓我們直接進入主題吧。通過將幾個微控制器和電子元器件相組合,就能創作出很多不同的作品。從機器人和無人機等流行設備到鬧鐘和玩具等小物件,您可以實現各種創意。這次要為大家介紹的是一款名為“小雞賽車”的車形機器人的制作過程。
作品簡介
使用這次的作品可以玩一種游戲,讓名為“小雞賽車”的車形機器人向著墻壁行駛,比賽從機器人停下的地方到墻壁的距離誰最短。它采用了可以通過按鈕來操作車形機器人的設計,因此任何人都可以輕松享受競賽游戲。
這款小雞賽車中配有電機,通過開關使其前進。參加游戲的人手握按鈕,當小車馬上要撞上墻壁時按下按鈕使之停止。
然后使用距離傳感器來測量賽車與墻壁之間的距離。即使和好幾個人一起玩,只要能測量出到墻壁的距離,就能比出誰在離墻壁最近的位置停下來了,是不是很有趣?
另外,我們還需要提前準備一個用來檢測是否已碰撞到墻壁的機制。我的設計是在小雞賽車的前端安裝了開關,這樣,如果它撞到墻上開關就會被按下。如果這個開關被按下,就意味著玩家失敗。
所需的電子零部件
在確定了小雞賽車的大致動作之后,讓我們來看看需要使用哪些電子零部件。這次我們將使用Arduino進行控制。由于“Arduino UNO”等產品體積較大,不適合安裝在這么小的作品上,因此,我決定使用體積小巧的“Arduino Nano”。“Arduino Nano”的尺寸為45×18mm,大小是可以放在食指上的程度,所以正好可以安裝在作品上,而不用擔心尺寸太大。另外,雖然體積更小,但卻具有與“Arduino Uno”相同的功能,這點很關鍵。
驅動電機使用配有齒輪的電機。這是因為齒輪會增強驅動的力量,這樣即使放置電池等較重的部件,也可以輕松地讓賽車跑起來。此外,還需要電機驅動器讓電機運轉。
使小雞賽車停下來的操作,我用按鈕開關來實現。這次,我想將開關線延長,以便從遠處也可以控制賽車。
我使用微動開關來判斷小雞賽車是否撞到了墻上,選用了附有金屬板的微動開關。金屬板的存在可以確保開關被按下而不必擔心碰撞角度。此外,通過在前方安裝左右兩個微動開關,可以提高發生碰撞時按下開關的準確性。
停止時,需要測量到墻壁的距離,我使用距離傳感器來完成這項工作。這次用的是可以使用超聲波測量距離的距離傳感器。
另外,我還希望在顯示器上顯示結果,以便讓玩家知道測量出來的距離。我使用的是字符液晶顯示器,這樣可以比較容易地顯示字符。
可以通過LED讓玩家知道開始的時間以及是否成功。安裝一個綠色和三個紅色的LED。通過倒計時來通知開始時間,先是所有紅色LED點亮,然后逐一熄滅,綠色LED點亮表示開始,賽車駛出。另外,如果成功了,綠色LED亮起;如果失敗了,則紅色LED亮起,據此來告知參賽者結果。
除此之外,還要配備調整電機速度和設置距離的功能。
接下來,我們根據小雞賽車的結構,來選擇電子零部件。這次使用的電子零部件如下:
Arduino Nano Every
使用“Arduino Nano Every”作為微控制器來負責控制。Arduino Nano Every是一款于2019年5月發售的新Arduino Nano。當然,如果不想使用Arduino Nano Every,使用舊Arduino Nano或與Arduino Nano兼容的產品也沒有問題。
超聲波距離傳感器
通過發射超聲波并測量直到接收到墻壁反射回來的超聲波的時間來測量與對象物之間的距離。
字符液晶顯示器
可以顯示字符和符號的顯示器。這次使用的是“AQM1602Y-FLW-FBW”,最多可以顯示2行16個字符。此外,該顯示器有背光,因此即使在較暗環境下也可以查看所顯示的字符。
圓形機器人底盤套件
該套件中包括電機、車輪和殼體。電機采用驅動力量較大的減速電機(齒輪電機)。按照說明書組裝,可以很容易地制作出小雞賽車殼體。將電子電路和傳感器等安裝到這個殼體里面,即可完成制作。當然,您也可以只購買電機,自己來制作殼體。
電機驅動器
使用輸出為1.0A的電機適用的可逆電機驅動器來驅動電機。這次我使用的產品規格如下:
【絕對最大額定值(Ta=25℃)】
電源電壓(VCC):18V
電源電壓(VM):18V
輸出電流(lomax):1A
工作溫度范圍:-20?75℃
保存溫度范圍:-55?150℃
【推薦工作范圍】
電源電壓(VCC):6.5?15V
電源電壓(VM):6.5?15V
輸出H電壓設置:
編號 | 引腳名 | 功能 |
1 | VREF | 輸出H電壓設置引腳 |
2 | OUT2 | 輸出引腳 |
3 | RNF | 輸出單元GND |
4 | OUT1 | 輸出引腳 |
5 | VM | 電源(電機輸出單元) |
6 | VCC | 電源(小信號單元) |
7 | FIN | 控制輸入(正) |
8 | GND | GND |
9 | RIN | 控制輸入(反) |
為了使賽車的左右兩個車輪轉動,我使用了2個電機。
紅色LED
綠色LED
使用LED來通知倒計時和結果信息。我準備了3個紅色和1個綠色的LED。
按鈕開關
供玩家用來控制小雞賽車。為了便于操作,最好選擇能夠連接到面板的形狀。
微動開關
用來檢測是否與墻壁發生了碰撞。在賽車前方安裝左右兩個微動開關。
除了上述部件之外,我還使用了以下電子元器件:
電子元器件名稱 | 數量 | URL |
節拍開關 | 1 | http://akizukidenshi.com/catalog/g/gP-03649/ |
滑動開關 | 2 | https://www.amazon.co.jp/Zhejiang-Jianfu-Electronics-Co-%E5%9F%BA%E6%9D%BF%E7%94%A8%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81-SS-12D00-G5-10%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88/dp/B01L3MJZGS |
半固定電阻器 | 2 | http://akizukidenshi.com/catalog/g/gP-14855/ |
二極管 | 1 | http://akizukidenshi.com/catalog/g/gI-07699/ |
330Ω電阻器 | 6 | http://akizukidenshi.com/catalog/g/gR-25331/ |
0.1μF電容器 | 4 | http://akizukidenshi.com/catalog/g/gP-10147/ |
3P排針 | 1 | https://www.amazon.co.jp/%E6%9C%AD%E5%B9%8C%E8%B2%BF%E6%98%93-%E3%83%94%E3%83%B3%E3%83%98%E3%83%83%E3%83%80-1%C3%973-3P-2%E5%80%8B%E5%85%A5%E3%82%8A%EF%BC%9Ccon-000%EF%BC%9E/dp/B00TP91KLK |
跳線接頭 | 1 | http://akizukidenshi.com/catalog/g/gP-03690/ |
電池扣 | 2 | https://www.marutsu.co.jp/pc/i/14367/ |
電池(006P) | 2 | http://akizukidenshi.com/catalog/g/gB-03257/ |
萬用電路板 95×72mm | 1 | https://www.marutsu.co.jp/pc/i/237293/ |
萬用電路板 72×47mm | 1 | https://www.marutsu.co.jp/pc/i/144023/ |
另外,需要使用如下排母將每個電子元器件用導線連接起來。如果直接將布線焊接起來則不需要這些器件。
電子元器件名稱 | 數量 | URL |
L型6P排針 | 1 | http://akizukidenshi.com/catalog/g/gC-05336/ |
42P排母 | 1 | http://akizukidenshi.com/catalog/g/gC-05779/ |
Xh-2P連接器 針座 | 4 | https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/B2B-XH-A-LF-SN/455-2247-ND/1651045 |
XH-2P連接器殼體 | 4 | https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/XHP-2/455-2266-ND/555485 |
Xh連接器 4P針座 | 3 | https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/B4B-XH-A-LF-SN/455-2249-ND/1651047 |
XH-4P連接器殼體 | 3 | https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=2AP6-4SFL# |
XH連接器觸頭 | 20 | https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/SXH-001T-P0.6/455-1135-1-ND/527370 |
4P連接器殼體 | 1 | http://akizukidenshi.com/catalog/g/gC-12153/ |
導線連接器 | 4 | http://akizukidenshi.com/catalog/g/gC-12160/ |
當然,如果能實現同樣的功能,選擇其他電子元器件也沒有問題。在這種情況下,需要注意它們的連接方法和控制方向。
為Arduino供電
首先需要確保為Arduino提供的電源。由于這是一個能夠移動的作品,所以需要在作品自身上安裝電池等作為電源。Arduino Nano可以通過連接USB數據線供電。因此,還可以通過安裝移動電源等來實現供電。然而,目前市場上的移動電源很多是面向智能手機的,往往又大又重。此外,Arduino消耗的電量很小,不需要像移動電源那么大的容量。
因此,這次我用的是電池。Arduino中配有稱為“VIN”的引腳,當它與最大21V的電源相連接時,就會將電壓轉換為5V并為Arduino供電。因此,我使用了可輸出9V電壓的006P電池來供電。
將電池扣的正極(紅線)連接到“VIN”引腳,將負極(黑線)連接到“GND”引腳即可實現供電。
確認電子部件的工作情況
準備好電子部件后,需要確認每個電子部件是否可以正常工作。這是為了一旦出現無法工作的情況,便于采取諸如更換成其他電子部件等的措施。
在確認時,最好使用面包板進行連接。另外,如果能事先確認作品應該可以在實裝后正常工作,那么您在編寫程序時會更安心。
首先,我們來確認LED和開關是否能夠正常工作。另外,我們要確認一下按下開關后是否開始計數。
將LED連接到Arduino的數字輸出引腳可以打開和關閉LED。此外,我們還需要給LED連接一個電阻器,以防止過電流(關于更詳細的LED使用方法,請參閱“Arduino基礎:通過數字輸出來控制LED照明”(https://techclass.rohm.com.cn/knowledge/tech-info/how-tos/arduino/the-basics-of-arduino-control-led-lighting-with-digital-output))。
這次我使用3個紅色LED和1個綠色LED。將LED分別連接到Arduino的數字輸出引腳8、9、10、11。
玩家操作時使用的按鈕開關,連接數字輸入引腳即可讀取開關狀態。此外,通過將另一個引腳連接到GND,按下按鈕時數字輸入引腳的狀態會變為0V。另外,還要通過編程來啟用上拉功能,以使其在未按下按鈕時處于5V狀態,如果要了解更詳細的內容,請參考“Arduino基礎:讀取開關狀態”(https://techclass.rohm.com.cn/knowledge/tech-info/arduino/the-basics-of-arduino-reading-switch-states)。這次,我們連接數字輸入引腳7。
現在,讓我們將LED和開關連接到面包板上來嘗試計數吧。電子部件的連接如下圖所示。由于開關不能直接連接到面包板上,所以我們用焊接導線的方式連接。
連接好之后,創建以下程序。通過這個程序,當您按下開關時,所有紅色LED燈亮起,然后每秒熄滅1個LED燈,最后綠色LED燈亮起。
const int LED_RED1_PIN = 8; const int LED_RED2_PIN = 9; const int LED_RED3_PIN = 10; const int LED_GREEN_PIN = 11; const int SW_PIN = 7 void setup() { pinMode( LED_RED1_PIN, OUTPUT ); pinMode( LED_RED2_PIN, OUTPUT ); pinMode( LED_RED3_PIN, OUTPUT ); pinMode( LED_GREEN_PIN, OUTPUT ); pinMode( SW_PIN, INPUT_PULLUP ); digitalWrite( LED_RED1_PIN, LOW); digitalWrite( LED_RED2_PIN, LOW); digitalWrite( LED_RED3_PIN, LOW); digitalWrite( LED_GREEN_PIN, LOW); } void loop() { if( digitalRead( SW_PIN ) == LOW ){ while( digitalRead( SW_PIN ) == LOW ){ delay( 10 ); } digitalWrite( LED_RED1_PIN, HIGH ); digitalWrite( LED_RED2_PIN, HIGH ); digitalWrite( LED_RED3_PIN, HIGH ); digitalWrite( LED_GREEN_PIN, LOW ); delay( 3000 ); digitalWrite( LED_RED1_PIN, LOW ); delay( 1000 ); digitalWrite( LED_RED2_PIN, LOW ); delay( 1000 ); digitalWrite( LED_RED3_PIN, LOW ); digitalWrite( LED_GREEN_PIN, HIGH ); }
將程序傳輸到Arduino,就可以確認按下按鈕時LED是否按預期工作啦。
◆◆◆
這次我簡單為大家介紹了“小雞賽車”以及所需的電子部件。下一次,我將為大家介紹如何確認超聲波距離傳感器等電子部件的工作情況,以及整個電子電路的創建方法。
福田和宏
作家,居住在日本札幌。喜歡撰寫有關電子創作、電腦、Linux、智能手機等方面的文章。在為“Raspberry Pi Magazine”和“日經Linux”供稿。著有《這本書足夠!Raspberry Pi超簡單入門教程》(SOTECHSHA)、《學習各種電子元器件的控制!Arduino電子創作 實戰教程》(SOTECHSHA)、《Arduino實用入門》(技術評論出版社)等書籍。目前,創辦了“札幌電子工藝部”(https://sapporo-elec.com/),這里匯集了眾多電子創作發燒友,大家使用各自的電子技能創作各種作品。任何人都可以參加,也期待您的加入!
審核編輯黃宇
-
led
+關注
關注
241文章
23136瀏覽量
658474 -
Arduino
+關注
關注
187文章
6464瀏覽量
186651 -
距離傳感器
+關注
關注
3文章
74瀏覽量
15107
發布評論請先 登錄
相關推薦
評論