在 Windows 10 发布时, 除了使用传统的登陆密码, 操作系统还支持三种 Windows Hello 类型: PIN, 面部识别, 和指纹识别.
也许我们在各种智能手机上已经习惯于手指一按或者盯着屏幕就可以解锁直奔主题的感觉, 但是对于 PC 来说, 生物识别的普及速度似乎慢了不止半拍.
这其中有很多原因, 可以归结于电脑的使用方式不像手机需要频繁解锁, 也可以认为 PC 行业作为老消费电子业创新乏力, 各大厂商没有动力跟进最新技术(只有各大 RGB 灯厂依然蓬勃发展哈哈), 但总之现状就是 Windows Hello 出现了这么久市面上能够适配的配件依然寥寥可数.
嘛, 作为一个呆萌极客, 遇到这种问题肯定是要挺身而出的, 反正让我敲一长串密码我就难受, 连指纹人脸都没有的电脑能算得上是神机吗? 我表示强烈摇头.
今天就来教大家如何强势改造自己的键盘, 给它添加上指纹模块, 一键登录美滋滋.
开始之前, 先介绍一下本次 DIY 的背景, 其实个人自己用的台式机是支持人脸识别的, 我很早 (从 RealSense 发布的时候) 就开始关注 Windows Hello 了. 那时候能买的 RealSense 摄像头都很贵(现在也不便宜), 我最早选择的是 SR300 这个型号, 用是挺好用的, 但是故障率奇高, 半年时间内用坏了两个, 所以当罗技也推出了支持人脸登录的 webcam 之后, 我毫不犹豫入手了一个, 就是下面这个玩意↓
(顺便发一个我之前的回答, 是介绍我如何攒机设计自己的台式机的)
你组装的最得意的一台电脑是什么样的?
www.zhihu.com
来到公司之后, 在公司的电脑上我自然也想设置相同的人脸解锁功能, 但是很可惜, 出于信息安全考虑, 公司的电脑登录设置被策略组限制, 只能使用密码而无法设置 PIN
而在使用 Windows Hello 在设备上启用生物识别之前, 必须选择 PIN 作为初始解锁方式. 所以经过一番搜索后, 对于是否可以在不设置 PIN 的情况下使用 Windows Hello 解锁这个问题, 这里的答案是否定的, 没有办法禁用 PIN, 且只有设置 PIN 后, 才可以根据需要添加生物识别.
在 Windows 10 中, PIN 登录是新 Microsoft Passport 功能的一部分, 并且比传统密码更安全, 下面的链接是微软官方的介绍↓
PIN 为何优于密码 (Windows 10)
docs.microsoft.com
道理我都懂, 但是这种情况下我要怎么愉快地在公司___呢?
当然难不倒我, 既然软件上无法支持, 那我们就来造一个物理外挂: 直接用 Arduino 模拟成一个 HID 键盘, 再通过指纹模块来做身份验证.
原理图如下↓
其实非常简单, 就是在键盘的 USB 线中间插入了一个 USB-Hub, 然后 Hub 的一个口接键盘原来的 USB 线, 一个口接我们的 Arduino(这里用的是 Micro, 因为带 USB 模拟功能)
一拖二的 USB-Hub
Arduino 这边, 选择了一个串口指纹模块, 型号是 FPM3X, 长下面这样↓
然后就是键盘的拆解和改造了, 这一步比较考验手工, 总之就是找一个能塞下模块的位置钻个和传感器一样大小的窟窿. 我用的键盘是某宝买的一个茶轴机械键盘(程序员必备), 每个按键都带独立可控背光, 还很便宜只要不到 200 块, 具体型号就不说了避免广告. 指纹的位置我选择放在 ESC 键边上, 一是这边刚好有个空位, 另外一个原因是放在左手边的话不会需要右手离开鼠标, 使用起来会更顺畅.
键盘原始状态
脱下马甲
找到一个合适的位置放置指纹传感器
标记好孔位尺寸
开始打孔...
冒着生命危险
把指纹传感器嵌入, 用热熔胶固定
完成!
接下来就是电路部分了, 我买了最小的 Arduino Micro, 因为这个电路实在太简单, 所有没有必要自己做 PCB, 飞几根线即可
为了避免短路, 用热缩管把电路部分封装好
把所有电路都塞进去固定好
完成品的效果
最后插上电脑, 电脑识别出一个键盘, 一个 Arduino 串口, 硬件无误~
下一步是编程, Arduino Micro 上的 Mega32U4 芯片本身就带 USB 接口, 所以官方也提供了 USB 库可以模拟成键盘和鼠标, 这里通过模拟成键盘来实现读取到正确的指纹数据后输入一串密码的功能
VS 下对 Arduino 进行编程
经验证, 效果完美, 而且不仅如此, 由于我们可以录入多个指纹, 所以可以轻松用代码实现不同指纹输入不同内容的功能; 如果在 Arduino 上添加一些额外传感器, 那么还能实现更多自定义宏的触发功能, 简直一颗赛艇.
用不同手指输入不同密码
代码中封装好了各种模拟键盘的方法, 可以很方便地自定义输入逻辑和内容↓
- switch (finger_id)
- {
- case 1:
- fingerBoard.InputPassword("12345678");
- break;
- case 2:
- fingerBoard.InputPassword("123456789");
- break;
- case 3:
- fingerBoard.InputPassword("aaabbbccc");
- break;
- /*
- you can also do something like this:
- // The keyboard will type the string and perform an ENTER.
- fingerBoard.TypeString("www.zhihu.com", true);
- // The keyboard will press ctrl+v and then release.
- fingerBoard.PressKey(KEY_LEFT_CTRL);
- fingerBoard.PressKey('v');
- fingerBoard.ReleaseAll();
- ...
- */
结束语: 本次 DIY 主要是解决了无法使用 PIN 的情况下使用 Windows Hello 的问题. 对于大家自己的电脑, 其实完全可以不需要 Arduino 这一块板子, 直接把 Hub 另一口的 Arduino 板子换成 USB 指纹模块, 也是可以完美兼容的~ 只不过这样的话就只能用于登录而无法编程实现其他功能了.
比如这种 X 宝买的 USB 指纹器, 实测识别速度还是很快的
Arduino 的代码在这里, 板子型号, 传感器链接, 接线方式和串口指令说明都在代码里有注释, 需要的同学可以自行尝试, 记得给个星星~
- GitHub
- GitHub.com
- https://github.com/david-pzh/FingerBoard
长期搞各种脑洞项目, 大家不嫌弃的话也可以点一下上面关注~不定期更新
顺便微博 @ _稚晖 https://weibo.com/u/1679186305
来源: http://www.tuicool.com/articles/go/ZRJFFry