草庐IT

基于STM32蓝牙控制的app智能台灯设计

傅里叶也头大 2023-04-20 原文

提示:记录毕设

文章目录

前言

基于STM32蓝牙控制的app智能台灯设计,主控使用STM32F103ZET6,在正点原子的精英板上开发(本人也在野火板子上测试成功)。


一、任务书

1.1设计(研究)目标:

针对台灯的个性化和智能化,设计了一套基于蓝牙的多功能台灯控制系统.首先用光敏传感器检测光照强度,用红外感应传感器检测是否有人,用超声波传感器检测使用者与台灯之间的距离,然后将这些检测信号传输到单片机,单片机将信号与设定值进行对比分析,再判断台灯的开/关状态,调节灯光亮度,对使用者的坐姿和使用时间作出语音提醒等.同时,相应参数实时显示在OLED屏和蓝牙终端,使用者通过蓝牙终端可以对台灯进行控制.与蓝牙的联机测试结果显示,系统功能强大,运行稳定
设计(研究)内容及具体要求:

1.2设计(研究)内容:

  • 题目的意义;
    1、各种传感器及设备的一般技术和特殊技术的学习:
    2、总体方案的选型设计:
    3、STM32单片机及其外围设备的软硬件系统的技术开发:
    4、系统的调试和总体运行原理
  • 其他设计内容;具体要求:
    1、硬件要求1张1号以上的大图:
    2、软件以流程图方式表示:
    3、有调试的说明。

二、代码思路

三、硬件设计

3.1总体设计

  • 基于蓝牙的多功能台灯控制系统是通过传感器检测周围环境,再利用微控制器进行分析处理,它不仅可以实现台灯的自动开/关、亮度调节功能,还可以根据使用者的坐姿和使用时间作出语音提醒.
  • 硬件设计框架如下:

3.2蓝牙部分设计

  • 蓝牙HC05模块用来接收数据并将数据传输至单片机,再通过手机上的蓝牙串口助手发送数据.将蓝牙模块用TTL线与电脑连接,按模块上的按键再上电,进入AT模式.
  • 打开电脑串口调试器,设置好端口号、波特率,选择十六进制显示,就可以对蓝牙模块进行调试了.
  • 蓝牙控制App为现成的蓝牙串口助手,它有12个按键,选择其中4个按键作为台灯的控制按键,分别控制台灯开/关、灯光调亮、灯光调暗和自动/手动模式切换.将串口助手和蓝牙模块进行配对连接,模块上的LED灯由快闪变为2次/s的闪烁,表示连接成功.

四、联系我们

承接stm32单片机、STC系列单片机设计、嵌入式。咨询liaxi,
“2424644692”(qq)

五、部分代码

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);	
	
	}


}



}

喜欢请点赞哦!

有关基于STM32蓝牙控制的app智能台灯设计的更多相关文章

  1. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  2. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  3. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  4. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  5. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  6. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  7. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  8. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  9. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  10. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

随机推荐