基于STM32的智能臺燈_自動亮度_久坐提醒仿真設(shè)計
(Proteus仿真+程序設(shè)計+設(shè)計報告+講解視頻)
仿真圖Proteus 8.9
程序編譯器:keil 5
編程語言:C語言
設(shè)計編號:C0112
1.主要功能
智能護眼燈
結(jié)合當(dāng)前嵌入式技術(shù),具有燈光亮度調(diào)節(jié)、人走自己關(guān)燈和久坐提醒功能。
1.上電默認(rèn)是自動模式,自動模式燈亮。光照越弱,臺燈越亮。
2.自動模式下人體紅外熱釋電檢測到有人自動開燈同時計時。
3.監(jiān)測到久坐(仿真30秒方便測試)后蜂鳴器報警,LCD1602顯示Please Activity,人離開后蜂鳴器自動關(guān)掉。
4.按鍵切換手動模式,模式下可以通過按鍵手動調(diào)光。
5.使用LCD1620顯示環(huán)境光亮度,燈光亮度級別和久坐計時時間。
6.使用Proteus仿真,燈珠用LED燈代替。
STM32F103系列芯片 人體紅外熱釋電 光照傳感器 LCD1602
資料下載鏈接:
通過網(wǎng)盤分享的文件:KEY_C0112
鏈接: https://pan.baidu.com/s/1FwWffUhRNRludhkpC8j_ag?pwd=n4at
提取碼: n4at
2.仿真設(shè)計
開始仿真后是自動模式,LCD1602液晶第一行顯示LIGHT光照強度=440Lux。紅外熱釋電開關(guān)閉合,第二行顯示久坐時間和燈光亮度。串口傳輸光照強度和燈光亮度。虛擬示波器顯示燈光PWM波形。
按下按鍵,調(diào)整手動模式,LCD1602第二行顯示燈光亮度,可以通過按鍵+和按鍵-調(diào)整亮度。
3.程序設(shè)計
程序是用keil5 mdk版本打開的,如果打開有問題,核實下keil的版本。程序是HAL版本編寫的,有stm32cubemx配置文件。有注釋可以結(jié)合講解視頻理解。
int main(void)
{
/* USER CODE BEGIN 1 */
char dis_str1[]=" "; //輸出字符串內(nèi)容設(shè)置16個字符 英文+標(biāo)點+數(shù)字
char dis_str2[]=" "; //輸出字符串內(nèi)容設(shè)置16個字符 英文+標(biāo)點+數(shù)字
// ADC_ChannelConfTypeDef sConfig = {0}; //建立sConfig結(jié)構(gòu)體
char str[20]; //字符串的存放數(shù)組
// uint32_t adcv; //存放ADC轉(zhuǎn)換結(jié)果
float temp;
uint16_t ADC_Value[2] = {0}; //用于存放ADC數(shù)據(jù)
// uint8_t i; //定義循環(huán)變量
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* 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_DMA_Init();
MX_USART1_UART_Init();
MX_TIM2_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
// MX_GPIO_Init();
// MX_USART1_UART_Init();
// MX_DMA_Init();
// MX_ADC1_Init();
// SMG_Write_Data(0,gsmg_code[0]);
LCD_Init();
HAL_UART_Transmit(&huart1, (uint8_t *)&"adc_dm1", 7, 10); //串口1發(fā)送字符串,數(shù)組長度為12,超時10ms
HAL_ADCEx_Calibration_Start(&hadc1); //開啟adc前校準(zhǔn)一下ADC
HAL_Delay(10);
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&ADC_Value,2);//開啟ADC的DMA,采集的數(shù)據(jù)直接放入 AD_Buf這個數(shù)組里,操作簡單。
HAL_UART_Transmit(&huart1, (uint8_t *)&"adc_dma", 7, 10); //串口1發(fā)送字符串,數(shù)組長度為12,超時10ms
HAL_TIM_Base_Start_IT(&htim2); //初始化定時器
user_pwm=50;
refresh_flag=1;
BEEP=0;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADCEx_Calibration_Start(&hadc1); //開啟adc前校準(zhǔn)一下ADC
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&ADC_Value,2);//開啟ADC的DMA,采集的數(shù)據(jù)直接放入 AD_Buf這個數(shù)組里,操作簡單。
if(state==0&&refresh_flag){//通道1采集 自動模式
temp=ADC_Value[0];//得到AD值
temp=light_intensity(temp); //轉(zhuǎn)化為光照強度
sprintf(str,"auto_temp=%0.0frn",temp);
HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 30);//串口1發(fā)送字符串,數(shù)組長度為strlen(str),超時20ms
memset(str,0,strlen(str));
if(INF_DET==1){//沒有人在
user_pwm=0;
}else{
user_pwm=(float)temp*(100.0/1000);
user_pwm=100-user_pwm;//自動模式PWM的范圍是0-100
}
sprintf(str,"user_pwm=%d%%rn",user_pwm);
HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 30);//串口1發(fā)送字符串,數(shù)組長度為strlen(str),超時20ms
refresh_flag=1;
STATE_LED=0;//模式燈點亮
}else if(state==1&&refresh_flag){//手動模式
STATE_LED=1;//模式燈熄滅
temp=ADC_Value[0];//得到AD值
temp=light_intensity(temp); //轉(zhuǎn)化為光照強度
sprintf(str,"manl_temp=%0.0frn",temp);
HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 30);//串口1發(fā)送字符串,數(shù)組長度為strlen(str),超時20ms
}
HAL_ADC_Stop(&hadc1); //停止ADC1
HAL_Delay(200);
// if(INF_DET==1){//沒有人
// HAL_UART_Transmit(&huart1, (uint8_t *)"outrn", 5, 30);//串口1發(fā)送字符串,數(shù)組長度為5,超時30ms
// }else{
// HAL_UART_Transmit(&huart1, (uint8_t *)"ingrn", 5, 30);//串口1發(fā)送字符串,數(shù)組長度為5,超時30ms
//
// }
sprintf(dis_str1,"LIGHT=%0.0f Lux ",temp);
LCD_ShowString(0,0,dis_str1);
if(state==0){//自動模式 而且人在
if(INF_DET==0){
if(inf_count<COUNT_NUM){//久坐判斷
sprintf(dis_str2,"TIME=%d LAMP=%d%% ",inf_count,user_pwm);
}else{
sprintf(dis_str2,"Please Activity ");//久坐提醒
}
}else{
sprintf(dis_str2," ");
}
}else if(state==1){//手動模式
sprintf(dis_str2,"LAMP_L=%d%% ",user_pwm);
}
LCD_ShowString(1,0,dis_str2);
}
/* USER CODE END 3 */
}
程序流程圖
4.設(shè)計報告
9608字設(shè)計報告,內(nèi)容包括設(shè)計目標(biāo)、硬件設(shè)計、軟件設(shè)計、結(jié)論等。
隨著嵌入式技術(shù)的快速發(fā)展,智能照明設(shè)備在健康照明領(lǐng)域的應(yīng)用日益廣泛。傳統(tǒng)臺燈功能單一,無法根據(jù)環(huán)境光自動調(diào)節(jié)亮度,且缺乏久坐提醒等健康管理功能。結(jié)合STM32單片機、傳感器技術(shù)與人機交互設(shè)計,開發(fā)一款智能護眼燈,可有效改善用眼環(huán)境,降低視覺疲勞,符合現(xiàn)代人對健康生活的需求。
通過本次設(shè)計,我們希望能夠提高對單片機的理解和應(yīng)用能力。通過實踐和探索,我們希望能夠掌握相關(guān)的硬件和軟件設(shè)計方法,為今后的學(xué)習(xí)和工作打下堅實的基礎(chǔ)。同時,我們也希望能夠通過這次設(shè)計,培養(yǎng)我們的團隊協(xié)作能力和創(chuàng)新精神。
。
5.下載鏈接
0、常見使用問題及解決方法–必讀?。。?!
1、程序代碼
2、Proteus仿真
3、功能要求
4、開題報告
5、設(shè)計報告
6、框圖
7、講解視頻
Altium Designer 安裝破解
KEIL+proteus 單片機仿真設(shè)計教程
KEIL安裝破解
Proteus元器件查找
Proteus安裝
Proteus簡易使用教程
單片機學(xué)習(xí)資料
相關(guān)數(shù)據(jù)手冊
答辯技巧
設(shè)計報告常用描述
鼠標(biāo)雙擊打開查找嘉盛單片機51 STM32單片機課程畢業(yè)設(shè)計.url
資料下載鏈接:
通過網(wǎng)盤分享的文件:KEY_C0112
鏈接: https://pan.baidu.com/s/1FwWffUhRNRludhkpC8j_ag?pwd=n4at
提取碼: n4at