สารบัญ:

ระบบล็อคคอมพิวเตอร์อัตโนมัติ: 4 ขั้นตอน
ระบบล็อคคอมพิวเตอร์อัตโนมัติ: 4 ขั้นตอน

วีดีโอ: ระบบล็อคคอมพิวเตอร์อัตโนมัติ: 4 ขั้นตอน

วีดีโอ: ระบบล็อคคอมพิวเตอร์อัตโนมัติ: 4 ขั้นตอน
วีดีโอ: วิธีการตั้งให้ล็อคหน้าจอ/รหัสผ่านคอมพิวเตอร์อัตโนมัติเวลาไม่ใช้งาน 2024, พฤศจิกายน
Anonim
Image
Image
ประกอบ & อัพโหลด
ประกอบ & อัพโหลด

ในบทช่วยสอนนี้ เราจะสำรวจความปลอดภัยของการล็อกหน้าจอคอมพิวเตอร์ ระบบปฏิบัติการมีระยะหมดเวลาที่สามารถกำหนดค่าได้ซึ่งจะล็อกหน้าจอของคุณหากผู้ใช้ไม่ได้แตะเมาส์หรือแป้นพิมพ์

โดยปกติค่าเริ่มต้นจะอยู่ที่ประมาณหนึ่งนาที หากคุณปฏิบัติตามค่าเริ่มต้นนี้และปล่อยให้คอมพิวเตอร์ของคุณอยู่ในสภาพแวดล้อมที่ไม่ว่าง อาจมีผู้อื่นเข้าถึงคอมพิวเตอร์ของคุณในนาทีนั้นจนกว่าหน้าจอจะล็อก หากคุณตั้งค่าเป็นเวลาสองสามวินาที คุณจะได้หน้าจอล็อกบ่อยมากเมื่อคุณไม่ได้แตะแป้นพิมพ์และนั่นก็น่ารำคาญ…

วันหนึ่งเพื่อนร่วมงานถามฉันว่าฉันสามารถ "แก้ไข" ปัญหานี้ด้วยอุปกรณ์บางประเภทที่ล็อกคอมพิวเตอร์เมื่อเขาไม่อยู่ได้หรือไม่ และฉันก็ได้ท้าทาย:)

ฉันได้สำรวจตัวเลือกหลายอย่างในหัวของฉันแล้ว เช่น การใช้ Arduinos และเซ็นเซอร์วัดอุณหภูมิอินฟราเรด เซ็นเซอร์ PIR หรืออาจใช้การตรวจจับใบหน้าบนคอมพิวเตอร์ แต่ฉันได้ใช้วิธีที่ง่ายกว่านี้แล้ว:

เราจะรวมฟังก์ชัน Arduino Leonardo HID (เลียนแบบแป้นพิมพ์) กับเซ็นเซอร์ระยะอัลตราโซนิกเพื่อตรวจจับว่ามีคนกำลังใช้คอมพิวเตอร์อยู่หรือไม่ ถ้าไม่ใช่อุปกรณ์จะส่งคีย์ผสมผ่าน USB เพื่อล็อคคอมพิวเตอร์

ขั้นตอนที่ 1: ส่วนประกอบ

เพราะนี่คือข้อพิสูจน์ของแนวคิด เราจะสร้างอุปกรณ์บนเขียงหั่นขนม

คุณจะต้องการ:

1. Arduino Leonardo (ต้องใช้ Leonardo เพราะเลียนแบบคีย์บอร์ดได้)

2. HC-SR04 เซ็นเซอร์ระยะอัลตราโซนิก

3. ตัวต้านทานปรับค่าได้ 2 x 10 K

4. เขียงหั่นขนม, สายเขียงหั่นขนม

5. สาย USB

6. จอแสดงผล OLED (https://www.adafruit.com/product/931)

ขั้นตอนที่ 2: ประกอบและอัปโหลด

ประกอบ & อัพโหลด
ประกอบ & อัพโหลด

ก่อนอื่นให้ตรวจสอบว่าคุณมีส่วนประกอบที่จำเป็นทั้งหมดและ Arduino IDE หรือไม่ ฉันจะไปที่ขั้นตอนการเชื่อมต่อสั้น ๆ และคุณสามารถดูแผนผัง fritzing ที่แนบมาได้เสมอ

การประกอบ

1. วาง Leonardo ไว้บนเขียงหั่นขนมและยึดไว้กับยางรัด

2. ใส่ตัวต้านทานตัวแปรสองตัว จอแสดงผล OLED และเซ็นเซอร์อัลตราโซนิกบนเขียงหั่นขนม

3. เชื่อมต่อกราวด์และ vcc's

4. เชื่อมต่อหมุดตรงกลางของตัวต้านทานกับ Arduino A0 และ A1

5. เชื่อมต่อ SDA และ SCL ของจอแสดงผลกับ SDA และ SCL ที่ทำเครื่องหมายไว้ที่ Leonardo

6. เชื่อมต่อทริกเกอร์และหมุดสะท้อนของเซ็นเซอร์อัลตราโซนิกกับหมุดดิจิทัล 12, 13 ตัวของ Leonardo

7. เชื่อมต่อ USB เข้ากับคอมพิวเตอร์

ที่อัพโหลด

ก่อนอื่น คุณจะต้องดาวน์โหลดและติดตั้งไลบรารี Arduino ที่จำเป็น:

1. ห้องสมุด GOFi2cOLED:

2. Ultrasonic-HC-SR04 ห้องสมุด:

หากคุณไม่ทราบวิธีการติดตั้งไลบรารี่ Arduino ลองดูบทช่วยสอนนี้

หลังจากที่คุณดาวน์โหลดและติดตั้งไลบรารีด้านบนแล้ว คุณสามารถโคลนหรือดาวน์โหลดที่เก็บ Arduino ของฉันได้ที่นี่: https://github.com/danionescu0/arduino และเราจะใช้แบบร่างนี้: https://github.com/danionescu0 /arduino/tree/master…

หรือคุณสามารถคัดลอกและวางรหัสด้านล่าง:

/* * ไลบรารีที่ใช้โดยโครงการนี้: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */ #include "Keyboard.h" #รวม "Wire.h" #รวม "GOFi2cOLED.h" #รวม "Ultrasonic.h"

GOFi2cOLED GOFoled;

อัลตราโซนิกอัลตราโซนิก (12, 13);

const ไบต์ distancePot = A0;

const ไบต์ timerPot = A1; const float เปอร์เซ็นต์MaxDistanceChangedAllowed = 25; int จริงระยะทาง; maxDistanceDetectionTime แบบยาวที่ไม่ได้ลงชื่อ bool lockTimerStarted = false;

การตั้งค่าเป็นโมฆะ ()

{ Serial.begin(9600); แป้นพิมพ์.begin(); initializeDisplay(); }

วงเป็นโมฆะ ()

{ clearDisplay(); realDistance = getActualDistance(); writeStatusData(); doDisplay(); ถ้า (!lockTimerStarted && ควรEnableLockTimer ()) { lockTimerStarted = true; maxDistanceDetectionTime = มิลลิวินาที (); Serial.println("ตัวจับเวลาการล็อกเริ่มต้น"); } else if (!shouldEnableLockTimer()){ Serial.println("lock timer disabled"); lockTimerStarted = เท็จ; } ถ้า (shouldLockScreen()) { lockScreen(); Serial.println ("หน้าจอล็อก"); } ล่าช้า (100); }

บูลควรLockScreen()

{ กลับ lockTimerStarted && (มิลลิวินาที () - maxDistanceDetectionTime) / 1000 > getTimer (); }

บูลควรEnableLockTimer()

{ int allowedDistance = เปอร์เซ็นต์MaxDistanceChangedAllowed / 100 * getDistance (); ส่งคืน getTimer() > 1 && getDistance() > 1 && actualDistance - getDistance() > allowedDistance; }

เป็นโมฆะ writeStatusData()

{ setDisplayText (1, "MinDistance:", สตริง (getDistance ())); setDisplayText(1, "ตัวจับเวลา:", สตริง (getTimer())); setDisplayText(1, "ActualDistance:", สตริง (actualDistance)); int นับถอยหลัง = getTimer() - (มิลลิวินาที () - maxDistanceDetectionTime) / 1000; ข้อความสตริง = ""; ถ้า (shouldLockScreen ()) { ข้อความ = "ส่งล็อคแล้ว"; } อื่น ๆ ถ้า (shouldEnableLockTimer() && นับถอยหลัง >= 0) { ข้อความ = ".." + สตริง (นับถอยหลัง); } อื่น ๆ { ข้อความ = "ไม่"; } setDisplayText(1, "กำลังล็อก:", ข้อความ); }

เป็นโมฆะ initializeDisplay()

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

เป็นโมฆะ setDisplayText (ขนาดฟอนต์ไบต์, ป้ายกำกับสตริง, ข้อมูลสตริง)

{ GOFoled.setTextSize (ขนาดฟอนต์); GOFoled.println(ป้ายกำกับ + ":" + ข้อมูล); }

เป็นโมฆะ doDisplay()

{ GOFoled.display(); }

เป็นโมฆะ clearDisplay()

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

int getActualDistance()

{ ระยะทาง intSum = 0; สำหรับ (ไบต์ i=0;i<10;i++) { distanceSum += ultrasonic. Ranging(CM); }

ระยะทางกลับSum / 10;

}

int getDistance()

{ แผนที่ส่งคืน (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer()

{ แผนที่ส่งคืน (analogRead (distancePot), 0, 1024, 0, 20); }

เป็นโมฆะ lockScreen()

{ Serial.println ("กำลังกด"); แป้นพิมพ์กด (KEY_LEFT_CTRL); ล่าช้า(10); แป้นพิมพ์กด (KEY_LEFT_ALT); ล่าช้า(10); Keyboard.write('l'); ล่าช้า(10); Keyboard.releaseAll(); }

ในที่สุดเชื่อมต่อ Arduino กับคอมพิวเตอร์โดยใช้สาย USB และอัปโหลดภาพร่างไปยัง Arduino

ขั้นตอนที่ 3: การใช้อุปกรณ์

การใช้เครื่อง
การใช้เครื่อง

เมื่อเชื่อมต่อ Arduino กับคอมพิวเตอร์ มันจะตรวจสอบระยะห่างด้านหน้าเซ็นเซอร์อย่างต่อเนื่อง และส่งคีย์ผสมหน้าจอ "ล็อค" ไปยังคอมพิวเตอร์หากระยะทางเพิ่มขึ้น

อุปกรณ์มีการกำหนดค่าบางอย่าง:

1. ระยะทางปกติ ระยะทางสามารถกำหนดค่าได้โดยใช้ตัวต้านทานผันแปรที่เชื่อมต่อกับ A0 ระยะทางจะแสดงบน OLED ด้วย เมื่อระยะทางเพิ่มขึ้น 25% จากที่ตั้งไว้ การนับถอยหลังจะเริ่มขึ้น

2. หมดเวลา (นับถอยหลัง) ระยะหมดเวลาเป็นวินาทีสามารถกำหนดค่าได้จากตัวต้านทานที่เชื่อมต่อกับ A1 เมื่อหมดเวลา คำสั่งล็อคจะถูกส่ง

3. ล็อคคีย์ผสม ชุดคีย์ล็อคเริ่มต้นถูกตั้งค่าให้ใช้งานได้กับ Ubuntu Linux 18 (CTRL+ALT+L) ในการเปลี่ยนชุดค่าผสม คุณต้องแก้ไขภาพร่างตามระบบปฏิบัติการของคุณ:

4. การป้องกันระยะหมดเวลาและระยะทาง เนื่องจากเป็นอุปกรณ์ที่เลียนแบบแป้นพิมพ์ จึงควรมีกลไกในการปิดใช้งานฟังก์ชันแป้นพิมพ์ ในภาพร่างของฉัน ฉันเลือกว่าระยะหมดเวลาและระยะทางต้องมากกว่า "1" (คุณสามารถแก้ไขสิ่งนั้นในรหัสได้หากต้องการ)

ค้นหาและเปลี่ยนฟังก์ชัน "lockScreen()"

เป็นโมฆะ lockScreen () { Serial.println ("กำลังกด"); แป้นพิมพ์กด (KEY_LEFT_CTRL); ล่าช้า(10); แป้นพิมพ์กด (KEY_LEFT_ALT); ล่าช้า(10); Keyboard.write('l'); ล่าช้า(10); Keyboard.releaseAll(); }

สำหรับรายการคีย์พิเศษของ Arduino ทั้งหมด ตรวจสอบที่นี่:

ขั้นตอนที่ 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- โปร…

นี่คือชิ้นส่วนของเค้ก! แต่มีข้อเสียอยู่บ้าง: กล้องแล็ปท็อปไม่สามารถใช้เพื่อวัตถุประสงค์อื่นได้ในขณะที่โปรแกรมกำลังทำงาน และจำเป็นต้องใช้ทรัพยากรคอมพิวเตอร์บางส่วนเพื่อการนั้น ฉันก็เลยทิ้งความคิดนี้ไปด้วย

หากคุณมีแนวคิดเพิ่มเติมเกี่ยวกับวิธีการทำเช่นนี้ โปรดแบ่งปัน ขอบคุณ!

แนะนำ: