聚豐項(xiàng)目 > 基于i.mx6ul的大型糧倉溫濕度監(jiān)控系統(tǒng)
本項(xiàng)目旨在基于i.mx6ul設(shè)計(jì)一套糧倉溫濕度監(jiān)控系統(tǒng),能夠具備測(cè)量糧堆溫度、空氣溫濕度、控制外設(shè)、診斷系統(tǒng)狀態(tài)等功能。 特點(diǎn)及優(yōu)勢(shì): i.mx6ul與stm32的組合。 多個(gè)stm32負(fù)責(zé)糧倉內(nèi)部多點(diǎn)的數(shù)據(jù)采集,成本更低,更加靈活; i.mx6作為人機(jī)交互節(jié)點(diǎn),功能非常強(qiáng)大,可以作為嵌入式服務(wù)器,為上位機(jī)服務(wù),存儲(chǔ)容量更大,便于儲(chǔ)存更多數(shù)據(jù); i.mx6ul開發(fā)板帶有一塊7寸觸摸屏,顯示美觀大方,人機(jī)交互體驗(yàn)更好; 節(jié)點(diǎn)之間使用CAN總線通信,距離長(zhǎng)、傳輸穩(wěn)定;
JMU2012
JMU2012
團(tuán)隊(duì)成員
何希平 嵌入式軟件工程師
本項(xiàng)目對(duì)系統(tǒng)的總體方案進(jìn)行了設(shè)計(jì),大型糧倉溫濕度監(jiān)控系統(tǒng)的組成部分,按照功能分類,有五類節(jié)點(diǎn),分別是用于采集糧堆溫度的溫度采集節(jié)點(diǎn)、用于采集倉內(nèi)外空氣溫濕度的溫濕度采集節(jié)點(diǎn)、用于數(shù)據(jù)轉(zhuǎn)發(fā)的數(shù)據(jù)中轉(zhuǎn)節(jié)點(diǎn)、用于降溫排濕的控制設(shè)備節(jié)點(diǎn)和用于顯示倉內(nèi)各指標(biāo)狀態(tài)和控制的人機(jī)交互節(jié)點(diǎn)。
倉內(nèi)各個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸,采用了傳輸穩(wěn)定可靠和距離遠(yuǎn)的CAN總線通信方式。該系統(tǒng)的工作過程為:倉內(nèi)節(jié)點(diǎn)上的傳感器采集溫濕度數(shù)據(jù),然后傳輸?shù)饺藱C(jī)交互節(jié)點(diǎn),在人機(jī)交互節(jié)點(diǎn)上設(shè)置報(bào)警閾值,當(dāng)溫濕度數(shù)據(jù)超過閾值時(shí),及時(shí)提醒管理員,且可以設(shè)置自動(dòng)或手動(dòng)方式控制倉內(nèi)的設(shè)備,如降溫排濕或者開關(guān)燈。系統(tǒng)的總體框圖如下圖所示,
各個(gè)節(jié)點(diǎn)的編程。
1、溫度采集節(jié)點(diǎn)
開發(fā)平臺(tái):Keil MDK
開發(fā)語言:C語言
軟件思路:芯片初始化、執(zhí)行DS18B20的搜索算法,將DS18B20的ID值讀出并存入AT24C02中,用匹配ROM指令分別取讀傳感器的溫度值,然后將傳感器的值通過CAN總線傳輸?shù)綌?shù)據(jù)節(jié)點(diǎn)。
2、溫濕度采集節(jié)點(diǎn)
開發(fā)平臺(tái):Keil MDK
開發(fā)語言:C語言
軟件思路:芯片初始化,AM2302的溫濕度采集,然后將傳感器的值通過CAN總線傳輸?shù)綌?shù)據(jù)節(jié)點(diǎn)。
3、控制設(shè)備節(jié)點(diǎn)
開發(fā)平臺(tái):Keil MDK
開發(fā)語言:C語言
軟件思路:芯片初始化,通過CAN總線接收指令,然后驅(qū)動(dòng)繼電器去控制風(fēng)扇和照明燈等設(shè)備。
4、數(shù)據(jù)中轉(zhuǎn)節(jié)點(diǎn)
開發(fā)平臺(tái):Keil MDK
開發(fā)語言:C語言
軟件思路:芯片初始化,通過CAN總線接收溫濕度采集節(jié)點(diǎn)的數(shù)據(jù),并把這些數(shù)據(jù)通過轉(zhuǎn)發(fā)到i.mx6平臺(tái)上。
5、i.mx6平臺(tái)編程
開發(fā)平臺(tái):Ubuntu + Qt Creator
開發(fā)語言:C++
軟件上,基于串口助手,寫了個(gè)Qt程序,完成預(yù)期功能,最后的程序還可以當(dāng)做一個(gè)串口助手使用。
開發(fā)流程大概是這樣的:
首先,對(duì)軟件工程有個(gè)整體印象,了解各個(gè)文件的作用;
再次,對(duì)串口接收到的數(shù)據(jù)進(jìn)行處理,填入表格控件中。
主要需要解決以下幾個(gè)問題:
找到讀取串口的函數(shù),void MainWindow::readMyCom();
(1)接收到的字節(jié)數(shù)組放在這里,QByteArray temp = myCom->read();,
(2)可以轉(zhuǎn)為字符串,然后用字符串比較函數(shù),進(jìn)行比較;
(3)有用的字符串寫入表格控件;
(4)發(fā)送指令部分,用槽函數(shù)將控件的動(dòng)作與實(shí)際執(zhí)行函數(shù)進(jìn)行連接。
將數(shù)據(jù)中轉(zhuǎn)節(jié)點(diǎn)的STM32的串口連接到i.mx6的串口上,然后STM32將向i.mx6發(fā)送數(shù)據(jù)。通訊協(xié)議為:波特率9600,8N1。
然后可以在屏幕上看到數(shù)據(jù)。
海里的魚123: 謝謝樓主
回復(fù)
動(dòng)心忍性1234: 您好我是無線電雜志的編輯,我們對(duì)您的項(xiàng)目十分感興趣,請(qǐng)問您有興趣投稿嗎?成為我們的作者除稿費(fèi)外還有其他優(yōu)厚條件。敬請(qǐng)參與。投稿請(qǐng)聯(lián)系QQ260534978.
回復(fù)