当前位置: 首页 > news >正文

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

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

硬件清单

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

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

请添加图片描述
上图是信号接收端,负责把信号传给电脑。

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

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

代码撰写

首先是Arduino Nano烧录的代码:

#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");}}
}

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

import serialimport pyautoguise = serial.Serial(port = "COM12", baudrate = 9600)
pyautogui.PAUSE = 0.01while 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板子上集成化。现在的话,单个成本大概是三四十,替换好之后大概十几块就可以搞定了。

相关文章:

  • python自动化测试实战 —— 自动化测试框架的实例
  • MySQL 报错 You can‘t specify target table for update in FROM clause解决办法
  • Flink 读写 HBase 总结
  • JeecgBoot jmreport/queryFieldBySql RCE漏洞复现
  • ArcGIS pro与SuperMap根据属性自动填充颜色步骤
  • 【JVM入门到实战】(三) 查看字节码文件的工具
  • 结构化并发 ForkJoinPool StructuredTaskScope
  • ExoPlayer架构详解与源码分析(10)——H264Reader
  • 【数据结构】平衡树引入
  • 用23种设计模式打造一个cocos creator的游戏框架----(十四)观察者模式
  • SCT52A40——120V,4A,高频高压侧和低压侧栅极驱动器
  • ISP去噪(1)
  • CentOS 7 源码部署 Nginx
  • 【华为OD题库-076】执行时长/GPU算力-Java
  • 音乐制作软件Studio One mac软件特点
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【comparator, comparable】小总结
  • 30天自制操作系统-2
  • Android交互
  • ComponentOne 2017 V2版本正式发布
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • go语言学习初探(一)
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript设计模式系列一:工厂模式
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • laravel5.5 视图共享数据
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • markdown编辑器简评
  • Meteor的表单提交:Form
  • PhantomJS 安装
  • Python爬虫--- 1.3 BS4库的解析器
  • Python语法速览与机器学习开发环境搭建
  • Redis学习笔记 - pipline(流水线、管道)
  • windows下mongoDB的环境配置
  • 笨办法学C 练习34:动态数组
  • 从零开始的无人驾驶 1
  • 普通函数和构造函数的区别
  • 日剧·日综资源集合(建议收藏)
  • Prometheus VS InfluxDB
  • 大数据全解:定义、价值及挑战
  • ​插件化DPI在商用WIFI中的价值
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #define与typedef区别
  • %check_box% in rails :coditions={:has_many , :through}
  • (2)STL算法之元素计数
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (七)理解angular中的module和injector,即依赖注入
  • (实战篇)如何缓存数据
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)从 Java 代码到 Java 堆
  • *2 echo、printf、mkdir命令的应用