步驟1:組件
因?yàn)楦拍钭C明,我們將在面包板上構(gòu)建設(shè)備
您需要:
1。 Arduino Leonardo(使用Leonardo非常重要,因?yàn)樗梢?a href="http://m.sdkjxy.cn/analog/" target="_blank">模擬鍵盤rd)
2。。HC-SR04超聲波距離傳感器
3。 2個(gè)10 K可變電阻器
4。面包板,面包板電線
5。 USB電纜
6。 OLED顯示屏(https://www.adafruit.com/product/931)
步驟2:組裝和上傳

首先檢查您是否具有所有必需的組件和Arduino IDE。我將簡要地介紹連接步驟,您隨時(shí)可以查看所附的壓條示意圖
裝配
1。將Leonardo放在面包板上,并用橡皮筋將其固定到位
2。在面包板上放置兩個(gè)可變電阻OLED顯示器和超聲波傳感器
3。連接接地和vcc的
4。將電阻的中間引腳連接到arduino A0和A1
5。將顯示器的SDA和SCL連接到列昂納多(Leonardo)
6上標(biāo)記的SDA和SCL。將超聲波傳感器的觸發(fā)和回波引腳連接到Leonardo
7的12、13個(gè)數(shù)字引腳。將USB連接到計(jì)算機(jī)
上傳
首先,您需要下載并安裝必要的arduino庫:
1。 GOFi2cOLED庫:https://github.com/hramrach/GOFi2cOLED
2. Ultrasonic-HC-SR04庫:https://github.com/JRodrigoTech/Ultrasonic-HC-SR04
如果您不知道如何安裝arduino庫,請查看本教程。
下載并安裝了庫之后上方,您可以克隆或下載位于以下位置的arduino存儲(chǔ)庫:https://github.com/danionescu0/arduino,我們將使用此草圖:https://github.com/danionescu0/arduino/tree/master。 。
或者您可以復(fù)制并粘貼以下代碼:
/*
* 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(“l(fā)ock timer begin”);
} else if (!shouldEnableLockTimer()){
Serial.println(“l(fā)ock 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 = “l(fā)ock 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連接到計(jì)算機(jī),然后將草圖上傳到arduino。/p》
第3步:使用設(shè)備
將arduino連接到計(jì)算機(jī)后,它將持續(xù)監(jiān)控顯示器前部的距離。傳感器,并在距離增加時(shí)將“鎖定”屏幕按鍵組合發(fā)送到計(jì)算機(jī)。
設(shè)備具有一些配置:
1。正常距離,可以使用連接到A0的可變電阻器來配置距離。距離也顯示在OLED上。當(dāng)距離從設(shè)置的距離增加25%時(shí),倒計(jì)時(shí)將開始
2。超時(shí)(倒數(shù))。 還可以通過連接到A1的電阻來配置超時(shí)(以秒為單位)。超時(shí)到期后,將發(fā)送鎖定命令
3。鎖定組合鍵。設(shè)置了默認(rèn)的鎖定鍵組合以適用于Ubuntu Linux 18(CTRL + ALT + L)。要更改組合,您需要根據(jù)操作系統(tǒng)修改草圖:
4。超時(shí)和距離保護(hù)。 因?yàn)檫@是一種模擬鍵盤的設(shè)備,所以最好有一種停用鍵盤功能的機(jī)制。在我的草圖中,我選擇超時(shí)和距離必須大于“ 1”。 (您可以根據(jù)需要在代碼中進(jìn)行修改)
找到并更改“ 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();
}
有關(guān)arduino特殊鍵的完整列表,在此處檢查:https://www.arduino.cc/en/Reference/KeyboardModifi 。..
步驟4:其他方法
在此實(shí)現(xiàn)之前我也考慮了其他一些實(shí)現(xiàn):
1。紅外溫度計(jì)(MLX90614 https://www.sparkfun.com/products/10740)。紅外溫度計(jì)是一種通過分析遠(yuǎn)距離物體發(fā)射的紅外輻射來測量溫度的設(shè)備。我周圍躺著一個(gè),我想也許我可以檢測到計(jì)算機(jī)正面的溫度差異。
我已經(jīng)將它掛好了,但是溫差很?。o論我在前面還是不在)
1-2度,我認(rèn)為它不太可靠
2。 PIR傳感器。(https://www.sparkfun.com/products/13285)這種便宜的傳感器被稱為“運(yùn)動(dòng)傳感器”,但它們確實(shí)可以檢測到紅外輻射的變化,因此從理論上講,當(dāng)一個(gè)人使用時(shí),它可以工作離開計(jì)算機(jī)后,傳感器將檢測到該情況。此外,這些傳感器還具有超時(shí)和靈敏度旋鈕。因此,我已經(jīng)掛接好它并玩了,但是似乎它不是在近距離內(nèi)制作的(它有一個(gè)廣角),它發(fā)出了各種錯(cuò)誤的警報(bào)。
3。使用網(wǎng)絡(luò)攝像頭進(jìn)行人臉檢測。這個(gè)選項(xiàng)似乎非常有趣,因?yàn)槲以谄渌?xiàng)目(例如https://github.com/danionescu0/robot-camera-platfo 。..和https://github.com/danionescu0/image-processing-pr 。..
這真是小菜一碟!但是有一些缺點(diǎn):程序運(yùn)行時(shí)不能將筆記本電腦相機(jī)用于其他目的,為此需要一些計(jì)算機(jī)資源。因此,我也放棄了這個(gè)想法。
責(zé)任編輯:wv
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7847瀏覽量
93545
發(fā)布評論請先 登錄
計(jì)算機(jī)專業(yè)408考研科目
十進(jìn)制計(jì)算機(jī)硬件體系結(jié)構(gòu)及“獨(dú)值”量化邏輯運(yùn)算革命(一)
龍芯主板讓工控計(jì)算機(jī)擁有安全可信的核心
請問CW32L052C8T6這種安全性低功耗MCU的安全固件部分怎么實(shí)現(xiàn)?
工控機(jī)與普通計(jì)算機(jī)的核心差異解析
有哪些技術(shù)可以提高邊緣計(jì)算設(shè)備的安全性?
【作品合集】賽昉科技VisionFive 2單板計(jì)算機(jī)開發(fā)板測評
工業(yè)計(jì)算機(jī)的重要性
基于飛騰CPU的安全計(jì)算機(jī)平臺(tái)研制項(xiàng)目通過試驗(yàn)評審
自動(dòng)化計(jì)算機(jī)經(jīng)過加固后有什么好處?
自動(dòng)化計(jì)算機(jī)的功能與用途
工業(yè)計(jì)算機(jī)與商用計(jì)算機(jī)的區(qū)別有哪些
環(huán)旭電子助力客戶發(fā)布高性能自行車計(jì)算機(jī)
工業(yè)計(jì)算機(jī)如何設(shè)計(jì)用于沖擊和振動(dòng)
計(jì)算機(jī)屏幕鎖定的安全性
評論