因創客協會招新和培養下一屆需要,出一期arduino通過藍牙控制實驗室總線機器人的教程,

我的接線是:
TX ----> RX
RX ----> TX
GND ----> GND
VCC —> VCCarduinoUNOR3的硬體UART串口不夠,所以我用D2D3引腳去模擬串口,
藍牙的接線是:
RX ----> D2(模擬成TX)
TX ----> D3(模擬成RX)
接下來下載總線舵機給我們的官方資料:
鏈接:https://pan.baidu.com/s/1HnlANEti1_5fHmakhyOfRg
提取碼:498t
從資料里面安裝上位機軟體
安裝完上位機軟體后,打開軟體,只留下數字從1到6的六個舵機,然后拖到與我們機器人實際對應的位置(利于記錄動作組和編程)

接著用USB線連接機器人,然后打開電池電源,如果連接上了機器人,右上角的有線連接會變成綠色(我們實驗室沒買無線連接的),
如果沒連接上可以檢查一下CH340是否連接,或者檢查一下線是否接好接穩了(實驗室的機器人多半線是出問題了,因為太多人接線編程機器人了)
連接上機器人之后,我們就可以對機器人進行動作組的編程了,這個上位機的功能還是非常強大的,編程動作組的方式也挺多的,挑我會的講,,,
方法一:經典添加法
直接移動舵機塊,成功連接上的話,你移動這個塊,機器人也會跟著動,其值從0–1000可填,

我們拖動之后,再點擊添加動作,然后再動,再添加,以此類推,就可以形成動作組了

形成動作組之后,可以點擊更新動作,在線運行去看一下你編的動作,沒問題之后,可以點擊保存動作檔案保存下來(怕失誤就多保存一下,保存是個好習慣T.T)

方法二:暴力掰法
點擊手掰編程,然后機器人就會掉電了,還是硬的就別硬掰,會壞掉,他自動掉電之后,就可以用手掰編程了,我們編一個動作按一下RUN,或者它自動保存這個動作,保存完之后,點擊角度回讀,你掰的動作就會以剛剛的添加法的形式加出來了,然后點擊下載就行了,

多下載,多除錯,多嘗試,你就已經會了總線機器人的一大半了,
接下來就是跟著手冊操作了(實際上花里胡哨的,很難看懂,大概看看就好,)
打開通信協議看通訊協議的第二個指令,他的意思是說,要想和機器人通訊,得線先發兩個0x55(幀頭)給我,然后再發資料長度,接著才是控制動作組的指令0x06,然后才輸出控制引數(編號,運行次數)
根據手冊得出代碼:

然后我們過去,機器人執行完之后,會回傳我們arduino 0x55,我們就可以用來判斷動作是否完成了

為了便于理解,這里給出米思齊的全部程式代碼截圖:

轉換成arduino IDE代碼編程:
死回圈控制機器人執行固定動作:
/*******************************發送指令的相當于操作**************************************/
int ZTLJ;//幀頭累加
boolean ZXWB;//執行完畢
void wait() //等待動作完成
{while (!ZXWB) {
if (Serial.available() > 0) {
if (0x55 == Serial.read()) {
ZTLJ = ZTLJ + 1;
if (ZTLJ == 4) {
ZTLJ = 0;
ZXWB = true;
}}}
}
}
void DZZ(int bianhao, int cishu) //動作組 入口引數是編號和次數
{
ZXWB = false;
Serial.write(0x55);
Serial.write(0x55);
Serial.write(0x05);
Serial.write(0x06);
Serial.write(bianhao);
Serial.write(cishu);
Serial.write(0x00);
wait();//等待動作完成
}
/***************************************************************************/
void setup() //初始化設定
{
Serial.begin(9600); //串口初始化波特率9600
ZTLJ = 0; //幀頭累加 = 0
ZXWB = false; //執行完畢 為 假
}
void loop() //死回圈運行
{
DZZ(0,1); //發送動作0,執行1次
DZZ(1,1); //發送動作1,執行1次
DZZ(2,1); //發送動作2,執行1次
DZZ(3,5); //發送動作3,執行5次!!!
DZZ(4,1);
DZZ(5,1);
}
藍牙控制代碼例程(僅供參考):
#include <SoftwareSerial.h> //載入模擬串口的庫函式
SoftwareSerial mySerial(3,2); //設定藍牙的模擬串口為RX3 TX2 并使他名字為mySerial
String shuju =""; //設定一個字串用來存盤藍牙接收的資料
int falg1=0; //設定個標志位來確定我們讀完了資料
/*******************************發送指令的相當于操作**************************************/
int ZTLJ;//幀頭累加
boolean ZXWB;//執行完畢
void wait() //等待動作完成
{while (!ZXWB) {
if (Serial.available() > 0) {
if (0x55 == Serial.read()) {
ZTLJ = ZTLJ + 1;
if (ZTLJ == 4) {
ZTLJ = 0;
ZXWB = true;
}}}
}
}
void DZZ(int bianhao, int cishu) //動作組 入口引數是編號和次數
{
ZXWB = false;
Serial.write(0x55);
Serial.write(0x55);
Serial.write(0x05);
Serial.write(0x06);
Serial.write(bianhao);
Serial.write(cishu);
Serial.write(0x00);
wait();//等待動作完成
}
/***************************************************************************/
void setup() //初始化設定
{
Serial.begin(9600); //串口初始化波特率9600
mySerial.begin(9600);//模擬串口波特率初始化為9600 模擬串口不宜太高
ZTLJ = 0; //幀頭累加 = 0
ZXWB = false; //執行完畢 為 假
}
void loop() //死回圈運行
{
while(mySerial.available()>0)//如果模擬串口(藍牙)有資料可讀
{
shuju+=char(mySerial.read());
delay(2);
falg1=1;
}
if(falg1=1)
{
if(shuju=="0")
{
DZZ(0,1); //發送動作0,執行1次
}
if(shuju=="1")
{
DZZ(1,1); //發送動作0,執行1次
}
if(shuju=="2")
{
DZZ(2,1); //發送動作0,執行1次
}
shuju=""; //串口資料清零
falg1=0; //標志位清零
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299410.html
標籤:其他
下一篇:國內的云服務器哪家值得推薦?
