Talaan ng mga Nilalaman:

Auto Lock Computer System: 4 na Hakbang
Auto Lock Computer System: 4 na Hakbang

Video: Auto Lock Computer System: 4 na Hakbang

Video: Auto Lock Computer System: 4 na Hakbang
Video: Как использовать динамическую блокировку Windows для автоматической блокировки компьютера 2024, Hulyo
Anonim
Image
Image
Assembly at Mag-upload
Assembly at Mag-upload

Sa tutorial na ito susuriin namin ang seguridad ng lock ng screen ng computer. Ang mga operating system ay may isang configure na timeout na magkakandado sa iyong screen kung hindi hinawakan ng gumagamit ang mouse o keyboard.

Karaniwan ang default ay sa paligid ng isang minuto. Kung susundin mo ang default na ito at iwanan ang iyong computer sa isang abalang kapaligiran maaaring may mag-access sa iyong computer sa minutong iyon hanggang sa mag-lock ang screen. Kung itinakda mo ito sa ilang segundo makakakuha ka ng lock screen nang madalas kapag hindi mo hinawakan ang keyboard at nakakainis iyon…

Isang araw tinanong ako ng isang kasamahan sa trabaho kung maaari kong "ayusin" ang isyung ito sa pamamagitan ng ilang uri ng aparato na nagla-lock ang computer kapag wala siya, at kinuha ko ang hamon:)

Natuklasan ko ang maraming mga pagpipilian sa aking ulo tulad ng paggamit ng arduinos at isang infrared thermometer sensor, PIR sensor o marahil gamit ang detection ng mukha sa computer, ngunit naayos ko ang isang mas simpleng pamamaraan:

Isasama namin ang pagpapaandar ng Arduino Leonardo HID (tularan ang keyboard) sa isang sensor ng distansya ng ultrasonic upang matukoy kung ang isang tao ay gumagamit ng computer, kung hindi ang aparato ay magpapadala ng isang pangunahing kumbinasyon sa pamamagitan ng USB upang i-lock ang computer.

Hakbang 1: Mga Bahagi

Sapagkat ito ay isang patunay ng konsepto na itatayo namin ang aparato sa isang breadboard

Kakailanganin mo:

1. Arduino Leonardo (mahalagang gamitin ang Leonardo dahil maaari itong gayahin ang keyboard)

2. HC-SR04 ultrasonic distansya sensor

3. 2 x 10 K variable na resistors

4. breadboard, mga wire ng tinapay

5. USB cable

6. OLED display (https://www.adafruit.com/product/931)

Hakbang 2: Assembly & Upload

Assembly at Mag-upload
Assembly at Mag-upload

Suriin muna kung mayroon ka ng lahat ng mga kinakailangang sangkap at isang Arduino IDE. Pupunta ako sa ilang sandali sa mga hakbang sa koneksyon, at palagi kang makakatingin sa naka-attach na eskematiko na fritzing

Assembly

1. Ilagay ang Leonardo sa breadboard at hawakan ito sa lugar gamit ang isang goma

2. ilagay ang dalawang variable resistors, ang OLED display at ang ultrasonic sensor sa breadboard

3. ikonekta ang mga bakuran at vcc's

4. ikonekta ang gitnang mga pin ng resistors sa arduino A0 at A1

5. ikonekta ang SDA at SCL ng display sa SDA at SCL na minarkahan sa Leonardo

6. ikonekta ang gatilyo at echo pin ng ultrasonic sensor sa 12, 13 digital pin ng Leonardo

7. ikonekta ang USB sa computer

I-upload

Una sa lahat kakailanganin mong mag-download at mag-install ng mga kinakailangang aklatan ng arduino:

1. GOFi2cOLED library:

2. Ultrasonic-HC-SR04 library:

Kung hindi mo alam kung paano mag-install ng mga arduino library tingnan ang tutorial na ito.

Matapos mong ma-download at mai-install ang mga aklatan sa itaas, maaari mong i-clone o i-download ang aking arduino repository na matatagpuan dito: https://github.com/danionescu0/arduino, at gagamitin namin ang sketch na ito: https://github.com/danionescu0 / arduino / tree / master…

O maaari mong kopyahin at i-paste ang code sa ibaba:

/ * * Mga aklatan na ginamit ng proyektong ito: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 * / # isama "Keyboard.h" # isama ang "Wire.h" # isama ang "GOFi2cOLED.h" # isama ang "Ultrasonic.h"

GOFi2cOLED GOFoled;

Ultrasonic ultrasonic (12, 13);

const byte distancePot = A0;

const byte timerPot = A1; Const float porsyentoMaxDistanceChangedAllowed = 25; int aktwal na Pag-agaw; unsigned mahabang maxDistanceDetectionTime; bool lockTimerStarted = false;

walang bisa ang pag-setup ()

{Serial.begin (9600); Keyboard.begin (); initializeDisplay (); }

walang bisa loop ()

{clearDisplay (); aktwal naDistansya = getActualDistance (); isulat angStatusData (); doDisplay (); kung (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("magsisimula ang lock timer"); } iba pa kung (! dapatEnableLockTimer ()) {Serial.println ("naka-disable ang lock timer"); lockTimerStarted = false; } kung (shouldLockScreen ()) {lockScreen (); Serial.println ("Lock screen"); } pagkaantala (100); }

bool dapatLockScreen ()

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

bool dapatEnableLockTimer ()

{int allowDistance = porsyentoMaxDistanceChangedAllowed / 100 * getDistance (); ibalik ang getTimer ()> 1 && getDistance ()> 1 && aktwal naDistansya - getDistance ()> pinapayagan ang Distansya; }

walang bisa magsulatStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Timer:", String (getTimer ())); setDisplayText (1, "Aktuwal na Pag-akay:", String (aktwal naDistansya)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; String message = ""; kung (shouldLockScreen ()) {message = "lock sent"; } iba pa kung (dapatEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } iba pa {message = "hindi"; } setDisplayText (1, "Locking:", mensahe); }

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); }

walang bisa doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

{GOFoled.clearDisplay (); GOFoled.setCursor (0, 0); }

int getActualDistance ()

{int distanceSum = 0; para sa (byte i = 0; i <10; i ++) {distanceSum + = ultrasonic. Ranging (CM); }

distansya ng pagbalikSum / 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 ("pagpindot"); Keyboard.press (KEY_LEFT_CTRL); antala (10); Keyboard.press (KEY_LEFT_ALT); antala (10); Keyboard.write ('l'); antala (10); Keyboard.releaseAll (); }

Sa wakas ikonekta ang arduino ang computer gamit ang usb cable, at i-upload ang sketch sa arduino.

Hakbang 3: Paggamit ng Device

Paggamit ng Device
Paggamit ng Device

Kapag ang arduino ay konektado sa computer ay patuloy na susubaybayan ang distansya sa harap ng sensor at magpapadala ng isang "lock" na key ng kumbinasyon ng screen sa computer kung tumaas ang distansya.

Ang aparato ay may ilang mga pagsasaayos:

1. Karaniwang distansya, ang distansya ay maaaring mai-configure gamit ang variable resistor na konektado sa A0. Ang distansya ay ipinapakita din sa OLED. Kapag ang distansya ay tataas ng 25% mula sa isa na itinakda ang isang countdown ay magsisimula

2. Pag-timeout (countdown). Ang timeout sa segundo ay mai-configure din mula sa risistor na konektado sa A1. Kapag nag-expire ang timeout ang lock command ay ipapadala

3. Kumbinasyon ng key key. Ang kombinasyon ng default na lock key ay naka-set up upang gumana para sa Ubuntu Linux 18 (CTRL + ALT + L). Upang baguhin ang kumbinasyon na kailangan mo upang baguhin ang iyong sketch ayon sa iyong operating system:

4. Pag-timeout at proteksyon sa distansya. Dahil ito ay isang aparato na tumutulad sa keyboard magandang ideya na magkaroon ng isang mekanismo ng pag-deactivate ng pagpapaandar ng keyboard. Sa aking sketch napili ko na ang timeout at distansya ay dapat na mas malaki pagkatapos ng "1". (maaari mong baguhin iyon sa code kung nais mo)

Hanapin at palitan ang function na "lockScreen ()"

void lockScreen () {Serial.println ("pagpindot"); Keyboard.press (KEY_LEFT_CTRL); antala (10); Keyboard.press (KEY_LEFT_ALT); antala (10); Keyboard.write ('l'); antala (10); Keyboard.releaseAll (); }

Para sa isang buong listahan ng mga espesyal na key ng arduino, mag-check dito:

Hakbang 4: Iba Pang Mga Papalapit

Bago ang pagpapatupad na ito ay isinasaalang-alang ko rin ang ilang iba pang mga pagpapatupad:

1. Infrared thermometer (MLX90614 https://www.sparkfun.com/products/10740). Ang isang infrared thermometer ay isang aparato na sumusukat sa temperatura sa pamamagitan ng pagsusuri ng infrared radiations na ibinuga ng isang bagay sa distansya. Mayroon akong isang nakahiga sa paligid at naisip ko na maaari kong makita ang pagkakaiba ng temperatura sa harap ng computer.

Na-hook up ko ito, ngunit ang pagkakaiba ng temperatura ay napakaliit (kapag nasa harap ako o hindi) 1-2 degree at naisip kong hindi ito masyadong maaasahan

2. sensor ng PIR. (https://www.sparkfun.com/products/13285) Ang murang sensor na ito ay ibinebenta bilang "mga sensor ng paggalaw" ngunit talagang nakakakita sila ng mga pagbabago sa infrared radiation kaya't sa teorya maaari itong gumana, kapag ang isang tao ay umalis sa computer ang sensor ay makakakita iyon.. Gayundin ang mga sensor na ito ay mayroong pagbuo ng mga timeout at sensitivity knobs. Kaya't na-hook ko ang isa at nilalaro ito ngunit tila ang sensor ay hindi ito ginawa para sa isang malapit na saklaw (mayroon itong isang malawak na anggulo), nagbigay ito ng lahat ng mga maling maling alerto.

3. Pagtuklas ng mukha gamit ang webcam. Ang pagpipiliang ito ay tila napaka-kagiliw-giliw, habang nilalaro ko ang larangan ng computer na ito sa aking iba pang mga proyekto tulad ng: https://github.com/danionescu0/robot-camera-platfo… at https://github.com/danionescu0/image-processing- pr…

Ito ay piraso ng cake! Ngunit may ilang mga drawbacks: ang laptop camera ay hindi maaaring magamit para sa iba pang mga layunin kapag ang programa ay tumatakbo, at ang ilang mga mapagkukunan ng computer ay kinakailangan para sa na. Kaya't naibagsak ko rin ang ideyang ito.

Kung mayroon kang higit pang mga ideya tungkol sa kung paano ito magagawa mangyaring ibahagi ang mga ito, salamat!

Inirerekumendang: