Innehållsförteckning:

Autolås datorsystem: 4 steg
Autolås datorsystem: 4 steg

Video: Autolås datorsystem: 4 steg

Video: Autolås datorsystem: 4 steg
Video: 99 Biggest Heavy Equipment Machines Working At Another Level ►2 2024, Juli
Anonim
Image
Image
Montering och uppladdning
Montering och uppladdning

I denna handledning kommer vi att utforska säkerheten för datorskärmlås. Operativsystem har en konfigurerbar timeout som låser skärmen om användaren inte har rört musen eller tangentbordet.

Vanligtvis är standard cirka en minut. Om du följer denna standard och lämnar din dator i en upptagen miljö kan någon komma åt din dator i den minuten tills skärmen låses. Om du ställer in den på några sekunder får du låsskärmen väldigt ofta när du inte rör vid tangentbordet och det är irriterande …

En dag frågade en arbetskollega mig om jag kan "fixa" det här problemet med någon sorts enhet som låser datorn när han inte är där, och jag tog utmaningen:)

Jag har undersökt flera alternativ i mitt huvud som att använda arduinos och en infraröd termometersensor, PIR -sensor eller kanske använda ansiktsigenkänning på datorn, men jag har bestämt mig för en enklare metod:

Vi ska kombinera Arduino Leonardo HID -funktionalitet (emulera tangentbord) med en ultraljudsavståndssensor för att upptäcka om en person använder datorn, om inte skickar enheten en tangentkombination via USB för att låsa datorn.

Steg 1: Komponenter

Eftersom detta är ett bevis på konceptet kommer vi att bygga enheten på en brödbräda

Du kommer att behöva:

1. Arduino Leonardo (det är viktigt att använda Leonardo eftersom det kan efterlikna tangentbord)

2. ultraljudsavståndssensor HC-SR04

3. 2 x 10 K variabla motstånd

4. brödbräda, brödbrädetrådar

5. USB -kabel

6. OLED -skärm (https://www.adafruit.com/product/931)

Steg 2: Montering och uppladdning

Montering och uppladdning
Montering och uppladdning

Kontrollera först om du har alla nödvändiga komponenter och en Arduino IDE. Jag ska kort gå till anslutningsstegen, och du kan alltid ta en titt på den bifogade fritzschemat

hopsättning

1. Lägg Leonardo på brödbrädan och håll den på plats med ett gummiband

2. sätt de två variabla motstånden, OLED -displayen och ultraljudssensorn på brödbrädan

3. anslut jord och vcc

4. Anslut motståndens mittstift till arduino A0 och A1

5. anslut SDA och SCL på displayen till SDA och SCL märkt på Leonardo

6. Anslut ultraljudssensorns trigger och ekostift till Leonardos 12, 13 digitala stift

7. anslut USB till datorn

Ladda upp

Först och främst måste du ladda ner och installera de nödvändiga arduino -biblioteken:

1. GOFi2cOLED -bibliotek:

2. Ultrasonic-HC-SR04 bibliotek:

Om du inte vet hur du installerar arduino -bibliotek, kolla in den här självstudien.

När du har laddat ner och installerat biblioteken ovan kan du klona eller ladda ner mitt arduino -arkiv som finns här: https://github.com/danionescu0/arduino, så använder vi den här skissen: https://github.com/danionescu0 /arduino/träd/mästare …

Eller så kan du kopiera och klistra in koden nedan:

/ * * Bibliotek som används av detta projekt: * * 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;

Ultraljud ultraljud (12, 13);

const byte distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int actualDistance; osignerad lång 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 start"); } annat om (! shouldEnableLockTimer ()) {Serial.println ("låstimer inaktiverad"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Låsskärm"); } fördröjning (100); }

bool shouldLockScreen ()

{return lockTimerStarted && (millis () - maxDistanceDetectionTime) / 1000> getTimer (); }

bool shouldEnableLockTimer ()

{int allowDistance = percentMaxDistanceChangedAllowed / 100 * getDistance (); return getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> allowDistance; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Timer:", String (getTimer ())); setDisplayText (1, "ActualDistance:", String (actualDistance)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; String meddelande = ""; if (shouldLockScreen ()) {message = "lock sent"; } annars if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } annat {meddelande = "nej"; } setDisplayText (1, "Låsning:", meddelande); }

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; för (byte i = 0; i <10; i ++) {distanceSum+= ultrasonic. Ranging (CM); }

returavståndSum / 10;

}

int getDistance ()

{returkarta (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{returkarta (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("tryckning"); Keyboard.press (KEY_LEFT_CTRL); fördröjning (10); Keyboard.press (KEY_LEFT_ALT); fördröjning (10); Keyboard.write ('l'); fördröjning (10); Keyboard.releaseAll (); }

Slutligen anslut arduino datorn med usb -kabeln och ladda upp skissen till arduino.

Steg 3: Använda enheten

Använda enheten
Använda enheten

När arduino är ansluten till datorn kommer den kontinuerligt att övervaka avståndet framför sensorn och skicka en "lås" skärmtangentkombination till datorn om avståndet ökar.

Enheten har några konfigurationer:

1. Normalt avstånd, avståndet kan konfigureras med det variabla motståndet som är anslutet till A0. Avståndet visas också på OLED. När avståndet kommer att öka med 25% från den som är inställd börjar en nedräkning

2. Timeout (nedräkning). Tidsgränsen i sekunder kan också konfigureras från motståndet som är anslutet till A1. När tidsgränsen löper ut kommer låskommandot att skickas

3. Lås tangentkombination. Standardkombinationen för låsknappar är konfigurerad för att fungera för Ubuntu Linux 18 (CTRL+ALT+L). För att ändra kombinationen måste du ändra din skiss enligt ditt operativsystem:

4. Timeout och avståndsskydd. Eftersom det här är en enhet som emulerar tangentbordet är det en bra idé att ha en mekanism för att inaktivera tangentbordets funktionalitet. I min skiss har jag valt att timeout och avstånd måste vara större än "1". (du kan ändra det i koden om du vill)

Leta upp och ändra funktionen "lockScreen ()"

void lockScreen () {Serial.println ("trycker"); Keyboard.press (KEY_LEFT_CTRL); fördröjning (10); Keyboard.press (KEY_LEFT_ALT); fördröjning (10); Keyboard.write ('l'); fördröjning (10); Keyboard.releaseAll (); }

För en fullständig lista över arduino -specialnycklar, kolla här:

Steg 4: Andra tillvägagångssätt

Innan denna implementering har jag också övervägt några andra implementeringar:

1. Infraröd termometer (MLX90614 https://www.sparkfun.com/products/10740). En infraröd termometer är en enhet som mäter temperatur genom att analysera infraröda strålningar som avges av ett objekt på avstånd. Jag hade en som låg och jag tänkte att jag kanske kan upptäcka temperaturskillnaden framför datorn.

Jag har anslutit det, men temperaturskillnaden var väldigt liten (när jag var framför eller inte) 1-2 grader och jag trodde att det inte kunde vara så tillförlitligt

2. PIR -sensor. (https://www.sparkfun.com/products/13285) Dessa billiga sensorer marknadsförs som "rörelsesensorer" men de upptäcker verkligen förändringar i infraröd strålning så i teorin kan det fungera, när en person lämnar datorn skulle sensorn upptäcka att.. Även dessa sensorer har en inbyggd timeout och känslighetsknappar. Så jag har anslutit en och spelat med den men det verkar som om sensorn inte är gjord för ett nära håll (den har vidvinkel), den gav alla sorters falska varningar.

3. Ansiktsigenkänning med webbkameran. Det här alternativet verkade mycket intressant, eftersom jag lekte med detta datorfält i mina andra projekt som: https://github.com/danionescu0/robot-camera-platfo… och https://github.com/danionescu0/image-processing- pr…

Det här var en tårta! Men det fanns några nackdelar: den bärbara kameran kunde inte användas för andra ändamål när programmet kördes, och vissa datorresurser skulle krävas för det. Så jag har tappat denna idé också.

Om du har fler idéer om hur detta kan göras, vänligen dela dem, tack!

Rekommenderad: