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