7549浏览
查看: 7549|回复: 12

用 Arduino 打造一个自动锁屏装置

[复制链接]
本帖最后由 大连林海 于 2015-6-2 22:04 编辑

上大学的时候,当团支书,负责同学交入Party申请书之类的事情。想入Party有一关是“群众评议”,就是看看是否有反对的意见。当时我和班级上的同学说“一个好人,进入Party是追求进步,是好事;一个坏人,进入Party会让群众队伍更纯洁,因此也是好事。大家都不要反对哈”。所以我们班级在这一关从来没有过什么问题。后来有一次,我去帮同学交入Party申请书,顺便讨价还价一下(我记得有规定是交了之后必须间隔一段才能进入正式的城西,为此我会和辅导员商量这个申请书的时间多多提前一些)。辅导员不在,我就稍等了一下。期间无聊,顺便翻翻其他班级的评议,结果让我大吃一惊,真有班级同学特别反对某个人的,罗列了很多条意见。正在我看在兴头上,辅导员看到急忙过来将东西收了起来,半开玩笑的批评另外帮忙的女同学,说这样的东西怎么能让这种人看到………所以信息安全非常重要。

当你起身去上厕所或者喝水的时候,是否可曾担心屏幕上的信息被人有意或者无意的看到?或者你外出办事,是否担心有人悄悄操作你的电脑?解决这个问题最简单的办法就是给Windows设置一个密码,然后在离开的时候按下 WinKey+L 。

下面就来使用Arduino制作一个自动完成这个“人走屏锁”的装置。

简单的说,工作分为两步:第一步,制作Arduino模拟USB键盘;第二步,让这个模拟键盘发出WinKey+L的键码。

使用的BOM如下:
A.USB公头(有供电和通讯能力的USB头皆可) x1
B.120欧电阻(原文建议68欧,但是我刚好没有所以并联2个来实现60欧) x4
C. 2.2K欧电阻 x1
D.3.6伏稳压管 x2
E.红外线传感器 x1 (用来实现人体感应)

先说第一步,根据 《Arduino学习笔记A11 - Arduino模拟电脑键盘(基于AVR-USB的USB-HID设备)》参考[1]。使用到BOM中提到的A-D,具体电路如下

按照上图设计,首先用面包板进行搭建:

测试能够正常实现一个USB Keyboard的功能,具体调试可以参照《Arduino USB keyboard debug经验》。确定上述能够正常工作之后,进行简单的焊接,用大头针将Pin脚引出。

再使用纸壳做了一个盒子,将Arduino装了进去。

下一步的目标就是加入一个能够判断人体是否存在的功能了。最先想到的是人体感应模块。通常都是长得下面这个样子。

我也入手了一块,但是测试中感觉很奇怪,手放在它前面一段时间之后就没有输出了。后来再仔细阅读资料发现,这个东西应该叫做“人体运动感应模块”。是根据判断当前的红外线变化来判断是否有人体进入。如果想做到“人体感应”,还要加入更复杂的设计。
万幸,手边还有一块红外距离模块,这是用来判断一定距离内是否有遮挡的元件。探测距离可以在0-100cm以内调节。当有阻挡的时候输出低电平,反之输出高。

使用时,探头的VCC和GND同样取自USB供给。输出OUT连接到Arduino的D8。


  1.         #include "UsbKeyboard.h"
  2.         int KEYPIN = 8; //使用D8作为检测输入,直接使用D1的话
  3.         //灌入电流过大,会导致死机。最好是加入限流电阻
  4.         //手边没有,就这样暂时这样了
  5.         unsigned long ElspTimer=0;
  6.         void setup()
  7.         {
  8.          TIMSK0 &= !(1 << TOIE0); //这里的中断给USB使用了,所以Delay(), Millis()
  9.         //micros() delay() delayMicroseconds()统统不好用了
  10.         //取而代之的是用串口输出做的粗糙的延时
  11.          pinMode(KEYPIN, INPUT);
  12.          Serial.begin(9600);
  13.         }
  14.         void loop()
  15.         {
  16.          UsbKeyboard.update();
  17.          if(digitalRead(KEYPIN) == LOW)
  18.          {
  19.          ElspTimer=0;
  20.          }
  21.          ElspTimer++;
  22.          Serial.println(ElspTimer); //这里主要是为了延时使用
  23.          if (ElspTimer>6000L) //循环6000次,在Uno上是40s左右
  24.          {
  25.          UsbKeyboard.sendKeyStroke(KEY_L,MOD_GUI_LEFT); //发出WinKey+L 来锁定
  26.          ElspTimer=0;
  27.          }
  28.         }
复制代码





这样,当人离开的时候,红外探头就无法检查到障碍物,会输出一个高电平。经过40s左右的延时,如果始终为高,就会模拟按下WinKey+L来锁定电脑。从而实现了人走屏锁的功能。
为了美观,最好再做个盒子之类的,我这里只是找了一个啤酒杯,露出探头和USB线。大功告成。

总结:Arduino通过IO来模拟一个低速设备能够完成一些有趣的功能,还有更多种的“玩法”等待我们去探索。


丄帝De咗臂  高级技匠

发表于 2015-6-2 20:59:00

代码就一句呢
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-6-2 22:01:36


不好意思 我再整理一下子
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2015-6-2 22:09:29

大连林海 发表于 2015-6-2 22:01
不好意思 我再整理一下子

加油
回复

使用道具 举报

hnyzcj  版主

发表于 2015-6-3 06:05:43

这个貌似很屌呀
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-6-3 08:41:50

hnyzcj 发表于 2015-6-3 06:05
这个貌似很屌呀

看着确实很屌 要不试试看
回复

使用道具 举报

Cain  初级技匠

发表于 2015-6-3 10:48:20

哈哈,好实用。检测信号反过来就可以在家长推门的时候自动锁屏,妈妈再也不会看到我在打游戏了,或者可以在别人用电脑的时候自动“帮忙”锁屏了:lol
回复

使用道具 举报

touchfree  高级技师

发表于 2015-6-3 10:52:41

楼主 创新能力好强!
回复

使用道具 举报

Ricky  NPC

发表于 2015-6-3 10:56:30

这是在家打游戏的利器。。。
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-6-3 18:13:12

Cain 发表于 2015-6-3 10:48
哈哈,好实用。检测信号反过来就可以在家长推门的时候自动锁屏,妈妈再也不会看到我在打游戏了,或者可以在 ...

可是尝试着做做看
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-6-3 18:13:17

Cain 发表于 2015-6-3 10:48
哈哈,好实用。检测信号反过来就可以在家长推门的时候自动锁屏,妈妈再也不会看到我在打游戏了,或者可以在 ...

可是尝试着做做看
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-6-3 18:13:34

Ricky 发表于 2015-6-3 10:56
这是在家打游戏的利器。。。

不用担心被妈妈发现了
回复

使用道具 举报

Rockets  NPC

发表于 2015-6-9 11:23:33

话说为什么不搞个3D打印机来打印一个壳子呢。
会好看很多啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail