做一个“挥手机器人”
2015-09-10郑祥李曙强
郑祥 李曙强
“挥手机器人”的想法源自于大脑突然闪过的一个灵感,即当用户举手挥动手臂的时候,机器人也会跟着一起挥手,且挥手的方向保持一致,就像跟机器人一起参加演唱会一样。
工作原理
每一款手机都会自带一个加速度传感器,即陀螺仪。加速度传感器可以感知手机当前所处状态的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灯、继电器、电机等,那将会更加有趣。