基于STM32F4开发的智能台灯

这篇具有很好参考价值的文章主要介绍了基于STM32F4开发的智能台灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于STM32F4开发的智能台灯

写这篇博客的目的有2个,首先是记录一下学习STM32大半年来的第一个自己动手开发的项目,整理一下开发过程和思路;其次也是希望可以和更多的同行交流开发经验,有什么问题可以多多讨论,集思广益,共同进步~

设计目标以及功能说明

开发的智能台灯功能有2个:
1.手动模式:可通过按键调节LED灯亮度,共10档;
2.自动模式:当检测到有人在的条件下,根据环境光照强度自动调节LED灯亮度;当检测到无人在,将进入延时,延时时间结束将关闭LED灯。

原理图

基于STM32F4开发的智能台灯
由于是在面包板上焊接的电路,原理图画的比较粗糙;
首先核心控制器件选用的是正点原子的STM32F407核心板,这款核心板功能非常齐全,应付一般的项目开发控制绝对是够了,自己手头上项目也是用这个做的。
手动模式下的LED控制:这个就比较简单,直接核心板输出一个定时器TIM13-PWM的脉宽调制信号到LED灯上,按键上下调节占空比即可调节亮度,相信了解PWM控制原理的小伙伴一看就知道是怎么回事~
自动模式下的LED控制:
1.红外探测模块可以去淘宝上搜索,有很多成熟的模块选用,总的来说就是这种模块可以在一定范围内检测到有人即可输出高电平信号,没有人就保持低电平;我选用的是HC-SR501,质量不是很好,本来有2种模式,不可重复触发模式:即探测到人就输出一定时间的高电平然后变为低电平;可重复触发模式:探测到有人一直输出高电平知道人离开延时结束。
2.将红外探测模块接到MCU的ADC1通道2,当adcx2得到的值大于1500,就说明有人,此时光敏电阻与电位器串联的电路通过ADC1通道3检测电压信号即代表了环境亮度,然后经过简单的数学公式建立通道3检测的到的adcx3与PWM占空比的关系,就可以实现根据环境亮度实时调节LED亮度的功能。
3.当检测到无人时,在程序里面设置了for循环+delay,延时时间可以自己设置,延时一段时间后就跳出循环,等待下一个红外探测模块的高电平进入循环。

程序代码

代码是在keil5里面用C语言写的,下面就把主程序的代码放上来,里面注释的很清楚,大家可以看一下

在这里插入代码片int main (void)

{
	volatile u8 t=0;
	volatile u8 i=0;
	volatile u8 key;	//按键
	volatile u16 led0pwmval = 499;//LED灯亮度值  0为最亮,499为最弱
	volatile u8 SD_Mode = 0;//手动模式
	volatile u16 adcx0;
	volatile u16 adcx1;
		
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);      //初始化延时函数
	uart_init(115200);		//初始化串口波特率为115200
	LCD_Init();					//LCD初始化
	LED_Init();					//初始化LED 
	KEY_Init(); 				//按键初始化
  Adc_Init(); 				//adc初始化
	TIM13_PWM_Init(500-1,84-1);	//84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
	TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
	POINT_COLOR=RED; 

	LCD_ShowString(30,50,200,16,16,"CANOE @ Light");	
	delay_ms(5000);
while(1)
{
	
  while (SD_Mode == 0)//自动模式
	{
	LCD_ShowString(30,70,200,16,16,"zidongmoshi");	
	LCD_ShowString(30,150,200,16,16,"LIGHT_VAL:");	
	key=KEY_Scan(0);		
	if(key==KEY0_PRES||key==WKUP_PRES)  //在自动模式下,如果检测到有按键按下,则退出自动模式进入手动模式
	{
	SD_Mode = 1;
		
	}
	TIM_SetCompare1(TIM13,499);
	adcx0=Get_Adc_Average(ADC_Channel_2,10);		//通过ADC1探测得到红外探测模块的输出值,当有人活动时会监测得到高电平  
	if (adcx0 >  1500)  //当探测得到高电平时,根据ADC通道3采集得到光敏电阻的值来调节亮度值
		
	{
	for(i=0;i<100;i++)
	{
	adcx1=Get_Adc_Average(ADC_Channel_3,10);//采集得到光敏电阻的值,环境亮度越暗得到的值越小,亮度越高得到的值越大
		                                      //adcx1的值处于1200~4000范围内
	led0pwmval = (adcx1 - 1200)/6;		
	TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
	POINT_COLOR=BLUE;//设置字体为蓝色 
	LCD_ShowxNum(110,150,(500-led0pwmval),4,16,0);     	   //显示 亮度值	
	delay_ms(100);	
	key=KEY_Scan(0);		
	if(key==KEY0_PRES||key==WKUP_PRES)  //在自动模式下,如果检测到有按键按下,则退出自动模式进入手动模式
	{
	SD_Mode = 1;
	i=100;
	}
	}
	}
	
	
	
	}

	led0pwmval = 300;
	while(SD_Mode == 1)  //手动模式下 按键增减LED亮度
		
	{
		LCD_ShowString(30,70,200,16,16,"shoudongmoshi");
		
		LCD_ShowString(30,90,200,16,16,"WK_UP:+  KEY0:-");	 
	  POINT_COLOR=BLUE;//设置字体为蓝色      	 
	  LCD_ShowString(30,150,200,16,16,"LIGHT_VAL:");	  

		t++;
		key=KEY_Scan(0);			  
		if(key==WKUP_PRES)
		{		 
			if(led0pwmval<499)led0pwmval+=40;
			TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
		}
		else if(key==KEY0_PRES)	
		{
			if(led0pwmval>45)led0pwmval-=40;
			else led0pwmval=0;
			TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
		}	
		if(t==10||key==KEY0_PRES||key==WKUP_PRES) 	//WKUP/KEY1按下了,或者定时时间到了
			
		{
			LCD_ShowxNum(110,150,(500-led0pwmval),4,16,0);     	   //显示 亮度值
			LED0=!LED0;	   
			t=0;
		}
		delay_ms(10);	
	
	}


}



}

实物图

基于STM32F4开发的智能台灯

结束语

本人现在是科研狗一枚,这个小东西是在老师给的项目忙里偷闲花了3天时间做出来的,主要是为了熟悉STM32开发的一些东西,后面有时间还会陆续做一些其他有些意思的项目,大家如果有什么好玩的项目想法创意之类的可以私信我一起交流,有机会一起做些有意思的事~
有什么问题留言区或者私信我讨论,邮件也可以(18642896070@163.com),欢迎交流~


代码分享百度云自取~

链接:https://pan.baidu.com/s/1TdwJ2KEQHo7fYr440bfI_A
提取码:kilo文章来源地址https://www.toymoban.com/news/detail-450448.html

到了这里,关于基于STM32F4开发的智能台灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32F4的心电监护仪

    从题目中可以看出该课题来源于 2020年省电赛A题的无线运动传感器节点的设计 ,该作品得过湖北省电赛二等奖,同时也是我本科毕业设计,这里我把自己做的关于心电部分的工作进行一次总结,也对我的大学四年进行一次总结。 处理器板子的选择 本研究的处理器模块选择

    2024年02月03日
    浏览(45)
  • 基于STM32F4的多摩川协议通讯

    1、介绍        之前项目刚好有用到禹衡家的17位绝对值编码器,趁着周末有时间整理一下开发思路,同时也分享出来给有需要的人做做参考。        说回编码器,我们都知道在伺服控制中,为了获取更高的位置精度,完成更精细的绝对定位,通常会采用绝对式光电编码

    2024年02月11日
    浏览(48)
  • 基于STM32的智能台灯

    器材:LED,独立按键,OLED,光敏电阻,stm32f1。 功能1,由环境亮度控制LED亮度模式: 按下KEY1进入自动调节亮度模式,OLED实时显示环境光照强度和PWM占空比,按下KEY4退出该模式。使用函数关系(这里我取的最简单的一次函数)建立光敏电阻采集转换后的ADC值与PWM的CCR3的值,

    2024年02月16日
    浏览(36)
  • STM32F4 基于USART串口的蓝牙通信

    目录 一、硬件资源 连接方案 其他配置 二、实验原理 基本定义 USART介绍 USART工作原理 数据发送 数据接收 蓝牙HM-10配置 三、代码部分 usart.c usart.h Serial.c Serial.h main.c 结语 STM32F401,OLED,蓝牙hm10 连接方案 设备1的TX与设备2的RX连接,这样设备1发送的数据可以被设备2接收到。

    2024年01月17日
    浏览(49)
  • 基于STM32F4的CANOpen移植教程(超级详细)

    本专题相关教程: 基于STM32F4的CANOpen移植教程 基于STM32F4的CANopen快速SDO通信 linux下CANopen for python的使用 基于Linux C的CANopen移植 CANopen补充–时间计算出错 CANopen补充–主站检测节点是否在线 为了在STM32F4上能够运行CANopen(CanFestival),跟着网上的教程操作,发现总是不够详细。

    2024年02月02日
    浏览(46)
  • 【STM32】--PZ6860L,STM32F4,ARM3.0开发板

    (1)各种外设和主板原理图 (2)主板供电部分5V和3.3V兼容设计 注意跳线帽 STM32和51的IO对应关系 下载电路 其实启动2次。 一次从系统区启动,一次从用户Flash启动。 第一步:先设置BOOT1和BOOT0从系统区【系统存储器】启动,执行系统中预设的程序 第二步:主机(电脑)通过

    2024年02月07日
    浏览(85)
  • 基于STM32单片机的智能视力保护台灯设计

    智能台灯以专门感应人体红外信号的红外传感器为基础,这意味着仅当有人的时候,红外传感器才输出一个信号,经放大处理后达到单片机的输入门限电压,单片机开始运行,台灯自动点亮。当人离开的时候,单片机控制台灯自动关闭,以达到节约用电的目的。此外,通过功

    2024年02月12日
    浏览(63)
  • 81、基于STM32单片机智能台灯 PWM调光坐姿矫正 灯光控制定时台灯设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图  六、硬件框图 七、流程图 八、程序源码 九、资料包括 随着社会在不断进步,高科技含量决定着产品发展的新趋势和前景,智能化技术在电子产品领

    2024年02月02日
    浏览(56)
  • 关于LWIP用法之HTTPD:基于STM32F4搭建web服务器

    一,STM32CUBEMX配置(使用的是6.4.0版本) 前提是在配置好LWIP的情况下(能ping通你的开发板),使能HTTPD功能。 然后是使能LWIP_HTTPD_CGI, 使能:LWIP_HTTPD_SUPPORT_POST(), 使能 :HTTPD_USE_CUSTOM_FSDATA。 会发现fs.c这个文件的#include HTTPD_FSDATA_FILE,这一句编译报错,解决办法:1) 在KEIL中lwipop

    2023年04月08日
    浏览(38)
  • 基于STM32和LD3320的智能语音识别柔光台灯设计

    毕业设计: (源程序+原理图+PCB+设计说明书+PPT) 原理图:Altium Designer 程序编译器:keil4/keil 5 编程语言:C语言 设计编号:Y001 资料下载链接 课题主要研究语音识别、按键识别、PWM波调节亮度、OLED屏幕显示四个模块,目前市面上语音识别的台灯大多仅是控制灯的亮灭,采用

    2023年04月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包