一种用于手表线

一个线程的手表

在这里,我一个不显眼的缺席后,, riproporvi另一个数字时钟: 但现在大家都知道…我的是一个热潮… 也许我没有做任何事情.

它是 出生这个时钟 ?… 即使在三月girovando网上寻找一些设备尝试和实验,我对领导的一个特定网站Futura_Elettronica发现: 在各方面都类似于RGB LED (QUATTRO销ř,G,乙,阳极/阴极) 但它不是一个RGB LED. 虽然有 4 典型的腿其实是一个LED WS212. 它看起来像这样:

脚总是 4 但有不同的定义: 或 DATA_IN, VCC,GND,DATA_OUT. 在LED的一个侧上的防滑板标识销 DATA_OUT. 电源5V. 在LED格式: 5毫米.

好奇害死猫 (名言….) 所以我做了一个一阶 20 导致实验和测试. 我说我是领导WS2812: 或者使用由库运行特定的协议的串行 ADAFRUIT_NEOPIXEL. 这是不容易来形容这个协议: 实际上是一个序列 24 位 (8 每种颜色的) 发送串联LED灯与用于LED R定义的颜色, 用于G和B的LED按本 (源ws2812.pdf).

当然也有要满足的最后期限,但由于所有的管理工作委托给图书馆我没有太担心. 这些LED的特点是通过连接的类型给定: 每个LED级联连接与前一个,由此形成几乎没有具体限制链: 事实上,使这款腕表我用得好 112 LED.

这里再预览最终结果:

怜悯: 他们是在自己动手做一个名副其实的滑坡,这个时候,我还通过: 这是不容易的,只有这几天我基本上跑测试出来.

 

做最后的:

你击中地面之前,我进行了可行性研究 (今天,它是时尚) 决定如何这些LED连接, 它使用RTC, 如何更新时间值, 如何分配的颜色和亮度,其可以为能见度是可接受的,特别是作为食品所有考虑的井存在 112 LED. 这种功率和总吸收的问题花了我很多时间: 我不想冒被风险没有足够的电力供应: 从网络资源这些LED的应该吸收以及20mA小于每种颜色. 因此,对于一个LED的白色必须在三个LED共60吸收的切换. 但随后检测到错误的问题,因为这款手表将永远不会在所有被打开 112 LED. 但是,正是为了避免弊端已经准备了一些PCB与串行连接的一系列LED.

根据与正常测试仪上检测200毫安流进行了一些测试,以下措施: (亮度=的值 25 和库的第二功能是低的值).

链与一个LED: LED熄灭: 07,7妈; 亮红灯: 08,6妈; 绿色和蓝色同上; 比安科10,3ma; 紫色: 09,4; 黄: 09,4.

链 2 LED: 关闭: 15,3; 亮红灯 1: 16,1妈; 绿色和蓝色同上; 白17,8ma; 紫/黄16,9ma; 亮红灯 1+2: 16,9妈: 同上绿色和蓝色. 比安科20,3ma; 紫/黄 18,6.

链 3 LED: 关闭: 15,7; 亮红灯 1: 16,6; 佛得角, BLU去; 亮红灯 1+2: 17,4; 佛得角, BLU去; 白 20,8; 紫/黄红19,1ma.Acceso 1+2+3: 18,4; 绿色和蓝色同上; 白23,6ma; 紫/黄21.

链 4 LED: 关闭: 16,2 妈; 亮红灯 1: 17,1; 绿色和蓝色同上; 白 18,8; 18紫/黄; 亮红灯 1+2: 17,9 妈; 绿色和蓝色 18,0 妈; 白 21,4; 紫/黄 19,6; 红色登录 1+2+3: 18,8妈; 绿色和蓝色同上; 白 24,2; 紫/黄21,5ma; 亮红灯 1+2+3+4: 19,8 米; 绿色和蓝色同上; 白 26,7; 紫/黄 23,3.

您可能会注意到的基本颜色 (罗索, 佛得角, 蓝光) 总是有相同的价值观,以及黄色和紫色. 唯一的例外是由白色定. 从测试用的样品进行 12 领导并采取了单独的电源的优势 (用功率,然后电池充电器1A从微分离) 您可能会遇到下面的值: (与在200毫安满刻度的公共计测量的值).

亮度值 (作为Neopixel功能) = 25

所有指示灯都熄灭: 〜34,3 /35毫安,

12 LED灯亮红, 佛得角, 蓝光 –> 41,9/42,0;

12 带领亮黄色/粉红色: –> 51/51,2;

12 明亮的白色LED的颜色: –> 49,8/49,9

与测试 16 LED: 第40关. 红/绿/蓝 16 49升/50毫安;

有了这些价值观和冒着假说, 的表盘的总吸收 28 LED应可之间 100 E I150毫安. 而在理论, 集 4 象限应该在 400/600 毫安. 但它仍然具有只进行测试的艺术理论状态 16 LED.

这些测试后完全实现后的最终结果是一个电池充电器为手机该时钟 (5V,1一个) 一切工作稳定: 后电源 24 连续操作时间一直保持 ““. 不过,我选择了从5V一个特殊的电源,2为了有一个稳定的电压为5V (充电电池的政权有近0.5V电压的电压降) 而且后 24 小时一直保持 ““.

另一个特点要牢记: 当电力系统 (不管连接的LED的数量的) 所有的指示灯亮起最大它们的亮度,然后你可以crare吸收峰. 因此,必须提供总关机 (通过软件) 后立即在系统启动.

让我们先从最终设计规范:

  1. Quattro的显示 (我会请拨打), 显示小时和分钟. 显示的图像和模样形成各象限 7 段: 每个段是 4 LED. 选择由于成本和累赘之间的妥协.
  2. 两个LED与所述第二值的基础上交替闪烁
  3. RTC DS3231 考虑更加稳定和精确的DS1307
  4. 微调 模拟处理多达 8 亮度甚至可编辑热点的水平
  5. dip_switch 一个 8 位置选择最多 4 颜色每个象限编辑热 (两个开关用于每个象限).
  6. 按钮用于设置时间,如有必要分钟初始化.
  7. 系统启动和复位的两个按钮.

鉴于这些规范,使用的硬件如下::

  • 微Arduinio纳米 选择了它的大小,而且已经有你需要的一切: USB连接和加载软件, 供电USB.
  • RTC DS3231 作为维持的时间和日期的值的装置
  • PCF8574 8 位exapander I2C. 该设备可以让我节省 8 引脚的Arduino. 它是用来读取Dip_Swtich设置的值.

现在让我们看看该项目的一些电路图:

LED的典型的连接:

此图显示 (部分地) 它们是如何连接到LED: 每个组的 4 形成表盘的段: 然后 7 段通过形成 28 总领导. 每个这些LED的串联连接到下一. 这将是软件适当地选择哪一组 4 LED (然后段) 开启或关闭. 在第一LED的入口是由电阻器连接 470 欧姆. (如何背诵经文). 每个象限是在自己的权利的组: LED的释放 它是用下一个象限的第一LED的输入端连接: 有一个具体的理由. 在测试过程中,我注意到了这些LED很微妙,它发生了一个 ““. Ë’ 显然,在所有系列是足够了一个只有一些问题影响到整个后续的链节. 为了避免这种问题,我决定单独管理 (库许可证) 一世 4 象限. 其结果是只有在选择使用哪个拨号的纲领性并发症.

连接设备:

在这个方案就说明他们是如何被关联的两个 PCF8574 那’RTC DS3231. 事实上,这是两个已用于PCF设备已经预装了RTC一个示范性方案: 设备很容易安装和使用I2C protocolo. 在该方案中它也提供了进一步的 PCF8574 使用二进制模式显示秒 7 位. 为了不给系统然后我优选用途进一步复杂 2 导致交替闪烁. 在该图中的选择的连接也可用于连接按钮和修剪机阿尔杜伊诺销可见.

每个象限的PCB:

这是最后的PCB有效的每个象限. 我做了一个小,但与LED5毫米实践证明为靠得太近连接问题. 不幸的是,你可以在项目的第一个全面的图片中看到, 精度不亮.

布局中的每个象限:

通过举例的方式,每个象限具有组成每一个LED的下面布置和逻辑记数. 每个LED的缺口标识销DATA_OUT

 

控制面板电路板:

此面板的房子: 修剪器用于调节亮度, 一世 2 用于更新NOW值和MINUTES按钮, START按钮系统, RESET按钮, 这取决于它是如何设置桥允许更新时间或多或少的价值观和分钟的时候,他们必须进行更新, 最后,dip_swtich的外壳颜色供象限变化.

PCB MAIN:

这是定义的PCB “主要” 因为它容纳微Arduino_Nano, 为I2C设备的各种连接器和控制面板. Ë’ 它也提供了一个单独的入口用于供应象限 (预期,但随后没有使用). 微型USB提供电源电路的其余部分.

PCB BUS_QUADRI和LED_SECONDS

最后两个是PCB支持: BUS_QUADRI 它允许连接 4 对PCB象限 主要 与输入信号和各馈送. LED_SECONDS 容纳两个LED必须闪烁以第二速率. 该PCB设3分,两辆表盘和2分钟; 电源和信号经由连接 BUS_QUADRI.

 

CLOCK建设

在下面的图片你可以看到象限的房屋已建成:

随着28厘米与木制底座和侧面有机玻璃帧他们被粘在 4 象限的照片: 两个LED在中心为秒和右侧的PCB BUS_QUADRI 用于向主连接. 鉴于LED也最小亮度都还是很光明, 避免各个LED的亮度可覆盖右侧和左侧, 每个象限 “覆盖” 黑色面具 (塑化) 突出各个段. 每个段被包裹用黑色硬纸条. 以下是如何presena “裸”.:

有了这个系统,你会得到一个很好的观点 “分开” 而不使整个时钟拨号的亮度不会与侧向干扰. (请记住,红色,绿色, 然而,蓝,它们具有彼此不同的亮度).

该系统的心脏:

在封闭一个有机玻璃箱的控制面板的图像下面的图片,其中被容纳在微Arduino_Nano, 和RTC PCF8574和对拨号连接器. 该面板由微调的 (10ķ) 用于调节亮度, 通过几分钟的HOUR更新按钮. START键和RESET, 终于桥更新的时间正值或负值. 在右侧拨动开关和电阻pull_up阵列.

 

大号’ 实现软件的

如果我没有生活变得一团糟不满意: 管理手表并不难,如果你真的不是一个初学者. 我可以作出限制自己阅读的一个很简单的草图’ RTC解码值和刻度盘的曝光.

但自那时以来 “胃口越吃越” 我实现了涉及草图:

  • 管理 4 通过图书馆拨打 ADAFRUIT_NEOPIXEL.
  • 管理’ 需要时RTC与价值观的更新. (如果与DS1307更准确, 如果只是为了夏天/冬天的时候偶尔被更新).
  • 亮度的管理,以在一定范围内的变化 8 从最小到最大的限制值 (即使它是不是承受的最大) 通过与模拟显示的修剪.
  • 个别表盘的颜色管理: 每个可具有从先前和随后的不同的颜色: 通过拨位开关,您可以选择的一个 4 色彩定义: ROSSO, VERDE, BLU, ROSA. 我之所以选择这些颜色,因为他们才是谁 “功耗更低”.

管理理念:

正如我已经指出,以避免连接问题或多次失败, 我决定自己管理 4 象限分别 (然后就 28 导致拨号). 然后我定义 4 该库的情况下, ADAFRUIT_NEOPIXEL 以获得每个象限的单独的管理. 这无疑导致的并发症,因为草图必须采取并表示小时和分钟刻度盘个人脱单独管理开关.

所有’ 放置草图开始库的初始化必须进行后 NOW 各个象限关闭: 这些点亮与随机颜色和最大亮度. 要打开需要发送的每一条链颜色ZERO: 基本上黑. 一种替代办法是使亮度为零=.

草图继续与协议的开始 线 对于I2C设备的管理, 通过阅读 DIP_SWITCH 确定颜色, 与微调读取亮度, 然后开始读的小时值的’ RTC和执行遭受的小时和分钟显示在它们各自的 4 象限. 然后,它等待控制面板按钮中的一个的读取. 如果按下按钮小时更新相对值或多或少取决于跳线的位置 “+/-“. 现在显示更改后的值. 如果按下相应的按钮同样的情况,为分钟的值. 按下按钮 “开始” 触发草图的最后一个周期: 如果有更新,这些都在重新加载’ RTC. 常年循环读取修剪器的位置而变化的亮度和颜色Dip_Swtich在的情况下实现的变化. 他们读那么的小时值’ RTC且仅当它执行它们是多种多样的显示.

分配引脚ARDUINO:

下面deifinisce表为已分配的Arduino的引脚:

转让

A0

亮度输入模拟微调

销 2

数据输入拨号 1

销 3

数据输入拨号 2

销 4

数据输入拨号 3

销 5

数据输入拨号 4

销 6

HOURS按钮 (拉起)

销 7

按钮MINUTES (拉起)

销 8

START (拉起)

销 9

开关 +/- (拉起)

销 10

闪烁的LED秒

PIN A4

SDA 每RTCËDS3231

PIN A5

每SCL RTCËDS3231

 

图书馆ADAFRUIT_NEOPIXEL:

下载的同名网站 (有一个更新的两个版本,另一个处理NEO_PIXEL环和Neo_Pixel矩阵) 该库的一些功能可以处理的LED WS2812几乎无限数量. 主要功能可以概括如下:

首先,你需要使用以下参数来实例化对象:

Adafruit_NeoPixel像素= Adafruit_NeoPixel (NUMPIXELS, 销, NEO_RGB + NEO_KHZ800);

鸽子: 像素 是名给予实例, NUMPIXELS 连接的LED的数量 (所述第一链的是确定与所述偏移 “” 在总 28 每个象限), 标识Arduino的数字销用于连接第一 DATA_IN 各链的LED. (见表precednte). NEO_RGB + NEO_KHZ800 它表示的LED的颜色的序列是在R-G-B格式和频率800Hkz. 对于下载了一些例子为准几乎是标准. Ë’ 可以实例化多个对象给每一个不同的名称 (明显). 这些定义应该在可变部中插入.

在节 建立 每个实例必须初始化库: nome_istanza.begin(). 在草图中,有这么 4 这些句子.

下面的函数执行每个实例的实际管理 (及其相关链). 亮度进行控制的功能: nome_istanza.setBrightness(值) 并且它被施加到LED的整个链.

每个LED链的动力 (ricodiamoci是 28 链) 它发生指示LED的两个位置 (从无到有的偏移) 该颜色被分配. 由此可见,对于每个LED链可以被分配不同的颜色. 该函数有两种格式:

INSTANCE_NAME.setPixelColor(Led_Offset,nome_istanza.Color([R,G,b)); 与此库被编码根据R1,G1,B1中定义的值移交给色 (给 255), 可替代地,第二格式定义的颜色代码照片直接 (32 位无符号): nome_istanza.setPixelColor(Led_Offset,codice_colore).

在草图中执行的周期 28 迭代分配,然后打开每个象限的LED的链的一个片段.

如果不执行的功能这一切都不会导致任何结果: nome_instanza.show(). 如果我们希望看到LED的开启或关闭或改变其亮度应始终执行该功能.

有一个关于使用后者的功能做一个反思: 如果涉及到打开/关闭只有一个LED或特定功能之后改变亮度, 只需运行功能 节目() 执行程序. 但会 (在这种情况下,) LED以开/关被接通一个以上的可使用两种技术: 在周期来执行开/关断,并在周期结束时的特定功能以执行该功能显示() 或同一周期内运行下面显示的功能().

下面是一个例子 (道草图). 用于关闭LED的程序: 从链的NQ数 1 一个 4 由于是例行包括关闭电源以一个象限或全部 (NQ = 0).

无效关闭(字节NQ)
{ INT KL;
如果 (NQ == 0 || NQ == 1)
{ 对于 (KL = 0; 在 < NUMPIXELS; 下午++) QDR_DEC_ORE.setPixelColor(在,0);
QDR_DEC_ORE.show(); }

在这种情况下的性能表现() 在的结尾for循环中执行.

在这个例子中执行show函数后lumimosità只有当它改变():

QDR_DEC_ORE.setBrightness(Lumen_Value);
QDR_DEC_ORE.show();

另一个库函数检测分配给LED的颜色: 返回颜色编码格式 32 位无符号: nome_istanza.getPixelColor(Led_Offset).

 

结论:

我希望我已经充分解释这个项目从三月到现在占据那一点点的空闲时间. 我通常不投入超过 2 每天这个爱好小时: 我有编程经验,因此很难有编程问题. 我想到的一个项目upgrandig的: 也输入温度的显示看出,DS3231还设有传感器和颜色的随机修改. 我们会看到….

我感谢所有反正 ElettroAmici 的时间,他们已经花了阅读这篇文章. 我知道我重复…..这是手表又. 在任何情况下,它们可用于希望文件或其他有关这一项目的人士.

谢谢

Gvsoft Gugno 2019

gvsoft75@hotmail.com

2 回复
    • gvsoft
      gvsoft 说:

      谢谢, Amilcare, 尽管有相当大的延迟, 但我有一些健康问题,应该解决星期一 15 厘米.
      我想发表评论,但很明显,我不能对我的评论文章. 所以我借此机会在此响应为那些一些建议,谁可能有兴趣在使用这些LED. 提供了从5V或3V从almento 2A好的电源. 将一个电容器 1000 PSU的输出UF. 逐个检查所有的指示灯,使用: 我有一个小的PCB尝试UINA链 8 领导发现,一些LED的 “假” 和那些谁跟着他 “疯狂的”. 如果你没有机会好好专业PCB测试轨道尤其是一个连接与DIN DOUT. 在链的末端 (或提前) 插入陶瓷consensatore (代码 104). 请记住,在系统上电时,所有的指示灯都在最大亮度通常切换蓝色和一些白色的: 这意味着用电高峰. 因此,首先要做的功能开始后,() 这是关与显示功能链() 或与发送到每个LED颜色的黑色的环 (RGB: 0,0,0).
      有法与LED链的数量没有限制, 妈, 你可以在文章中可以看出, 一世 112 LED被管理 4 不同的链. 这意味着一个复杂的编程,但它可以简化并更好地解决某些故障: 在这种情况下,第一象限 (几十个小时) 一段时间后,开始给的问题,我不得不做出一个新的: 有可能是一个LED “假” 但是,当他想 !!!!.
      再次感谢Amilcare

发表评论

想加入讨论?
随意贡献!

发表评论