基于51单片机的无线通信智能定时插座 本系统采用STC89C52RC单片机为主控制器,由DS1302时钟芯片、SIM900A模块、DS18B20温度传感器、LCD1602液晶屏、ADE7755电能计量模块组成 有四个按键为减键、加键、选择键、设置键。 单独一个按键为复位按键。 DS1302时钟芯片,自带3V纽扣电池,当系统掉电后,纽扣电池供电给时钟芯片继续工作,再次上电无需重新设置时间。 ADE7755能够计量插在排插上用电器电能。 LCD1602液晶可以显示时、分、秒、温度和电能。 采用DS18B20温度传感器测温度,可以在LCD显示测到的温度。 可以设置5个开关开的时间和5个开关关的时间,每一个时间都可以单独设置成是否工作有效,设定的时间并具有掉电保存功能,保存在STC单片机的内部,上电无需重新设置。 继电器吸合指示灯亮实现开关开,继电器断开指示灯灭实现开关关,继电器外接一个排插。 具有自动模式和手动模式,手动模式下按加、减键就可以实现开关的开和关。 开机默认是自动模式,当现在的时间和设置开的时间一致时,继电器工作打开开关,当现在的时候和设置关的时间一致继电器断开关闭开关。 可以通过手机发送短信获取插座状态、温度、电能信息,可以发送短信控制继电器开关。 温度超过40℃会自动关闭继电器并给手机发送报警短信。 资料
最近搞了个基于51单片机的无线通信智能定时插座,感觉挺有意思,跟大家分享下。
这个系统的核心是STC89C52RC单片机 ,围绕它搭配了一堆实用的模块,像DS1302时钟芯片、SIM900A模块、DS18B20温度传感器、LCD1602液晶屏,还有ADE7755电能计量模块 。
先说说按键部分,有四个功能键,分别是减键、加键、选择键、设置键 ,还有个单独的复位按键。这几个按键承担着人机交互的重任,通过它们我们可以轻松设置定时插座的各种参数。
DS1302时钟芯片很贴心,自带3V纽扣电池。系统掉电的时候,纽扣电池就开始工作,保证时钟芯片继续运行,再次上电时就不用重新设置时间了,代码里大概是这样设置的:
// 假设定义了DS1302相关的引脚 sbit SCK = P1^0; sbit IO = P1^1; sbit CE = P1^2; // 写入一个字节到DS1302 void Write_DS1302_Byte(unsigned char dat) { unsigned char i; for (i = 0; i < 8; i++) { IO = dat & 0x01; SCK = 1; dat >>= 1; SCK = 0; } }这段代码就是往DS1302里写数据的,先把数据一位一位拿出来,通过IO引脚送进去,SCK引脚负责控制数据传输的节奏。
基于51单片机的无线通信智能定时插座 本系统采用STC89C52RC单片机为主控制器,由DS1302时钟芯片、SIM900A模块、DS18B20温度传感器、LCD1602液晶屏、ADE7755电能计量模块组成 有四个按键为减键、加键、选择键、设置键。 单独一个按键为复位按键。 DS1302时钟芯片,自带3V纽扣电池,当系统掉电后,纽扣电池供电给时钟芯片继续工作,再次上电无需重新设置时间。 ADE7755能够计量插在排插上用电器电能。 LCD1602液晶可以显示时、分、秒、温度和电能。 采用DS18B20温度传感器测温度,可以在LCD显示测到的温度。 可以设置5个开关开的时间和5个开关关的时间,每一个时间都可以单独设置成是否工作有效,设定的时间并具有掉电保存功能,保存在STC单片机的内部,上电无需重新设置。 继电器吸合指示灯亮实现开关开,继电器断开指示灯灭实现开关关,继电器外接一个排插。 具有自动模式和手动模式,手动模式下按加、减键就可以实现开关的开和关。 开机默认是自动模式,当现在的时间和设置开的时间一致时,继电器工作打开开关,当现在的时候和设置关的时间一致继电器断开关闭开关。 可以通过手机发送短信获取插座状态、温度、电能信息,可以发送短信控制继电器开关。 温度超过40℃会自动关闭继电器并给手机发送报警短信。 资料
ADE7755这个模块能精准计量插在排插上用电器的电能 ,LCD1602液晶则把时、分、秒、温度和电能这些信息都清晰地显示出来。DS18B20温度传感器负责测量温度,并在LCD上展示。
// 读取DS18B20温度的代码片段 bit Init_DS18B20(void) { bit status; DQ = 1; _nop_(); _nop_(); DQ = 0; // 拉低总线480us - 960us delay_18B20(60); DQ = 1; // 释放总线 delay_18B20(6); status = DQ; // 读取DS18B20的响应信号 delay_18B20(45); return status; }这个初始化DS18B20的代码,先拉低总线一段时间,然后释放,再读取DS18B20的响应信号,判断是否初始化成功。
插座可以设置5个开关开的时间和5个开关关的时间,每个时间都能单独设置是否有效,设定的时间还能掉电保存,存在STC单片机内部,上电不用重设。
继电器的控制也很关键,吸合指示灯亮开关开,断开指示灯灭开关关,继电器外接排插。系统有自动和手动两种模式,手动模式下按加、减键就能控制开关。开机默认自动模式,时间到了就自动控制继电器开关。
// 手动模式下控制继电器开关示例代码 if (mode == MANUAL_MODE) { if (key == KEY_ADD) { // 继电器开 RELAY = 1; LED = 1; } else if (key == KEY_SUB) { // 继电器关 RELAY = 0; LED = 0; } }这段代码就是在手动模式下,根据按下的加键或减键来控制继电器和指示灯。
还有个很酷的功能,能通过手机发短信获取插座状态、温度、电能信息,也能发短信控制继电器开关。温度超过40℃还会自动关继电器并给手机发报警短信,这就靠SIM900A模块来实现短信功能啦。
// 发送短信的部分代码示例 void send_sms(char *phone_number, char *message) { // 初始化串口与SIM900A通信 UART_Init(); // 发送AT指令设置短信格式为文本模式 send_at_command("AT+CMGF=1", "OK", 100); // 设置接收短信的号码 char command[30]; sprintf(command, "AT+CMGS=\"%s\"", phone_number); send_at_command(command, ">", 100); // 发送短信内容 send_string(message); // 发送Ctrl+Z结束短信发送 send_char(0x1A); delay(2000); }这段代码就是利用串口和SIM900A模块来发送短信,先设置短信格式,再指定接收号码,最后发送内容。
总之,这个基于51单片机的无线通信智能定时插座功能丰富,无论是日常生活用电管理还是一些小型项目应用,都挺实用。后续还可以继续优化,加些更有趣的功能,大家要是有啥想法,欢迎一起交流呀!