无钥匙手表

实际上,提请您注意的手表是研究受欢迎的野兽ESP8266的特性和习惯的副产品。我认为,任何熟悉微处理器的人迟早都会在其上实现手表的版本。
唯一使我的手表与众不同的地方是它没有按钮。一般而言。他们只是显示确切的时间。


“但是,他的按钮在哪里?” ©冒险电子。


下面的描述就像博物学家的笔记一样,我希望对芯片上的这个系统感兴趣的人会为自己找到一些有趣的东西。

为了进行实验,我选择了最小的开发板版本,即ESP-01。这比其他的便宜一些,但最重要的是,您无需焊接即可连接到的唯一“本机”(即没有冒险的第三方提供的适配器)板。公平地讲,我必须说,由于得出的结论是双重的,因此该板不能直接插入妄想板中,因此必须使用导线。

该板的八个引脚中,只有两个是输入/输出端口。在启动MK时,两个端口上的工作必须是逻辑单元。在同名俄语网站上详细介绍了打开,闪烁和连接到WiFi的过程。我将分享我的经验,您不应该使用一个上拉电阻来得出几个结论,否则会产生不可预测的影响。

启动设备时端口上需要有一个高电平,这导致这样一个事实,即在MC初始化(复位/使能)期间,npn晶体管上熟悉的键被流过上拉电阻的电流打开了,这对于某些应用来说可能是不可接受的。


可以通过使用pnp晶体管上的按键来解决此问题:

在此,晶体管在启动时分别打开为低电平,负载被断电。
注意,键(一个和另一个)是输入信号的反相器:当MK输出为零时,晶体管的集电极为一个,反之亦然。

我使用了NodeMcu固件,并且我认为我并没有失败,因为使用Lua语言来“感受” MK确实方便又愉快。而且该语言本身原来很漂亮。

要访问微控制器的RTC(如果您可以称其为31位寄存器,由板的石英递增),则在Lua中使用功能tmr.time()和tmr.now()。 tmr.time()函数返回的内容未知。但是tmr.now()函数返回自微处理器重新启动以来经过的微秒数。大约每35分钟(2 ^ 31微秒)一次,计数器溢出,因此您不能直接使用该寄存器进行时间计数。但是,通过跟踪溢出时间,可以计算实时时间。脚本“ v2_utime.lua”参与其中,生成了一个可以用来获取时间的闭包。为了不浪费时间,每35分钟至少引用一次当前时间的关闭就足够了。

实验表明,内部计数器的错误每天几秒钟,这是非常不错的结果。

为了获得实际的当前时间,使用脚本“ v2_ntp.lua”,该脚本生成一个到NTP服务器的UDP请求并从接收到的响应中提取时间。我还遇到了另一种解决方案-与一些受信任的http服务器联系,以便从收到的响应的标头中获取当前时间。

控制器重新引导后首次访问NTP服务器,然后每15分钟访问一次。根据指定的时区将结果时间调整为指定的小时数。

可以在脚本“ v2_config.lua”中找到并调整所有配置变量。为了编辑和加载Lua脚本,使用ESPlorer程序很方便。

当前时间由四个7段指示器显示。仅有几个可用的输入/输出端口和一些缓慢的Lua脚本不允许使用动态指示。因此,为了获得足够数量的控制信号,使用了四个74HC595微电路-八位移位寄存器。通过三个信号来执行寄存器的工作:DS-确定记录的位,SH_CP-记录的位(在边缘)和ST_CP-用于将记录的数据传输到输出(也在边缘)的信号。 GPIO2端口用于将数据传输到移位寄存器。 GPIO0端口形成ST_CP,并通过已描述的SH_CP反相器形成。这种包含会导致更改值时指示“闪烁”,我们认为这不是错误,而是一个不错的功能。眨眼的存在是此表中缺少秒显示的主要原因之一。我确信那些希望的人可以轻松地增加秒数,并且使用更高级的板卡的另一个端口摆脱闪烁,以产生ST_CP信号。

除了增加输出数量之外,74HC595微电路还充当LED指示器段的驱动器;即使使用大型指示器,允许的35mA输出负载也足以满足要求。

大指示器的各段由串联连接的几个LED组成。要打开它们,需要用于微控制器和逻辑芯片的大于3.3V的电压。因此,对于红色的三极管指示器,需要约5.5V的电压,对于四极管指示器,该电压已经约为7V。因此,使用了两个电压源:3.3V为微控制器和逻辑电路供电,另外一个用于指示器。我使用了可调节的紧凑型模块DC-DC转换器“ mini-360”。

使用dc-dc允许您使用几乎任意的不稳定电压源。例如,我使用旧的无绳电话提供的12伏电源。使用12伏电源时的电流消耗不超过200mA。通过调节电压,可以实现指示器的舒适亮度。

使用带有公共阳极的指示器,从dc-dc模块向其供电。通过将地面馈电到相应的阴极来接通该段。这个想法是,尽管寄存器的输出是一个逻辑单元(因为该电压被提供给寄存器,所以为3.3V),但指示器段上阳极-阴极之间的电势差不足以打开LED。当输出为零时,该段点亮。
尽管有明显的体积,该设备的总体方案还是非常简单的。



此处:U1是指示器的电压源,其后面的线性稳定器U2形成3.3V电压,为ESP8266模块和寄存器供电。电阻器R7,R8,R17拉动控制器的引脚供电,以正确启动。电阻R10,R18,R16用于将控制器连接到五伏USB-UART转换器。晶体管Q1是红外LED键D4,同时是信号反相器GPIO0。红外LED-将来不会在此设计中使用,可以用3k电阻代替。现在关于二极管D1-D4,D6-D9-需要它们以确保在指示点处下降。事实是,与有多个LED的段相反,在指示器点处使用了单个LED。

分钟细分是上下颠倒的,这使您可以将点用作小时和分钟的分隔符。



手表组装在双面印刷电路板上,其一侧仅被指示器占据。



板与具有相同插脚的两种尺寸的指示器分离。



这是组装有大指示器的板的外观。



最后,对于那些读过这个地方的人来说,蛋糕上的樱桃!

为了迎接新年,除了当前时间以外,时钟还显示了此欢乐事件发生前的小时数。每分钟的第5秒到第11秒显示直到新年的小时数。为什么从第5到第11?因为这是Lua脚本的编写方式,所以任何人都可以自行决定将此行为更改为其他行为。为此,您只需要一个文本编辑器,在此我看到了NodeMcu固件的特殊优势。



从12月31日的23:00开始,一秒钟的倒计时开始!

顺便说一下,至少有一个幻想板上有时间将手表组装成NG是很现实的(这里是ESP-01使用适配器,但这不是必需的)。



DipTrace电路和电路板,Lua脚本

Source: https://habr.com/ru/post/zh-CN388033/


All Articles