基于STM32的光照度自动调节系统

1、硬件器材

STM32F103C8T6

HC-05

光照度传感器BH1750

一个LED灯(作为被调节对象)一个限流电阻(1k~10k)

2、硬件PCB绘制

这个硬件电路其实很简单,直接用洞洞板焊也很快,但是毕竟是我的课设作业,我还是画了一下PCB,显得高级hhh
最终效果:

需要PCB文件的话可以私信我(免费),画的比较简陋

3、stm32cubeMX配置


时钟和下载方式配置:


定时器1kHZ(72M/72/1000)不用定时器中断:


I2C(光照传感器需要)

串口通信(蓝牙需要)注意波特率一致:

要开串口中断:

勾选这三项,然后生成代码:

4、自己添加的代码

添加光照度传感器的代码,基本上就是普通的I2C通信,不细说了(下图不完整,完整的参考https://blog.csdn.net/weixin_43469377/article/details/120923774?spm=1001.2014.3001.5501 或者在我的资源里下载):


串口通信在usart.c添加下面的代码重定向printf函数:
记得添加头文件#include stdio.h

#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/*** @brief  Retargets the C library printf function to the USART.* @param  None* @retval None*/
PUTCHAR_PROTOTYPE
{/* Place your implementation of fputc here *//* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}

主函数:
头文件需要添加这些

一些参数:

靠调节PWM占空比来调节LED亮度:

初始化串口、LED灯亮度为50%,读取当前光照度:

主要逻辑(注释复制过来乱码了,下面有截图):

  /* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Set_Value=0;Now_Value=0;if(Flag==1)      //½ÓÊÕÍêÒ»´ÎÀ¶ÑÀÖ¸Áî{Set_Value=strtoul((char *)Light_Buffer,NULL,10); //É趨ֵ±£´æHAL_Delay(500);printf("SET:%lu lx\r\n",Set_Value);          //»Ø¸´¸øÊÖ»úÉ趨ֵNow_Value=Value_GY30();HAL_Delay(500);printf("NOW:%d lx\r\n",Now_Value);          //»Ø¸´¸øÊÖ»úµ±Ç°¹âÕÕ¶Èif(Set_Value>Now_Value)                     //É趨¹âÕÕ¶È>µ±Ç°¹âÕÕ¶È{printf("lighter");                        //»Ø¸´¸øÊÖ»úµ÷ÁÁwhile(Set_Value>Value_GY30()){pwmVal+=15;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal);  //Ôö´óLEDÁÁ¶ÈÖ±µ½µ±Ç°¹âÕնȴﵽÉ趨ֵ}printf("NOW:%d lx\r\n",Value_GY30());         //»Ø¸´¸øÊÖ»úµ±Ç°¹âÕÕ¶È}else if(Set_Value<Now_Value)                 //É趨¹âÕÕ¶È<µ±Ç°¹âÕÕ¶È{printf("Darker");                         //»Ø¸´¸øÊÖ»úµ÷°µwhile(Set_Value<Value_GY30()){pwmVal-=15;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal); //¼õСLEDÁÁ¶ÈÖ±µ½µ±Ç°¹âÕնȴﵽÉ趨ֵ}printf("NOW:%d lx\r\n",Value_GY30());         //»Ø¸´¸øÊÖ»úµ±Ç°¹âÕÕ¶È}Flag=0;                    //Ò»´Îµ÷½Ú½áÊø£¬µÈ´ýÏÂÒ»´ÎÖ¸Áî}}/* USER CODE END 3 */


串口的中断回调函数:

/* USER CODE BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{UNUSED(huart);if(huart->Instance==USART1){RxLine++;  //接收到的数据加一Light_Buffer[RxLine-1]=RecieveBuffer[0];  //保存收到的正确数据if(RxLine==3){
//          HAL_UART_Transmit_IT(&huart1, (uint8_t *)Light_Buffer, sizeof(Light_Buffer));Flag=1;}RecieveBuffer[0]=0;HAL_UART_Receive_IT(&huart1, (uint8_t *)RecieveBuffer, 1);}
}
/* USER CODE END 4 */

有个使用的BUG就是,手机给单片机发送指定光照度时需要发三位数,例如设定为25LX,需要发送025

如果需要使光照度快速达到要求,可以更改这个值,让占空比改变速度变大(下图中的15),但是可能会调过了:

成果展示

光照度调节-演示视频

整个工程已上传到我的资源,需要的朋友可以看看

基于STM32的光照度自动调节系统相关推荐

  1. 【毕业设计】基于STM32的宠物自动喂食装置

    目录 修改记录 1.摘要 2.整体功能分析 3.硬件选型 3.1 ESP8266 WIFI模块 3.2 STM32F103ZET6 3.3 CLS150TD舵机 3.4 压力传感器 3.5 HX711 ...

  2. 基于STM32单片机智能自动伸缩衣架雨滴重量光强温度检测伸缩速度可调-蓝牙版

    实践制作DIY- GC0010-智能自动伸缩衣架 一.功能说明: 基于STM32单片机设计-智能自动伸缩衣架 功能介绍: 基于STM32F103C系列,LCD1602显示器,光敏电阻采集光强,雨滴传感 ...

  3. 基于STM32单片机智能自动伸缩衣架雨滴重量光强温度检测伸缩速度可调

    实践制作DIY- GC0010-智能自动伸缩衣架 一.功能说明: 基于STM32单片机设计-智能自动伸缩衣架 功能介绍: 1.基于STM32F103C系列,LCD1602显示器,光敏电阻采集光强,雨滴 ...

  4. 基于STM32的esp8266WIFI自动校时+语音报时可调时钟(附源代码)

    基于STM32WIFI自动校时+语音报时可调时钟(附源代码) 概述 STM32f103C8T6最小系统 共阴数码管 74HC595芯片 JQ5600语音模块 ESP8266-01SWIFI模块 ds1 ...

  5. c语言单片机制作自动售卖机,基于STM32单片机的自动售水售卖机系统设计-RFID-(电路图+程序源码)...

    2019-150.STM32自动售水系统设计-RFID-LCD12864-RELAY-BELL-KEY 本设计由STM32F103C8T6单片机核心板电路+RFID模块电路+LCD12864液晶显示模 ...

  6. 【毕业设计】基于单片机的宠物自动喂食系统 - 物联网 嵌入式 单片机 宠物喂食系统 宠物投食系统

    文章目录 0 简介 1 系统说明 2 背景意义 3 系统设计 3.1 总体方案 3.2 硬件设计 3.2.1 STC89C52 3.2.2 CLS150TD舵机 3.2.3 压力传感器 3.2.4 H ...

  7. 基于STM32的智能抽油烟机系统与设计

    基于STM32的智能抽油烟机系统与设计 功能实现: 本课题是基于STM32的抽油烟机自动监控系统设计,通过STM32单片机实现对家用抽油烟机的检测与控制.完成有毒气体检测,并能自动发出报警信息,根据烟 ...

  8. 18、基于STM32的自动浇花系统

    18.基于STM32的自动浇花系统 引言 1 系统概述 1.1设计任务 1.2设计要求 2 方案设计与论证 2.1芯片选择方案 2.2 系统概述 2.3系统总体设计思路 2.4各功能模块程序实现原理分 ...

  9. 【毕业设计】基于 STM32 的自动泊车系统 -智能小车 - 物联网单片机

    文章目录 1 简介 1 背景 2 设计概要 3 硬件选型 3.1 主控 - STM32 3.2 电机驱动 3.3 红外遥控设计 3.4 传感器部分 3.4.1 循迹模块 3.4.2 红外避障模块 3. ...

  10. 基于STM32的智能行车辅助系统(自动大灯,倒车报警,自动雨刷,温湿度传感器,TFT 1.3寸LCD屏幕显示,ESP8266WIFI)

    基于STM32+ESP8266的智能行车辅助系统 基于STM32的智能行车辅助系统(自动大灯,倒车报警,自动雨刷,温湿度传感器,TFT 1.3寸LCD屏幕显示,ESP8266WIFI),这是一个课程设 ...

最新文章

  1. OSSIM下部署HIDS
  2. 计算机组成原理设计一个Isa,计算机组成原理
  3. 重磅推出校园疫情填报系统,永洪BI助力疫情防控
  4. 对口单招考试能用计算机吗,对口单招计算机能考试标准.doc
  5. 实时通信服务中的语音解混响算法实践
  6. MicroStation VBA 操作提示
  7. Dom4J 解析xml ,类查询
  8. 数据结构与算法-- 八皇后问题(多种实现方案)
  9. 信息学奥赛一本通 1028:字符菱形 | OpenJudge NOI 1.1 09
  10. Python实现生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
  11. 时空平稳性,空间自相关、异质性与非平稳性
  12. 如何调整Exadata DB节点文件系统大小
  13. [转载]谈谈我对攻读计算机研究生的看法
  14. macBigSur使用mathtype数学公式编辑
  15. 在线引入 iconfont 特殊图标字体
  16. 中国计算机网络设备制造业总体趋势免费版,致自己的心灵鸡汤说说,句句经典,引人深思!...
  17. 为什么按序发射只有RAW冲突?
  18. 如何找课题的综述文献
  19. JUC-Callable接口-概述
  20. SQL Server 安装程序遇到以下错误: 无法生成临时类(result=1)。 error CS1567: 生成 Win32 资源时出错: 另一个程序正在使用此文件,进程无法访问。...

热门文章

  1. python实现论文查重系统_Python实现的检测网站挂马程序
  2. pdo_mysql扩展库_MySQL数据库之PDO扩展
  3. solidworks背景改为纯白色
  4. 智能暖风机——FAQ
  5. 从电话网到IP互联网再到CDN
  6. 解析2019年新零售社区团购发展方向
  7. 当520遇到MicroPython,单身极客狗也能很开“芯”~
  8. sqlserver创建函数后提示对象名无效
  9. 全国职业院校技能大赛——物联网赛项比赛感想
  10. 电脑网络问题,IP释放,重新获取IP