從零開始DIY一輛藍牙遙控小車

關(guān)鍵詞:遙控小車;Arduino;直流電機巧颈;L298N電機驅(qū)動板;串口藍牙模塊

一袖扛、簡介

本項目使用Arduino實現(xiàn)了一個最小功能的藍牙遙控小車

整車效果圖
電路原理圖

制作流程主要分為四個部分:1.組裝小車砸泛;2.燒寫代碼;3.調(diào)試藍牙蛆封;4.整車測試
其中唇礁,前三個部分的耦合性很低,每個部分可以獨立操作和調(diào)試

二惨篱、實現(xiàn)過程

1. 組裝小車

所需環(huán)境:十字螺絲刀×1

車身零件全家福

1.1 電機繞線及固定

直流電機

本項目使用直流電機(即常見的玩具四驅(qū)車的馬達)作為小車的驅(qū)動裝置盏筐,直流電機的特點是:只要電機的兩極有電勢差,電機就可以運轉(zhuǎn)砸讳,反接則逆轉(zhuǎn)琢融,兩極電勢差為零時停止運轉(zhuǎn)。

電極繞線

這款直流電機沒有預(yù)先引出導(dǎo)線簿寂,所以需要我們手工連接導(dǎo)線:
首先漾抬,把杜邦線裸露出銅線的一段塞入電機銅電極的小孔中;
然后把探出的那部分銅線彎折一下常遂,用指尖壓住彎折處兩段的銅線奋蔚,旋轉(zhuǎn)幾圈,讓兩段銅線纏繞在一起;
這樣保證了銅線和電極的充分接觸泊碑,省去了焊接的麻煩坤按。


圖片發(fā)自簡書App

注:沒有要求電極和不同顏色導(dǎo)線的對應(yīng)關(guān)系,可以隨意連接馒过。

測試電機

把兩個電機和4根杜邦線連接完畢之后就可以對電機進行簡單的測試:只要把杜邦線的兩頭接觸18650鋰電池的兩極即可臭脓,可以觀察到電機開始快速轉(zhuǎn)動,如果調(diào)換電池的電極腹忽,會發(fā)現(xiàn)電機發(fā)生反轉(zhuǎn)来累。

固定電機

把兩個固定電機用的插銷插到車底盤上對應(yīng)的空槽中,然后將長螺絲穿過窘奏,用手輕輕旋上螺母


固定電機

1.2 固定驅(qū)動板和萬向輪

L298N工作原理

由上文的內(nèi)容可知嘹锁,直流電機只要一極接高電平,一極接低電平即可轉(zhuǎn)動着裹,大家也知道Arduino的數(shù)字輸出引腳可以直接輸出高電平或低電平领猾,但我們一般不直接將Arduino連接到直流電機上,因為Arduino板的電流負載是有限的骇扇,直接連接電極容易引發(fā)電流過載摔竿,導(dǎo)致Arduino板被燒壞,所以我們選用L298N這塊轉(zhuǎn)接驅(qū)動板少孝,作為Arduino和電機之間的橋梁

針腳對應(yīng)關(guān)系如下圖继低,其中in1 ~ in4對應(yīng)OUT1~OUT4,我們將Arduino的數(shù)字輸出針腳接到in1 ~ in4上稍走,即可將對應(yīng)的高低電平信號映射到OUT1~OUT4的接線柱上袁翁,從而控制電機
L298N除了有轉(zhuǎn)換信號的功能外,內(nèi)部還有穩(wěn)壓模塊婿脸,可以接受7 ~ 12V的輸入梦裂,然后轉(zhuǎn)換出一個5V的輸出,分別對應(yīng)這下部的3個接線柱盖淡,我們之后會將18650電池組的正極接到 7 ~ 12V輸入的接線柱上年柠,負極接地,然后用L298N提供的5V輸出接地作為正負極來為Arduino板供電

L298N針腳對應(yīng)關(guān)系圖
固定驅(qū)動板和接線

固定驅(qū)動板的方法很簡單褪迟,我們只用兩組螺絲螺母冗恨,固定到下圖所示的位置,注意螺絲不要扭太緊

固定驅(qū)動板
把杜邦線固定到接線柱上

使用螺母固定好L298N之后味赃,需要將電極引出的杜邦線的針腳固定到L298N的接線柱上掀抹,方法是先用螺絲刀松開接線柱內(nèi)的螺絲,然后塞入杜邦線的針腳心俗,最后再用螺絲上緊傲武,如下圖

將杜邦線固定到接線柱上

這部分完成

1.3 裝配18650電池盒和電源開關(guān)

18650鋰電池

18650型鋰電是電子產(chǎn)品中比較常用的可充電鋰電池蓉驹,單節(jié)電壓一般為3.7V,常在充電寶或筆記本電腦的電池中作為電芯使用揪利。其型號的定義法則為:如18650型态兴,即指電池的直徑為18mm,長度為65mm疟位,0代表是圓柱體型的電池瞻润。*

選用原因

由于Arduino UNO的標準輸入電壓為5 ~ 9V,L298N驅(qū)動板的輸入電壓為7 ~ 12V甜刻,所以本項目選用了兩節(jié)18650鋰電池串聯(lián)(串聯(lián)后總電壓為7.4V)的方式作為小車的電源绍撞,同時給Arduino和電機驅(qū)動板供電

安裝電池盒,連接開關(guān)
安裝電池盒和開關(guān)

給船型開關(guān)的兩個引腳纏線得院,這部分需要耐心些傻铣,注意兩個引腳的導(dǎo)線不要接觸到一起,否則開關(guān)就會失效

這部分需要耐心些

最后用一個螺絲螺母的組合穿過底板(注意穿過的孔的位置)固定電池盒和用于支撐Arduino的銅柱(用螺母固定)祥绞,還要在L298N的接線柱上增添兩條用于給Arduino供電的杜邦線非洲,安裝的時候注意牢固

注意孔的位置

1.4 固定Arduino,連接剩余杜邦線

固定Arduino就谜,根據(jù)原理圖連線

然后可以用一個螺絲固定Arduino到車身上,并根據(jù)電路原理圖連接從L298N給Arduino供電的杜邦線

連接供電線路
連接給L298N的信號線

1.5 通電調(diào)試

無程序測試電機方法

可以用Arduino板上固定的3.3V和GND輸出測試L298N

用Arduino固定的3.3V和GND輸出測試L298N
按照原理圖連線

2. 燒寫代碼

2.1 使用Arduino IDE向開發(fā)板上傳代碼

連接Arduino和PC機里覆,使用Arduino IDE打開本項目的代碼文件丧荐,在【工具】菜單中選擇所需要上傳的端口,然后點擊上傳

2.2 使用Arduino IDE串口工具進行調(diào)試

底部狀態(tài)欄顯示上傳成功后喧枷,保持Arduino和PC機連接的狀態(tài)虹统,點擊右上角的串口監(jiān)視器,出現(xiàn)一個小程序框

上傳成功后隧甚,打開串口監(jiān)視器

串口監(jiān)視器程序框的頂部是一個輸入欄车荔,在這里我們可可以對上傳到板上的程序進行測試,在輸入欄輸入“w”后戚扳,點擊【發(fā)送】按鈕忧便,會發(fā)現(xiàn)文本框里可以從Arduino得到相應(yīng)的反饋(這是在源代碼中設(shè)置的),然后還可以依次測試發(fā)送“a”帽借、“d”珠增、“s”、“x”這幾種消息砍艾,如均正常蒂教,則程序無誤。

使用了鍵盤的W脆荷、A凝垛、S懊悯、D、X鍵位的布局來與前進梦皮、左轉(zhuǎn)炭分、右轉(zhuǎn)、停止和后退這幾個概念做對應(yīng)

在串口監(jiān)視器中測試

2.3 連接車身調(diào)試

如果小車車身安裝好了届氢,這時可以把Arduino和小車車上的引腳按照原理圖連接好欠窒,然后還通過上一個步驟的方法,在PC機上用串口監(jiān)視器給Arduino發(fā)送消息退子,觀察輪胎的運轉(zhuǎn)情況岖妄,看是否按照程序的描述運轉(zhuǎn),如果不能寂祥,可能是在電機的引腳或者連線的時候出現(xiàn)偏差荐虐,解決方法有三種:

  • 修改源代碼中控制輪的變量與數(shù)字引腳的對應(yīng)關(guān)系
  • 修改Arduino到L298N信號線的連線
  • 修改L298N和電機之間的連線

每種方法都可以解決小車不能按照規(guī)定接受消息的方式運轉(zhuǎn)的問題,請同學(xué)們自由選擇

燒錄代碼和測試

校正輪胎轉(zhuǎn)動方向

3. 調(diào)試藍牙

關(guān)于HC-05和調(diào)試

HC-05是一個串口藍牙通信模塊丸凭,內(nèi)部的芯片上封裝了藍牙通信協(xié)議以及用于調(diào)試的AT指令集福扬,功能是:可以通過藍牙接受數(shù)據(jù),再從串口通信協(xié)議從針腳發(fā)送出去惜犀,也可以從串口接受消息铛碑,再經(jīng)過芯片用藍牙發(fā)送出去,相當于通信無線到有線通信的一個橋梁虽界。

AT指令是應(yīng)用于終端設(shè)備與PC應(yīng)用之間的連接與通信的指令汽烦。AT即Attention。每個AT命令行中只能包含一條AT指令莉御;對于AT指令的發(fā)送撇吞,除AT兩個字符外,最多可以接收1056個字符的長度(包括最后的空字符)

我們將藍牙模塊(HC-05)通過轉(zhuǎn)換器(TTL轉(zhuǎn)USB)連接到電腦上礁叔, 在電腦上使用串口調(diào)試軟件(CoolTerm)向藍牙模塊發(fā)送特定的AT指令來對藍牙模塊的一些參數(shù)牍颈,比如設(shè)備名稱、配對碼琅关、主從角色等等煮岁。

3.1 將 串口藍牙模塊(HC-05) 與PC相連接

使用 USB轉(zhuǎn)TTL模塊 連接 HC-05,連線如下圖

連線:GND--GND涣易;5V--5V人乓;RX--TX;TX--RX
要按住RST鍵連接USB都毒,才能進入AT調(diào)試模式
  • 按住藍牙模塊上的RST鍵色罚,插入PC機的USB口,松開RST鍵账劲,進入AT指令調(diào)試模式戳护,標志是藍牙模塊上的紅色指示燈慢速閃爍
  • 如果不按住RST鍵直接連接USB口的話金抡,紅色指示燈會快速閃爍,標志進入藍牙連接模式

3.2 打開CoolTerm腌且,建立串口通信連接

將藍牙模塊連接到PC上后梗肝,查看設(shè)備管理器,打開CoolTerm軟件铺董,點擊【Options】圖標進入選項設(shè)置巫击,【Port】選項選擇設(shè)備管理器中CH340對應(yīng)的端口(根據(jù)電腦的不同,不一定是COM5)精续,【Baudrate】修改為 38400坝锰,然后點擊底部的【OK】確定

進入設(shè)置,修改端口和波特率

設(shè)置完成后重付,點擊軟件上方的【Connect】圖標

3.3 使用AT指令調(diào)整藍牙模塊的參數(shù)

【Connect】成功后顷级,依次點選菜單欄上的【Connection】→【Send String】,會出現(xiàn)一個消息發(fā)送框确垫,通過這個可以向藍牙模塊發(fā)送AT指令弓颈,如下圖:

輸入“AT+回車”

注意,使用AT指令的時候一定要回車到第二行再點擊【Send】發(fā)送

AT指令集

分別輸入如下指令删掀,查看設(shè)備的當前狀況
“AT”:回復(fù)“OK”翔冀,說明設(shè)備正常。
“AT+UART”:查看設(shè)備的串口通信參數(shù)披泪,本實驗?zāi)K藍牙模式的波特率為9600
“AT+ADDR”:查看設(shè)備的藍牙地址
“AT+ROLE”:查看設(shè)備的主從轉(zhuǎn)臺纤子,“0”為從模式,“1”為主模式
“AT+PSWD”:查看設(shè)備當前的配對碼付呕,默認是1234
“AT+NAME”:查看設(shè)備當前的名稱计福,默認是 HC-05
“AT+RESET”:重啟設(shè)備

用AT指令配置設(shè)備

發(fā)送完上述AT指令查看完設(shè)備信息后跌捆,需要根據(jù)你的情況修改一些設(shè)備信息徽职,方法是,在相應(yīng)的AT指令后加“=”號佩厚,輸入要修改的信息即可姆钉,本項目主要修改信息如下例

  • “AT+ROLE=0”:設(shè)置藍牙設(shè)備為從模式
  • “AT+PSWD=123456”:修改配對碼為123456,用戶自定義
  • “AT+NAME=Carduino”:修改名稱為Carduino抄瓦,用戶自定義
  • “AT+UART=9600,0,0”:修改藍牙工作狀態(tài)波特率為9600潮瓶,無停止位和校驗位
注意!每次都要回車到第二行再點擊“Send”

由于硬件存在一定的缺陷钙姊,HC-05藍牙模塊在設(shè)置【NAME】參數(shù)時會有些問題毯辅,可能需要多設(shè)置幾次
如果改名不成功,請使用“AT+ADDR”查詢藍牙設(shè)備地址煞额,在手機上根據(jù)搜索到的設(shè)備地址來連接藍牙模塊

3.4 下載安裝BlueSPP軟件思恐,設(shè)置按鍵消息

BlueSPP是一個手機端的藍牙串口通訊通信工具沾谜,可以連接藍牙設(shè)備,通過串行通訊協(xié)議發(fā)送消息

  • 打開APP


    進入BlueSPP
  • 連接設(shè)備


    點右上角圖標搜索設(shè)備
  • 連接


    輸入事先配置的配對碼
  • APP首頁可以在聊天窗口中向設(shè)備發(fā)送消息


    可以發(fā)送消息
  • 右滑胀莹,進入自定義鍵盤頁面基跑,每個按鈕的“名稱”可定義,按鈕對應(yīng)的“按下”描焰,“松開”事件都可配置成發(fā)送特定消息


    配置按鈕“前進”

    配置按鈕“左轉(zhuǎn)”

    配置按鈕“后退”

    配置結(jié)束
按鍵名稱 按下發(fā)送 松開發(fā)送
前進 w
后退 x s
左轉(zhuǎn) a w
右轉(zhuǎn) d w
停止 s

上表為筆者的配置媳否,大家可以根據(jù)自己的控制習(xí)慣進行設(shè)置

4. 整車測試

終于到激動人心的最終環(huán)節(jié)了

4.1 給Arduino連接藍牙模塊

連接藍牙

4.2 使用獨立電源測試

打開開關(guān),L298N荆秦、Arduino篱竭、和HC-05藍牙模塊上的能正常閃爍,就可以在手機端用BlueSPP連接藍牙萄凤,讓小車下地開始真正的遙控測試了

三室抽、參考代碼

char serial_data;   // 將從串口讀入的消息存儲在該變量中

int wheel_R_1 = 5;  // 右輪in1對應(yīng)Arduino 5號引腳
int wheel_R_2 = 6; // 右輪in2對應(yīng)Arduino 6號引腳
int wheel_L_1 = 9;  // 左輪in1對應(yīng)Arduino 9號引腳
int wheel_L_2 = 10;  // 左輪in2對應(yīng)Arduino 10號引腳

void setup(){
    // 配置所有控制輪的引腳為輸出
    pinMode(wheel_L_1, OUTPUT);
    pinMode(wheel_L_2, OUTPUT);
    pinMode(wheel_R_1, OUTPUT);
    pinMode(wheel_R_2, OUTPUT);
    // 配置串口波特率
    Serial.begin(9600);
}

void loop(){
    if(Serial.available()){
        // 將從串口讀入的消息存儲在該變量中
        serial_data = Serial.read();
        // 按照 w a s d x 在鍵盤上的布局來控制車
        // 如果接收到 w ,直行
        if( serial_data == 'w' ){
            move_ahead( );
            Serial.println("The car is moving ahead!");
        }
        // 如果接收到 x 靡努,后退
        else if( serial_data == 'x'){
            move_backwards( );
            Serial.println("The car is moving backwards!");
        }
        // 如果接收到 a 坪圾,左轉(zhuǎn)
        else if( serial_data == 'a'){
            turn_left( );
            Serial.println("The car is turning left!");
        }
        // 如果接收到 d ,右轉(zhuǎn)
        else if( serial_data == 'd'){
            turn_right( );
            Serial.println("The car is turning right!");
        }
        // 如果接收到 s 惑朦,停止
        else if( serial_data == 's'){
            stop();
            Serial.println("The car is stopping!");
        }
    }
}


// 定義直行函數(shù)
void move_ahead(){
    digitalWrite( wheel_L_1, HIGH);
    digitalWrite( wheel_L_2, LOW);
    digitalWrite( wheel_R_1, HIGH);
    digitalWrite( wheel_R_2, LOW);
}

// 定義后退函數(shù)
void move_backwards(){
    digitalWrite( wheel_L_1, LOW);
    digitalWrite( wheel_L_2, HIGH);
    digitalWrite( wheel_R_1, LOW);
    digitalWrite( wheel_R_2, HIGH);
}

// 定義左轉(zhuǎn)函數(shù)
void turn_left(){
    digitalWrite( wheel_L_1, LOW);
    digitalWrite( wheel_L_2, LOW);
    digitalWrite( wheel_R_1, HIGH);
    digitalWrite( wheel_R_2, LOW);
}

// 定義右轉(zhuǎn)函數(shù)
void turn_right(){
    digitalWrite( wheel_L_1, HIGH);
    digitalWrite( wheel_L_2, LOW);
    digitalWrite( wheel_R_1, LOW);
    digitalWrite( wheel_R_2, LOW);
}

void stop(){
    digitalWrite( wheel_L_1, LOW);
    digitalWrite( wheel_L_2, LOW);
    digitalWrite( wheel_R_1, LOW);
    digitalWrite( wheel_R_2, LOW);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兽泄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子漾月,更是在濱河造成了極大的恐慌病梢,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梁肿,死亡現(xiàn)場離奇詭異蜓陌,居然都是意外死亡,警方通過查閱死者的電腦和手機吩蔑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門钮热,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烛芬,你說我怎么就攤上這事隧期。” “怎么了赘娄?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵仆潮,是天一觀的道長。 經(jīng)常有香客問我遣臼,道長性置,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任揍堰,我火速辦了婚禮鹏浅,結(jié)果婚禮上辟灰,老公的妹妹穿的比我還像新娘。我一直安慰自己篡石,他們只是感情好芥喇,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凰萨,像睡著了一般继控。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胖眷,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天武通,我揣著相機與錄音,去河邊找鬼珊搀。 笑死冶忱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的境析。 我是一名探鬼主播囚枪,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劳淆!你這毒婦竟也來了链沼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沛鸵,失蹤者是張志新(化名)和其女友劉穎括勺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曲掰,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡疾捍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了栏妖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乱豆。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖底哥,靈堂內(nèi)的尸體忽然破棺而出咙鞍,到底是詐尸還是另有隱情房官,我是刑警寧澤趾徽,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站翰守,受9級特大地震影響孵奶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜡峰,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一了袁、第九天 我趴在偏房一處隱蔽的房頂上張望朗恳。 院中可真熱鬧,春花似錦载绿、人聲如沸粥诫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怀浆。三九已至,卻和暖如春怕享,著一層夾襖步出監(jiān)牢的瞬間执赡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工函筋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沙合,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓跌帐,卻偏偏與公主長得像首懈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谨敛,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容