文章目錄
- 0 簡介
- 1 專案簡介
- 2 系統設計
- 3 硬體設計
- 3.1 MQ-3 模塊
- 3.2 GPRS模塊
- 4 軟體設計
- 4.1 GPRS模塊使用
- 常用AT指令
- 4.1.1 資料收發demo
- 5 實作效果
- 5 最后
0 簡介
Hi,大家好,這里是丹成學長,今天向大家介紹一個 單片機專案
基于單片機的酒精濃度檢測儀
大家可用于 課程設計 或 畢業設計
技術解答、畢設幫助、開題指導
print("Q 746876041")
1 專案簡介
學長設計系統主要采用STM32作為核心控制,MQ-3酒精傳感器測驗酒精濃度并將結果通過多彩LCD屏顯示出來,同時采用GPRS與GSM進行資訊傳遞;整個系統結構層次分明,通過采集、分析、對比、處理和資訊發送完成駕駛員是否酒駕的簡易測驗,
2 系統設計
基于 STM32 的車載酒精檢測系統主要分為兩個部分:
-
一是車載終端部分, 也是車載酒精檢測系統的重點內容, 主控制器安裝在汽車內部, 為了直觀, 將主控制器框圖畫在汽車外部,
-
二是無線資料傳輸部分, 將酒駕車輛的相關資訊通過 GPRS 模塊發送至交警部門控制中心的 IP 上, 或者發送至具體的手機號上,

車載酒精檢測系統是在自動化、 實時監測的基礎上設計的, 不用人為的去檢測, 同時不受距離的約束, 能夠把酒駕資訊直接發送至交警部門的控制中心, 達到實時監測的目的,系統的各部分功能如下:
- 1.車載酒精檢測系統的終端采集工具為MQ-3模塊, 用來采集汽車內氣體中的酒精含量:
- 2.傳感器將采集到的酒精資訊, 傳送給微處理器處理:
- 3.微處理器通過模糊控制演算法對資料進行分析, 得出最終酒精數值并與預設值做比較,若超出則汽車通過液晶屏周期性閃動來警示司機已經處于酒駕狀態, 并將酒駕資料通過GPRS 網路發送至交警部門的控制中心或者具體的手機號上
3 硬體設計

3.1 MQ-3 模塊
MQ-3 使用的二訊訓錫(SnO 2 )作為氣敏材料, 當傳感器處在存在酒精蒸汽環境中時, 傳感器的電導率會隨著空氣中酒精氣體濃度的增加而增大,使用簡單的電路即可將電導率的變化轉換為與該氣體濃度相對應的信號,
該模塊主要特點如下:
- 具有信號輸出指示,
- 輸出的雙通道信號(模擬量輸出與 TTL 輸出),
- TTL 輸出有效信號為低電平,
- 模擬輸出電壓為 0~5V, 濃度高則電壓高,
- 對乙醇蒸汽擁有很高的靈敏度和不錯的選擇性,
- 它具有較長的使用壽命和可靠的穩定性,
- 快速的回應恢復特性,
MQ3模塊實物圖:


MQ3模塊電路圖:

3.2 GPRS模塊
GPRS模塊長這樣

GPRS 模塊 SIM900A 作業圖如圖

GPRS 模塊與 STM32 模塊連接:
- GPRS 的 STXD 連接 STM32 的 PA3
- SRXD 連接PA2
- GND 連 GND,
對 GPRS 模塊的短信方式進行測驗, 將移動動感地帶的卡放進 GPRS 模塊中, 接收者設為自己, 給 GPRS 上電后等待綠燈閃爍緩慢之后即信號穩定之后再給 STM32 上電, 當酒精濃度達到一定含量時就會收到短信, 內容包括: 車主的身份證號碼以及當前酒精濃度值,
這里用Android模擬機來測驗效果:

4 軟體設計

主控制器 STM32F103ZET6 初始化后, 系統先通過串口設定一個判斷是否酒駕的初始值, 然后 MQ-3開始測量個監測點的酒精含量, 主控制器對收集的酒精資料進行融合處理, 運用模糊控制演算法得出一個最終數值與預設值作比較, 若超出預設值,則發送控制信號, 進行語音報警, 通過液晶顯示酒精濃度并記錄資料, 同時通過 GPRS 模塊向交警部門發送酒駕車輛的相關資訊,
4.1 GPRS模塊使用
常用AT指令
-
AT+MRST OK ------------- 重啟模塊,應答
-
AT+CPIN? READY ------------- 檢查SIM卡是否插好
-
AT+CGREG? OK ------------- 檢查網路注冊狀態
-
AT+CSQ OK ------------- 信號查詢
-
AT+MIPCALL? : 0 -------------- 查詢網路連接狀態(0:未連接;1:連接)
-
AT+MIPCALL=1,“cmnet” OK ----------------連接網路
-
AT+MIPOPEN=1,“47.105.162.0”,1883,0 -------------- 連接服務器
4.1.1 資料收發demo
據鏈路層資料處理:實作GPRS資料接收/發送控制,存盤串口中斷接收到的資料,發送GPRS資料長度和GPRS資料內容,串口收到資料之后會將資料存盤到MIPRTCP_DataStreaming()中,這個函式會將接收到的資料進行決議處理,
串口接收資料流程如下:
void USART1_IRQHandler(void) //串口1中斷服務程式
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷(接收到的資料必須是0x0d 0x0a結尾)
{
Res =USART_ReceiveData(USART1); //讀取接收到的資料
MIPRTCP_DataStreaming(Res);
if((USART1_RX_STA&(1<<15))==0)//接收完的一批資料,還沒有被處理,則不再接收其他資料
{
if(USART1_RX_STA<USART1_MAX_RECV_LEN) //還可以接收資料
{
TIM_SetCounter(TIM4,0); //計數器清空
if(USART1_RX_STA==0) //使能定時器7的中斷
{
TIM_Cmd(TIM4,ENABLE); //使能定時器7
}
USART1_RX_BUF[USART1_RX_STA++]=Res; //記錄接收到的值
}
else
{
USART1_RX_STA|=1<<15; //強制標記接收完成
}
}
// USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
}
5 實作效果

5 最后
技術解答、畢設幫助、開題指導
print("Q 746876041")
獲取更多畢設資料,關注公眾號
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/395241.html
標籤:其他
