【摸鱼向】利用Arduino实现自动化切屏

曾几何时,每次背着老妈打游戏的时候都要紧张兮兮地听着爸妈是不是会破门而入,这严重影响了游戏体验,因此,最近想到了用Arduino加上红外传感器来实现自动监测的功能,当有人靠近门口的时候,电脑可以自动执行预设的命令,比如切屏。下面分享一个简单的实现~(注:私以为利用这种道具逃避学习是不对的,最好的办法是与父母进行沟通,协商好娱乐和学习的时间。)

硬件清单

Arduino Nano微控制器、HC-12无线串口通讯模块、人体红外传感器模块、TTL-USB转换器。

上图是信号发生端。HC-12连接到了Arduino Nano的硬串口上,而红外传感器的输出连接到了Arduino Nano的2号引脚上。

上图是信号接收端,负责把信号传给电脑。

它的原理呢,也非常的简单,当有人从周围经过时,红外传感器的输出信号会从低电平转为高电平,而Arduino Nano会捕获这个信号,进而把信息通过HC-12串口转发出去。

当接收器的HC-12接收到信息时,就会把信息通过这个USB口继续传输到电脑,所以我们只用在电脑监视这个输入信号即可。

代码撰写

首先是Arduino Nano烧录的代码:

cpp 复制代码
#include <Arduino.h>

volatile bool warnFlag = false;

void warn() {
  warnFlag = true;
}

void setup() {
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(2), warn, CHANGE);
}

void loop() {
  if (warnFlag) {
    warnFlag = false;
    if (digitalRead(2) == HIGH) {
      Serial.print("<warn>\n");
    } else {
      Serial.print("<safe>\n");
    }
  }
}

然后是电脑上用于监视信号的代码:

python 复制代码
import serial

import pyautogui

se = serial.Serial(port = "COM12", baudrate = 9600)
pyautogui.PAUSE = 0.01

while True:
    if se.readable():
        cmd = se.readline().decode()
        if cmd == '<warn>\n':
            pyautogui.keyDown('space')
            pyautogui.keyDown('volumemute')
            pyautogui.hotkey('ctrl', 'win', 'left')
        if cmd == '<safe>\n':
            pyautogui.typewrite('safe now')

我的USB接收器设备连接的端口号是COM12,大家可以根据自己电脑上的设备管理器查看是哪一个端口并修改。而且我执行的快捷键序列是先按空格,再按静音键,最后切到左侧的桌面,大家可以根据自己的需要进行修改。

如何运行

把接收器插到电脑上,并且将python代码修改好并运行,再用9V电池给Arduino Nano供电,放到门口外面,当外面有人经过的时候,python中相应的命令就会被执行了~

结语

虽然实现起来很简单,但是我觉得这可能是我目前为止做出来的第一个具有量产价值的小东西😅,不过要想量产的话,还得再设计好模具,并且把部件都给替换成更便宜的部件(比如红外信号接收便宜得多),最后全安装到一个PCB板子上集成化。现在的话,单个成本大概是三四十,替换好之后大概十几块就可以搞定了。

相关推荐
荣--20 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森21 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜2 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB3 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode4 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220705 天前
如何搭建本地yum源(上)
运维
大树888 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠8 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质8 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工8 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信