STM32に基づくアルコール濃度検知アラームと飲酒運転防止シミュレーション設計
STM32に基づくアルコール濃度検知警報と飲酒運転防止シミュレーション設計(シミュレーション+プログラム+説明)
シミュレーション図 proteus 8.9
プログラムコンパイラ: keil 5
プログラミング言語:C言語
デザイン番号:C0082
解説ビデオ
STM32に基づくアルコール濃度検知アラームと飲酒運転防止プロテウスシミュレーション設計(シミュレーション+プログラム+解説)
1. 主な機能
機能の説明:
1. STM32 マイクロコントローラーと MQ-3 を制御コアとして使用して、アルコール濃度の検出とアラームの設計を設計します。
2. LCD スクリーン LCD1602 およびシリアルポートホストコンピュータを通じてアルコール濃度を表示します。
3. ボタンを押すことでアルコール濃度警報値を設定できます。
4. 監視したアルコール濃度が警報値を超えるとブザー警報回路がオンになり、ブザーが鳴ります。
5. デフォルトでは、アルコール濃度が 20mg/100ml を超えるとブザーアラームが鳴ります。
主なハードウェア機器: STM32F103 マイクロコントローラー
以下は、この設計情報の表示です。
2. シミュレーション
全体的な設計計画
この実験では、STM32 マイクロコントローラーの ADC、GPIO、タイマー、その他のリソースを使用してソフトウェアとハードウェアを有機的に組み合わせることで、システムが模擬アルコール センサーに入力された AD 値を正確に識別し、LCD1602 がそれを正しく表示し、ガス濃度警報値の動作に応じてブザーを表示することができます。プロテウスには MQ-3 のようなアルコール濃度センサーがないことに注意してください。この設計では、アルコール濃度の変化をシミュレートするためにスライディング レオスタットを使用しており、物理設計に直接使用することはできません。必要に応じて、物理設計に従ってデバッグする必要があります。物体。
この実験は、STM32マイコンのアナログデジタルコンバータ(ADC)、汎用入出力(GPIO)、タイマーリソースを利用し、ソフトウェアとハードウェアを有機的に組み合わせて、アナログアルコールセンサーへのAD値入力を実現することを目的としています。正しく識別され、LCD1602 ディスプレイに表示されます。また、ガス濃度警報設定値に応じたブザーも装備しています。
この実験では、Proteus シミュレーション ソフトウェアには MQ-3 などの一般的なアルコール濃度センサーが含まれていないことに注意してください。したがって、アルコール濃度の変化をシミュレートするために、代わりにスライド式レオスタットを使用しました。ただし、この設計がそのまま実際のハードウェアに適用できるわけではなく、物理設計が必要な場合には、実際の状況に応じてデバッグや修正が必要となります。
実験全体を通じて、STM32 マイクロコントローラーのさまざまなリソースを徹底的に使用してデバッグしただけでなく、ソフトウェア プログラミングとハードウェア回路設計を包括的に理解し、実践しました。この実験を通じて、IoT アプリケーションにおける STM32 マイクロコントローラーの重要な位置と、ソフトウェアとハードウェアを効果的に組み合わせてシステム インテリジェンスと自動化を実現する方法をさらに理解しました。
このテストは次のようになります。
シミュレーション実行ステータス:
シミュレーションを開始すると、LCD1602 は検出されたアルコール濃度をリアルタイムに表示し、測定値はスライド式可変抵抗器によって変更できます。警報値の濃度は ボタンを押して設定でき、設定ボタンを押して設定モードに入り、+ を設定すると警報値が増加し、- を設定すると警報値が減少します。ブザー警報回路は、アルコール濃度が警報値より高い場合に作動し、「ピー」という警報音が鳴り、アルコール濃度が警報値より低い場合にはブザー警報回路は作動しません。
下の写真では、検知ガス濃度が 3mg/100mL で警報値 20mg/100mL より低く、ブザー回路が動作していません。
次の図は、アルコール濃度が 23mg/100mL で警報値以上であることを検出し、トランジスタがオンし、ブザーが鳴ります。
シミュレーションプロセス中に、ボタンを使用してアルコール濃度アラーム値を設定できます。
3. 手順
プログラムは keil5 mdk バージョンで開かれます。開く際に問題がある場合は、keil のバージョンを確認してください。プログラムはHALライブラリ版で書かれており、解説動画と合わせて理解できるコメントも付いています。
メイン機能
int main(void)
{
/* USER CODE BEGIN 1 */
ADC_ChannelConfTypeDef sConfig = {
0}; //建立sConfig结构体
char str[20]; //字符串的存放数组
uint32_t adcv; //存放ADC转换结果
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个周期
/* 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);//开启定时器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); //启动ADC1
HAL_ADC_PollForConversion(&hadc1, 10); //等待ADC1转换结束,超时设定为10ms
adcv = HAL_ADC_GetValue(&hadc1); //读取ADC1的转换结果
temp=(float)adcv*(3.3/4095)*100;
sprintf(str,"%4.0fmg/100ml",temp);
LCD_ShowString(0,0,"MV:");
LCD_ShowString(0,4,str);
HAL_UART_Transmit(&huart1, (uint8_t *)&"MV=", 3, 10); //串口1发送字符串,数组长度为12,超时10ms
HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 10); //串口1发送字符串,数组长度为5,超时10ms
HAL_UART_Transmit(&huart1, (uint8_t *)&"\n\r", 2, 10); //串口1发送字符串,数组长度为2,超时10ms
if(set_flag){
//设置模式
sprintf(str,"^%3.0fmg/100ml",warming_val);
LCD_ShowString(1,0,"ALM:");
LCD_ShowString(1,4,str);
}else{
sprintf(str,"%4.0fmg/100ml",warming_val);
LCD_ShowString(1,0,"ALM:");
LCD_ShowString(1,4,str);
}
HAL_UART_Transmit(&huart1, (uint8_t *)&"ALM=", 4, 10); //串口1发送字符串,数组长度为12,超时10ms
HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 12); //串口1发送字符串,数组长度为5,超时10ms
HAL_UART_Transmit(&huart1, (uint8_t *)&"\n\r", 2, 10); //串口1发送字符串,数组长度为2,超时10ms
if(temp>warming_val){
//如果超过报警值
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 */
}
4. 情報一覧とダウンロードリンク
0. 使用上の一般的な問題と解決策 - 必読! !!!
1. プログラムコード
2. プロテウスシミュレーション
3. 機能要件
4. 解説動画
5. MQ-3センサーの説明
Altium Designer ソフトウェア情報
KEIL ソフトウェア情報
プロテウス ソフトウェア情報
マイコン学習教材
防御スキル
設計レポートの共通説明
マウスをダブルクリックして開くと、詳細が表示されます。 51 STM32 マイクロコントローラー コース卒業プロジェクト.url