風箏 發表於 2021-01-09 11:47:36
在機器人中使用伺服電機進行精確控制很常見。在本文中,我們將向您展示如何使用Arduino UNO開發板無線連接一個伺服電機,並且通過藍牙連接一臺Android設備。我們已經介紹過如何使用Arduino開發板控制伺服電機,這次我們使用無線藍牙模塊HC-06控制伺服電機。
所需的材料
● Arduino UNO開發板
● HC-05或HC-06藍牙模塊
● 伺服電機
● Playstore的Roboremo App
● 麵包板
● 連接導線
HC-06藍牙模塊
藍牙可以運行在以下兩種模式:
1. AT指令設置模式
2. 工作模式
在AT指令設置模式下,我們可以配置藍牙屬性,如藍牙信號的名稱、密碼、運行波特率等。工作模式是我們可以在PIC單片機和藍牙模塊之間發送和接收數據的一種模式。因此,在本教程中,我們將僅使用工作模式進行測試。AT指令設置模式保留為默認設置。設備名稱將是HC-05,密碼將為0000或1234,最重要的是所有藍牙模塊的默認波特率為9600。
該模塊工作在5V電源,信號引腳工作在3.3V,所以模塊內部安裝有一個3.3V穩壓器。因此我們不必擔心。在六個引腳中工作模式只使用了四個引腳。引腳連接表如下所示
序號 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開發板藍牙控制伺服電機的電路圖:
配置Roboremo App以控制伺服電機
第1步: 從Android Play商店下載Roboremo應用程式並將其安裝到您的智慧型手機中。安裝完成後,您將看到如下圖左側所示的應用程式窗口,然後點擊「Menu」按鈕,您將看到如下圖右側所示的窗口:
第2步: 然後點擊「connect」按鈕,你會看到如下圖3所示的窗口,然後你需要選擇'Bluetooth RFCOMM',然後你就可以將HC-06藍牙模塊連接到Android應用'Roboremo'。
第3步: 連接HC-06藍牙模塊後,返回到第2步右側的窗口,然後點擊'edit ui'按照您的需要創建用戶界面。
當點擊''edit ui"時,您將再次看到圖1所示的窗口,然後在屏幕上的任意位置點擊屏幕,您將看到如下圖所示的應用程式窗口,並選擇「Button」以獲得一個按鈕模板。
第4步: 選擇按鈕模板後,您將在屏幕上獲得一個按鈕進行編輯。您可以調整大小並將結構移動到屏幕的任何位置。現在,為了設置通過藍牙點擊發送的值,需要設置「set press action」,並鍵入您想要從該特定按鈕發送的值。就像我們通過按下Roboremo android應用程式中的'Start'按鈕發送'1'來旋轉伺服。
第5步: 最終我們設計了一個用戶界面來使用智慧型手機來控制伺服電機。
代碼和說明
本文末尾給出了使用藍牙控制伺服電機的完整Arduino代碼。
Arduino自帶有伺服電機庫,它處理所有PWM相關的事情來旋轉伺服,你只需要輸入你想旋轉的角度,然後使用函數servo1.write(angle)即可;該函數將使伺服電機旋轉到所需的角度。
因此,我們首先定義伺服電機庫和軟體串行庫用於定義Rx和Tx引腳。
#include
#include
在下面的代碼中,我們正在初始化Arduino的Rx和Tx引腳,為伺服電機和其他事情定義變量。
Servo myServo;
int TxD = 11;
int RxD = 10;
int servoposition;
int servopos;
int new1;
SoftwareSerial bluetooth(TxD, RxD);
現在,將所有變量和組件設置為初始階段。在這裡,我們使用Arduino開發板的第9腳連接了伺服電機,並將伺服電機的初始位置設置為0度。串行和藍牙通信的波特率也設置為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()函數中,Arduino將始終檢查輸入值,並根據智慧型手機接收到的值旋轉伺服器。所有的值將通過串行通信接收。
如果該值為0,伺服將旋轉到0度。同樣,如果我們從藍牙應用程式發送45、90、135和180,則伺服器將分別旋轉到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);
}
如果我們通過按下開始按鈕發送值'1',伺服將一直旋轉,直到按下停止按鈕。在這裡我們按下停止按鈕時發送'2',Arduino開發板讀取後,它將跳出while循環,伺服電機停止旋轉。
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;}
}
}
}
使用藍牙的伺服電機控制的工作過程
在這個項目中,我們使用Android應用程式「Roboremo」來控制伺服電機。在這個應用程式的界面中,我們創建了5個按鈕來控制伺服電機,如前所述。每個按鈕的功能在下表中給出:
序號 按鈕名稱 發送值 描述 1 Start 1 該按鈕用於開始將伺服從0°旋轉到180°。 2 Stop 2 該按鈕用於在任何時候停止伺服。 3 0⁰ 0 該按鈕用於將伺服旋轉至0°。 4 90⁰ 90 該按鈕用於將伺服旋轉至90°。 5 180⁰ 180 該按鈕用於將伺服旋轉至180°。因此,通過在Android應用程式Roboremo上按下這些按鈕,數據將通過智慧型手機的藍牙發送到HC-06藍牙模塊。Arduino接收來自該HC-06模塊的數據,然後根據代碼中按鈕表示的角度旋轉伺服電機。我們也可以編寫角度45和135的代碼,但由於Roboremo應用程式的限制,只能創建5個按鈕,所以我們跳過了這兩個按鈕。
通過使用這種方式,我們可以使用藍牙將數據從智慧型手機發送到Arduino開發板,然後以無線方式控制伺服器。這可以用於許多應用程式,如玩具車、機器人等。
編輯:hfy
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴