基于stm32的智能台灯系统

目录

一、设计任务

二、总体设计

三、硬件设计

1、单片机最小系统

 2、复位电路

 3、显示模块

 4、光敏电阻电路设计

5、台灯电路

6、人体热释电模块

 四、软件设计

五、说明书


一、设计任务

        智能台灯是一种基于STM32系列单片机的智能灯具系统,它可以通过检测周围环境的光亮度和人体热释传感器来检测周围是否存在人员。该系统可以根据检测到的信息来自动调节灯具的亮度和颜色,以使灯光更加舒适和温馨,从而控制台灯的亮灯开关。当使用者离台灯太近时,发出声光警报。灯泡的工作时间可以设置,工作时间到了就会发出警报提示;如果晚上有强烈的光线,如果有人在走动。可以自动调节照明角度和高度,使得灯光能够更适合使用者。 若灯前长时间无人,台灯系统检测后自动选择熄灭状态,从而也体现了我们本产品的节能效果。

二、总体设计

 本系统主要由单片机,蜂鸣器,数显装置,LED,人体感应装置,光检测装置,按钮控件等构成:

1 TFTLCD液晶屏当达到了系统设定的时间后,会有一盏小灯会亮起来,并且会有一个铃声响起,这是在告诉用户,用户可以休息一段时间,避免因为学习太多而对自己的身体造成危害,用户在这个时候就会按下按钮,让自己的身体得到充分的休息。

系统将重新开始工作。

2.功能按钮:复位按钮,设定按钮,自动手动开关按钮,灯光调整按钮,启动定时按钮。

3.人的感应系统:在发现有人接近时,可根据灯光的强弱,将灯光进行开关。

三、硬件设计

1、单片机最小系统

该芯片的核心控制部分,采用了ARM32系列的 CortexM3,并由STM32单片机来实现。

 2、复位电路

        复位电路是目前比较常用的一种电路,它的设计比较简单,容易实现。为了防止过高的电流造成晶片的损伤,一般使用1 K欧姆的电阻器来分压。单片机一般可分为上电复位和手动键复位两种。上电-重置模式,在上电-重置的一刹那,不需要任何介入,就能自动完成;而人工重置,必须要用手按下按钮,才能完成。所以,在无控制时,可用人工复位电路。

 3、显示模块

TFTLCD的主要特征为:亮度高,对比度强,层次丰富,色彩鲜艳。它是当前液晶显示中最主要的一种。在电视,手机,计算机,平板电脑等各种电子设备上得到了广泛的应用。

 4、光敏电阻电路设计

该设计使用光敏电阻来实时探测当前的光线情况,当光线小于设定值时,会自动打开台灯,为用户提供光线。

5、台灯电路

       本设计利用单片机控制LED管脚,并利用L9110来驱动台灯亮度的控制,从而实现对台灯的控制。

6、人体热释电模块

该设计通过探测人体发出的红外线来检测人体活动情况。热释电探测仪的工作原理是发射红外线,不同的对象会反射出不同波长的红外线,热型红外传感器也称为无源红外传感器或者热释电红外传感器。

 四、软件设计

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key_s.h"
#include "lcd2TFT.h"
#include "buzzer.h"
#include "usart.h"	
#include "stmflash.h"
#include "RCC.h"
#include "IOin.h"
#include "timer.h"
#include "IOin.h"
#include "adc.h"#define AUTO 0
#define MANU 1//Flash掉电保护数据部分
#define LEN  50//保存数据个数(最后位数据为CRC)
u16 eep[LEN];
#define mode eep[45]
#define limitValue eep[46]#define DIS_NUM 2//定义3个界面
#define DIS_RTC 2
#define DIS_PARA 1
#define DIS_DEFAUL 0u8 refresh=1;
//u8 setRTC=0;
u8 setPara=0;
u8 disCtrl = DIS_DEFAUL;//0-RTC时钟;1-设置上下限;2-默认显示参数
u8 lightADC;
u8 someoneTrig = 0;
u8 usartKey = 0;
void readFlash(void);
void writeFlash(void);void revAPP(void);u8 led_pwm=30;void sendAPP(void);void Dis_RTC(void);
int main(void)
{u32 cnt=0; u8 key; u8 powerOn=0;//台灯开关u32 trig_cnt=0;//使用内部高速晶振HSI RC(8Mz)//配置SYSCLK->36MHz,HCLK->36MHz APB1->36MHz,APB2->36MHz,ADC1,2->18MHzSystemClock_Config();MY_NVIC_PriorityGroupConfig(2);        delay_Init(SysClockFreq/1000000);uart_init(SysClockFreq/1000000,9600);//printf("SysClockFreq = %d MHz\r\n",SysClockFreq/1000000);Adc_Init();LED_Init();delay_ms(500);LCD_Init();SR501_init();Buzzer_Init();KEY_Init();Beep(200);readFlash();  Beep(200);     
//Start:refresh = 1;    LCD_Clear();Beep(200);LCD_Clear();LCD_GotoTitle(20);LCD_Print("  智能台灯");while(1){delay_ms(1);cnt++; revAPP();	    if(cnt>200){cnt = 0;LED = !LED;buzzer = 0;sendAPP();refresh = 1;lightADC = 100 - Get_Adc(ADC_CH0)/40.59f;//PA0采集光敏,光越强值越大~[0,100]         someoneTrig = readSR501();//采集热释电if(powerOn){if(mode==AUTO){setPWM(100-lightADC);}else{setPWM(led_pwm);}                }else{setPWM(0);}if(someoneTrig==0&&powerOn){trig_cnt++;if(trig_cnt>30){powerOn = 0;}}}//扫描按键key = KeyScan(0);if(key){Beep(200);refresh = 1;powerOn = 1;if(key==1)//+{              if(led_pwm>30)led_pwm-=30;else led_pwm = 0;}else if(key==2)//-{led_pwm+=30;if(led_pwm>90)led_pwm=90;}else if(key==3) //mode          { if(mode==AUTO)mode=MANU;else mode=AUTO;}            }//LCD刷新if(refresh){refresh = 0;if(setPara){LCD_GotoXY(0,0);LCD_Print("set paras:");//0123456789abcdef//mode:AUTO L:123%LCD_GotoXY(0,1);LCD_Print("模式:");if(setPara==1&&LED)LCD_Print("    ");else{if(mode==0)LCD_Print("自动");else LCD_Print("手动");                    }LCD_Print(" L:");  LCD_WrNUM(limitValue/10%10);                if(setPara==2&&LED)LCD_WrDat('_');elseLCD_WrNUM(limitValue%10); LCD_WrDat('%');            }else {//0123456789abcdef//Trig:1 mode:AUTO//ON    Light:123%LCD_GotoXY(0,0);LCD_Print("监测:");if(someoneTrig)LCD_Print("有人");else LCD_Print("无人");LCD_GotoXY(0,1);LCD_Print("模式:");if(mode==0)LCD_Print("自动");else LCD_Print("手动");LCD_GotoXY(0,2);LCD_Print("计时:");LCD_WrNUM(trig_cnt/30%10);LCD_WrNUM(trig_cnt/3%10);LCD_GotoXY(0,3);LCD_Print("开关:");if(powerOn){LCD_Print("开");}else{LCD_Print("关");} LCD_GotoXY(0,4);LCD_Print("光强:");LCD_WrNUM(lightADC/100%10);LCD_WrNUM(lightADC/10%10);LCD_WrNUM(lightADC/1%10);LCD_WrDat('%');}}//refresh}//while(1)	 
}void writeFlash(void)
{
//    u8 i,j;
//    for(j=0;j10)step=0;    }void revAPP(void)
{char str[20];char str1[20];    if(revPara_F){revPara_F=0;Beep(200);//            limitValue = revDate[0];
//            mode = revDate[1];//Flash_Write(eep,LEN);}if(revLED_F&0x80){Beep(200);if(revLED_F&0x01){if(mode==AUTO)mode=MANU;else mode=AUTO;}if(revLED_F&0x02){led_pwm+=30;if(led_pwm>90)led_pwm=90;}if(revLED_F&0x04){if(led_pwm>30)led_pwm-=30;else led_pwm = 0;}        revLED_F = 0; {sprintf(str,"%d",lightADC);if(mode==AUTO)sprintf(str1,"%s","自动");else sprintf(str1,"%s","手动");if(someoneTrig)APPsendValue(str,"有人",str1,"","","");elseAPPsendValue(str,"无人",str1,"","","");     
}        }   
}

五、说明书

目录

绪 论

1.1课题研究及发展的历史及意义

1.2智能台灯国内外研究现状

第一章 系统的总体设计与方案分析

1.1智能台灯系统总体设计框图

1.2方案的选择

1.2.1 CPU模块

1.2.2 显示模块

1.2.3 红外传感器模块

第二章 智能台灯硬件设计

2.1单片机最小系统

2.2显示模块

2.3 光敏电阻电路设计

2.4 台灯电路

2.5 人体热释电模块

2.6蜂鸣器驱动

2.7 按键模块

第三章 智能台灯软件设计

3.1 软件编程语言

3.1.1 主程序部分代码

3.2蜂鸣器模块

3.3按键模块

3.4 TFTLCD显示屏模块

3.5热释电传感器模块

第四章 智能台灯软硬件调试

4.1 硬件调试

3.2 软件调试

总结

参考文献

致谢

有问题私聊,微信:lwfw123456789


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部