一把指南伞

2015-07-295.4万
AI 快速预览详细 收起
本文介绍了如何制作一款结合电子罗盘和LED灯带的指南伞。该项目旨在解决雨夜出行的安全问题,通过读取电子罗盘的六轴矢量参数并转化为航向角,使用360°等分10份的灯带显示地理北极方向。硬件清单包括FIT0352 RGB LED灯带、SEN0079六轴电子罗盘LSM303DLH、DFRduino Pro Mini V1.3等。适合家长与孩子共同完成,既锻炼了孩子的动手能力,又提高了夜间出行的安全性。
一把指南伞
【背景】  
近两个月以来,上海总是各种大雨小雨不断。一把伞就成了我们出行随身携带的日常配备。于是对伞的功能产生了兴趣。
在网上看到一款日本设计师Yang Ze-Siao设计的日伞夜灯-DSNL。它采用了多功能太阳电池板和发光二级管融合设计,白天用伞遮挡太阳,同时能存储太阳能,晚上可以当作照明灯具使用。看到后非常喜欢,这让我萌生了自己也动手改造伞的想法。

一把指南伞图10

一个下雨夜晚,城市里的人们行走的脚步总是匆匆的,特别是来到一个陌生的环境,如果急切的低头看手机寻找方向,面对来往的车辆,多少会有些危险。于是想到了用电子罗盘和LED灯带组合设计一款能在夜间指引方向的指南伞,它能快速地给行人指引方向,也可以给夜间行驶的车辆以灯光的提示,保证出行的安全。

【设计思路】

一把指南伞图20

相对于一个特定的区域,地理北极的朝向是恒定的。利用这个原理,我们读取电子罗盘的六轴矢量参数,经过一定的公式转化,将地理北极的方向,用航向角表示。(水平面上地理北极与电子罗盘标定的X轴的夹角)。   将伞的360°等分为10份,即以每36°代表一个方位并用三颗灯珠表示。最后将实时的地理北极方向,用该方位的灯带表示出来。因能力非常有限,可能会有不少疏漏,希望大家能够批评指正。

所需硬件清单】
1. FIT0352 RGB LED 灯带
注:所有的硬件均可以在DFRobot商城购买。

【制作过程】
Step1. 测试电子罗盘   
先测试电子罗盘的功能,将六轴矢量数据转化为航向角,在串口中打印出来。水平放置芯片,观察X轴是否与北方重叠。360°转动电子舵盘,观察串口数值的返回过程。
关于电子罗盘的倾角补偿方法,写在了后面的【硬件回顾】中。

电路连接图:

  一把指南伞图1

备注:
一.对于Arduino pro mini而言,它默认的I2C接口为A4(SDA),A5(SCL)。
二.因为arduino pro mini不具备USB的转换芯片,因此用户无法直接用USB线来烧录程序。需要FTDI才能烧入程序和进行串口调试。
三.  FTDI下载器的驱动已经集成在Arduino IDE的drivers目录下,无须另外下载。安装驱动时,请选择从FTDI USB Drivers文件夹中安装。

下载程序
测试代码在附件中下载。位置为umbrella文件夹>>el-compass_test.ino  。测试时需导入LSM303DLH库

电子罗盘相关语句分析
语句Wire.begin()
说明: 开启I2C总线 (主设备)。因为LSM303DLH是通过I2C和Arduino进行通讯的。
语句:LSM303DLH compass;
说明:初始化电子罗盘,建立一个类型为LSM303DLH, 名为compass的对象。这里的对象的名字可自行更改。
语句:compass.read();
说明:读取LSM303DLH的六轴参数,并将它们赋值给compass.m.x/y/z(三个矢量方向的磁场值),compass.a.x/y/z (三个矢量方向的加速度值) ,便于我们后面调用这些参数。
将弧度值转化为用0~360°表示:
int compass_angle=round(atan2(H_y,H_x)*180/PI); //转化为角度
if(compass_angle<0) compass_angle+=360   //转化为(0~360°)  

测试效果:
根据电子罗盘上标准的三个地磁矢量的方向水平放置芯片。观察串口的返回值,x轴方向与地磁北极重合时,串口返回0。逆时针转动芯片,正西方为90,南方为180。依次返回值会不断变大到360°

一把指南伞图12







Step2. RBG灯带的焊接和使用

以三颗LED灯为一组对灯带进行裁剪。
一把指南伞图16

拼接时留意选取灯带的正确方向
一把指南伞图23

焊接,并用热熔胶封闭接口(防水)
一把指南伞图17

焊接后的效果
一把指南伞图22


对灯带编号
从灯带上与控制板连接的第一颗LED算起,每三颗LED灯编为一组记作LEDs_0, 依次为LEDs_1...一直到LEDs_9。
电路连线图:
一把指南伞图24
下载测试程序
测试代码在附件中下载。位置为umbrella文件夹>>LED_strip_test.ino  。测试时需导入Adafruit_NeoPixel库
灯带程序相关语句分析
语句1:Color(uint8_t r, uint8_t g, uint8_t b)
说明:显示灯珠的颜色 (三个参数分别表示红,绿,蓝三色的亮度;取值范围是(0~255))如表示
红色:Color(255,0,0);
蓝色:   Color(0,0,255);
紫色:Color(255,0,255);  为蓝色和红色的混合

语句2:setPixelColor(uint16_t n, uint32_t c)
说明:设置某一颗灯珠的颜色,其中n为灯珠的编号(第一颗灯珠为0,按顺序依次为1,2,3....), c为灯珠的颜色参数,即Color(uint8_t r, uint8_t g, uint8_t b)

测试效果
通过改变测试程序loop()中colorwipe()函数中的参数a 和b的。来控制点亮不同编组的灯珠。
例:
如果想点亮LEDs_0灯组,则
void loop(){  
colorWipe(Color(25500),0 ,3, 50);
clear(100);}

一把指南伞图18








Step3. 对芯片做去针脚处理并焊接所需的接线

为了能美观,用电烙铁加焊锡将针脚去掉,改用直接焊接接线
一把指南伞图13

去针脚后的效果
一把指南伞图14

对控制器去针脚,但保留用于程序烧写和串口调试的针脚。
一把指南伞图15









Step4. 连接各个元器件,并安装到伞内

总装电路图:
一把指南伞图25

接线表格
外部设备
DFRduino Pro mini
电子罗盘(SCL)
A5
电子罗盘(SDA)
A4
电子罗盘(GND) ,灯带(GND)
GND
电子罗盘(VCC) 灯带(+5V)
VCC
灯带(DI)
D3

元器件安装:
一把指南伞图11

灯带安装:
一把指南伞图26
外观效果:
一把指南伞图2

视频效果:





【硬件回顾】
因为之前未使用过电子罗盘和加速度仪,期间饶了不少的弯路,在网上收集了一些关于电子罗盘的原理和使用帖子,经过测试,发现基本上能满足本次设计的要求。下面是一些相关使用知识的整理与大家分享,因为本人水平非常有限,可能会存在不少错误和不足的地方,望大家能够批评指正。

如何表示地磁北极的方向
电子罗盘是利用磁传感器感知地球磁场来实现测向定位的,地球上某点的磁场矢量分析如图所示。

一把指南伞图3一把指南伞图19

x轴和y轴在水平面上且x轴与y轴相互垂直, z轴是垂直方向(重力方向)。磁北的方向就是地磁场He在水平面上的分量Heh的方向。对照图中3个角度进行以下说明。
1) 方位角α(磁北与x轴之间的夹角)
一把指南伞图4
2) 磁偏角λ(地理北极与磁场北极之间的偏离角)
磁偏角也叫磁差,磁偏角是与地理位置有关的参量。磁偏角在上海地区为偏西4.3°,在大连为偏西7.5°。利用磁罗盘在计算真方位角(即相对地理北极)时,必须对磁差进行补偿。
结论:
a,只需要知道电子罗盘输出的X和y轴方向的矢量,通过做两者的反正切即可以得出方向角α。 由于X轴视作参考坐标,那么由方向角α,边可以得出磁北的方向。
b,每个地区的磁偏角相对固定,于是查询该地区磁偏角,结合磁北方向边可以得到我们真正想要的地理北极方向。
倾角补偿的原理
1,为什么要做倾角补偿
只有在检测仪器与地表平行时才能成立。当仪器发生倾斜时,方位值的准确性将受到很大的影响。为减少该误差的影响,我们需要用加速度计来测量俯仰角侧倾角。
2. 倾角补偿的方法
俯仰角定义为由前向后方向的角度变化;而侧倾角则为由左到右方向的角度变化。通过LSM303DLH内置的加速度传感器检测出三个轴上重力加速度的分量,
再通过式2,可以计算出(roll)侧倾角 和 (pitch)俯仰角关于侧倾角,俯仰角可参考如下示意图

一把指南伞图21

一把指南伞图5一把指南伞图6

将俯仰角和侧倾角的数据经过转换计算,将磁力仪在三个轴向上的矢量在原来的位置“拉”回到水平的位置。
标准的转换计算式如下:

一把指南伞图7

这里一把指南伞图8一把指南伞图9为要转换到水平位置的值,于是由公式一,得到了倾角补偿后的航向角,最后根据当地的磁偏角做左后的修正,边得到了较为稳定的航向角,即北极的方向信息。

三:一些相关的数学运算函数

PI   //常量π
atan2(y,x); //反正切三角函数
sq();    //取平方函数
sqrt;    //取开方函数

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(23)
派大星ym
派大星ym
666666,,,
派大星ym
派大星ym
,,,,
派大星ym
派大星ym
酷酷酷酷酷
熹宝快睡觉
熹宝快睡觉
挺好的、挺有创意的,高大上
hhh1
hhh1
您好,能将源代码发我一下吗,邮箱[email]540526988@qq.com[/email]
suai666
suai666
请问作者是否能发一下代码呢?邮箱[email]2546113831@qq.com[/email]
学校要求我们做一个创新设计的产品
ning198729
ning198729
麻烦作者能把源代码发我一下吗,想给学校里的学生做一把,邮箱[email]1078347341@qq.com[/email]
汤聿修
汤聿修
可以麻烦作者把源代码发我一下吗,邮箱[email]977412658@qq.com[/email]
小诺
小诺
请问你有收到代码吗,能否发我一份1275532686@qq.com
suai666
suai666回复小诺
请问你有收到代码吗,能否帮忙发一份呢?邮箱[email]2546113831@qq.com[/email]
小诺
小诺
请问你有收到代码吗,能否发至1275532686@qq.com
小诺
小诺
楼主能不能开源一下代码呢
Jorho
Jorho
这个作品好赞,但不知道源代码是否是开源的呢?如果可以的话,楼主能不能把源代码发我一个,让我学习学习 邮箱是[email]771991657@qq.com[/email]
durobot
durobot
楼主可以用三轴罗盘吗?麻烦你把测试代码发个我好吗?我的邮箱是[email]791419282@qq.com[/email]谢谢你了!
Anthea2011
Anthea2011
想自己做一个,麻烦作者把源代码发我一下呢,邮箱[email]654024297@qq.com[/email].谢谢
赵哈哈
赵哈哈
可以麻烦作者把源代码发我一下吗,邮箱[email]1309232313@qq.com[/email]
free
free
挺好的、挺有创意的,怎样不露电线就好了
Ash1
Ash1
撑着伞的时候会担心有东西掉下来吗
visionsl
visionsl回复Ash1
哈哈, 我也是这么想的:lol
不过创意很好啊, 最好能封装一下, 从伞的外观看不出来才好
luna
luna
这个供电是用锂电池吗?会不会太重了?
Boris_Liu
Boris_Liu
作者
回复luna
用了我们公司的3.7V mini锂电池。哈,不算太重的。
luna
luna
这么美丽的伞为什么被拍得散发着淡淡的屌丝气息~~为什么没有妹子~
Boris_Liu
Boris_Liu
作者
回复luna
....这个.....
丄帝De咗臂
丄帝De咗臂
打伞一般是防雨,这个电子的东西应该也要做得防水吧,毕竟雨天拿着伞容易沾水
丄帝De咗臂
丄帝De咗臂回复Boris_Liu
做得很棒了,比我强得多
Boris_Liu
Boris_Liu
作者
回复丄帝De咗臂
灯带部分做了一定的防水,芯片部分只用了黑胶布全封上了....确实做得不太好啊。