背景

玲玲说想让我做个东西送给她,作为一个直男的思考方式当然是问她的需求,也就是生活中不方便的地方。她说感觉每天晚上要下床去关灯很不方便。我就决定做一个智能化的开关给她。如果直接更换开关盒,寝室里面肯定不现实,所以,只有无损改装的方案了。何况,无损改装的方案,并不会影响手动开关。

准备

  • 3D打印机(打印外壳用)
  • 舵机
  • 电池盒
  • Arduino Nano
  • HC-05 蓝牙模块

实现逻辑

既然是无损改装,我能想到的也就只有用舵机模拟手触动开关。由于宿舍没有无线路由,所以暂且用蓝牙进行通讯控制。电源采用4节5号电池,6V满足舵机、Arduino、蓝牙的供电要求。

逻辑相当简单,手机发送“开”或“关”的指令 -> 蓝牙模块接收 -> Arduino处理 -> 舵机转动。

具体制作

3D模型部分

在预估好尺寸后,打印出这样的外壳以及摇臂:

Arduino 控制部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<Servo.h>

Servo arm;

const int posdeg[3]={50, 80, 110}; //选取三个角度,模拟手开、关、无动作

void setup() {
Serial.begin(9600);
}

void loop() {
String pos="";
while (Serial.available()) pos+=Serial.read();
if (pos!="")
{
arm.attach(9);
Serial.println(posdeg[pos.toInt()-48]);
arm.write(posdeg[pos.toInt()-48]);
delay(200);
arm.write(posdeg[1]); //回到中间位置,不要一直摁着开关
delay(250);
arm.detach(); //断开舵机连接,防止发出声音
}
delay(15);
}

关于防止舵机不停发声的问题,可以参见我的上一篇博客

安装成品图

手机控制部分

暂时没有写APP的能力,于是就使用串口调试工具:

其中,0代表关灯,2代表开灯。1用于位置矫正。

实际测试

原理示意:

实际测试:

在测试过程中,4节半满的南孚电池可以支撑两天的使用。

后期展望

  • 解决供电问题,确保在一次维护后可以支撑1个月左右的使用。或者直接使用市电。
  • 对于多个开关集成的面板,可以制作多个摇杆,或者设计可调整的摇臂,以适应不同的开关盒。