用 Arduino 自制应急感应灯,给黑夜带来一点光明。

2016-07-20 23:56:37 +08:00
 xmoiduts

一盏应急感应灯的诞生

古人学问无遗力,
少壮工夫老始成。
纸上得来终觉浅,
绝知此事要躬行。
          --陆游

起:灵感由来

  最近学校总是意外停电,平时熄灯偶尔不准时也就算了,考试前一晚居然也会停电。无规律的电力中断使我越来越重视生活环境的应急照明。按照个人习惯,晚上手机会关机充电,在起夜的时候就只能摸黑出去。
  这一切使我萌生了一个想法:制作一盏应急感应灯,他能:

承:其他准备

  去年到北京办事,顺路逛了两圈宜家,看这个盒子蛮有质感的,就留了下来。
  即便作为计算机专业的 ~~学生~~ 学渣,我还是粗通一点 C 语言加 class 的写法的。毫不犹豫地选择了有一点玩耍经验的 Arduino 平台,来完成这个项目。

转:制作过程

  制作过程,也就是那样吧,相信对于本站( V2 )的各位大牛而言,我这点工作很微小,但对我而言,它不下于一次完整的课程设计。
  首先确定需求,接着用自然语言 /伪代码描述流程,然后根据模块资料编()写()程()序(),进而编写业务逻辑代码,再调用上一步的例程。
  接着就是开发板搭建,以及无休无止的调参。如果说完成代码用了一整天,那么调参就耗费了我足足两个下午加晚上。
  测试基本没了问题,就开始 翔 一样的焊接。
  三天的折腾后,作品终于成型啦。

合:感想体会

  这是我闲暇时完成的一件小作品,虽然还没有足以应对工作的道行,但从它的开发过程中,我不难体会到 v 友们面对的工作压力之大。我面对的只有这几个组件,拥有充裕的时间并且可以随时放弃这作品,然而更多各领域的大牛要面对复杂得多的环境: KPI ,老板的催促,项目的 deadline 等......
  总之,纸上得来终觉浅,觉知此事要躬行。


可编程 LED 灯带
Arduino 节能配置(需要开飞机)
流程图手稿:

~~成品代码: 275 行,含一个类定义和所有控制代码~~ 本来想推到 github 上的,但我的网络出现了问题:

git push -u origin master
fatal: unable to access 'https://github.com/隐藏用户名 /隐藏仓库名称.git/': Failed to connect to github.com port 443: Connection refused

我用的是 windows 版 github 客户端,电脑重装过,不知道和 ssh key 有没有关系。 直连, vp-n 都不能上 github ,但挂同一服务器的 s-s 可以访问 github 。 git 初学,调试这个问题导致本文丢了点内容,应该不会影响大家阅读。

这是点亮效果图,不占用太大篇幅了:

![IMG_20160720_223401.jpg]( https://ooo.0o0.ooo/2016/07/20/578f8e105659f.jpg)
![IMG_20160720_223441.jpg]( https://ooo.0o0.ooo/2016/07/20/578f8e0f1417e.jpg)
![IMG_20160720_223450.jpg]( https://ooo.0o0.ooo/2016/07/20/578f8e119a8cb.jpg)
![IMG_20160720_223510.jpg]( https://ooo.0o0.ooo/2016/07/20/578f8e11b5c7e.jpg)
![IMG_20160720_223518.jpg]( https://ooo.0o0.ooo/2016/07/20/578f8e15db0d7.jpg)
![IMG_20160720_223529.jpg]( https://ooo.0o0.ooo/2016/07/20/578f8e08b44f7.jpg)
![IMG_20160720_223531.jpg]( https://ooo.0o0.ooo/2016/07/20/578f8e1814bba.jpg)
7284 次点击
所在节点    分享创造
21 条回复
cnnblike
2016-07-21 00:29:50 +08:00
ws2812 不适合照明,频闪直邮 400hz 还是多少,反正只够应急用
xmoiduts
2016-07-21 00:39:33 +08:00
@cnnblike 对的,这个作品就是应急灯,在电力中断,人员摸到手机之前提供那么几( 84 )秒的照明,也提供临时起夜照明。平时居住我有灯管台灯,这个设计主要是全自动无开关
cnnblike
2016-07-21 00:42:51 +08:00
还有, arduino 没有 dma ,主循环里面除了这个运行不了其他东西了,其实是对 mcu 的浪费。
还有楼主你没有给 ws2812 加保护电路,瞬间冲击的电流多来几次就会把第一个 ws2812 损坏掉。
再有,五号电池加 boost 电路供能其实非常不可靠,一个是量的问题,一个是内阻的问题。建议直接用充电宝引出 5v 来供电,一来不用焊接,二来量大还自带补偿。
以及,代码量其实很小,我忘了 arduino 有没有看门狗的,你自己找找相关的知识试着加一个上去吧。
最后要做得靠谱请找 stm32l 之类的低功耗片子
xmoiduts
2016-07-21 05:52:05 +08:00
@cnnblike 厉害,完全命中我的痛点。
---
关于冲击:
>>>>本来灯带之前搭了个电阻,后来往微型板子上迁移,就懒得焊了,以后我找个时间加上。
---
关于看门狗:
>>>>arduino 有一个看门狗电路,我在这里用作唤醒定时器了, wdt_vect(){}跑了一个空语句。平时休眠,每秒唤醒 2 次,每次是完整的 采集-处理-修改亮度 过程。
---
关于 dma 和算力浪费:
>>>>一开始没想这么多,我不想玩得太深,因为平时有别的课程,可以说我对 arduino 的硬件配置一无所知(除了定时器和中断系统,这两方面我找书啃过),到现在我连它的 main()函数都没见到过。
基于以上原因,我觉得代码能跑起来就是奇迹了,我也不知道他为什么能跑。算力其实没关注过,因为每次 loop 都有语句控制掉电,等 wdt 唤醒。
---
关于供电
>>>>这个是最大的痛点。按照网上教程配置了掉电模式,教程给出,关机后电流能低于 1ma ,我只能做到 7ma 很奇怪。
充电宝是个好主意,以后我找个移动电源小改一下,不知道空间够不够。
---
关于其它片子
>>>>真不会……现在的板子我还是一键编译加刷机的,换平台有可能要换库(库内有汇编我看不懂)估计是个大工程。以后我问问电院同学会不会。

v 站果然高人多,在下佩服。
skpoo
2016-07-21 11:04:11 +08:00
第三张图片什么鬼
xmoiduts
2016-07-21 11:47:51 +08:00
@skpoo 有灯带和电工胶带的图片?
那是 led 灯带的粘贴位置。
skpoo
2016-07-21 14:03:04 +08:00
@xmoiduts https://ooo.0o0.ooo/2016/07/21/579067d590b11.jpg
xmoiduts
2016-07-21 15:32:45 +08:00
@skpoo 竟然真有人看 f12😂😂
只是图一乐而已……
Arnie97
2016-07-22 17:42:35 +08:00
@xmoiduts 打开 /hardware/arduino/avr/cores/arduino/main.cpp ,把 main()声明为 int main(void) __attribute__((weak));就可以自行决定 int main()了。
roadna
2016-07-22 20:13:40 +08:00
不错不错,项目虽小但是把过程跑了一遍收获就很大了。
挺喜欢 Arduino 的,板子便宜库丰富,然而没用过, msp430 倒是会一点。
xmoiduts
2016-07-22 21:24:45 +08:00
手动 append:

发现了 ws2812 熄灭时仍会耗电;
烧掉了一只万用表保险丝;
A bunch of improving plans ;


@roadna 接下来还会体验到迭代开发和硬件 bug 的修复(重新焊线)/笑哭 /笑哭;
@Arnie97 Thanks , 必要的时候我会试试。
xieyudi1990
2016-07-23 17:48:56 +08:00
要 dma 做什么,数据量又不大。另外 dma 到底还是可能和 cpu 抢总线, cpu 又没 cache ,到时可能卵用都没有。
这单片机就是用来做这件事的,没干别的,时间片分配好就行。照这样说这种事整个单片机都是浪费,自己弄个 asic 多好。

记起来当年上大学时也弄了个 led 灯条,不过在自行车轮上装灯条当显示屏。当时自己搭 led 驱动,弄了一堆 74164 和 uln2003a 。 74164 倒是可以直接接 spi ,倒是可以用 dma (不过没卵用啊)。

我觉得就用移动电源供电这个建议不错。用电池,自己做 dcdc 没必要。

其实我现在蛮需要 lz 这种东西。因为客厅的灯的开关不在门口。不过我现在大概就在网上买现成的了,懒得搞。
xmoiduts
2016-07-23 19:57:06 +08:00
@edisoncyh 我会考虑的,但这件作品现在还有些关键问题( critical issues 还是什么),需要再次魔改。


@xieyudi1990 其实做这件作品的初衷,是应对学校经常性的突发停电,在室内突然漆黑一片时,续上几秒的光明;起夜感应倒是后加的,所以起初选了电池。
xieyudi1990
2016-07-24 09:34:16 +08:00
@xmoiduts 突发性停电... 那群打游戏的估计得把宿管杀了... 以前上学时停电一次, 楼上立马狂扔热水瓶玻璃杯,第二天宿舍门口全是玻璃渣.
xmoiduts
2016-07-24 10:03:53 +08:00
@xieyudi1990 我们还好啦,(原) 985 毕竟没那么大火气,不过期末考试前一晚停过电,这倒是挺坑的。
ilikekindle
2016-07-24 23:08:29 +08:00
很不错的作品啊,羡慕。

感应灯还是有需求的,家里买了大量的自动感应灯,老人很喜欢。
cnnblike
2016-07-29 22:37:20 +08:00
@xieyudi1990 DMA 要抢总线的话这个数据量会非常的大了吧一般来说
Okonkwo2016
2016-08-25 00:08:03 +08:00
点赞!以前从来没动过手做这些,但是以后有打算,所以想按着楼主这些步骤自己尝试做一个^-^
hahnzhu
2016-09-07 19:54:10 +08:00
图片的域名略屌,楼主自己的域名?
xmoiduts
2016-09-07 19:59:36 +08:00
@hahnzhu 很遗憾我没有能力做这种网站,这是 v2 大神的图床。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/293820

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX