欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 基于STM32的节能型路灯设计

基于STM32的节能型路灯设计

2025/2/24 3:07:12 来源:https://blog.csdn.net/2401_84204806/article/details/143026581  浏览:    关键词:基于STM32的节能型路灯设计

引言

本项目设计了一个基于STM32的节能型路灯系统,能够根据环境光强和人流量自动调节路灯的亮度,实现节能和智能控制。系统集成了光敏传感器和红外传感器,用于检测环境亮度和行人活动。当检测到行人时,路灯会自动变亮;当没有人时,路灯将降低亮度以节约能源。该系统适用于街道、公园、小区等公共场所。

环境准备

1. 硬件设备
  • STM32F103C8T6 开发板(或其他 STM32 系列)
  • 光敏传感器(如光敏电阻,用于检测环境亮度)
  • 红外传感器(如 PIR 传感器,用于检测人流量)
  • PWM 调光 LED 驱动电路(用于调节 LED 灯的亮度)
  • OLED 显示屏(用于显示系统状态)
  • 蜂鸣器(用于故障报警)
  • USB-TTL 串口调试工具
  • 电阻、杜邦线、面包板等基础电子元件
2. 软件工具
  • STM32CubeMX:用于初始化 STM32 外设。
  • Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
  • ST-Link 驱动程序:用于下载程序到 STM32。

项目实现

1. 硬件连接
  • 光敏传感器连接:将光敏传感器的模拟输出引脚连接到 STM32 的 ADC 输入引脚(如 PA0),用于检测环境亮度。
  • 红外传感器连接:将 PIR 传感器的数字输出引脚连接到 STM32 的 GPIO(如 PA1),用于检测是否有人经过。
  • LED 调光电路:将 PWM 控制信号引脚连接到 STM32 的 TIM1 PWM 输出(如 PA8),用于调节 LED 亮度。
  • 蜂鸣器连接:将蜂鸣器的控制引脚连接到 STM32 的 GPIO(如 PA2),用于系统报警提示。
  • OLED 显示屏连接:将 OLED 的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于显示当前状态。
2. STM32CubeMX 配置
  • 打开 STM32CubeMX,选择你的开发板型号。
  • 配置系统时钟为 HSI,确保系统稳定运行。
  • 配置 ADC,用于读取光敏传感器的数据。
  • 配置 GPIO,引脚用于红外传感器检测和蜂鸣器控制。
  • 配置 TIM1 生成 PWM 信号,用于控制 LED 亮度。
  • 配置 I2C,用于与 OLED 显示屏通信。
  • 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序

在生成的项目基础上,编写环境光检测、人流检测、亮度调节、报警提示和状态显示的代码。以下是节能型路灯的基本代码示例:

#include "stm32f1xx_hal.h"
#include "adc.h"
#include "tim.h"
#include "gpio.h"
#include "oled.h"// 定义控制参数
#define LIGHT_THRESHOLD 500        // 光敏传感器阈值
#define PWM_BRIGHT 80              // 人经过时的亮度(0-100)
#define PWM_DIM 20                 // 无人时的亮度(0-100)
#define PIR_TIMEOUT 10000          // PIR 传感器无活动时的超时时间(毫秒)// 函数声明
void System_Init(void);
void Adjust_Light_Brightness(void);
void Handle_Alarm(void);
void Display_Status(void);// 全局变量
uint16_t ambient_light = 0;    // 环境光强度
uint8_t pir_detected = 0;      // PIR 传感器检测标志
uint32_t last_pir_time = 0;    // 上次检测到人时的时间void System_Init(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();MX_TIM1_Init();MX_I2C1_Init();OLED_Init();OLED_ShowString(0, 0, "Energy Saving Lamp");HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);  // 启动 PWM
}// 调整灯光亮度
void Adjust_Light_Brightness(void)
{ambient_light = HAL_ADC_GetValue(&hadc1);  // 读取光敏传感器值pir_detected = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);  // 检测 PIR 状态if (ambient_light < LIGHT_THRESHOLD){// 如果环境较暗if (pir_detected){__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, PWM_BRIGHT);  // 设置亮度为亮last_pir_time = HAL_GetTick();  // 更新最后一次检测到人的时间}else if (HAL_GetTick() - last_pir_time < PIR_TIMEOUT){__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, PWM_BRIGHT);  // 继续保持亮}else{__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, PWM_DIM);  // 设置亮度为暗}}else{// 如果环境较亮,关闭灯光__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);}
}// 处理故障报警
void Handle_Alarm(void)
{if (ambient_light > 1000 || ambient_light < 10){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);  // 启动蜂鸣器}else{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);  // 关闭蜂鸣器}
}// 显示状态
void Display_Status(void)
{OLED_Clear();OLED_ShowString(0, 0, "Light: ");OLED_ShowNumber(48, 0, ambient_light, 4);OLED_ShowString(0, 1, "PIR: ");OLED_ShowString(48, 1, pir_detected ? "Yes" : "No");
}int main(void)
{System_Init();while (1){Adjust_Light_Brightness();  // 调节灯光亮度Handle_Alarm();             // 处理故障报警Display_Status();           // 显示当前状态HAL_Delay(1000);            // 每秒更新一次}
}
4. 各模块代码
光敏传感器读取

通过 ADC 读取光敏传感器的模拟信号,检测环境光强度:

#include "adc.h"// 初始化 ADC
void ADC_Init(void)
{// 配置 ADC1MX_ADC1_Init();
}// 读取光敏传感器数据
uint16_t Read_Ambient_Light(void)
{HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);uint16_t light_value = HAL_ADC_GetValue(&hadc1);HAL_ADC_Stop(&hadc1);return light_value;
}
PIR 传感器检测

通过 GPIO 检测 PIR 传感器的输出信号,判断是否有人经过:

#include "gpio.h"// 初始化 GPIO
void PIR_Init(void)
{// 配置 GPIOA 引脚为输入模式,用于读取 PIR 传感器状态
}// 读取 PIR 传感器状态
uint8_t PIR_Detect(void)
{return HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
}
LED 调光控制

通过 PWM 调节 LED 的亮度,实现根据环境条件自动调节灯光亮度:

#include "tim.h"// 初始化 PWM
void PWM_Init(void)
{// 配置 TIM1,用于 PWM 控制
}// 设置 LED 亮度(0-100)
void Set_LED_Brightness(uint8_t brightness)
{__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, brightness);
}
OLED 显示

用于显示当前的环境光强、PIR 状态和灯光亮度等信息:

#include "oled.h"// 初始化 OLED 显示屏
void OLED_Init(void)
{// OLED 初始化代码
}// 显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, const char *str)
{// 在 OLED 显示屏上显示字符串
}// 显示整数
void OLED_ShowNumber(uint8_t x, uint8_t y, uint32_t num, uint8_t len)
{// 显示整数值
}// 清屏
void OLED_Clear(void)
{// 清除 OLED 显示内容
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

系统工作原理

  • 环境检测与调光:系统通过光敏传感器实时检测环境亮度,并根据检测结果决定是否开启或调节路灯的亮度。在环境较暗时,系统会开启灯光;在有行人经过时,灯光会自动变亮;无人时,灯光会降低亮度。

  • PIR 检测与超时控制:通过 PIR 传感器检测行人。当有人经过时,系统会记录检测到的时间,并保持灯光在较高亮度;在设定的超时时间内没有检测到行人时,系统会降低亮度以节能。

  • 故障报警:系统会监测光敏传感器的输出,当检测到传感器异常值(如过高或过低)时,会自动触发蜂鸣器报警,提示维护。

常见问题与解决方法

1. 环境光检测不准确
  • 问题原因:光敏传感器位置不合适,或存在外界光干扰。
  • 解决方法:调整光敏传感器的位置,并使用遮光罩减少干扰。
2. PIR 传感器反应迟钝
  • 问题原因:PIR 传感器灵敏度设置不当或安装角度不合适。
  • 解决方法:调节 PIR 传感器的灵敏度旋钮,并调整传感器的安装角度,使其覆盖主要通道。
3. PWM 调光不稳定
  • 问题原因:PWM 信号设置不当或 LED 驱动电路问题。
  • 解决方法:检查 PWM 频率设置,并确保 LED 驱动电路能够正常工作。

扩展功能

  • 远程监控与控制:可以添加 Wi-Fi 或蓝牙模块,实现远程监控路灯状态,并手动调节灯光亮度。

  • 太阳能供电系统:将系统与太阳能板结合,实现更加节能的自供电路灯系统。

  • 智能故障诊断:增加多个传感器,如电流传感器,用于检测 LED 灯的工作状态,自动判断是否需要维护。

结论

通过本项目,我们设计了一个基于 STM32 的节能型路灯系统,能够根据环境亮度和人流量自动调节路灯亮度,实现节能和智能化控制。系统集成了环境检测、自动调光和故障报警功能,适用于公共场所的照明节能应用。未来可以通过增加远程控制和自供电功能,进一步提升系统的智能化和节能效率。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词