需要給房間通風嗎?本文將向您展示我是如何制作一個繼電器操作的 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 源代碼。代碼注釋很好,但我會在這里做一些額外的亮點。
當我制作一個程序時,我遵循一定的結構。該圖顯示了結構:
代碼首先包含必要的庫,然后是配置位。在源代碼中包含配置位被認為是一種良好的編程習慣。然后,查看您所做的工作并幫助其他人進行故障排除會容易得多。此外,如果您在幾個月后接手一個項目,那么您會立即看到其中的內容。
當配置位沒問題時,我繼續進行定義。在這里,我定義了連接到電路的晶體速度。微控制器的端口也被定義。
接下來是變量:所有變量都在這里聲明。
現在是時候對函數進行原型設計了。在這里,我列出了程序使用的所有功能。一些程序員認為這是浪費時間,但我喜歡它并保留它。如果您在主程序循環之后使用函數來構建程序,這實際上是必要的。
接下來是功能?,F在開始評論真的很重要。我通常在每個函數上都有幾行來說明該函數的一般作用。我還在函數內注釋代碼行。
一個例子是這個項目中初始化 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 模塊?我本可以將微控制器用作簡單的計時器。然后我必須制作某種界面來設置時間?;蛘呶視芨吲d它運行而不考慮實時。它將每小時運行 5 分鐘。使用 GPS,我可以通過編程方式將其設置為每小時運行五分鐘。
-
lcd
+關注
關注
34文章
4424瀏覽量
167403 -
gps
+關注
關注
22文章
2894瀏覽量
166181 -
PIC16F628A
+關注
關注
1文章
8瀏覽量
10056
發布評論請先 登錄
相關推薦
評論