本篇文章會分享改造履帶玩具車,以及手機透過藍芽控制馬達,達到遙控車子的目的。
本篇著重在馬達控制及手機app製作。
藍芽連線的部分可以參考→Arduino 藍芽控制LED,App inventor簡易教學。
內容目錄
材料
材料名稱 | 蝦皮連結 |
---|---|
1.【傑森創工】透明電池盒 有蓋子 本賣場為4節 內建開關 電線已接好 外型搶眼 可放入3號電池 AA | |
2.【傑森創工】Arduino Uno R3 開發板 原廠晶片 *限時特惠 附USB線 | |
3.【傑森創工】Arduino HC-06 藍牙模組 帶底板 Bluetooth RS232 Module | |
4.【傑森創工】杜邦線 公對母 20cm 10條 12股銅絲含膠殼 彩色線 (整排40條4單位) Arduino 專用 | |
5.【傑森創工】9V 電池扣 帶DC公頭 孔徑5.5×2.1mm Arduino 可用 | |
6. 木板 | |
7. 履帶底盤車(田宮模型) | |
8.【傑森創工】L298N DC馬達驅動模組 直流馬達 Arduino 智慧小車 |
履帶玩具車
車體簡介
田宮履帶底盤車,由一片木板底座、輪子、履帶、2個齒輪箱、2個馬達組成。(上圖的3個木塊及L298N為後來加裝)
透過控制兩個馬達帶動輪子,在傳動到履帶上,使車體前進。
若兩個馬達有速差,就能產生轉彎,故我們要能夠個別控制兩個馬達的速度及方向。
這時我們會需要用到L298N這個模組來控制馬達。
L298N是什麼?
L298N可以透過IN1,IN2,IN3,IN4來控制輸出電流方向,進而達到控制馬達方向。
ENA,ENB則是使用PWM訊號控制馬達速度。
L298N提供12V的電源輸入,用來推動馬達。
控制馬達
狀態 | IN1 | IN2 | |
---|---|---|---|
馬達A | 正轉 | HIGH | LOW |
反轉 | LOW | HIGH | |
停止 | LOW | LOW |
狀態 | IN3 | IN4 | |
---|---|---|---|
馬達B | 正轉 | HIGH | LOW |
反轉 | LOW | HIGH | |
停止 | LOW | LOW |
電路連接
初步測試時,接1組電池盒作為馬達電源,行動電源來提供arduino電源。
接一組電池盒只會有6V的電源,除了馬達跑較慢之外,當電壓掉到6V以下,L298N就會無法正常運作,馬達就會無法轉動,所以之後還是改為串聯兩組電池盒(12V)。
初步測試成功後,接著將2個電池盒串聯並焊接開關。
另外使用9V電池來當作Arduino電源。
電路完成後,就可以蓋上上蓋了。
延伸閱讀: 三用電錶使用教學,檢查電路必備工具!!
程式
這邊手機遙控app主要說明2個功能: 1.方向控制 2.速度控制
藍芽連線的部分請參考→ Arduino 藍芽控制LED,App inventor簡易教學。
手機遙控APP製作
手機介面
1.Button: 用來作為方向控制按鈕。
2.ListPicker: 藍芽連接選單。
3.Slider: 用於調整速度的滑桿,數值範圍設定0~255。
4.TextBox: 顯示速度數值。
5.記得建立藍芽功能。
6.建立方格佈置,可以將按鈕或其他元件放入。
7.設定方格的行跟列的數量,這裡是設定3×3。
程式積木
1.初始化按鈕,為了避免誤觸,所以一開始要先關閉按鈕。
2.藍芽選單。
3.藍芽連線,確認連線成功後啟用按鈕。
4. 關閉藍芽連線,並將按鈕禁用。
5. 當Forward按鈕被按下,會執行藍芽傳送字元F,其他方向按鈕以此類推。
6. 當滑桿被拉動時執行下列動作。
7.藍芽傳送v,用意是告訴arduino之後要傳送數度數值。
8.將滑桿的數值轉成整數,並顯示在TextBox1上。
9.傳送速度數值到arduino。
10.傳送e告訴arduino結束速度數值傳送。
arduino程式
#include <SoftwareSerial.h>
#include <Wire.h>
//輸出到L298N的腳位
#define MT_L 9 //ENA
#define IN1 8
#define IN2 7
#define IN3 5
#define IN4 4
#define MT_R 3 //ENB
char Car_status;
int Speed_value=150;
SoftwareSerial BT(10,11);
//定義Arduino PIN10及PIN11分別為RX及TX腳
void setup() {
pinMode(MT_L,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(MT_R,OUTPUT);
BT.begin(9600); // 設定和 HC-06 通訊的速度 (預設 9600)
Serial.begin(9600);
}
void loop() {
//當Serial有資料傳輸時,會將讀取到的字元存到Car_status。
if(Serial.available() == true){
Car_status = Serial.read();
}
//當藍芽有資料傳輸時,會將讀取到的字元存到Car_status。
if (BT.available()){
Car_status =BT.read();
Serial.println(Car_status);
}
//依照Car_status的字元來選擇車子方向控制
switch(Car_status){
case 'F':
Forward();
Serial.println("Forward");
Car_status='N';
break;
case 'B':
Backward();
Serial.println("Backward");
Car_status='N';
break;
case 'R':
TurnRight();
Serial.println("TurnRight");
Car_status='N';
break;
case 'L':
TurnLeft();
Serial.println("TurnLeft");
Car_status='N';
break;
case 'S':
Stop();
Serial.println("Stop");
Car_status='N';
break;
case 'v':
Speed_value=0; //先將速度歸0
do{
if (BT.available()){
Car_status =BT.read(); //讀取藍芽傳送字元
Serial.println(Car_status);
//當藍芽讀取到字元'e'時,就會跳出迴圈。
if( Car_status=='e'){
Serial.println(Speed_value);
break;
}
else
//將傳送來的速度數值字元轉成整數。
Speed_value=10*Speed_value+(Car_status-48);
}
}while(true);
}
}
//下面是停止、前進、後退、左轉、右轉的函式。
void Stop()
{
analogWrite(MT_L,0);
analogWrite(MT_R,0);
}
void Forward()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(MT_R,Speed_value);
analogWrite(MT_L,Speed_value);
}
void Backward()
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(MT_R,Speed_value);
analogWrite(MT_L,Speed_value);
}
void TurnRight()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(MT_L,0);
analogWrite(MT_R,Speed_value);
}
void TurnLeft()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(MT_L,Speed_value);
analogWrite(MT_R,0);
}
下面稍微解說速度傳送的流程:
補充說明: char ‘1’ = int 49,是根據ASCII碼。
可參考→→維基百科 ASCII
小結論
實際上在控制速度時,速度快慢其實沒差很多。😂😂😂
高速下比較沒問題,但是將速度調低時,會發現左右馬達開始有速差,
應該是電壓不足導致。
能否請教您:
依照您的分享試做了一次,藍芽連線成功,但車子沒反應,可能問題出在哪裡?
L298N是什麼在和arduino 的接線上需要特別注意哪些地方?
感恩~
請問l298n上的紅色燈有亮嗎?
紅色的燈有亮
如果l298n上的紅燈沒亮,可以檢查看看l298n上的jumper是否有插上。
l298n上的jumper有插上。有確認和你分享的接線位置。
看了序列埠上的跳出了”反問號”
不知道是代表什麼意思?
反問號有可能是鮑率設定不正確出現的亂碼,
確認看看序列埠鮑率設定是否為9600。
序列埠鮑率說明可參考下面連結:
https://www.lazytomatolab.com/as-11/
我覺得也可以先試做看看這篇
https://crazymaker.com.tw/arduino-bluetooth-control-led/
藍芽控制LED開關,因為藍芽傳輸的邏輯一樣,如果這個有成功,那控制遙控車的部分應該也不太會有問題。
如果說做到監視序列埠可以看到正確的訊息,就可以排除藍芽訊號傳輸的問題,再來找控制馬達的部分哪裡出問題。
有,L298n的紅燈有亮。
還是接線上有哪些要注意的。
是否有其他方式可讓我學習的地方,感恩~
感謝您的回覆!
如果是我的話,可能會試看看以下:
1. 檢查杜邦現有無斷路,
2. 量測進去l298n的電源是否有在6V以上,最好是7V~12V
3. 將arduino 連接電腦,並開啟序列埠監控視窗,例如: 手機按前進時,因為有Serial.println(“Forward”); 視窗應該會顯示Forward,若沒顯示,可能程式有地方出現問題。
4. 確認l298n所有對應ardunio的接腳
5. 量測看看ENA,IN1, IN2, IN3, IN4, ENB電壓動作是否是正確的
這邊我有再驗證過網頁上的程式,應該是沒有問題的。
好帥喔~~~~~我是初學者
現在只做出一個按按鈕顯示Hello Word的APP(哭阿哈哈哈
你讓我燃起鬥志了
不過我用的是HM-10藍牙模組
這個模組不能直接用手機藍牙配對
要用APP去連
不知道能不能用APP Iventor做出來的APP連上
一開始光手機要連上HM-10就花了我半條命了
有在考慮要不要再買一塊HC-05或HC-06來玩會比較輕鬆
可惡~學生真的好窮阿阿阿阿
如果有阿姨就好了
阿姨好~阿姨妙~阿姨口袋都鈔票
下面是小弟用HM-10做的小作品
希望可以跟你蕉流蕉流
https://www.youtube.com/watch?v=Fn2UsDw0tmY
其實我也算是初學者,算是邊玩邊學吧。
我看了你的youtube,我對自動農場蠻有興趣的,
之後我也會寫土壤濕度感測器的文章,
然後做一個智慧盆栽來玩看看,有問題再來請教你啦~
感謝你的支持~~~
您好
想要詢問速度的部分,似乎無法像影片一樣可以遙控,是哪方面需要注意呢?
可以先確認APP部分是否有將拉桿數值轉成整數,
然後透過arduino監控視窗來看數值是否有確實傳送到arduino,
如果都沒問題的話,在檢查看看線路,l298n上的ENA電壓是否正常。
arduino控制速度的腳位是要有PWM輸出功能的,在pin腳號碼旁有”~”這個符號的才能輸出PWM。
請問為什麼我的序列赴監控那裡當收到我的訊號後會顯示反問號?
反問號有可能是鮑率設定不正確出現的亂碼,
確認看看序列埠鮑率設定是否為9600。
序列埠鮑率說明可參考下面連結:
https://www.lazytomatolab.com/as-11/
請問不接ENA跟ENB會怎樣ㄇ
可以不接ENA、ENB,但要用jump把ENA,ENB的pin跟上面的5V pin接起來,這樣就是固定馬達速度,無法調整速度。
好的感謝, 另外還想問一個問題 我的HC05之前還連接的上 但不知道怎麼了 突然連不上了 想請問一下可能是什麼問題! 謝謝
連不到是指手機連不到嗎?
我覺得先看看電路有沒有問題,有時候杜邦線也會斷路,檢查到藍芽模組的電源是否正常。
另外也可以先試試看藍芽控制LED開關這篇
https://crazymaker.com.tw/arduino-bluetooth-control-led/
HC05有主/從模式可參考這篇,確認看看是不是在從端模式
https://swf.com.tw/?p=693
請問2個馬達中間的輪軸是不是要切一半,各裝在一個馬達上,都接在同一個輪軸上是不是兩邊輪子轉速都一樣??
是的,兩邊的輪軸是分開的,由不同的馬達帶動。
再裝履帶之前是可以正常動,但裝上履帶好像就帶不動,請問該如何處理。
裝上履帶後,馬達就不動,那之後再把履帶拆下來馬達就又可以繼續動了嗎?
檢查看看是不是電池快沒電,你這個狀況我也是沒看過哈哈哈
我想問一下 L298N 連接電池扣 用的是什麼線材
目前我是用裸銅線會有接觸不良的問題,
我其實就用很一般的線材,單芯線應該也可。
用裸銅線我覺得比較危險的是其他部分接觸到銅線短路。
了解 謝謝你
你好 請問,我速度的那一條 如果拉成0,應該要不會轉 但她還是會轉ㄟ,是我的speed_value 值沒丟進去ㄇ
程式都跟上面一樣.
你可以將arduino先連接電腦,打開序列埠監控視窗,用手機調整速度。按照上面程式,成功傳送的話應該會秀出速度的值,若沒秀出來,應該要檢查一下程式。
其他要注意的就是arduino連接到L298N上ENA、ENB的腳位要用有’~’符號的,這個才有PWM功能,才可以輸出類比電壓來控制速度。
PWM可以參考這篇 https://crazymaker.com.tw/arduino-fade-led/
可以請問一下我手機遙控APP製作跟arduino的程式,都照上面操作的,arduino板跟藍芽接收器還有L298N的板子都有亮,可是為什麼車子不能運轉,手機的程式會顯示Error 516:Unable to Write:Broken pipe ,麻煩求解謝謝
Error 516:Unable to Write:Broken pipe
這應該是藍芽通訊有斷開,所以無法寫入資料。
你的狀況是手機打開app,選擇藍芽後,有連線到,但按前進或其他按鈕,就會跳出516?同時藍芽應該會是斷開的?
如果是上述的狀況且手機APP跟Arduino的程式都確認過的話。
我會先檢查電路,我看到有一篇留言是電路連接問題,導致藍芽模組的電被拉掉,然後藍芽連接就斷開了。
你也可以先試看看用藍芽控制led
https://crazymaker.com.tw/arduino-bluetooth-control-led/
你的狀況是手機打開app,選擇藍芽後,有連線到,但按前進或其他按鈕,就會跳出516?同時藍芽應該會是斷開的?
對 會顯示這個
但是我看序列赴監控那裡也是完全空白的
顯示516就代表藍芽已經斷開了,資料傳不過去,序列埠當然也是空白的。
看你要不要拍接線圖給我看一下?
你試過藍芽控制led了嗎?
如果試過藍芽控制led沒問題,那這應該會是線路的問題
您好
想請問馬達和齒輪箱是另外購買的嗎?
(田宮模型原本附的好像只有一個馬達)
如果是的話可以請問是在哪裡購買的嗎?謝謝!
當時我是拿我老哥玩剩下的來用,我不確定她是在那裡買的。
但要用左右獨立馬達才能控制方向,可能可以找看看這種的
TAMIYA 69912 田宮工作樂 雙馬達左右獨立4速變速箱:
https://shp.ee/iyeewpf
你好 請問你之前有遇過APP右轉鍵和左轉鍵按了車子卻沒反應的問題嗎? 直走跟後退都是正常的
你可以打開Arduino序列埠監控視窗,看看按右轉鍵跟左轉鍵時,是否有出現TurnRight或TurnLeft,這樣可以確認case是不是正確的。
也可以檢查一下void TurnRight()跟void TurnLeft()裡面的程式是否正確。
請問可以搭配play 商店上的一些arduino藍牙遙控車程式使用嗎?我發現指令好像蠻類似的,想請教一下,謝謝
請問可以搭配play 商店上的一些arduino藍牙遙控車程式使用嗎?我發現指令好像蠻類似的,想請教一下,謝謝
是可以的,但要弄清楚相對應的傳送字元就可,
可以參考傑森創工這篇文章
https://blog.jmaker.com.tw/arduino-ble-app/
您好,不好意思,可以請問每個Case的最後都有 Car_status=’N’;
是甚麼意思嗎? 好像都沒有看到字元為N 的Case
這是為了每次執行完一次case後,下次不要選擇任何case,才把Car_status=’N’。
如果是’N’的話,就不會執行任何一個case,直到下次有新的字元傳進來,才會再次選擇。
不好意思!請問一下當車子通電時車子會自己左轉,但接上藍芽按停止鈕就會恢復正常,想問可能發生的原因!非常感謝!
車子通電時,可以先用電表量看看L298N上的IN1,2,3,4, ENA,B,看是否一開始就有電壓。
如果有的話可以在setup中加入Stop(),讓程式一開始就先讓車子停止試看看。
可以請問如果我的車體比較大的話 需要用到4個馬達嗎
也可以找2個扭力比較大的馬達,這樣控制就會一樣,比較簡單
好的 感謝你
想請問一下藍芽要連到哪一個 每個都有試過但是沒辦法連線
方便給一下聯繫方式嗎 我的作業期限快到ㄌ,急需救援QQ
方便問一下藍芽要連到哪一個嗎 ? 我每個都連過ㄌ但是都顯示507沒有成功連線 ,方便給您的聯繫方式嗎 作業期限快到ㄌ QQ
想確認一下,你的藍芽模組有確實在運作(紅色led會閃爍)?
另外可以截圖給我看一下你跳error的訊息以及bt list的畫面嗎?
外聯繫方式你可以email你的fb到我的信箱derek@crazymaker.com.tw
你好,我用的是esp32然後在上傳程式測試後L298N會叫請問是甚麼原因
L298N會叫,我是沒有遇過,但感覺應該跟ESP32可能沒關係,檢查看看你的電源是否正常,或者換一塊L298N試試吧
請問一下,圖中的底座有兩個馬達但是我在網上找到的只有一個,另一個馬達和變數箱要怎麼用?
如果只有一個馬達跟變速箱,就只能前進跟後退。
若是要能夠轉向,就一定要買有兩個馬達的。
想請問一下我的L298N輸入電壓用三顆3.7V的電池,但是量測輸出電壓只有不到2V,馬達雖然會轉但是慢到連車子都沒辦法動,這樣是L298N板子壞掉嗎
可以先讓ENA、ENB兩隻腳吃5V訊號,看要用ARDUINO給或是跳線到旁邊得5V都可,這兩隻腳是用來調整輸出電壓的,5V是100%輸出。
不行的話就換另一個L298N試試吧。
不好意思,我可以請教一下為甚麼我的App Inventor沒有when~.beforepicking(準備選擇)亦沒有when~.afterpicking(選擇完成),但我有取得焦點跟失去焦點,想請教是否唯一樣的,感恩!
像這樣https://img.onl/Zh9y8q
不好意思,我可以請教一下為甚麼我的App Inventor沒有準備選擇跟選擇完成,甘恩!
你前面建立的BT_List是按鈕(button),要改成清單選擇器(ListPicker)
void loop() {
if(Serial.available() == true){
Car_status = Serial.read();
}
if (BT.available()){
Car_status =BT.read();
Serial.println(Car_status);
}
switch (Car_status) {
case ‘1’: // 接收到’1′
A(); //循跡區塊
B(); //超音波區塊
C1(); //RGB光感區塊
break;
case ‘2’: // 接收到’2′
A();
B();
C2();
break;
case ‘3’: // 接收到’3′
A();
B();
C3();
break;
}
}
這是我參考你的文章做的 這樣按1似乎只會有循跡功能。
超音波、RGB光感功能跑不出來 請問有甚麼方法改善??
我覺得不要用switch…case,改用while迴圈比較好
我可以請教一下為什麽我的Arduino會出現這樣的錯誤訊息
https://ibb.co/0pL0Mq1
我全部直接複製貼上
非常感恩
您好,抱歉打擾,我全部都照著做了連結藍芽也有成功arduino編譯跟上傳也都成功,APP INVENTOR到android手機也成功但馬達都不會動,也有八顆電池串連,可以請問一下是哪個步驟出錯了嗎?感激不盡(我打算拿來當作自主學習)
我也有傳到您的電子信箱喔,感激不盡
您好,實際操控的影片中沒有看到車子正在前、後、左、右時調整車速,不知道能不能達到在移動時調整車速的效果?(例如按下前進按鈕後再調整控制車速的滑桿)
以文章上面的程式寫法是沒辦法同時的。
你好 我照著你的方法做了,UNO板有亮 手機也有連到HC05 馬達控制器也有亮,但是馬達就是不會動