在機(jī)器人中使用伺服電機(jī)進(jìn)行精確控制很常見(jiàn)。在本文中,我們將向您展示如何使用Arduino UNO開(kāi)發(fā)板無(wú)線連接一個(gè)伺服電機(jī),并且通過(guò)藍(lán)牙連接一臺(tái)Android設(shè)備。我們已經(jīng)介紹過(guò)如何使用Arduino開(kāi)發(fā)板控制伺服電機(jī),這次我們使用無(wú)線藍(lán)牙模塊HC-06控制伺服電機(jī)。
所需的材料
● Arduino UNO開(kāi)發(fā)板
● HC-05或HC-06藍(lán)牙模塊
● 伺服電機(jī)
● Playstore的Roboremo App
● 面包板
● 連接導(dǎo)線
HC-06藍(lán)牙模塊
藍(lán)牙可以運(yùn)行在以下兩種模式:
1. AT指令設(shè)置模式
2. 工作模式
在AT指令設(shè)置模式下,我們可以配置藍(lán)牙屬性,如藍(lán)牙信號(hào)的名稱、密碼、運(yùn)行波特率等。工作模式是我們可以在PIC單片機(jī)和藍(lán)牙模塊之間發(fā)送和接收數(shù)據(jù)的一種模式。因此,在本教程中,我們將僅使用工作模式進(jìn)行測(cè)試。AT指令設(shè)置模式保留為默認(rèn)設(shè)置。設(shè)備名稱將是HC-05,密碼將為0000或1234,最重要的是所有藍(lán)牙模塊的默認(rèn)波特率為9600。
該模塊工作在5V電源,信號(hào)引腳工作在3.3V,所以模塊內(nèi)部安裝有一個(gè)3.3V穩(wěn)壓器。因此我們不必?fù)?dān)心。在六個(gè)引腳中工作模式只使用了四個(gè)引腳。引腳連接表如下所示
序號(hào) | HC-05模塊的引腳 | MCU的引腳 | PIC的引腳 |
1 | Vcc | Vdd | 第31腳 |
2 | Gnd | Gnd | 第32腳 |
3 | Tx | RC6 / Tx / CK | 第25腳 |
4 | Rx | RC7 / Rx / DT | 第26腳 |
5 | State | NC | NC |
6 | EN(Enable) | NC | NC |
電路原理圖
使用Arduino開(kāi)發(fā)板藍(lán)牙控制伺服電機(jī)的電路圖:
配置Roboremo App以控制伺服電機(jī)
第1步: 從Android Play商店下載Roboremo應(yīng)用程序并將其安裝到您的智能手機(jī)中。安裝完成后,您將看到如下圖左側(cè)所示的應(yīng)用程序窗口,然后點(diǎn)擊“Menu”按鈕,您將看到如下圖右側(cè)所示的窗口:
第2步: 然后點(diǎn)擊“connect”按鈕,你會(huì)看到如下圖3所示的窗口,然后你需要選擇'Bluetooth RFCOMM',然后你就可以將HC-06藍(lán)牙模塊連接到Android應(yīng)用'Roboremo'。
第3步: 連接HC-06藍(lán)牙模塊后,返回到第2步右側(cè)的窗口,然后點(diǎn)擊'edit ui'按照您的需要?jiǎng)?chuàng)建用戶界面。
當(dāng)點(diǎn)擊''edit ui"時(shí),您將再次看到圖1所示的窗口,然后在屏幕上的任意位置點(diǎn)擊屏幕,您將看到如下圖所示的應(yīng)用程序窗口,并選擇“Button”以獲得一個(gè)按鈕模板。
第4步: 選擇按鈕模板后,您將在屏幕上獲得一個(gè)按鈕進(jìn)行編輯。您可以調(diào)整大小并將結(jié)構(gòu)移動(dòng)到屏幕的任何位置。現(xiàn)在,為了設(shè)置通過(guò)藍(lán)牙點(diǎn)擊發(fā)送的值,需要設(shè)置“set press action”,并鍵入您想要從該特定按鈕發(fā)送的值。就像我們通過(guò)按下Roboremo android應(yīng)用程序中的'Start'按鈕發(fā)送'1'來(lái)旋轉(zhuǎn)伺服。
第5步: 最終我們?cè)O(shè)計(jì)了一個(gè)用戶界面來(lái)使用智能手機(jī)來(lái)控制伺服電機(jī)。
代碼和說(shuō)明
本文末尾給出了使用藍(lán)牙控制伺服電機(jī)的完整Arduino代碼。
Arduino自帶有伺服電機(jī)庫(kù),它處理所有PWM相關(guān)的事情來(lái)旋轉(zhuǎn)伺服,你只需要輸入你想旋轉(zhuǎn)的角度,然后使用函數(shù)servo1.write(angle)即可;該函數(shù)將使伺服電機(jī)旋轉(zhuǎn)到所需的角度。
因此,我們首先定義伺服電機(jī)庫(kù)和軟件串行庫(kù)用于定義Rx和Tx引腳。
#include
#include
在下面的代碼中,我們正在初始化Arduino的Rx和Tx引腳,為伺服電機(jī)和其他事情定義變量。
Servo myServo;
int TxD = 11;
int RxD = 10;
int servoposition;
int servopos;
int new1;
SoftwareSerial bluetooth(TxD, RxD);
現(xiàn)在,將所有變量和組件設(shè)置為初始階段。在這里,我們使用Arduino開(kāi)發(fā)板的第9腳連接了伺服電機(jī),并將伺服電機(jī)的初始位置設(shè)置為0度。串行和藍(lán)牙通信的波特率也設(shè)置為9600。
void setup() {
int pos=0;
myServo.attach(9);
myServo.write(0);
Serial.begin(9600); // start serial communication at 9600bps
bluetooth.begin(9600);
}
在void loop()函數(shù)中,Arduino將始終檢查輸入值,并根據(jù)智能手機(jī)接收到的值旋轉(zhuǎn)伺服器。所有的值將通過(guò)串行通信接收。
如果該值為0,伺服將旋轉(zhuǎn)到0度。同樣,如果我們從藍(lán)牙應(yīng)用程序發(fā)送45、90、135和180,則伺服器將分別旋轉(zhuǎn)到45、90、135和180度角。
void loop() {
if (bluetooth.available()){
String value = bluetooth.readString();
servoposition = value.toInt();
if (value.toInt() == 0){
Serial.println(servoposition);
myServo.write(0);
}
if (value.toInt() == 45){
Serial.println(servoposition);
myServo.write(45);
}
if (value.toInt() == 90){
Serial.println(servoposition);
myServo.write(90);
}
if (value.toInt() == 135){
Serial.println(servoposition);
myServo.write(135);
}
if (value.toInt() == 180){
Serial.println(servoposition);
myServo.write(180);
}
如果我們通過(guò)按下開(kāi)始按鈕發(fā)送值'1',伺服將一直旋轉(zhuǎn),直到按下停止按鈕。在這里我們按下停止按鈕時(shí)發(fā)送'2',Arduino開(kāi)發(fā)板讀取后,它將跳出while循環(huán),伺服電機(jī)停止旋轉(zhuǎn)。
while(value.toInt()==1){
if (bluetooth.available())
{
value = bluetooth.readString();
Serial.println(value);
if (value.toInt()==2)
{Serial.println("YYY");break; }
}
servopos++;
delay(30);
Serial.println(servopos);
myServo.write(servopos);
if (servopos ==180 )
{servopos=0;break;}
}
}
}
使用藍(lán)牙的伺服電機(jī)控制的工作過(guò)程
在這個(gè)項(xiàng)目中,我們使用Android應(yīng)用程序“Roboremo”來(lái)控制伺服電機(jī)。在這個(gè)應(yīng)用程序的界面中,我們創(chuàng)建了5個(gè)按鈕來(lái)控制伺服電機(jī),如前所述。每個(gè)按鈕的功能在下表中給出:
序號(hào) | 按鈕名稱 | 發(fā)送值 | 描述 |
1 | Start | 1 | 該按鈕用于開(kāi)始將伺服從0°旋轉(zhuǎn)到180°。 |
2 | Stop | 2 | 該按鈕用于在任何時(shí)候停止伺服。 |
3 | 0? | 0 | 該按鈕用于將伺服旋轉(zhuǎn)至0°。 |
4 | 90? | 90 | 該按鈕用于將伺服旋轉(zhuǎn)至90°。 |
5 | 180? | 180 | 該按鈕用于將伺服旋轉(zhuǎn)至180°。 |
因此,通過(guò)在Android應(yīng)用程序Roboremo上按下這些按鈕,數(shù)據(jù)將通過(guò)智能手機(jī)的藍(lán)牙發(fā)送到HC-06藍(lán)牙模塊。Arduino接收來(lái)自該HC-06模塊的數(shù)據(jù),然后根據(jù)代碼中按鈕表示的角度旋轉(zhuǎn)伺服電機(jī)。我們也可以編寫角度45和135的代碼,但由于Roboremo應(yīng)用程序的限制,只能創(chuàng)建5個(gè)按鈕,所以我們跳過(guò)了這兩個(gè)按鈕。
通過(guò)使用這種方式,我們可以使用藍(lán)牙將數(shù)據(jù)從智能手機(jī)發(fā)送到Arduino開(kāi)發(fā)板,然后以無(wú)線方式控制伺服器。這可以用于許多應(yīng)用程序,如玩具車、機(jī)器人等。
編輯:hfy
-
伺服電機(jī)
+關(guān)注
關(guān)注
87文章
2105瀏覽量
59228 -
Arduino
+關(guān)注
關(guān)注
189文章
6493瀏覽量
190202 -
伺服電機(jī)控制
+關(guān)注
關(guān)注
0文章
17瀏覽量
7670
發(fā)布評(píng)論請(qǐng)先 登錄
【新品】遠(yuǎn)距離圖傳數(shù)傳模塊開(kāi)發(fā)板、藍(lán)牙模塊開(kāi)發(fā)板、無(wú)線模塊開(kāi)發(fā)板

基于RV1126開(kāi)發(fā)板實(shí)現(xiàn)人臉檢測(cè)方案

基于RV1126開(kāi)發(fā)板實(shí)現(xiàn)人臉檢測(cè)方案

基于RV1126開(kāi)發(fā)板實(shí)現(xiàn)人臉檢測(cè)方案

雷卯收集4G/WIFI無(wú)線傳輸產(chǎn)品開(kāi)發(fā)板

通過(guò)Arduino Nano Matter開(kāi)發(fā)板構(gòu)建智能卷簾系統(tǒng)

Arduino Nano Matter開(kāi)發(fā)板正式上市
使用恩智浦無(wú)線FRDM開(kāi)發(fā)板實(shí)現(xiàn)創(chuàng)新無(wú)線解決方案

基于Arduino的串口通信項(xiàng)目
無(wú)線連接測(cè)試儀的技術(shù)原理和應(yīng)用場(chǎng)景
如何使用Arduino實(shí)現(xiàn)CAN總線通信
?Banana Pi BPi-M4 Zero 開(kāi)源硬件開(kāi)發(fā)板評(píng)測(cè)試: 全志科技H618 方案設(shè)計(jì) ,板載4G 內(nèi)存,32G eMMC
瑞薩在無(wú)線連接領(lǐng)域的創(chuàng)新與未來(lái)展望


評(píng)論