Boris_Liu 发表于 2015-7-29 15:37:41

一把指南伞

一把指南伞【背景】近两个月以来,上海总是各种大雨小雨不断。一把伞就成了我们出行随身携带的日常配备。于是对伞的功能产生了兴趣。在网上看到一款日本设计师Yang Ze-Siao设计的日伞夜灯-DSNL。它采用了多功能太阳电池板和发光二级管融合设计,白天用伞遮挡太阳,同时能存储太阳能,晚上可以当作照明灯具使用。看到后非常喜欢,这让我萌生了自己也动手改造伞的想法。


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


相对于一个特定的区域,地理北极的朝向是恒定的。利用这个原理,我们读取电子罗盘的六轴矢量参数,经过一定的公式转化,将地理北极的方向,用航向角表示。(水平面上地理北极与电子罗盘标定的X轴的夹角)。   将伞的360°等分为10份,即以每36°代表一个方位并用三颗灯珠表示。最后将实时的地理北极方向,用该方位的灯带表示出来。因能力非常有限,可能会有不少疏漏,希望大家能够批评指正。
【所需硬件清单】1. FIT0352 RGB LED 灯带2. SEN0079 六轴电子罗盘LSM303DLH3. DFR0132 DFRduino Pro Mini V1.34. 电源开关模块5. 3.7V mini电池注:所有的硬件均可以在DFRobot商城购买。
【制作过程】Step1. 测试电子罗盘   先测试电子罗盘的功能,将六轴矢量数据转化为航向角,在串口中打印出来。水平放置芯片,观察X轴是否与北方重叠。360°转动电子舵盘,观察串口数值的返回过程。(关于电子罗盘的倾角补偿方法,写在了后面的【硬件回顾】中。)
电路连接图:

备注:一.对于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°







Step2. RBG灯带的焊接和使用
以三颗LED灯为一组对灯带进行裁剪。

拼接时留意选取灯带的正确方向

焊接,并用热熔胶封闭接口(防水)

焊接后的效果


对灯带编号从灯带上与控制板连接的第一颗LED算起,每三颗LED灯编为一组记作LEDs_0, 依次为LEDs_1...一直到LEDs_9。电路连线图:
下载测试程序测试代码在附件中下载。位置为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(255,0,0),0 ,3, 50); clear(100);}









Step3. 对芯片做去针脚处理并焊接所需的接线
为了能美观,用电烙铁加焊锡将针脚去掉,改用直接焊接接线

去针脚后的效果

对控制器去针脚,但保留用于程序烧写和串口调试的针脚。









Step4. 连接各个元器件,并安装到伞内
总装电路图:

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

元器件安装:

灯带安装:
外观效果:

视频效果:https://player.youku.com/player.php/sid/XMTI5MjQ5NTUxNg==/v.swf




【硬件回顾】因为之前未使用过电子罗盘和加速度仪,期间饶了不少的弯路,在网上收集了一些关于电子罗盘的原理和使用帖子,经过测试,发现基本上能满足本次设计的要求。下面是一些相关使用知识的整理与大家分享,因为本人水平非常有限,可能会存在不少错误和不足的地方,望大家能够批评指正。
如何表示地磁北极的方向电子罗盘是利用磁传感器感知地球磁场来实现测向定位的,地球上某点的磁场矢量分析如图所示。


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




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


这里和为要转换到水平位置的值,于是由公式一,得到了倾角补偿后的航向角,最后根据当地的磁偏角做左后的修正,边得到了较为稳定的航向角,即北极的方向信息。
三:一些相关的数学运算函数
PI //常量πatan2(y,x); //反正切三角函数 sq();//取平方函数sqrt;    //取开方函数

swanglei 发表于 2015-7-29 18:11:01

Boris_Liu 发表于 2015-7-29 16:51
哈,经验太不足了,论坛的图片大小不好调整。多谢大神提醒!

可以适当增加回车把图片跟文字分开这样就有上下之分了有的时候一个回车是会被忽略的有可能需要增加一个回车   我都已经成习惯了~反正看不太出

Boris_Liu 发表于 2015-7-29 18:24:33

swanglei 发表于 2015-7-29 18:11
可以适当增加回车把图片跟文字分开这样就有上下之分了有的时候一个回车是会被忽略的有可能需要增 ...

已经做了部分修改,哈哈,感谢指导!

Boris_Liu 发表于 2015-7-30 09:47:36

丄帝De咗臂 发表于 2015-7-29 19:31
打伞一般是防雨,这个电子的东西应该也要做得防水吧,毕竟雨天拿着伞容易沾水 ...

灯带部分做了一定的防水,芯片部分只用了黑胶布全封上了....确实做得不太好啊。{:3_55:}

swanglei 发表于 2015-7-29 16:41:17

大概看了一下,还挺不错的~

推荐下次发帖可以用一个STEP一个楼层   这样方便查找和观看。。。

Boris_Liu 发表于 2015-7-29 16:51:36

swanglei 发表于 2015-7-29 16:41
大概看了一下,还挺不错的~

推荐下次发帖可以用一个STEP一个楼层   这样方便查找和观看。。。 ...

哈,经验太不足了,论坛的图片大小不好调整。多谢大神提醒!:P

LeoSunshine 发表于 2015-7-29 17:48:17

伞好拉风啊

Jennifer_yu 发表于 2015-7-29 17:50:35

要是能够自动的,不需要开关控制就好了

swanglei 发表于 2015-7-29 18:27:56

Boris_Liu 发表于 2015-7-29 18:24
已经做了部分修改,哈哈,感谢指导!

嗯嗯好很多了已经。。。

Boris_Liu 发表于 2015-7-29 18:28:04

Jennifer_yu 发表于 2015-7-29 17:50
要是能够自动的,不需要开关控制就好了

之前想过在伞柄上增加一个装置,撑开伞后灯就亮了。{:3_43:}可惜还没成功,后续会改进。

丄帝De咗臂 发表于 2015-7-29 19:31:09

打伞一般是防雨,这个电子的东西应该也要做得防水吧,毕竟雨天拿着伞容易沾水

luna 发表于 2015-7-29 19:35:57

这么美丽的伞为什么被拍得散发着淡淡的屌丝气息~~为什么没有妹子~

Boris_Liu 发表于 2015-7-30 09:50:07

luna 发表于 2015-7-29 19:35
这么美丽的伞为什么被拍得散发着淡淡的屌丝气息~~为什么没有妹子~

{:3_45:}....这个.....

Jennifer_yu 发表于 2015-7-31 10:08:53

Boris_Liu 发表于 2015-7-29 18:28
之前想过在伞柄上增加一个装置,撑开伞后灯就亮了。可惜还没成功,后续会改进。 ...

还可以使用光控,光线暗的时候灯才会亮

丄帝De咗臂 发表于 2015-7-31 20:48:12

Boris_Liu 发表于 2015-7-30 09:47
灯带部分做了一定的防水,芯片部分只用了黑胶布全封上了....确实做得不太好啊。 ...

做得很棒了,比我强得多

luna 发表于 2015-8-4 10:30:01

这个供电是用锂电池吗?会不会太重了?

Boris_Liu 发表于 2015-8-4 11:05:01

luna 发表于 2015-8-4 10:30
这个供电是用锂电池吗?会不会太重了?

用了我们公司的3.7Vmini锂电池。哈,不算太重的。

Ash 发表于 2015-8-5 18:31:26

撑着伞的时候会担心有东西掉下来吗

free 发表于 2015-8-13 09:42:33

挺好的、挺有创意的,怎样不露电线就好了

visionsl 发表于 2016-1-19 15:24:28

Ash 发表于 2015-8-5 18:31
撑着伞的时候会担心有东西掉下来吗

哈哈, 我也是这么想的:lol

不过创意很好啊, 最好能封装一下, 从伞的外观看不出来才好

赵哈哈 发表于 2016-7-17 20:33:03

可以麻烦作者把源代码发我一下吗,邮箱1309232313@qq.com
页: [1] 2
查看完整版本: 一把指南伞