正因是梦,尤需真活。

关于我用伺服电机模拟按下开关来控制灯开关这种看起来很蠢的事

2022.05.02

前言

由于我最新的电脑桌配置,开关在我屏幕的后面,导致我桌前的那个灯开关不好操作,于是我就想着能否整个自动的。

Web Image

↑我的新配置,开关就在这个屏幕后面,手根本碰不到

这次用的是ESP8266,并使用点灯科技接入小爱同学,可以使用小爱关灯就是好文明。

为什么不用智能开关、智能灯泡,最大原因就是我想同时使用传统开关和智能控制。传统开关关了后就不能使用语音开,再加上我房间是一灯双控开关,是由两个单刀双掷开关组成。

Web Image

看着这个图,我实在不知道把智能开关加在哪里,可以即使用传统开关,还可以使用智能开关,最后决定返璞归真,让智能开关模仿开关灯的姿势,来控制那个我操控不到的开关。

硬件部分

  1. 8266开发板一块
  2. 轻触开关一个
  3. TD-7015MG舵机一个
  4. 100Ω电阻两个

为了方便固定,我将走线部分焊在了洞洞板上,焊接工艺实在是不堪入目,但,能用就行。未来肯定会用PCB代替,关键是现在这根信号线实在不牢,但我也懒得改。

Web Image

Web Image

8.31日更新为PCB板

Web Image

Web Image

原理

按钮

Web Image

I/O口就是单片机检测的口,高电平有效,在按钮没被按下去之前都是低电平,按钮按下去后,I/O被拉到高电平,单片机收到信号,开始工作。

舵机旋转

红——————————VCC 棕——————————GND 橙——————————信号线

PWM控制

暂无

Arduino控制

直接使用Arduino的Servo库:

#include <Servo.h>

Servo servo_16;         //舵机输出口 GIPO16

servo_16.write(135);    //舵机旋转角度 具体参数需要结合自身情况修改
delay(1000);            //给一个小延时
servo_16.write(95);

几行代码就可以使其转动,角度自己慢慢调就可以。

代码和库

下载

这份代码只是在@CloudBaby_这位大佬的基础上修改了开关方式,可以理解为二分频,就是只记录上次开关位置,而非固定开与关的上下。对于我的情况来说,灯的开关与否,8266是不知道的,他只知道也肯定知道开关现在的位置(我无法控制那个开关),好在单刀双掷开关只要变动开关就可以实现灯的切换状态,所以对小爱同学说开灯和关灯,传回到8266都是按一下开关。也顺便加了一个轻触开关启动,提供手动解决方案。

(上关下开)

Web Image

(下关上开)

Web Image

参考

ESP8266制作宿舍开关灯神器

本代码来自@CloudBaby_这个up主,我只是在那位up主的基础上简单了一些功能