步驟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
-
計算機
+關注
關注
19文章
7659瀏覽量
90743
發布評論請先 登錄
工業計算機與商用計算機的區別有哪些

工業計算機的定義與重要性

云端超級計算機使用教程
新思科技如何應對量子計算機的威脅
工業計算機類型介紹

評論