仿真圖proteus 8.9
程序編譯器:keil 5
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):C0084
1.主要功能
功能說(shuō)明:
1、以STM32
單片機(jī)和MQ-135
控制核心設(shè)計(jì)空氣質(zhì)量檢測(cè)報(bào)警設(shè)計(jì);
2、通過(guò)液晶屏LCD1602
和串口上位機(jī)顯示空氣質(zhì)量,MV表示檢測(cè)值,ALM表示報(bào)警值;
3、可以通過(guò)按鍵設(shè)置空氣質(zhì)量ALM報(bào)警值大小。
4、監(jiān)測(cè)空氣質(zhì)量大于報(bào)警值時(shí)蜂鳴器
報(bào)警電路導(dǎo)通,蜂鳴器報(bào)警。
5、默認(rèn)監(jiān)測(cè)到空氣質(zhì)量高于200ppm蜂鳴器報(bào)警。
以下為本設(shè)計(jì)資料展示:
2.仿真
整體設(shè)計(jì)方案
本實(shí)驗(yàn)利用STM32單片機(jī)的ADC、GPIO、定時(shí)器等資源,將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠正確地進(jìn)識(shí)別輸入模擬空氣質(zhì)量傳感器的AD值,LCD1602能夠正確地顯示,蜂鳴器根據(jù)空氣質(zhì)量報(bào)警值工作。需注意的是,proteus是沒(méi)有MQ-135等空氣濃度傳感器的,本設(shè)計(jì)使用滑動(dòng)變阻器模擬空氣質(zhì)量變化,不能直接用于實(shí)物設(shè)計(jì),有需要的需跟據(jù)實(shí)物調(diào)試。
本測(cè)試如下所示:
仿真運(yùn)行情況:
開(kāi)始仿真后LCD1602實(shí)時(shí)顯示檢測(cè)到的空氣質(zhì)量,可以通過(guò)滑動(dòng)變阻器改變測(cè)量值。可通過(guò)按鍵設(shè)置報(bào)警值濃度,按下設(shè)置鍵進(jìn)入設(shè)置模式,通過(guò)設(shè)置+調(diào)高報(bào)警值,通過(guò)設(shè)置-調(diào)低報(bào)警值。蜂鳴器報(bào)警電路在空氣質(zhì)量高于報(bào)警值時(shí)啟動(dòng),有嘟嘟報(bào)警聲,低于不啟動(dòng)。
本設(shè)計(jì)采用電磁式蜂鳴器進(jìn)行。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)。振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。因此需要一定的電流才能驅(qū)動(dòng)它,單片機(jī)I/O引腳輸出的電流較小,單片機(jī)輸出的TTL電平基本上驅(qū)動(dòng)不了蜂鳴器,因此需要增加一個(gè)電流放大的電路。蜂鳴器的正極接到VCC(+5V)電源上面,蜂鳴器的負(fù)極接到三極管的集電極C,三極管的基極B經(jīng)過(guò)限流電阻后由單片機(jī)的BEEP引腳控制,當(dāng)BEEP輸出低電平時(shí),三級(jí)管QS截止,沒(méi)有電流流過(guò)線圈,蜂鳴器不發(fā)聲;當(dāng)BEEP輸出高電平時(shí),三級(jí)管導(dǎo)通,這樣蜂鳴器的電流形成回路,發(fā)出聲音。
下圖檢測(cè)到空氣質(zhì)量是176,低于報(bào)警值200,蜂鳴器電路不工作。
下圖檢測(cè)到空氣質(zhì)量指數(shù)是204,大于等于報(bào)警值,三極管導(dǎo)通,蜂鳴器報(bào)警
int main(void)
{
/* USER CODE BEGIN 1 */
ADC_ChannelConfTypeDef sConfig = {0}; //建立sConfig結(jié)構(gòu)體
char str[20]; //字符串的存放數(shù)組
uint32_t adcv; //存放ADC轉(zhuǎn)換結(jié)果
float temp;
set_flag = 0;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; //采樣周期為1.5個(gè)周期
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
LCD_Init(); //初始化LCD1602
HAL_TIM_Base_Start_IT(&htim3);//開(kāi)啟定時(shí)器3
// LCD_ShowString(0,0,dis_str);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
sConfig.Channel = ADC_CHANNEL_1; //選擇通道1
HAL_ADC_ConfigChannel(&hadc1, &sConfig); //選擇ADC1的通道道1
HAL_ADC_Start(&hadc1); //啟動(dòng)ADC1
HAL_ADC_PollForConversion(&hadc1, 10); //等待ADC1轉(zhuǎn)換結(jié)束,超時(shí)設(shè)定為10ms
adcv = HAL_ADC_GetValue(&hadc1); //讀取ADC1的轉(zhuǎn)換結(jié)果
temp=(float)adcv*(4.0/4095)*100;
sprintf(str,"%4.0fppm",temp);
LCD_ShowString(0,0,"MV:");
LCD_ShowString(0,4,str);
HAL_UART_Transmit(&huart1, (uint8_t *)&"AL=", 3, 10); //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為12,超時(shí)10ms
HAL_UART_Transmit(&huart1, (uint8_t *)str, 6, 10); //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為5,超時(shí)10ms
HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10); //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為2,超時(shí)10ms
if(set_flag){//設(shè)置模式
sprintf(str,"%4.0fppm^ ",warming_val);
LCD_ShowString(1,0,"ALM:");
LCD_ShowString(1,4,str);
}else{
sprintf(str,"%4.0fppm ",warming_val);
LCD_ShowString(1,0,"ALM:");
LCD_ShowString(1,4,str);
}
HAL_UART_Transmit(&huart1, (uint8_t *)&"ALM=", 4, 10); //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為12,超時(shí)10ms
HAL_UART_Transmit(&huart1, (uint8_t *)str, 6, 10); //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為5,超時(shí)10ms
HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10); //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為2,超時(shí)10ms
if(temp>warming_val&&!set_flag){//如果超過(guò)報(bào)警值
HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_RESET);//BEEP引腳拉低
}else{
HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_SET);
}
HAL_ADC_Stop(&hadc1); //停止ADC1
HAL_Delay(300);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
3. 程序
程序是用keil5 mdk版本打開(kāi)的,如果打開(kāi)有問(wèn)題,核實(shí)下keil的版本。程序是HAL庫(kù)版本編寫(xiě)的,有注釋可以結(jié)合講解視頻理解。
4. 資料清單&下載鏈接
0、常見(jiàn)使用問(wèn)題及解決方法–必讀!!?。?/p>
1、程序代碼
2、Proteus仿真
3、功能要求
4、講解視頻
filename.bat
KEIL軟件資料
MQ135-2.jpg
MQ135.jpg
MQ系列傳感器工作原理.txt
Proteus軟件資料
單片機(jī)學(xué)習(xí)資料
答辯技巧
設(shè)計(jì)報(bào)告常用描述
鼠標(biāo)雙擊打開(kāi)查找更多51 STM32單片機(jī)課程畢業(yè)設(shè)計(jì).url
資料下載鏈接(可點(diǎn)擊):