鄭祥 李曙強(qiáng)
“揮手機(jī)器人”的想法源自于大腦突然閃過的一個靈感,即當(dāng)用戶舉手揮動手臂的時候,機(jī)器人也會跟著一起揮手,且揮手的方向保持一致,就像跟機(jī)器人一起參加演唱會一樣。
工作原理
每一款手機(jī)都會自帶一個加速度傳感器,即陀螺儀。加速度傳感器可以感知手機(jī)當(dāng)前所處狀態(tài)的X、Y、Z軸的3個分量的加速度,圖1為手機(jī)平放時X、Y、Z軸加速度分量的方向。
當(dāng)手機(jī)搖晃的時候,X、Y、Z軸上的3個加速度分量會發(fā)生相應(yīng)的變化,如下頁表1所示。當(dāng)然,表中的這些數(shù)據(jù)是根據(jù)我們的手機(jī)測試出來的,不同的手機(jī),測出來的數(shù)據(jù)未必一樣。
其實(shí)我們只需要手機(jī)在垂直狀態(tài)下左右搖晃的傳感器數(shù)據(jù),從中我們可以發(fā)現(xiàn),手機(jī)向左或向右搖晃,與X軸加速度分量的變化是一一對應(yīng)的,因此可以根據(jù)X軸加速度分量的變化判斷手機(jī)搖晃的方向,如表2所示。
怎么知道手機(jī)的運(yùn)動方向呢?很簡單,只要隔一定的時間,獲取傳感器數(shù)值,然后相減,根據(jù)結(jié)果進(jìn)行判斷。具體如下:
定義:Xq為前一位置X軸加速度分量,Xh為當(dāng)前位置X軸加速度分量。
若Xh-Xq>0,則手機(jī)向左搖晃;反之Xh-Xq<0,則手機(jī)向右搖晃。
材料選擇
根據(jù)需求,“揮手機(jī)器人”若要根據(jù)手機(jī)的揮動控制機(jī)器人執(zhí)行“揮手”動作,則手機(jī)與機(jī)器人間需要通訊模塊;而機(jī)器人執(zhí)行“揮手”動作,則需要一個控制器及舵機(jī)等執(zhí)行模塊。
手機(jī)與機(jī)器人之間的通訊方式有很多,我們選擇了最常見的一種通訊方式——藍(lán)牙。手機(jī)在揮動時,通過手機(jī)的藍(lán)牙通訊模塊將相應(yīng)的指令(如“L”,即向左揮手)發(fā)送給“揮手機(jī)器人”的控制器;控制器根據(jù)接收到的指令對“揮手機(jī)器人”的執(zhí)行模塊舵機(jī)做出相應(yīng)的動作。
制作本作品所需要的材料及其說明,如表3所示。
結(jié)構(gòu)搭建
“揮手機(jī)器人”的結(jié)構(gòu)一定要穩(wěn)固,不然在執(zhí)行“揮手”動作時,會影響“揮手機(jī)器人”的平衡。
搭建機(jī)器人“骨架”結(jié)構(gòu)時,我們采用輕巧且又便宜的亞克力板,用激光切割機(jī)進(jìn)行切割。利用這些板子和螺絲螺母,我們很快完成了“揮手機(jī)器人”的“骨架”,并將Arduino Uno控制板、藍(lán)牙通訊模塊、舵機(jī)安裝在機(jī)器人“骨架”上,效果如圖2所示。
代碼編程
1.安卓手機(jī)App編程
手機(jī)若要與Arduino Uno控制板相互通信,則需要借助藍(lán)牙通訊等方式進(jìn)行。App Inventor支持傳感器編程和藍(lán)牙通訊,利用這一圖形化編程平臺,就能制作一個專用的App應(yīng)用程序。下頁圖3所示為App的界面設(shè)計與組件使用情況。
根據(jù)表2所示,根據(jù)手機(jī)當(dāng)前搖晃位置與前一位置的X軸加速度分量的值可以判斷手機(jī)搖晃的方向,因此手機(jī)App應(yīng)用程序只需向Arduino Uno控制板發(fā)送“L”或“R”字符,分別表示“向左”或“向右”的舵機(jī)控制指令,具體編程代碼如下頁圖4所示。
調(diào)用App中的藍(lán)牙客戶端給Arduino Uno控制板發(fā)送“L”或“R”字符指令時,藍(lán)牙通訊模塊須處于連接狀態(tài),否則提示錯誤;具體編程代碼如圖5所示。
2.“揮手機(jī)器人”控制端編程
當(dāng)Arduino Uno控制板通過藍(lán)牙通訊模塊接收到字符“L”時,則執(zhí)行舵機(jī)轉(zhuǎn)向45度,即機(jī)器人手臂向左擺動;若藍(lán)牙通訊模塊接收到的字符為“R”,則執(zhí)行舵機(jī)轉(zhuǎn)向135度,即機(jī)器人手臂向右擺動。具體代碼如下:
#include
Servo serpin;
unsigned char resaveChar;
void setup() {
Serial.begin(9600);
serpin.attach(9);
serpin.write(90);
}
void loop() {
if(Serial.available()){
resaveChar=Serial.read();
if(resaveChar=='R'){
serpin.write(135);
delay(100);
}
if(resaveChar=='L'){
serpin.write(45);
delay(100);
}
}
}
造型制作
“揮手機(jī)器人”的外觀有些單一,為了賦予“揮手機(jī)器人”以人的形象。我們利用卡紙為“揮手機(jī)器人”做了一件外衣,同時為它用超輕粘土捏了一個頭像和兩只手。
運(yùn)行效果
手機(jī)App的運(yùn)行與“揮手機(jī)器人”的工作效果如圖6所示。需要說明的是,我們還在這個機(jī)器人上安裝了3個紅外測障傳感器,在沒有手機(jī)的情況下,也能感測到我們的手勢,實(shí)現(xiàn)同步揮手。
借助“揮手機(jī)器人”的案例制作,我們初步實(shí)現(xiàn)了用手機(jī)App控制Arduino硬件設(shè)備中的舵機(jī)模塊。除此之外,還可以嘗試用手機(jī)App控制更多的Arduino執(zhí)行模塊,如蜂鳴器、LED燈、繼電器、電機(jī)等,那將會更加有趣。