计算机技术论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

  • 欢迎访问 计算机技术论坛-电脑迷与初学者的家园!由于论坛管理严格,新注册会员可能遇到各种问题,无法解决的请发邮件 admin@jsjbbs.cn
查看: 1438|回复: 0

计算机屏幕锁定的安全性

[复制链接]
发表于 2021-4-11 21:23:44 | 显示全部楼层 |阅读模式
#111723#步调1:组件
由于观点证实,咱们将在面包板上构建立备
您须要:
1。 Arduino Leonardo(应用Leonardo十分主要,由于它能够摹拟键盘rd)
2。。HC-SR04超声波间隔传感器
3。 2个10 K可变电阻器
4。面包板,面包板电线
5。 USB电缆
6。 OLED表现屏(https://www.adafruit.com/product/931
步调2:组装和上传


起首检讨您能否存在全部必须的组件和Arduino IDE。我将扼要地先容衔接步调,您随时能够检查所附的压条表示图
拆卸
1。将Leonardo放在面包板上,并用橡皮筋将其牢固到位
2。在面包板上放置两个可变电阻OLED表现器和超声波传感器
3。衔接接地和vcc的
4。将电阻的旁边引脚衔接到arduino A0和A1
5。将表现器的SDA和SCL衔接到列昂纳多(Leonardo)
6上标志的SDA和SCL。将超声波传感器的触发和回波引脚衔接到Leonardo
7的12、13个数字引脚。将USB衔接到盘算机
上传
起首,您须要下载并装置须要的arduino库:
1。 GOFi2cOLED库:https://github.com/hramrach/GOFi2cOLED
2. Ultrasonic-HC-SR04库:https://github.com/JRodrigoTech/Ultrasonic-HC-SR04
假如您不晓得怎样装置arduino库,请检查本教程。
下载并装置了库以后上方,您能够克隆或下载位于以下地位的arduino存储库:https://github.com/danionescu0/arduino,咱们将应用此草图:https://github.com/danionescu0/arduino/tree/master。 。
或许您能够复制并粘贴以下代码:
/*
* Libraries used by this project:
*
* GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED
* Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04
*/
#include “Keyboard.h”
#include “Wire.h”
#include “GOFi2cOLED.h”
#include “Ultrasonic.h”
GOFi2cOLED GOFoled;
Ultrasonic ultrasonic(12,13);
const byte distancePot = A0;
const byte timerPot = A1;
const float percentMaxDistanceChangedAllowed = 25;
int actualDistance;
unsigned long maxDistanceDetectionTime;
bool lockTimerStarted = false;
void setup()
{
Serial.begin(9600);
Keyboard.begin();
initializeDisplay();
}
void loop()
{
clearDisplay();
actualDistance = getActualDistance();
writeStatusData();
doDisplay();
if (!lockTimerStarted && shouldEnableLockTimer()) {
lockTimerStarted = true;
maxDistanceDetectionTime = millis();
Serial.println(“lock timer begin”);
} else if (!shouldEnableLockTimer()){
Serial.println(“lock timer disabled”);
lockTimerStarted = false;
}
if (shouldLockScreen()) {
lockScreen();
Serial.println(“Lock screen”);
}
delay(100);
}
bool shouldLockScreen()
{
return lockTimerStarted && (millis() - maxDistanceDetectionTime) / 1000 》 getTimer();
}
bool shouldEnableLockTimer()
{
int allowedDistance = percentMaxDistanceChangedAllowed / 100 * getDistance();
return getTimer() 》 1 && getDistance() 》 1 && actualDistance - getDistance() 》 allowedDistance;
}
void writeStatusData()
{
setDisplayText(1, “MinDistance:”, String(getDistance()));
setDisplayText(1, “Timer:”, String(getTimer()));
setDisplayText(1, “ActualDistance:”, String(actualDistance));
int countDown = getTimer() - (millis() - maxDistanceDetectionTime) / 1000;
String message = “”;
if (shouldLockScreen()) {
message = “lock sent”;
} else if (shouldEnableLockTimer() && countDown 》= 0) {
message = “。.” + String(countDown);
} else {
message = “no”;
}
setDisplayText(1, “Locking: ”, message);
}
void initializeDisplay()
{
GOFoled.init(0x3C);
GOFoled.clearDisplay();
GOFoled.setCursor(0, 0);
}
void setDisplayText(byte fontSize, String label, String data)
{
GOFoled.setTextSize(fontSize);
GOFoled.println(label + “:” + data);
}
void doDisplay()
{
GOFoled.display();
}
void clearDisplay()
{
GOFoled.clearDisplay();
GOFoled.setCursor(0, 0);
}
int getActualDistance()
{
int distanceSum = 0;
for (byte i=0;i《10;i++) {
distanceSum += ultrasonic.Ranging(CM);
}
return distanceSum / 10;
}
int getDistance()
{
return map(analogRead(timerPot), 0, 1024, 0, 200);
}
int getTimer()
{
return map(analogRead(distancePot), 0, 1024, 0, 20);
}
void lockScreen()
{
Serial.println(“pressing”);
Keyboard.press(KEY_LEFT_CTRL);
delay(10);
Keyboard.press(KEY_LEFT_ALT);
delay(10);
Keyboard.write(‘l’);
delay(10);
Keyboard.releaseAll();
}
最后应用usb电缆将arduino衔接到盘算机,而后将草图上传到arduino。/p》
第3步:应用装备

将arduino衔接到盘算机后,它将延续监控表现器前部的间隔。传感器,并在间隔增添时将“锁定”屏幕按键组合发送到盘算机。
装备存在一些设置:
1。畸形间隔,能够应用衔接到A0的可变电阻器来设置间隔。间隔也表现在OLED上。当间隔从设置的间隔增添25%时,倒计时将开端
2。超时(倒数)。 还能够通过衔接到A1的电阻来设置超时(以秒为单元)。超时到期后,将发送锁定下令
3。锁定组合键。设置了默许的锁定键组合以实用于Ubuntu Linux 18(CTRL + ALT + L)。要变动组合,您须要依据操纵体系修正草图:
4。超时和间隔维护。 由于这是一种摹拟键盘的装备,以是最好有一种停用键盘功效的机制。在我的草图中,我抉择超时和间隔必需大于“ 1”。 (您能够依据须要在代码中停止修正)
找到并变动“ lockScreen()”功效
void lockScreen()
{
Serial.println(“pressing”);
Keyboard.press(KEY_LEFT_CTRL);
delay(10);
Keyboard.press(KEY_LEFT_ALT);
delay(10);
Keyboard.write(‘l’);
delay(10);
Keyboard.releaseAll();
}
有关arduino特别键的完全列表,在此处检讨:https://www.arduino.cc/en/Reference/KeyboardModifi 。..
步调4:其余方式
在此实现之前我也斟酌了其余一些实现:
1。红外温度计(MLX90614 https://www.sparkfun.com/products/10740)。红外温度计是一种通过火析远间隔物体发射的红外辐射来丈量温度的装备。我四周躺着一个,我想或许我能够检测到盘算机正面的温度差别。
我曾经将它挂好了,然而温差很小(不管我在后面仍是不在)
1-2度,我以为它不太牢靠
2。 PIR传感器。(https://www.sparkfun.com/products/13285)这类廉价的传感器被称为“活动传感器”,但它们确切能够检测到红外辐射的变更,因而从实践上讲,当一团体应用时,它能够任务分开盘算机后,传感器将检测到该情形。另外,这些传感器还存在超时和敏锐度旋钮。因而,我曾经挂接好它并玩了,然而仿佛它不是在近间隔内制造的(它有一个广角),它收回了种种毛病的警报。
3。应用收集摄像头停止人脸检测。这个选项仿佛十分风趣,由于我在其余名目(比方https://github.com/danionescu0/robot-camera-platfo 。..和https://github.com/danionescu0/image-processing-pr 。..
这真是小菜一碟!然而有一些毛病:顺序运转时不能将条记本电脑相机用于其余目标,为此须要一些盘算机资本。因而,我也废弃了这个主意。
wv
更多内容阅读推荐:燃气灶上面有个插座怎么办
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

无图版|手机版|计算机技术论坛 JSJBBS.CN @ 2008-2024 ( 鲁ICP备17021708号 )

技术支持 : 北京康盛新创科技有限责任公司

快速回复 返回顶部 返回列表