自动开关灯控制
设计需求
- 每天晚上去上厕所需要开走廊的灯,重复性的事情做多了就烦,所以做一个简单的自动控制
- 单片机与建模的练手项目(虽然淘宝30块甚至更便宜就能买一个不改变原有结构的控制开关)
方案
详情
使用180°舵机加人体检测传感器配合ESP32完成控制,控制内容:当人靠近时控制舵机进行开灯,几分钟后没有检测到人就关灯(加一个限制条件在设置的时间段如晚上该功能才启用)
程序逻辑

结构草图

实践中的难点
- 舵机不好固定在86开关盒上,目前有3个开关盒连在一起,而控制走廊3个灯的开关盒在中间,又不想使用粘胶进行固定,出现故障不好拆除。
解决办法:发现旁边一个插座盒的面板可以取下来,可以尝试在面板上钻两个固定孔,用螺丝结合3D打印结构件进行固定
- 获取时间异步控制
换了一种方式,直接联网后同步ESP32的NTP时间,需要用的时候直接获取单片机上的,每次启动联网更新一下就可以了(断电后会导致时间丢失,恢复成默认)。
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <TimeLib.h>
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp1.aliyun.com", 28800); // 使用国内NTP服务器
...
// NTP时间同步
Serial.println("[NTP] NTP Time update");
timeClient.begin();
while (!timeClient.update()) delay(500);
setTime(timeClient.getEpochTime());
timeClient.update();//更新时间
...
结果
实物图片

新增笔记知识点
- 3D打印件的建模与实际部件结合需要增加0.4mm公差
- 3D打印件嵌入花纹沉头螺母(M3,光滑外径3.9mm,花纹外径4.8mm)时,开孔半径R设置成2.15mm
- 使用180°舵机时,设定角度后舵机将上电维持该角度,有时候齿轮会咔咔响。此项目中并不需要维持,可以使用myServo.detach();//停止舵机的角度维持(停止后再启用需要重新设定引脚和角度)。
- MG90S舵机尺寸。
- NTP同步协议
后续改进
- ESP32可换成更便宜的ESP8266、ESP01等芯片
- 电路控制部分可以画一块PCB板进行集成
- 优化机械机构与外壳设计
- HC-SR501模块(红外)太容易受到干扰了,后续改进强烈建议改为人在传感器,或者多传感器结合。
- 舵机力度不够,三个开关刚好只能按动两个多一个都不行(也有可能是力臂太长了)。
备份
3D文件
创想云网站: https://www.crealitycloud.cn/model-detail/6807dc58f1b106626821c980
代码
GitHub仓库:UerLink/IOTProject