嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
本系统中,通过光敏电阻实现对路灯亮度的感应,智能地调整路灯的亮度,提高路灯的节能效果。通过人体红外传感器实现对行人的感应,智能地调整路灯的亮度,提高行人的安全性。通过温度传感器实现对路灯温度的感应,防止路灯过热引起安全隐患。通过ZigBee无线通信技术,实现对路灯的远程监测和控制,提高路灯的管理效率和维护效果。通过WIFI进入云平台,再将通过ZigBee无线通信技术与云平台进行通信,实现对路灯的远程监测和控制。云平台将通过接收各种传感器的信号,实现对路灯的智能控制和调节。
应用场景可以变成校园、城市等,用于毕业论文或毕业设计
#include "main.h"
#include "adc.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
#include "./HAL/ds18b20/ds18b20.h"
#include "./HAL/delay/delay.h"
#define BEEP(a) (a?HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET):HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET))
#define IR_IN HAL_GPIO_ReadPin(IR_IN_GPIO_Port,IR_IN_Pin)
uint8_t USART2_TX_BUF[200];
#define u2_printf(...) HAL_UART_Transmit(&huart2,USART2_TX_BUF,sprintf((char *)USART2_TX_BUF,__VA_ARGS__),0xffff)
uint16_t time_1ms,time_500ms; //计时变量1ms,500Ms
uint8_t uart2_value; //串口2相关变量
uint8_t uart2_buf[36],uart2_time,uart2_num;
uint8_t uart2_rx__flag;
uint16_t adc_value; //adc
uint16_t light_value; //光照强度
uint16_t temp; //温度值
uint16_t light; //灯的亮度
uint8_t Zigbee_Head[4] = {0xFC,0X00,0X01,0X02}; //ZigBee相关变量
uint8_t Zigbee_Data[14];
void SystemClock_Config(void);
/****
*******Zigbee发送包头,广播形式发送
*******输入:发送数据的长度
*****/
void Zigbee_Send_Head(uint8_t Data_Len)
{
uint8_t i;
Zigbee_Head[1] = Data_Len = 2;
for(i=0;i<4;i )
u2_printf("%c", Zigbee_Head[i]);
}
//监测函数
void Monitor_function(void)
{
uint8_t i;
if(time_500ms == 1) //每500ms获取一次光照强度、温度
{
time_500ms = 0;
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1, 999) == HAL_OK)
adc_value = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
light_value = (adc_value/4096.0)*100; //获取光照值
temp=Ds18b20_Read_Temp();
Zigbee_Data[0]=0xa1;//通过ZigBee给主机发送温度、灯的亮度和光照强度
Zigbee_Data[1]=temp/100%10;
Zigbee_Data[2]=temp/10%10;
Zigbee_Data[3]=temp/1%10;
Zigbee_Data[4]=light/10;
Zigbee_Data[5]=light_value/10%10;
Zigbee_Data[6]=light_value/1%10;
Zigbee_Send_Head(7);
for(i=0; i<7; i )
u2_printf("%c", Zigbee_Data[i]);
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_TIM1_Init();
MX_USART2_UART_Init();
MX_TIM3_Init();
HAL_TIM_Base_Start_IT(&htim1);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
HAL_UART_Receive_IT(&huart2, &uart2_value, 1);
Ds18b20_GPIO_Init(); //温度检测模块引脚初始化
while (1)
{
Monitor_function(); //监测函数
if(temp>=400 && temp<800) //温度在40-80之间,蜂鸣器报警
{
BEEP(1);
}
else
{
BEEP(0);
}
if(IR_IN==0) //人体红外检测到人
{
if(light_value<50) //光照强度小于50,灯的亮度和光照强度成反比
{
light=1000-light_value*15;
}
else //光照强度大于等于50,灯不亮
{
light=0;
}
}
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,light); //灯的亮度
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == htim1.Instance) //定时器1触发中断
{
time_1ms ;
if(time_1ms>= 500)
{
time_1ms= 0;
time_500ms = 1;
}
if(uart2_num != 0)
{
uart2_time ;
if(uart2_time >= 10) //一帧数据接受完成
{
uart2_time = 0;
uart2_num = 0;
uart2_rx__flag = 1;
}
}
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == huart2.Instance)//串口1触发中断
{
HAL_UART_Receive_IT(&huart2, &uart2_value, 1);
uart2_buf[uart2_num ] = uart2_value;
uart2_time = 0;
}
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif