1、实验介绍
分歧争端机使用的场景是当出现分歧时,分别摇一摇HaaS EDU K1来摇出一个0到100之间的数字,通过比较谁摇出的数字大来解决分歧的一种方法。本质是通过摇一摇这个动作来随机产生一个数字。这个实验的核心如何通过加速度传感器来检测到摇一摇这个动作,并随机生成一个数字。
显示效果
2、涉及知识点
- 三轴加速度传感器的原理和使用
- 随机数生成的方法
- OLED绘图
3、软硬件环境准备
3.1、硬件
HAAS EDU K1 开发板一块 (开发板内置 MPU-6050 传感器)
USB2TypeC 数据线一根
3.2、软件
“分歧争端机”功能已经包含在edu_demo应用中,并且包含在发布版本中。
3.2.1、固件版本
固件版本:V1.0.0
3.2.2、代码路径
git clone https://gitee.com/alios-things/AliOS-Things.git -b dev_3.1.0_haas
cd AliOS-Things/application/example/edu_demo/k1_apps/shakeshake
3.2.3、编译
进入代码的顶层目录如AliOS-Things进行编译。直接编译application/example/目录下的edu_demo应用。
两种方法进行编译
命令行方式
aos make distclean
aos make edu_demo@haaseduk1 -c config
aos make
AliOS Studio IDE方式
3.2.4、烧录
见开发环境章节
4、硬件介绍 - MPU-6050
请参考《陀螺仪小球》中的相同章节。
5、应用开发
本实验通过MPU_Get_Accelerometer去获得三轴加速度传感器的原始值。然后计算出在y方向上和z方向上的差值,作为震动大小的强弱指标。
当两个方向上的震动大小都超过了阈值,就认为是一次有效的摇晃,就生成随机数。生成随机的方法直接采用系统自带的rand()方法,他的返回值对100进行取模,保证是一个小于100的数字,然后将这个数据显示在OLED屏幕上。
void shakeshake_task()
{
while (1)
{
// 获取三轴加速度信息
MPU_Get_Accelerometer(&ax, &ay, &az);
// 计算出y轴和z轴方向上的变化量
y_change = (ay >= ay_pre) ? (ay - ay_pre) : (ay_pre - ay);
z_change = (az >= az_pre) ? (az - az_pre) : (az_pre - az);
// 变化量都超过阈值,则进行下一步处理
if ((y_change > SHAKE_Y_THRESHOLD) && (z_change > SHAKE_Z_THRESHOLD))
{
// 生成100以下的随机数
rand_value = rand() % 100;
// 将随机数转化为需要显示的字符
itoa(rand_value, showstr, 10);
// 清除屏幕memory
OLED_Clear();
// 画出显示的图标
OLED_Icon_Draw(50, 0, &icon_shakeshake_32_32_v2, 1);
// 画出显示的字符
OLED_Show_String(54, 36, showstr, 24, 1);
// 画出左右翻页的图标
OLED_Icon_Draw(2, 24, &icon_skip_left, 0);
OLED_Icon_Draw(122, 24, &icon_skip_right, 0);
// 将屏幕memory显示出来
OLED_Refresh_GRAM();
}
// 保存本次y轴和z轴方向上的值
az_pre = az;
ay_pre = ay;
// 暂停50ms
aos_msleep(50);
}
}
6、更多应用
本实验展示的仅是六轴传感器的一个非常简单的应用。随着类似传感器的体积越来越小,精度越来越高,它们也被应用在各种消费类电子产品,如穿戴设备、手机上。
使用它们可以进行一些非常有趣的应用,例如,手环中经常会使用到的计步算法,运动状态检测算法,都是基于其中的六轴传感器数据。近年来,还有很多学术界的工作,使用手环中的六轴传感器来实现空中写字的识别。
除此之外,它也广泛应用于辅助定位、飞行设备的姿态检测,摄像机云台的水平保持等等。
期待开发者们在HaaS EDU K1上能够发掘出更多有价值的使用场景,欢迎联系我们哦~~
7、开发者技术支持
如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号
更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/