用 Arduino 自制应急感应灯,给黑夜带来一点光明。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xmoiduts
V2EX    分享创造

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

  •  
  •   xmoiduts 2016-07-20 23:56:37 +08:00 8352 次点击
    这是一个创建于 3437 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一盏应急感应灯的诞生

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

    起:灵感由来

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

    • 在环境突然变黑( Blackout )时自动点亮,延短时间照明;
    • 在起夜时自动点亮,临时提供低度照明;
    • 在不需要的时候自动熄灭,增加续航时间。

    承:其他准备

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

    转:制作过程

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

    合:感想体会

    这是我闲暇时完成的一件小作品,虽然还没有足以应对工作的道行,但从它的开发过程中,我不难体会到 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) 
    第 1 条附言    2016-07-21 10:25:33 +08:00

    代码在这 ,昨晚推不上去,是因为host配置错误。

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

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

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


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

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

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

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


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

    感应灯还是有需求的,家里买了大量的自动感应灯,老人很喜欢。
    cnnblike
        17
    cnnblike  
       2016-07-29 22:37:20 +08:00
    @xieyudi1990 DMA 要抢总线的话这个数据量会非常的大了吧一般来说
    Okonkwo2016
        18
    Okonkwo2016  
       2016-08-25 00:08:03 +08:00
    点赞!以前从来没动过手做这些,但是以后有打算,所以想按着楼主这些步骤自己尝试做一个^-^
    hahnzhu
        19
    hahnzhu  
       2016-09-07 19:54:10 +08:00
    图片的域名略,楼主自己的域名?
    xmoiduts
        20
    xmoiduts  
    OP
       2016-09-07 19:59:36 +08:00 via Android
    @hahnzhu 很遗憾我没有能力做这种网站,这是 v2 大神的图床。
    loktar0ga
        21
    loktar0ga  
       2018-01-06 15:57:23 +08:00
    大佬
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4299 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:15 PVG 08:15 LAX 16:15 JFK 19:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86