此项目是本人作为一个跨行菜鸟第一次接触并运用单片机进行项目实例训练。
只要功夫深!铁杵磨成针!山高路远!我们顶峰相见!
项目比较简单,可能对于有玩单片机经验的同志来说,这只是个菜鸟级别的实战。话不多说,上货
项目背景介绍:
建筑工地以及其他施工现场的一级及二级配电箱所连接的三相线经常有掉相、缺相等故障,如不能及时发现,小则影响到工地的施工进度,大则会危及施工工人的生命安全,所以对配电箱开关状态的检测是我们需要认真研究的工作。
项目需求以及解决思路:
针对以上亟待解决的现实问题,我们需要研发一种设备产品去监测配电箱中开关的工作状态,并进行远程传输到控制端。
思路:基于单片机串口通信的方法,通过设计电路来实时监测三相线工作状态。然后将采集到的信息,通过电力载波模块进行远程传输。这样就可以远距离监测到配电箱的工作情况。
电路设计以及实物展示:
此图为三相电检测模块(图中集成了设计的电路)
模块原理:当检测到三相电不能正常工作时,通过电磁感应作用,其中的15、16号引脚会自动短路,在模块内部形成断路电路,我们也是利用这个原理设计外部电路最终达成目的。
上图为拓展的外部电路原理图,利用9V电源供电,串联三个1K电阻进行分压,然后在图示部分接入单片机,以检测单片机某引脚高低电平为触发条件进行信息的采集、辨别、以及传输。
(1)当三相电正常工作时,15、16号引脚处于断开状态,那么此时单片机引脚采集到的电平为低电平。
(2)当三相电非正常工作时,15、16号引脚处于连接状态,那么此时单片机引脚采集到的电平为高电平。
单片机代码模块:
检测端单片机程序(发送端)
int main(void)
{
u16 t;
u16 len;
u16 times=0;
u16 USART_RX;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LED_Init();
KEY_Init();
while(1)
{
USART_SendData(USART1, USART_RX);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);/
times++;
if(times%10==0)LED1=!LED1;
delay_ms(500);
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==1)
{
USART_RX = 0x22;
}if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0)
{
USART_RX = 0x11;
}
}
}
接收端(显示)
int main(void)
{
u8 t;
u16 len;
u8 x=0;
u8 lcd_id[12];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
uart_init(115200);
LED_Init();
LCD_Init();
POINT_COLOR=RED;
sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);
while(1)
{
switch(x)
{
case 0:LCD_Clear(WHITE);break;
}
POINT_COLOR=RED;
if(x==12)x=0;
LED0=!LED0;
if(USART_RX_BUF[0]==0x11)
{
LCD_ShowString(120,120,250,24,24,"condition:turn on ");
}
if(USART_RX_BUF[0]==0x22)
{
LCD_ShowString(120,120,250,24,24, "condition:turn off");
}
delay_ms(1000);
}
}
中断接收
void USART1_IRQHandler(void)
{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1);//(USART1->DR);
if((USART_RX_STA&0x8000)==0)
{
if(USART_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d
{
if(Res!=0x0a)USART_RX_STA=0;
else USART_RX_STA|=0x8000;
}
else
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
if(Res==0x11)
if(Res==0x22)
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
}
}
}
}
电力载波模块展示及原理说明:
通过电力载波模块我们将单片机串口发送的数据可以远距离传输。
此模块分为两部分,分别是调制、解调两部分。调制是将串口发送的数据通过解调进火线,通过频率信号进行传输,解调模块是将火线中的信号解调出来,然后进行显示或者其他应用。PS:此块原理较复杂,项目中只是拿过来应用,具体的可以搜集资料仔细学习!
学习心得:
这是利用单片机做成的第一个项目,也算非常成功,中间也得到过师兄和老师的帮助,在此非常感谢!
在此过程中我不但熟悉了串口通信、中断接收数据,也进行了独立设计简单电路的学习与尝试,更多的是在此过程中,学习到了该如何找到问题与解决问题。
这个小项目只是个开端,后期我们可以多路检测,不只是检测开关状态,只要是与电相关的设备都可以进行监测,比如摄像头啊等等。。。监测显示页面也可以做的更漂亮点。 后期此项目如果还有深入,我会继续更新!