V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xmoiduts
V2EX  ›  分享创造

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

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

    一盏应急感应灯的诞生

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

    起:灵感由来

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

    • 在环境突然变黑( 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   ·   我们的愿景   ·   实用小工具   ·   5442 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 08:39 · PVG 16:39 · LAX 01:39 · JFK 04:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.