34363| 35
|
[项目] 一把指南伞 |
一把指南伞 【背景】 近两个月以来,上海总是各种大雨小雨不断。一把伞就成了我们出行随身携带的日常配备。于是对伞的功能产生了兴趣。 在网上看到一款日本设计师Yang Ze-Siao设计的日伞夜灯-DSNL。它采用了多功能太阳电池板和发光二级管融合设计,白天用伞遮挡太阳,同时能存储太阳能,晚上可以当作照明灯具使用。看到后非常喜欢,这让我萌生了自己也动手改造伞的想法。 一个下雨夜晚,城市里的人们行走的脚步总是匆匆的,特别是来到一个陌生的环境,如果急切的低头看手机寻找方向,面对来往的车辆,多少会有些危险。于是想到了用电子罗盘和LED灯带组合设计一款能在夜间指引方向的指南伞,它能快速地给行人指引方向,也可以给夜间行驶的车辆以灯光的提示,保证出行的安全。 【设计思路】 相对于一个特定的区域,地理北极的朝向是恒定的。利用这个原理,我们读取电子罗盘的六轴矢量参数,经过一定的公式转化,将地理北极的方向,用航向角表示。(水平面上地理北极与电子罗盘标定的X轴的夹角)。 将伞的360°等分为10份,即以每36°代表一个方位并用三颗灯珠表示。最后将实时的地理北极方向,用该方位的灯带表示出来。因能力非常有限,可能会有不少疏漏,希望大家能够批评指正。 【所需硬件清单】 1. FIT0352 RGB LED 灯带 2. SEN0079 六轴电子罗盘LSM303DLH 3. DFR0132 DFRduino Pro Mini V1.3 4. 电源开关模块 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. 连接各个元器件,并安装到伞内 总装电路图: 接线表格
元器件安装: 灯带安装: 外观效果: 视频效果: 【硬件回顾】 因为之前未使用过电子罗盘和加速度仪,期间饶了不少的弯路,在网上收集了一些关于电子罗盘的原理和使用帖子,经过测试,发现基本上能满足本次设计的要求。下面是一些相关使用知识的整理与大家分享,因为本人水平非常有限,可能会存在不少错误和不足的地方,望大家能够批评指正。 如何表示地磁北极的方向 电子罗盘是利用磁传感器感知地球磁场来实现测向定位的,地球上某点的磁场矢量分析如图所示。 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; //取开方函数 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed