宙仔 发表于 2019-12-10 01:20:20

忘了时间的钟……(掌控与Ws2812)

本帖最后由 rzyzzxw 于 2019-12-10 09:22 编辑

  忘了时间的钟,滴滴答答的错……
  没有滴滴答答,钟,或许就不会忘记时间了……
  也许你看惯了带针的时钟,也许你厌倦了液晶数字的电子钟,那我们今天一起来用掌控版+WS2812B制作一个环形灯光时钟。
  所需元器件:掌控板1个,WS2812b环形灯珠(带?)——60珠?24珠?——都没问题,杜邦线若干。

  一、WS2812B环形灯珠(带)
  1、焊接方法
  如果您购买的是这种灯带,那就得将其轻轻的掰开,然后用电烙铁焊好,本人焊工一般,也就不上图了,刚好有个新的,拍照画线。
  
  
  

  百灵鸽接法如下:VCC接V、GND接G、Din接S pin13
  掌控宝接法如下:VCC接3v3、GND接GND、Din接P13  注意:Din(DI)是信号输入,DOut(DO)为输出,接Din可扩展灯带。
  如果你仅仅是做一个实验,用灯带是一个不错的选择,因为60灯珠的灯带不需要焊接,省去很多功夫哦。

  

  2、灯珠的位置是0还是1?
  这个问题……直接用代码测试一下,马上得到答案了,哈哈……实践见真知。

  3、灯环(带)测试
  还是老方法咯,把每个灯珠都点亮一遍,测试是否有坏灯,没有的话记得给老板一个好评。
  
  
  二、掌控获取网络时间
  为了准确显示时间,我们还是利用掌控的WIFI功能获取网络时间,操作非常简单,参考代码如下图所示,连接WiFi,当成功连接WiFi,同步网络时间(默认东八区——北京时间即可)。
  
  然而,运行代码后发现,“否则”语句然并卵——当WiFi连接失败的时候,OLED屏并不会显示“WiFi连接失败”,直接报错,嘿嘿。
  好了,接下来该去实现我们的灯光时钟了。

  三、时分秒与灯珠的对应关系


  PS:本地时间(时)的灯珠位置显示是本次内容的一个难点。
  我们知道,表盘钟有60个小格,秒和分直接按照读数来显示其位置即可,那如何准确的点亮表示时数的灯的位置呢?

  ①时数与位置
  通过表盘图,我们可以清晰的看到——小时数是每5格1读数,因此,表示“时”灯位应该是时数×5,因为获取的网络时间是24小时制,因此,要将其转换为12小时制,通过求余的方法可以实现:即:“获取本地时间(时)除以24的余数×5”。

  ②分钟的微调
中间还有5个小格如何处理? 1小时=60分,60÷5=12,可以得到,时针在每12分钟走1小格,这里就通过求商来实现,即:“获取本地时间(分)除以12的商”

  综合①② 得:“时”灯数 =获取本地时间(时)除以24的余数×5 + 获取本地时间(分)除以12的商。

  四、流程图


  五、参考代码



  最后,贴心一点,利用掌控的光线传感器来控制一下灯珠的亮度,当白天的时候,灯珠亮一点,到了晚上,灯珠就稍暗咯。
  这个权当是一个作业,还是留给大家去做吧。

  六、过程中的尝试:
  在过程当中,尝试利用OLED屏加上“图形化时钟”,发现三颗灯珠都在闪;也尝试了仅以数字形式(00:00:00)显示时钟,结果也是一样,闪啊闪,最后不得不放弃OLED屏显示时钟。


  附视频效果:
https://v.qq.com/x/page/z3032q0fvcf.html

  估计是LED灯控制和OLED屏时间显示两者结合,时序安排有差别导致。

  七、迟来的代码(掌控第一漂讲课案例:24灯时钟)
  本是掌控第一漂我上课的案例,当时用的掌控漂流套件里的24灯光环板制作的时钟,因为懒得当初码字,现在一并送上。



  最后,配个3D打印件,当成一个小摆件送人,还是很漂亮哦,来自小杨童鞋的设计。


  我们也给60灯珠配了个激光切割的面板,中间空白广告位置--虚位以待! 
  (此显示效果不在教程中,可以自行完善代码)




  八、最后两个效果视频
  60灯珠
https://v.qq.com/x/page/e3032ten42p.html


  60灯带

https://v.qq.com/x/page/r3032c3jfki.html


青出于蓝 发表于 2019-12-11 19:04:15

吹爆掌控
页: [1]
查看完整版本: 忘了时间的钟……(掌控与Ws2812)