鄭祥 李曙強





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