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

上大学的时候,当团支书,负责同学交入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,具体电路如下

aa0

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

aa1

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

aa2

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

aa4

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

aa5

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

aa6

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

aa7

程序如下:

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

 

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

aa8

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

参考:
1. http://www.geek-workshop.com/forum.php?mod=viewthread&tid=1137
2. http://www.lab-z.com/arduino-usb-keyboard-debug%E7%BB%8F%E9%AA%8C/

用 Arduino 打造一个自动锁屏装置》上有 1 条评论

  1. Pingback 引用通告: - BOBOKing.GPS

发表评论

电子邮件地址不会被公开。 必填项已用*标注