需要给房间通风吗?本文将向您展示我是如何制作一个继电器操作的 GPS 定时风扇来排出我船舱内的潮湿空气。它由 PIC16F628A 控制并具有 LCD。
让空气流动
在几乎没有通风的小房间里,空气往往会停滞不前。如果空气有点潮湿,你肯定会在某些地方有霉菌和真菌。
霉菌和真菌存在于自然界中,它们是分解树叶、木材和其他植物碎片所必需的。因为我的船里有很多木头,我肯定会有霉菌和真菌。我无法阻止它们进来,但我可以采取一些措施来尽量保持我船内的环境对霉菌和真菌不利。
至少有两种方法可以解决这个问题。一种方法是按时进行清洗和清洁。现在,这有多有趣?作为一个极客,我把一些东西变成了书呆子:一个风扇,它在固定的、定时的基础上循环和排出潮湿的空气。
设计系统
我希望系统执行以下操作:
循环空气
以稳定的间隔自动打开/关闭
从汽车电池运行
包含一个电池充电器为电池充电
包含显示时间和其他信息的显示器
要制作这样一个系统,我需要以下部分:
12v风扇
一个微控制器
一个 12v 电池和一个 12v 电池充电器
2个继电器,跟踪时间和螺丝端子的东西。
其他零件,根据下面的零件清单
我希望风扇每小时运行五分钟。这将在软件中进行硬编码。
该设置将使用汽车电池运行。我的风扇额定电压为 12v 4.5A。为确保电池始终处于顶部充电状态,我将其连接到电池充电器。为确保风扇运行时电池充电器不会过载,我将在风扇运行时让系统“断开”充电器。一个继电器将操作风扇,另一个继电器将操作电池充电器。风扇运转时,电池不充电,风扇不运转时,电池充电。
为了跟踪时间,我使用了 GPS 模块。在这个项目中,我将使用 Skylab SKM53 系列模块 (PDF)。该单元每秒通过 UART 发送几个 NMEA 语句。数据表建议在 RXD 和 TXD 上都使用 10K 上拉电阻。这将增加串行数据的稳定性。我没有这样做,我没有注意到任何不稳定。我可能很幸运。在数据表的同一页上,它说应该添加合适的去耦电容器。10uF 电解和 0.1uF 陶瓷。当我为电路制作面包板时,我只使用了 0.1uF 陶瓷。
Skylab 数据表 (PDF)的屏幕截图。
我正在使用“RMC”句子来获取时间。RMC 语句的示例如下:
$GPRMC,075747.000,A,2233.89990,N,11405.3368,E,3.9,357.8,260210,,,A*6A
$GPRMC 之后的第一个数字是时间。在此示例中,时间为 07:57:47。我们将需要这些信息。
接下来我们需要的是告诉我们 GPS 模块是否具有有效定位的前缀。在上面的示例中,它是三个零之后的大写字母 A。
“A”表示有效修复,“V”表示无效修复。在我的软件中,我检查了一个有效的修复程序。这些字母区分大小写。
为了构建项目,我喜欢制作框图。通过这种方式,我“想象”了我想做的事情。
在上面的框图中,我将所有内容拆分为各自的块。如果我需要对原理图或电路进行故障排除,这也很有帮助。
原理图是基于框图。我已经复制了框图中的所有块,以反映电路中的组件及其连接。
在 LM7805 稳压器的数据表中,声明对于标准应用,您只需要输入引脚上的 0.33uF 和输出引脚上的 0.1uF。那么为什么我要使用不同的值上限和一些额外的值呢?我正在使用它们来平滑输入和输出。这可能有点太多了,但我对这种调节器配置有很好的体验。如果您不使用任何电容器,稳压器可能会开始振荡。LM7805 稳压器是一种老式的线性稳压器。为什么不使用现代开关稳压器?开关稳压器比线性稳压器效率高得多。这就是我周围的东西。
只需使用一个继电器,我就可以节省零件和空间。我想要两个继电器。使用两个继电器的原因之一是我希望在充电器被切断和风扇启动之间有一点时间框架。
我已将 BOM.ULP 中的部件列表导入 OpenOffice Calc 并删除了一些不必要的列:
原理图中没有显示的是我的保险丝。我在风扇正极线上有一个 12v 8A 额定保险丝,我在电池充电器正极线上也有同样的保险丝。
软件
您可以从本文末尾的下载链接下载 C 源代码。代码注释很好,但我会在这里做一些额外的亮点。
当我制作一个程序时,我遵循一定的结构。该图显示了结构:
代码首先包含必要的库,然后是配置位。在源代码中包含配置位被认为是一种良好的编程习惯。然后,查看您所做的工作并帮助其他人进行故障排除会容易得多。此外,如果您在几个月后接手一个项目,那么您会立即看到其中的内容。
当配置位没问题时,我继续进行定义。在这里,我定义了连接到电路的晶体速度。微控制器的端口也被定义。
接下来是变量:所有变量都在这里声明。
现在是时候对函数进行原型设计了。在这里,我列出了程序使用的所有功能。一些程序员认为这是浪费时间,但我喜欢它并保留它。如果您在主程序循环之后使用函数来构建程序,这实际上是必要的。
接下来是功能。现在开始评论真的很重要。我通常在每个函数上都有几行来说明该函数的一般作用。我还在函数内注释代码行。
一个例子是这个项目中初始化 UART 端口的函数:
// FUNCTION TO INIT THE UART PORT
void uart_init(void)
{
TXSTAbits.BRGH = 0; // high baud selection bit, 1=high, 0=low
TXSTAbits.SYNC = 0; // USART mode selection bit, 1=sync mode, 0=async mode
TXSTAbits.TX9 = 0; // 9-bit selection bit, 1=9-bit transmission, 0=8-bit transmission
RCSTAbits.CREN = 1; // Continous receive enable bit, 1=enable continous receive
/*
Calculate the SPBRG with 16MHz crystal
16MHz
16000000 /9600 = 1666.6666
1666.6666 / 64 = 26.0416
26.0416 - 1= 25.0416
25.041 = 25
*/
SPBRG = 25; // 9600-n-8-1
PIE1bits.RCIE = 1; // USART receive interrupt enable bit, 1=enable
RCSTAbits.SPEN = 1; // Serial port enable bit, 1=serial port enable
TXSTAbits.TXEN = 1; // transmit enable bit, 1=transmit eanble
return;
}
结论
在这篇文章中,我尝试使用一个可以吹动和循环空气的风扇,让我的船上的环境对霉菌和真菌有害。风扇连接到从机舱伸出的管道。我使用 GPS 模块来跟踪时间,并使用两个继电器来打开/关闭风扇。为了确保电池保持充电状态,我使用了另一个继电器来打开和关闭电池充电器。
我把它留给读者,让这个电路更上一层楼并显示日期。
为什么要使用 GPS 模块?我本可以将微控制器用作简单的计时器。然后我必须制作某种界面来设置时间。或者我会很高兴它运行而不考虑实时。它将每小时运行 5 分钟。使用 GPS,我可以通过编程方式将其设置为每小时运行五分钟。
-
lcd
+关注
关注
34文章
4411浏览量
167041 -
gps
+关注
关注
22文章
2882浏览量
166018 -
PIC16F628A
+关注
关注
1文章
8浏览量
10046
发布评论请先 登录
相关推荐
评论