步骤1:设计RTC
我不喜欢我的第一个设计,因为电池只能使用大约十天,所以我希望设计可以使用更长的时间。
:电池不能使用很长时间的原因是,我必须持续保持AtMega328(Arduino)的电源以保持软件实时时钟运行。因此,我需要能够使AtMega328进入睡眠状态或将其关闭。
我的朋友给我发送了一些RTC(实时时钟)模块:
http://www.ebay.co.uk/ITM/Arduino的I2C纤巧-RTC-DS1307-的实时时钟模块,AT24C32板上-AVR-MCU-PIC-/221176522620 PT = UK_BOI_Electrical_Components_Supplies_ET&哈希= item337f25e77c搜索结果HTTP://WWW。 ebay.com/itm/I2C-Tiny-RTC-DS1307-实时时钟模块AT24C32-AVR-MCU-PIC-DIY-/231037403500?pt = LH_DefaultDomain_0&hash = item35cae7016c
这些均随附具有电池备用功能的RTC和EEPROM也很有帮助。
问题:因此,我对这些模块感到担心。请注意,电池是LIR2032,它是可充电电池。我怀疑它有充电电路。好吧,我找到了一个原理图并决定绘制自己的示意图(参见图片)。它确实具有充电电路,并且会给18650电池带来额外的负担。
解决方案:因此,对于此模块,如果卸下R5,D1,R4和R6并跨接一个跳线, R6并用CR2032更换电池,这将消除电池充电。这就是我所做的(参见图片)。
在此应用程序中,CR2032应该可以使用大约十年,因此我对此没有任何问题。
警告: AdaFruit的一个旧库,用于其数据记录器RTCLib。有一个名为DS1307.pde的草图可以设置时间。现在,它在第一次运行时效果很好,但是没有设置时间。有一个更新的版本,其示例效果更好:
https://github.com/jcw/rtclib
下载zip,解压缩,将其从rtclib-master重命名为rtclib并将其复制到您的Arduino库目录。
TechnoSpeak I2C:从技术上讲,它应该是I(平方)C或表示集成电路间的IIC。基本上,这是一个“标准”串行接口,需要两个信号SCL,SDA和接地。 SDA是从0V切换到5V的数据信号,数据按顺序(串行)传输。由于只有两个级别,并且无法确定速度,因此无法确定一个数据的结束位置和下一个数据的开始位置。这就是SCL(时钟)信号的输入。这告诉接收设备一位在哪里结束,下一位在哪里开始。
I2C的一个优点是可以将多个设备连接到相同的两个信号。在这种情况下,DS1307(RTC)和24C32(EEPROM)都连接到SCL和SDA线上。为了告诉您正在交谈的设备,每种设备类型都有一个唯一的地址。
DS1307的地址为0x68。 24C32地址为0x50。
Arduino通过“ wire”库支持I2C。
顺便说一句,这意味着在同一两行上不能有多个相同的设备类型。例如,您不能有两个24C32。
步骤2:设计Solar Boost
问题:所以RTC模块需要5Vdc,我希望它能与18650电池一起工作,电池的电压从4.2Vdc降至大约2Vdc。
解决方案:有一些满足需求的小Solar Boost模块:
http://www.ebay.com/itm/370828387683?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
我不知道为什么他们称他们为Solar Boost。基本上,它们采用1-5Vdc的DC电压并将其转换为5Vdc电压。
现在有许多可用的版本。我想大多数都适用于该应用程序。
我取消了USB连接器的焊接,因为不需要它。 (见图)。如图所示,两个外部USB引脚分别为接地和5V。
步骤3:设计ShowerMonitor2 PCB
所以自然是极客,我决定制作自己的带有Arduino的ShowerMonitor2 PCB。 (参见图片)此PCB将Solar Boost和Tiny RTC连接在一起,并显示“星期几”和“淋浴”状态。
问题:我想用一个按钮打开电源, Arduino保持开机状态,直到显示星期几和淋浴状态为止,并且还可以通过另一个按钮切换淋浴状态。然后关闭PCB的电源。
解决方案:下一张图片是电源电路的框图。
TechoSpeak:连接至PCB并连接至Solar Boost的地面(在此Solar Boost上,PS-和GND输出连接在一起,以便可以将其中任何一个连接到PCB)。
要打开Arduino PCB,请按Start按钮。这会将正的电池电压传递给Solar Boost,后者启动并向PCB提供5Vdc。 Arduino草图将D3拉高,从而导通BS170 FET。这允许电流流过,从而将大部分电池电压施加到Solar Boost。因此,可以释放启动开关。
在短暂的延迟后,用户可以看到白天和淋浴状态,Arduino将D3设置为低电平,这会关闭FET并断开与Solar Boost的电源,从而断开与PCB的电源。
电源摘要:因此,大多数情况下,Arduino均未供电。 TinyRTC拥有自己的电池来保持正确的时间。 EEPROM存储一些淋浴信息,不需要电源。大多数情况下,18650电池的耗电量可忽略不计。按下开始按钮时,Solar Boost由18650供电,Arduino读取RTC,在星期几点亮,并在适当时点亮Shower LED。大约五秒钟后,Arduino断开电池并自动关机。
TechnoSpeak: EEPROM代表电可擦可编程只读存储器。这意味着我们可以在其中存储信息。该信息将保持通电或断电状态。因此,下次使用电源时,我们可以读取之前存储的信息。不需要电池。
注意:我添加了一个标有“ Prog”的两针插头。如果连接了跳线,这将为Arduino持续供电,以便用户可以将草图加载到Arduino并在需要时进行故障排除。
好的,所以我制作了PCB并将其塞满。我在一周中的几天内安装了不同颜色的LED,因此区分一天和另一天比较容易。 (我的视力不是最大)
问题:对于TinyRTC库部分,我概述了电路板的物理尺寸。不幸的是,当我试图缩小PCB尺寸时,我忘记了这一点,因此“开始”按钮位于Tiny RTC板的下面。这是当我累了并且没有彻底检查时会发生的事情。
问题2:嗯,TinyRTC的底部是电池。有了母头,我以为可以清除AtMega328,但没有清除。
解决方案:我从朋友那里抽了些长根母头(见图)。我将引脚弯曲成“ S”形,这样TinyRTC板就更高了并且远离“开始”按钮。
问题3:很好,但是当我把它挂在
解决方案2:如果您看一下TinyRTC模块,它有两个连接器。一个是七个针脚,另一个是五个针脚,但五个信号以相同的顺序重复。无论如何,我只使用其中的四个。好吧,我决定拆下母头,在另一侧安装五针公头,然后将它们焊接进去。它工作得很好,并且更容易到达“开始”按钮。
附带了鹰头文件
零件清单:
1个微小的RTC_DS1307和AT24C32模块
http://www.ebay.com/itm/I2C-Tiny-RTC-DS1307-Real-Time-Clock-模块-AT24C32-AVR板载-MCU-PIC-DIY-/231037403500?pt = LH_DefaultDomain_0&hash = item35cae7016c
1 Solar Boost 1-5Vdc to 5Vdc output
http://www.ebay.com/itm/370828387683?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
1 18650电池
1 18650电池座
1淋浴监视器2 PCB(可以用Eagle Cadsoft文件制成)
1 ATmega328P微处理器
1 28针IC插座
6公头针
2触觉SPST开关
2电容器0.1uFd
2电容器22pFd
1圆柱晶体8MHz
8 LED 3MM(多种颜色)
1 BS170 FET
2电阻10K
8电阻1.5K
1 JST2.0连接器组(公/母)
废线
Sprap p lastic
大多数零件都可以从Digikey和其他电子产品商店获得。
步骤4:Arduino软件
问题::标准引导加载的AtMega328P不适用于8MHz晶振。需要其他引导加载程序。
解决方案:我基本上使用此过程来加载正确的引导加载程序:
http://arduino.cc/zh/Tutorial/ArduinoISP
步骤6:我选择了:带Promega的Arduino Pro或Pro Mini(3.3V,8 MHz)作为我在AtMega328P上想要的引导负载。
警告:在“工具”》“面板”菜单下加载草图时,必须选择带有ATmega328的 Arduino Pro或Pro Mini(3.3V,8 MHz)
我在AtMega328上贴了一个标签,以帮助使我想起我正在使用什么。
TinyRTC模块使用DS1307 IC作为实时时钟。对于Arduino,您需要一个库。有很多,但我选择了这个:
https://github.com/jcw/rtclib
首先,必须在TinyRTC模块中设置正确的时间/日期。确保已安装CR2032电池。
在Prog上放一个两脚跳线。
运行我的SetRTC草图。打开串行监视器以确保正确设置。
现在加载ShowerMonitor2草图。
删除两针跳线。
草图摘要:
设置:将电源设置为高,以使SolarBoost保持打开状态。
循环 ::读取存储在24C32-EEPROM中的数据。
读取RTC。以获得正确的时间/日期。
打开正确的星期几LED。
弄清楚淋浴LED是否应打开。
检查是否按了Shift。
切换淋浴并发送到EEPROM。
大约五秒钟后,关闭电源,然后关闭Solar Boost和Arduino。
步骤5:使用淋浴监控器2
所以我很懒,我用双面胶带将电池和PCB粘在一块塑料上。我钻了几个孔,用一根电线将其挂在钉子上。
步骤:因此,Shower Monitor2通常处于关闭状态。
按住开始键按钮。 Solar Boost上的电源LED将点亮,然后一周中的某一天LED将点亮。释放开始按钮。如果淋浴LED亮起,则是淋浴时间。
淋浴监控器将在大约四秒钟后关闭。
更改淋浴日期::如果要更改淋浴日期,按住“开始”按钮,直到获得日间LED,然后按住Shift按钮,直到“淋浴” LED发生切换。
故障排除::如果没有LED亮起,则(希望)电池。替换为已充电的18650。
如果星期几关闭,请加载setRTC草图以设置时间,然后重新加载ShowerMonitor2草图。
-
监控器
+关注
关注
1文章
265浏览量
26514 -
Arduino
+关注
关注
187文章
6461浏览量
186570
发布评论请先 登录
相关推荐
评论