加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

做一个挥手机器人

(2016-05-09 10:23:39)
标签:

appinventor

arduino

stem

创客教育

分类: 生活技术探究

这一期的文章,是2015年的教师培训中现场做出来的。这个培训,几乎可以算是一次创客马拉松了。教师们制作作品,最后让几个小学生(培训教师带去的孩子)去评价。

 

 

温州市第四中学 郑祥,乐清中学 李曙强

 

“挥手机器人”的想法是源自于脑袋里突然闪过的一个灵感,即:当用户举手挥动手臂的时候,机器人也会跟着一起挥手,且挥手的方向保持一致,就相当于跟机器人一起参加演唱会一样。

 

一、工作原理

每一款手机都会自带一个加速度传感器,即:陀螺仪。加速度传感器可以感知当前手机所处状态的XYZ轴的3个分量的加速度,图1为手机平放时XYZ轴加速度分量的方向。

http://s12/mw690/001RTfFJgy71uTfvWTF7b&690

 

1:手机平放时XYZ轴加速度分量

 

当手机摇晃的时候,xyz轴上的3个加速度分量会发生相应的变化,如表1所示。当然,表中的这些数据是根据我的手机测试出来的,不同的手机,测出来的数据未必一样哦。

1:手机摆放与XYZ轴分量加速度值

http://s13/mw690/001RTfFJgy71uTfBrXeac&690

 

其实我们只需要手机在垂直状态下左右摇晃的传感器数据,如表2所示。我们可以发现,手机向左或向右摇晃,与X轴加速度分量的变化是一一对应的,因此可以根据X轴加速度分量的变化判断手机摇晃的方向。

2:手机摇摆方向与X轴加速度分量的变化

http://s5/mw690/001RTfFJgy71uTfNrfub4&690

 

怎么知道手机的运动方向呢?很简单,只要隔一定的时间,获取传感器数值,然后相减,根据结果进行判断。具体如下:

定义:Xq为前一位置X轴加速度分量,Xh为当前位置X轴加速度分量。

Xh-Xq>0,则手机向左摇晃;反之Xh-Xq<0,则手机向右摇晃。

 

二、材料选择

 

根据需求,“挥手机器人”若要根据手机的挥动控制机器人执行“挥手”动作,则手机与机器人间需要通讯模块;而机器人执行“挥手”动作,则需要一个控制器,及舵机等执行模块。

手机与机器人之间的通讯方式有很多,我们选择了最常见的一种通讯方式——蓝牙。手机在挥动时,通过手机的蓝牙通讯模块将相应的指令(如:“L”,即:向左挥手)发送给“挥手机器人”的控制器;控制器根据接收到的指令对“挥手机器人”的执行模块舵机做出相应的动作。

制作本作品所需要的材料及其说明,如下表3所示。

3:挥手机器人材料选择

 

名称

数量

说明

ArduinoUno

1

机器人控制模块

Bluetooth V2.0

1

机器人与手机的通讯模块

Arduino拓展板

1

带蓝牙通讯模块的接口

SG90舵机

1个

机器人挥手动作的重要模块

亚克力板切割块

若干

挥手机器人的支撑和支架

螺丝、螺母

若干

固定机器人的结构

扎带

若干

辅助固定机器人的结构

 

三、结构搭建

“挥手机器人”的结构一定要稳固,不然在执行“挥手”动作时,会影响“挥手机器人”的平衡。

搭建机器人“骨架”结构时,我们采用轻巧且又便宜的亚克力板,用激光切割机进行切割。利用这些板子和螺丝螺母,我们很快完成了“挥手机器人”的“骨架”,并将Arduino Uno板、蓝牙通讯模块、舵机安装在机器人“骨架”上,效果如图2所示。

http://s15/mw690/001RTfFJgy71uTg1Ogude&690

 

2:搭建机器人

 

四、代码编程

1、安卓手机App编程

手机若要与Arduino Uno控制板相互通信,则需要借助蓝牙通讯等方式进行。App Inventor支持传感器编程和蓝牙通讯,利用这一图形化编程平台,就能制作一个专用的App应用程序。

下图3App的界面设计与组件使用情况。

http://s12/mw690/001RTfFJgy71uTga4tlfb&690

 

3App界面设计与组件使用情况

 

 

根据表2所示,手机当前摇晃位置与前一位置的X轴加速度分量的值可以判断手机摇晃的方向,因此手机App应用程序只需向ArduinoUno控制板发送“L”或“R”字符,分别表示“向左”或“向右”的舵机控制指令,具体编程代码如图4所示。

http://s14/mw690/001RTfFJgy71uTgjkVDcd&690

 

4:手机App编程——判断手机摇晃方向、发送蓝牙通讯指令

 

调用App中的蓝牙客户端给ArduinoUno板子发送“L”或“R”字符指令时,蓝牙通讯模块须处于连接状态,否则提示错误;具体编程代码如下图所示。

http://s11/mw690/001RTfFJgy71uTgo0Pwda&690

 

5:选择、连接蓝牙设备

2、“挥手机器人”控制端编程

ArduinoUno板通过蓝牙通讯模块接收到字符“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);

}

}

}

五、造型制作

“挥手机器人”的外观有些单一,为了赋予“挥手机器人”以人的形象。我们利用卡纸为“挥手机器人”做了一个外衣,同时为它用超轻粘土捏了一个头像和两只手,如下图所示。

http://s6/mw690/001RTfFJgy71uTguDKl05&690

 

6:“挥手机器人”外貌

六、运行效果

手机App的运行与“挥手机器人”的工作效果如下图7所示。需要说明的是,我们还在这个机器人上安装了3个红外测障传感器,没有手机的情况下,也能感测到我们的手势,实现同步挥手。

http://s5/mw690/001RTfFJgy71uTgBB9Wf4&690

 

7App运行效果、挥手机器人最终效果

 

借助“挥手机器人”的案例制作,我们初步地实现了用手机App去控制Arduino硬件设备中的舵机模块。除此之外,我们可以尝试用手机App去控制更多的Arduino执行模块,如:蜂鸣器、LED灯、继电器、电机等等,那将会更加有趣。

 

本栏目的系列博文,为中国信息技术教育《生活技术探究》栏目的专题文章。转载请标注出处。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有