0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32設(shè)計的酒精檢測儀

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-06-18 14:17 ? 次閱讀

一、需求分析

隨著社會的發(fā)展和生活水平的提高,人們對于行車安全、家庭安全的要求越來越高,而酒駕等問題也日漸突出,為此,開發(fā)一款基于STM32的酒精檢測儀,通過檢測酒精濃度,實時顯示結(jié)果并進(jìn)行報警,可以有效避免因酒后駕車帶來的安全隱患。

二、設(shè)計思路

2.1 硬件設(shè)計

1、主控芯片采用STM32F103RCT6,該芯片具有較高的性能和穩(wěn)定性,能夠滿足本設(shè)計的各項需求。

2、酒精傳感器采用MQ-3模塊,該模塊具有高精度、響應(yīng)速度快等特點,能夠準(zhǔn)確檢測酒精濃度。

3、OLED顯示屏,用于實時顯示酒精濃度等信息。

4、蜂鳴器,用于進(jìn)行聲音報警。

5、按鍵,用于設(shè)定報警閾值。

2.2 軟件設(shè)計

1、IO口配置:將相應(yīng)的IO口配置為輸入輸出,并使能對應(yīng)的時鐘。

2、ADC配置:將ADC采樣通道、采樣時間、采樣頻率等參數(shù)進(jìn)行配置。

3、OLED配置:初始化OLED。

4、中斷初始化:對按鍵進(jìn)行中斷初始化,并在中斷服務(wù)函數(shù)中實現(xiàn)相應(yīng)的操作。

5、主程序:定時讀取酒精傳感器的濃度值并將其轉(zhuǎn)換為電壓值,然后通過ADC進(jìn)行采樣,最后通過OLED顯示屏進(jìn)行實時顯示。同時也需要根據(jù)設(shè)定的閾值進(jìn)行判斷,并觸發(fā)相應(yīng)的報警。

2.3 程序設(shè)計思路

main()
 {
     初始化IO口
     初始化ADC
     初始化OLED
     配置中斷
     while(1)
     {
         讀取濃度值并轉(zhuǎn)換為電壓
         進(jìn)行ADC采樣
         計算實際濃度值
         顯示實時濃度值
         判斷是否超過設(shè)定閾值
         觸發(fā)相應(yīng)的報警
     }
 }
 ?
 void EXTIx_IRQHandler()
 {
     檢測按鍵狀態(tài)
     根據(jù)按鍵狀態(tài)進(jìn)行相應(yīng)的操作
 }

三、代碼設(shè)計

//頭文件引用
 #include "stm32f10x.h"
 #include "OLED.h"
 #include "ADC.h"
 #include "MQ3.h"
 ?
 //定義相關(guān)參數(shù)
 #define THRESHOLD1 100
 #define THRESHOLD2 200
 #define THRESHOLD3 300
 ?
 //定義中斷服務(wù)函數(shù)
 void EXTI0_IRQHandler(){
   if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0){
     threshold++;
     if(threshold == 4) threshold = 1;
     OLED_Clear();
     OLED_ShowString(0,0,"Threshold:");
     switch(threshold){
       case 1:{
         OLED_ShowString(70,0,"100");
         break;
       }
       case 2:{
         OLED_ShowString(70,0,"200");
         break;
       }
       case 3:{
         OLED_ShowString(70,0,"300");
         break;
       }
       default:{
         break;
       }
     }
   }
   EXTI_ClearITPendingBit(EXTI_Line0);
 }
 ?
 int main(void)
 {
     //初始化IO口
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);   //使能端口時鐘
     GPIO_InitTypeDef GPIO_InitStructure;                                           //定義GPIO結(jié)構(gòu)體
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                               //輸出模式
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                              //速度50MHz
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                                     //LED所在引腳
     GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //初始化GPIOC13
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                          //浮空輸入模式
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                      //按鍵所在引腳
     GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //初始化GPIOA0
 ?
     //初始化ADC
     ADC_Configuration();
 ?
     //初始化OLED
     OLED_Init();
     OLED_Clear();
 ?
     //配置中斷
     EXTI_InitTypeDef EXTI_InitStructure;
     NVIC_InitTypeDef NVIC_InitStructure;
     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
     EXTI_InitStructure.EXTI_Line = EXTI_Line0;
     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
     EXTI_Init(&EXTI_InitStructure);
     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
 ?
     //定義相關(guān)變量
     uint16_t adc_value = 0;
     float voltage = 0.0;
     float concentration = 0.0;
     uint8_t threshold = 1;
 ?
     while(1)
     {
         //讀取酒精傳感器的濃度值并轉(zhuǎn)換為電壓值
         adc_value = Get_ADC1_ConvertedValue(ADC_Channel_6);
         voltage = (adc_value * 3.3) / 4096;
 ?
         //計算實際濃度值
         concentration = Get_MQ3_Concentration(voltage);
 ?
         //顯示實時濃度值
         OLED_ShowString(0, 0, "Concentration:");
         OLED_ShowNum(100, 0, concentration, 1, 2);
 ?
         //判斷是否超過設(shè)定閾值
         if(concentration > THRESHOLD3){
             GPIO_SetBits(GPIOC, GPIO_Pin_13);      //LED燈亮
             BEEP_ON;                                //蜂鳴器報警
         }
         else if(concentration > THRESHOLD2){
             GPIO_ResetBits(GPIOC, GPIO_Pin_13);    //LED燈滅
             BEEP_OFF;                               //蜂鳴器關(guān)閉
         }
         else if(concentration > THRESHOLD1){
             GPIO_SetBits(GPIOC, GPIO_Pin_13);      //LED燈亮
             BEEP_ON;                                //蜂鳴器報警
         }
         else{
             GPIO_ResetBits(GPIOC, GPIO_Pin_13);    //LED燈滅
             BEEP_OFF;                               //蜂鳴器關(guān)閉
         }
     }
 }
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352482
  • 蜂鳴器
    +關(guān)注

    關(guān)注

    12

    文章

    887

    瀏覽量

    45690
  • OLED顯示屏
    +關(guān)注

    關(guān)注

    6

    文章

    211

    瀏覽量

    30546
  • 酒精檢測儀
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    8885
收藏 人收藏

    評論

    相關(guān)推薦

    酒精檢測儀仿真圖

    論壇的兄弟們,我們老師要求我們不用單片機(jī),做出酒精檢測儀的仿真圖,我們設(shè)計的仿真是由MQ-3、A/D轉(zhuǎn)換、譯碼顯示酒精濃度組成。但是最后因為能力有限弄不出來,希望兄弟們能花點時間幫我做一個完整的仿真,明天下午就要交,急求,希望兄
    發(fā)表于 06-29 22:18

    請問有酒精檢測儀的程序嗎?

    各位大佬有沒有酒精檢測儀的程序啊?
    發(fā)表于 03-27 22:34

    RoHS檢測儀來測酒精含量可以嗎,會不會大材小用了?

    ``用RoHS檢測儀來測試酒精,說實在的是有點大材小用了,大可節(jié)省這不必要的支出,交警用的酒精檢測儀是專門測酒精含量的,這個方便實惠,所以用
    發(fā)表于 04-24 15:01

    如何去實現(xiàn)一種基于51單片機(jī)酒精濃度檢測儀的設(shè)計

    基于51單片機(jī)的酒精濃度檢測儀是由哪些部分組成?如何去實現(xiàn)一種基于51單片機(jī)酒精濃度檢測儀的設(shè)計?
    發(fā)表于 10-18 09:34

    基于STM32空氣質(zhì)量檢測儀原理圖

    STM32空氣質(zhì)量檢測儀原理圖STM32空氣質(zhì)量檢測儀原理圖STM32空氣質(zhì)量檢測儀原理圖
    發(fā)表于 10-29 18:22 ?349次下載

    基于51單片機(jī)的酒精濃度檢測儀的設(shè)計

    基于51單片機(jī)的酒精濃度檢測儀的設(shè)計,感興趣的可以看看。
    發(fā)表于 01-04 15:23 ?263次下載

    基于單片機(jī)的酒精濃度檢測儀的研究與設(shè)計

    基于單片機(jī)的酒精濃度檢測儀的研究與設(shè)計
    發(fā)表于 12-11 15:52 ?14次下載

    酒精檢測儀的用及電路設(shè)計原理分析

    酒精檢測儀是用來檢測人體是否攝入酒精及攝入酒精多少程度的儀器。它可以作為交通警察執(zhí)法時檢測飲酒司
    的頭像 發(fā)表于 08-05 16:00 ?3.6w次閱讀
    <b class='flag-5'>酒精</b><b class='flag-5'>檢測儀</b>的用及電路設(shè)計原理分析

    酒精檢測儀的產(chǎn)品特點是怎樣的

    酒精檢測棒不僅是酒精檢測儀還是一種多用型電子產(chǎn)品,在酒精檢測結(jié)束后會有語音播報功能,這種指揮棒式
    發(fā)表于 12-21 15:19 ?564次閱讀

    電筒式酒精檢測儀的工作原理是怎樣的?

    為什么需要酒精測試 據(jù)統(tǒng)計全球大概有百分之五十的車禍與飲酒有關(guān),而想加大對酒后駕駛的懲罰力度,首先要解決的就是如何高效的測量人身體的酒精含量,酒精測試
    發(fā)表于 01-05 17:13 ?778次閱讀

    酒精檢測儀為什么呼一口氣就能檢測人體酒精的含量

    手持酒精檢測儀可以用來確認(rèn)司機(jī)是否有酒駕行為。為什么呼一口氣就能檢測人體酒精含量?小小的酒精檢測儀
    發(fā)表于 01-13 16:31 ?1558次閱讀

    酒精檢測儀檢測原理是怎樣的

    所需時間,下面跟隨深圳威爾電器小編一起來具體了解一下酒精檢測儀檢測原理是什么吧? 當(dāng)具有N型導(dǎo)電性的氧化物暴露在大氣中時,會由于氧氣的吸附而減少其內(nèi)部的電子數(shù)量而使其電阻增大。其后如果大氣中存在某種特定的
    發(fā)表于 03-01 14:45 ?6066次閱讀

    常用的酒精檢測儀都是什么原理

    來具體了解一下酒精檢測儀檢測原理是什么吧? 常用的酒精檢測儀都是什么原理呢? 1、濕化學(xué)法 其原理是
    發(fā)表于 04-21 14:49 ?1.7w次閱讀

    如何構(gòu)建一個可充電酒精檢測儀

    今天我們將構(gòu)建一個 DIY 可充電酒精檢測儀。眾所周知,酒精分析使用呼出氣中的酒精含量來計算人血液中的
    的頭像 發(fā)表于 06-13 15:44 ?2125次閱讀
    如何構(gòu)建一個可充電<b class='flag-5'>酒精</b><b class='flag-5'>檢測儀</b>

    基于51單片機(jī)的酒精檢測儀設(shè)計(實物)

    畢業(yè)設(shè)計(論文)的內(nèi)容設(shè)計基于單片機(jī)的酒精檢測儀 能夠完酒精檢測及聲光報警。課題要求廣泛查閱和收集資料,根據(jù)題目要求設(shè)計酒精
    發(fā)表于 09-07 10:08 ?1次下載