使用伺服電機(jī)在機(jī)器人技術(shù)中很常見(jiàn),以實(shí)現(xiàn)精確控制。在這里,在本教程中,我們將向您展示如何通過(guò)藍(lán)牙連接將伺服電機(jī)與Arduino UNO和Android設(shè)備無(wú)線使用。我們已經(jīng)使用 Arduino 控制了伺服,這次我們使用Arduino 和藍(lán)牙控制伺服電機(jī)。
所需材料
Arduino UNO
HC-05 或 HC-06 藍(lán)牙模塊
伺服電機(jī)
來(lái)自Playstore的Roboremo應(yīng)用程序
面包板
連接線
HC-06 藍(lán)牙模塊
藍(lán)牙可以在以下兩種模式下運(yùn)行:
命令模式
操作模式
在命令模式下,我們將能夠配置藍(lán)牙屬性,例如藍(lán)牙信號(hào)的名稱,密碼,操作波特率等。操作模式是我們能夠在PIC微控制器和藍(lán)牙模塊之間發(fā)送和接收數(shù)據(jù)的模式。因此,在本教程中,我們將只玩弄操作模式。命令模式將保留默認(rèn)設(shè)置。設(shè)備名稱將是HC-05(我正在使用HC-06),密碼將是0000或1234,最重要的是,所有藍(lán)牙模塊的默認(rèn)波特率為9600。
模塊采用 5V 電源供電,信號(hào)引腳工作在 3.3V,因此模塊本身存在一個(gè) 3.3V 穩(wěn)壓器。因此,我們不必?fù)?dān)心。在六個(gè)引腳中,只有四個(gè)將在操作模式下使用。引腳連接表如下所示
?
S.No | HC-05/HC-06 上的引腳 | MCU 上的引腳名稱 | PIC 中的引腳編號(hào) |
1 | Vcc | Vdd | 31圣針 |
2 | Vcc | 格德 | 32德·針 |
3 | 德克薩斯 | RC6/Tx/CK | 25千針 |
4 | 接收 | RC7/Rx/DT | 26千針 |
5 | 州 | 數(shù)控 | 數(shù)控 |
6 | 英文(使能) | 數(shù)控 | 數(shù)控 |
?
電路圖
此Arduino藍(lán)牙伺服電機(jī)控制項(xiàng)目的電路圖如下:
?
配置 Roboremo 應(yīng)用程序以控制伺服:
第 1 步:-從Android Play商店下載Roboremo應(yīng)用程序并將其安裝在智能手機(jī)中。安裝后,您將看到如圖1所示的應(yīng)用程序窗口,通過(guò)單擊“菜單”按鈕,您將看到如下所示的圖2所示窗口:
?
第 2 步:-然后單擊連接按鈕,您將看到下面圖3所示的窗口,然后您必須選擇“藍(lán)牙RFCOMM”,然后您將能夠?qū)C-06藍(lán)牙模塊與Android應(yīng)用程序“Roboremo”連接。
第 3 步:-連接到HC-06藍(lán)牙模塊后,返回圖2窗口,然后單擊“編輯ui”以根據(jù)需要?jiǎng)?chuàng)建用戶界面。
當(dāng)單擊“編輯ui”時(shí),您將再次看到圖1所示的窗口,然后單擊屏幕上的任意位置,您將看到如圖4所示的應(yīng)用程序窗口,然后選擇“按鈕”以獲取按鈕結(jié)構(gòu)。
第 4 步:-選擇按鈕后,您將在屏幕上看到一個(gè)按鈕結(jié)構(gòu)進(jìn)行編輯。您可以調(diào)整結(jié)構(gòu)的大小并將其移動(dòng)到屏幕上的任意位置?,F(xiàn)在,要設(shè)置通過(guò)藍(lán)牙單擊時(shí)發(fā)送的值,您有“設(shè)置按下操作”(如圖 6 所示)并鍵入要從該特定按鈕發(fā)送的值。就像,我們正在發(fā)送“1”通過(guò)按 Roboremo android 應(yīng)用程序中的“開(kāi)始”按鈕來(lái)旋轉(zhuǎn)伺服。
您可以在后面給出的表格中檢查所有值,單擊不同的按鈕發(fā)送。
?
第 5 步:-最后,我們有用戶界面來(lái)使用智能手機(jī)控制伺服電機(jī)。
代碼和說(shuō)明
最后給出了通過(guò)藍(lán)牙的Arduino控制伺服電機(jī)的完整代碼。
Arduino具有伺服電機(jī)庫(kù),它處理所有與PWM相關(guān)的東西來(lái)旋轉(zhuǎn)伺服器,您只需要輸入要旋轉(zhuǎn)的角度,并且有功能servo1.write(angle); 這會(huì)將伺服器旋轉(zhuǎn)到所需的角度。
因此,這里我們首先定義伺服電機(jī)的庫(kù),軟件串行庫(kù)用于定義Rx和Tx引腳。
#include
#include
在下面的代碼中,我們正在初始化 Rx 和 Tx 的 Arduino 引腳,為伺服和其他東西定義變量。
Servo myServo; int TxD = 11; int RxD = 10; int servoposition; int servopos; int new1; SoftwareSerial bluetooth(TxD, RxD);
現(xiàn)在,將所有變量和組件設(shè)置為初始階段。在這里,我們將伺服器連接到 9千Arduino的引腳,并使伺服的初始位置為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);
}
在空回路功能中,Arduino將一直檢查輸入的值,并根據(jù)從智能手機(jī)接收的值旋轉(zhuǎn)伺服。所有值都將使用串行通信接收。
如果值為 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”,則伺服將連續(xù)旋轉(zhuǎn),直到按下停止按鈕。在這里,我們?cè)诎聪峦V拱粹o時(shí)發(fā)送“2”,Arduino 將讀取該按鈕,它將中斷 while 循環(huá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ī)控制工作:
在這個(gè)項(xiàng)目中,我們使用Android應(yīng)用程序“Roboremo”控制伺服電機(jī)。在此應(yīng)用程序的界面中,我們創(chuàng)建了 5 個(gè)按鈕來(lái)控制伺服電機(jī),如前所述。下表給出了每個(gè)按鈕的工作:
?
S.No。 | 按鈕名稱 | 發(fā)送值 | 描述 |
1. | 開(kāi)始 | 1 | 此按鈕用于開(kāi)始將伺服從 0? 旋轉(zhuǎn)到 180?。 |
2. | 停 | 2 | 此按鈕用于隨時(shí)停止舵機(jī)。 |
3. | 0? | 0 | 此按鈕用于將舵機(jī)旋轉(zhuǎn)到 0?。 |
4. | 90? | 90 | 此按鈕用于將舵機(jī)旋轉(zhuǎn)到 90?。 |
5. | 180? | 180 | 此按鈕用于將舵機(jī)旋轉(zhuǎn)到 180?。 |
?
因此,通過(guò)按下Android應(yīng)用程序Roboremo上的這些按鈕,數(shù)據(jù)將通過(guò)智能手機(jī)的藍(lán)牙發(fā)送到HC-06藍(lán)牙模塊。從HC-06模塊數(shù)據(jù)由Arduino接收,Arduino以特定按鈕的代碼中定義的角度旋轉(zhuǎn)伺服。我們還對(duì)角度 45 和 135 進(jìn)行了編碼,但由于 Roboremo 應(yīng)用程序的限制,您只能創(chuàng)建 5 個(gè)按鈕,因此我們跳過(guò)了兩個(gè)按鈕。
因此,這就是您可以使用藍(lán)牙將數(shù)據(jù)從智能手機(jī)發(fā)送到Arduino以無(wú)線控制伺服的方法。
#include
#include
Servo myServo;
int TxD = 11;
int RxD = 10;
int servoposition;
int servopos;
int new1;
SoftwareSerial bluetooth(TxD, RxD);
void setup() {
int pos=0;
myServo.attach(9);
myServo.write(0);
Serial.begin(9600); // start serial communication at 9600bps
bluetooth.begin(9600);
}
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);
}
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;}
}
}
}
評(píng)論