教你制作一把指南伞

教你制作一把指南伞

首页休闲益智color wipe更新时间:2024-04-28

我在网上看到一款日本设计师Yang Ze-Siao设计的日伞夜灯DSNL(见图4.1)。它采用了多功能太阳能电池板和发光二极管融合设计,白天用伞遮挡太阳,同时存储太阳能;晚上可以当作照明灯具使用。我看到后非常喜欢,萌生了自己也动手改造伞的想法。

图4.1 日本设计师设计的日伞夜灯DSNL

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

设计思路

相对于一个特定的区域,地理北极的朝向是恒定的。利用这个原理,我们读取电子罗盘的6轴矢量参数,经过一定的公式转化,将地理北极的方向用航向角(水平面上地理北极与电子罗盘标定的x轴的夹角)表示。将伞的360°等分为10份,即以每36°代表一个方位并用3颗灯珠表示(见图4.2)。最后将实时的地理北极方向用该方位的灯带表示出来。所需硬件清单见表4.1。

图4.2 以每36°代表一个方位并用3颗灯珠表示

表4.1 所需硬件清单

制作过程

1. 测试电子罗盘

先测试电子罗盘的功能,将6轴矢量数据转化为航向角,在串口中打印出来。水平放置芯片,观察x轴是否与北方重叠。360°转动电子舵盘,观察串口数值的返回过程。

测试代码请到qq群657864614下载,具体为umbrella文件夹下的el-compass_test.ino。测试时需导入LSM303DLH库。

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

电子罗盘相关语句分析

1.语句:Wire.begin( )

说明:开启I2C总线(主设备)。因为LSM303DLH是通过I2C和Arduino进行通信的。

2.语句:LSM303DLH compass

说明:初始化电子罗盘,建立一个类型为LSM303DLH、名称为compass的对象。对象的名字可自行更改。

3.语句:compass.read()

说明:读取LSM303DLH的6轴参数,并将它们赋值给compass.m.x/y/z(3个矢量方向的磁场值)、compass.a.x/y/z (3个矢量方向的加速度值),便于我们后面调用这些参数。

4.将弧度值转化为0°~360°

int compass_angle=round(atan2(H_y,H_x)*180/PI);//转化为角度

if(compass_angle<0)compass_angle =360;//转化为0°~360°

测试效果:

根据电子罗盘上标注的3个地磁矢量的方向水平放置芯片,观察串口的返回值,x轴方向与地磁北极重合时,串口返回0;逆时针转动芯片,正西方返回90,南方返回180;返回值会不断变大,直到360。

2. RBG灯带的焊接和使用

以3颗LED灯为一组,对灯带进行裁剪(见图4.3)。

拼接时留意选取灯带的正确方向(见图4.4)。

在灯带上焊接导线,并用热熔胶封闭接口(防水,见图4.5),完成后如图4.6所示。

图4.3 裁剪

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

图4.5 焊接导线并用热熔胶封闭接口

图4.6 焊接导线后的效果

对灯带进行编号:从灯带上与控制板连接的第一颗LED算起,每3颗LED灯编为一组,从LEDs_0、LEDs_1依次编到LEDs_9。

按照图4.7连接电路,然后下载测试程序,具体文件为umbrella文件夹下的LED_strip_test.ino。测试时需导入Adafruit_NeoPixel库。

图4.7 灯带测试电路连接示意图

灯带程序相关语句分析

1.语句:Color(uint8_t r, uint8_t g, uint8_t b)

说明:显示灯珠的颜色,3个参数分别表示红、绿、蓝三色的亮度;取值范围是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来控制点亮不同编组的灯珠(见图4.8)。例如想点亮LEDs_0灯组,则写:

void loop(){

colorWipe(Color(255,0,0),0,3, 50);

clear(100);}

图4.8 测试灯带

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

为了能美观,用电烙铁加焊锡将针脚去掉(见图4.9),改为直接焊接接线(见图4.10)。

图4.9 需要去掉的针脚

图4.10 直接焊接导线

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

图4.11 Arduino需要保留的针脚

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

参照图4.12和表4.2连接元器件,并安装到伞内(见图4.13~图4.15)。灯带部分做了一定的防水,芯片部分只用黑胶布封上。之前想过在伞柄上增加一个装置,撑开伞后灯就自动亮了,可惜还没设计成功,后续会改进。

图4.12 电路连接示意图

表4.2 接线表格

图4.13 将元器件安装到伞内

图4.14 将灯带安装到伞内

图4.15 指南伞外观

,
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved