湛江网站排名,南宁一站网网络技术有限公司,南昌网站建设品牌,阿里云建公司网站一、主要功能介绍 以STM32F103C8T6单片机为控制核心#xff0c;设计一款智能远程家电控制系统#xff0c;该系统能实现如下功能#xff1a; 1、可通过语音命令控制照明灯、空调、加热器、窗户及窗帘的开关#xff1b; 2、可通过手机显示和控制照明灯、空调、窗户及窗帘的开…一、主要功能介绍 以STM32F103C8T6单片机为控制核心设计一款智能远程家电控制系统该系统能实现如下功能 1、可通过语音命令控制照明灯、空调、加热器、窗户及窗帘的开关 2、可通过手机显示和控制照明灯、空调、窗户及窗帘的开关 3、可利用传感器检测光照强度并根据光强控制窗帘开关 4、可利用传感器检测是否下雨并根据是否下雨控制窗户开关 5、根据不同的气候环境显示对应的天气 6、分自动模式、手动模式、以及app控制自动模式下实时检测传感器数据并根据设置的阈值做出自动操作如温度过低、室内加热手动模式下可以手动查看每个传感器检测的数据和手动打开相关的开关app模式下可以通过手机远程查看数据和操控照明灯、空调等开关。 其中空调、加热器用继电器LED进行模拟。 二、主要模块讲解
2.1 步进电机模拟窗帘的打开和关闭 步进电机的主要特性 1、 步进电机必须加驱动才可以运转 驱动信号必须为脉冲信号没有脉冲的时候步进电机静止 如果加入适当的脉冲信号 就会以一定的角度称为步角转动。转动的速度和脉冲的频率成正比。 2、 28BYJ48 5V 驱动的 4 相 5 线的步进电机而且是减速步进电机减 速比为 164步进角为 5.625/64 度。如果需要转动 1 圈那 么需要 360/5.625*644096 个脉冲信号。 3、 步进电机具有瞬间启动和急速停止的优越特性。 4、 改变脉冲的顺序 可以方便的改变转动的方向。 28BYJ48 、步进电机、单片机三者之间连接原理图 代码演示 .c文件 #include BUJ.h
u8 dir;//电机转动方向
u8 dis;//电机转动距离
void TIM2_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能TIM_TimeBaseStructure.TIM_Period arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500msTIM_TimeBaseStructure.TIM_Prescaler psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision 0; //设置时钟分割:TDTS Tck_timTIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM2中断,允许更新中断NVIC_InitStructure.NVIC_IRQChannel TIM2_IRQn; //TIM2中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; //IRQ通道被使能NVIC_Init(NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_Cmd(TIM2, ENABLE); //使能TIMx外设
}//定时器1MS
//TIM2_Int_Init(19,7199);//2MS系统定时//步进电机IO初始化
void BUJ_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开AFIO时钟GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//完全关闭JTAG-DP 开启SW-DPGPIO_InitStructure.GPIO_Pin BUJ1_GPIOPin; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(BUJ1_GPIOX, GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin BUJ2_GPIOPin; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(BUJ2_GPIOX, GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin BUJ3_GPIOPin; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(BUJ3_GPIOX, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin BUJ4_GPIOPin; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(BUJ4_GPIOX, GPIO_InitStructure); TIM2_Int_Init(19,7199);//2MS系统定时
}/***********************
函数名Stepmotor_BeatSwitch
函数功能节拍切换函数
形参u8 dir 电机转向 LEFT RIGHT
返回值void
函数说明
************************/void Stepmotor_BeatSwitch(u8 dir)
{static u8 cnt0;if(dir LEFT){switch(cnt){case 1:BEAT1;break;case 2:BEAT2;break;case 3:BEAT3;break;case 4:BEAT4;break; }}if(dir RIGHT){switch(cnt){case 1:BEAT4;break;case 2:BEAT3;break;case 3:BEAT2;break;case 4:BEAT1;break; }}cnt %4;
}/***********************
函数名Stepmotor_Stop
函数功能步进电机停转
形参void
返回值void
函数说明
************************/void Stepmotor_Stop(void)
{BUJ10; BUJ20; BUJ30;BUJ40;
}/***********************
函数名Stepmotor_Control
函数功能步进电机控制函数
形参s8 distance
返回值void
函数说明
1、distance 0 电机停转 TIM2关闭
2、distance 0 电机左转 TIM2开启
3、distance 0 电机右转 TIM2开启
u8 dir;//电机转动方向
u8 dis;//电机转动距离
************************/
u8 curtain0;//窗帘标志位
void Stepmotor_Control(s8 distance)
{if(distance 0){TIM_Cmd(TIM2, DISABLE);//失能定时器Stepmotor_Stop();//停止转动}else if(distance0){TIM_Cmd(TIM2, ENABLE);//使能定时器dirLEFT;//左转disdistance;curtain 1;}else if(distance0){TIM_Cmd(TIM2, ENABLE);//使能定时器dirRIGHT;//右转转dis-distance;curtain 0;}}/*中断标志必须清除否则程序卡死*/
//2ms更新一次
//定时器2中断服务程序
void TIM2_IRQHandler(void) //TIM3中断
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) ! RESET) //检查指定的TIM中断发生与否:TIM 中断源 {TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源static u16 num0;//记录更新次数Stepmotor_BeatSwitch(dir);num;//计算行程if(num dis*32){num0;TIM_Cmd(TIM2, DISABLE);//失能定时器Stepmotor_Stop();//停止转动}}
} .h文件 #ifndef __BUJ_H
#define __BUJ_H
#include includes.h#define BUJ1_GPIOX GPIOA
#define BUJ1_GPIOPin GPIO_Pin_12 //4#define BUJ2_GPIOX GPIOA
#define BUJ2_GPIOPin GPIO_Pin_15 //3#define BUJ3_GPIOX GPIOB
#define BUJ3_GPIOPin GPIO_Pin_3 //2#define BUJ4_GPIOX GPIOB
#define BUJ4_GPIOPin GPIO_Pin_4 //1#define BUJ1 PAout(12)
#define BUJ2 PAout(15)
#define BUJ3 PBout(3)
#define BUJ4 PBout(4)//节拍宏定义
#define BEAT1 {BUJ11; BUJ20; BUJ30;BUJ40;}
#define BEAT2 {BUJ10; BUJ21; BUJ30;BUJ40;}
#define BEAT3 {BUJ10; BUJ20; BUJ31;BUJ40;}
#define BEAT4 {BUJ10; BUJ20; BUJ30;BUJ41;}#define LEFT 7 //左转
#define RIGHT 8 //右转extern u8 dir;//电机转动方向
extern u8 curtain;
void BUJ_Init(void);//初始化
void TIM2_Int_Init(u16 arr,u16 psc);
void Stepmotor_Control(s8 distance);#endif2.2 光敏电阻、雨滴传感器讲解 2、1 模块特性 1. 光敏电阻模块对环境光线最敏感一般用来检测周围环境的光线的亮度触发单片机或继电器模块等 2. 模块在环境光线亮度达不到设定阈值时DO 端输出高电平当外界环境光线亮度超过设定阈值时DO 端输出低电平 3. DO 输出端可以与单片机直接相连通过单片机来检测高低电平由此来检测环境的光线亮度改变 4. DO 输出端可以直接驱动继电器模块由此可以组成一个光控开关。 2.2 接口说明 VCC外接3.3V-5.0V GND接地 DO开关信号输出0和1 AO模拟电压输出 三、转换公式 通过adc模数转化获取到采样值然后通过占比获取到我们电压值亦可将3.3换为100将光照强度转化为百分比。 三、原理图 四、PCB