Mục lục:

Hệ thống máy tính tự động khóa: 4 bước
Hệ thống máy tính tự động khóa: 4 bước

Video: Hệ thống máy tính tự động khóa: 4 bước

Video: Hệ thống máy tính tự động khóa: 4 bước
Video: Cài đặt các ứng dụng TỰ ĐỘNG BẬT khi khởi động Máy Tính 2024, Tháng bảy
Anonim
Image
Image
Lắp ráp & tải lên
Lắp ráp & tải lên

Trong hướng dẫn này, chúng ta sẽ khám phá tính bảo mật của khóa màn hình máy tính. Hệ điều hành có thời gian chờ có thể định cấu hình sẽ khóa màn hình của bạn nếu người dùng chưa chạm vào chuột hoặc bàn phím.

Thông thường, mặc định là khoảng một phút. Nếu bạn làm theo mặc định này và để máy tính của mình trong môi trường bận rộn, ai đó có thể truy cập vào máy tính của bạn trong phút đó cho đến khi màn hình khóa. Nếu bạn đặt nó thành một vài giây, bạn sẽ nhận được màn hình khóa thường xuyên khi bạn không chạm vào bàn phím và điều đó thật khó chịu…

Một ngày nọ, một đồng nghiệp làm việc hỏi tôi liệu tôi có thể "khắc phục" vấn đề này bằng một loại thiết bị khóa máy tính khi anh ấy không ở đó không, và tôi đã thực hiện thử thách:)

Tôi đã khám phá một số tùy chọn trong đầu như sử dụng arduinos và cảm biến nhiệt kế hồng ngoại, cảm biến PIR hoặc có thể sử dụng nhận diện khuôn mặt trên máy tính, nhưng tôi đã chuyển sang một phương pháp đơn giản hơn:

Chúng tôi sẽ kết hợp chức năng Arduino Leonardo HID (giả lập bàn phím) với cảm biến khoảng cách siêu âm để phát hiện xem một người có đang sử dụng máy tính hay không, nếu không, thiết bị sẽ gửi tổ hợp phím qua USB để khóa máy tính.

Bước 1: Các thành phần

Bởi vì đây là bằng chứng về khái niệm, chúng tôi sẽ xây dựng thiết bị trên bảng mạch

Có thể bạn sẽ cần:

1. Arduino Leonardo (điều quan trọng là sử dụng Leonardo vì nó có thể mô phỏng bàn phím)

2. Cảm biến khoảng cách siêu âm HC-SR04

3. 2 x 10 K biến trở

4. breadboard, breadboard dây

5. Cáp USB

6. Màn hình OLED (https://www.adafruit.com/product/931)

Bước 2: Lắp ráp và tải lên

Lắp ráp & tải lên
Lắp ráp & tải lên

Trước tiên, hãy kiểm tra xem bạn có tất cả các thành phần cần thiết và một IDE Arduino hay không. Tôi sẽ đi sơ qua các bước kết nối và bạn luôn có thể xem sơ đồ kết nối

cuộc họp

1. Đặt Leonardo trên breadboard và giữ cố định bằng dây chun

2. đặt hai biến trở, màn hình OLED và cảm biến siêu âm trên bảng mạch

3. kết nối các căn cứ và vcc's

4. kết nối các chân giữa của điện trở với arduino A0 và A1

5. kết nối SDA và SCL của màn hình với SDA và SCL được đánh dấu trên Leonardo

6. kết nối chân kích hoạt và chân echo của cảm biến siêu âm với 12, 13 chân kỹ thuật số của Leonardo

7. kết nối USB với máy tính

Tải lên

Trước hết, bạn sẽ cần tải xuống và cài đặt các thư viện arduino cần thiết:

1. Thư viện GOFi2cOLED:

2. Thư viện Ultrasonic-HC-SR04:

Nếu bạn không biết cách cài đặt thư viện arduino, hãy xem hướng dẫn này.

Sau khi bạn đã tải xuống và cài đặt các thư viện ở trên, bạn có thể sao chép hoặc tải xuống kho lưu trữ arduino của tôi tại đây: https://github.com/danionescu0/arduino và chúng tôi sẽ sử dụng bản phác thảo này: https://github.com/danionescu0 / arduino / tree / master…

Hoặc bạn có thể sao chép và dán mã bên dưới:

/ * * Các thư viện được dự án này sử dụng: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 * / #include "Bàn phím.h" #include "Wire.h" #include "GOFi2cOLED.h" #include "Ultrasonic.h"

GOFi2cOLED GOFoled;

Siêu âm siêu âm (12, 13);

const byte distancePot = A0;

const byte timerPot = A1; const float phần trămMaxDistanceChangedAllowed = 25; int realDistance; unsigned long maxDistanceDetectionTime; bool lockTimerStarted = false;

void setup ()

{Serial.begin (9600); Bàn phím.begin (); khởi tạoDisplay (); }

void loop ()

{clearDisplay (); realDistance = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("bắt đầu hẹn giờ khóa"); } else if (! shouldEnableLockTimer ()) {Serial.println ("vô hiệu hóa bộ hẹn giờ khóa"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Màn hình khóa"); } delay (100); }

bool shouldLockScreen ()

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

bool shouldEnableLockTimer ()

{int allowDistance = phần trămMaxDistanceChangedAllowed / 100 * getDistance (); trả về getTimer ()> 1 && getDistance ()> 1 && realityDistance - getDistance ()> allowDistance; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Timer:", String (getTimer ())); setDisplayText (1, "ActualDistance:", String (realDistance)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; Chuỗi thông báo = ""; if (shouldLockScreen ()) {message = "khóa đã gửi"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } else {message = "không"; } setDisplayText (1, "Khóa:", tin nhắn); }

void khởi tạoDisplay ()

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

void setDisplayText (byte fontSize, String label, String data)

{GOFoled.setTextSize (fontSize); GOFoled.println (nhãn + ":" + dữ liệu); }

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

khoảng cách trả vềSum / 10;

}

int getDistance ()

{bản đồ trả về (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{bản đồ trả về (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("đang nhấn"); Keyboard.press (KEY_LEFT_CTRL); chậm trễ (10); Keyboard.press (KEY_LEFT_ALT); chậm trễ (10); Bàn phím.write ('l'); chậm trễ (10); Bàn phím.releaseAll (); }

Cuối cùng kết nối arduino với máy tính bằng cáp usb và tải bản phác thảo lên arduino.

Bước 3: Sử dụng thiết bị

Sử dụng thiết bị
Sử dụng thiết bị

Khi arduino được kết nối với máy tính, nó sẽ liên tục theo dõi khoảng cách phía trước cảm biến và gửi tổ hợp phím màn hình "khóa" đến máy tính nếu khoảng cách tăng lên.

Thiết bị có một số cấu hình:

1. Khoảng cách bình thường, khoảng cách có thể được cấu hình bằng cách sử dụng biến trở kết nối với A0. Khoảng cách cũng được hiển thị trên OLED. Khi khoảng cách sẽ tăng lên 25% so với khoảng cách được đặt thì sẽ bắt đầu đếm ngược

2. Hết giờ (đếm ngược). Thời gian chờ tính bằng giây cũng có thể được cấu hình từ điện trở kết nối với A1. Khi hết thời gian chờ lệnh khóa sẽ được gửi

3. Tổ hợp phím khóa. Tổ hợp phím khóa mặc định được thiết lập để hoạt động cho Ubuntu Linux 18 (CTRL + ALT + L). Để thay đổi sự kết hợp, bạn cần sửa đổi bản phác thảo của mình theo hệ thống hoạt động của bạn:

4. Thời gian chờ và bảo vệ khoảng cách. Vì đây là một thiết bị mô phỏng bàn phím nên bạn nên có cơ chế tắt chức năng bàn phím. Trong bản phác thảo của tôi, tôi đã chọn rằng thời gian chờ và khoảng cách phải lớn hơn "1". (bạn có thể sửa đổi điều đó trong mã nếu bạn muốn)

Định vị và thay đổi chức năng "lockScreen ()"

void lockScreen () {Serial.println ("đang nhấn"); Keyboard.press (KEY_LEFT_CTRL); chậm trễ (10); Keyboard.press (KEY_LEFT_ALT); chậm trễ (10); Bàn phím.write ('l'); chậm trễ (10); Bàn phím.releaseAll (); }

Để có danh sách đầy đủ các khóa đặc biệt của arduino, hãy xem tại đây:

Bước 4: Các cách tiếp cận khác

Trước khi triển khai này, tôi cũng đã xem xét một số triển khai khác:

1. Nhiệt kế hồng ngoại (MLX90614 https://www.sparkfun.com/products/10740). Nhiệt kế hồng ngoại là một thiết bị đo nhiệt độ bằng cách phân tích bức xạ hồng ngoại do một vật thể phát ra ở khoảng cách xa. Tôi đã có một con nằm xung quanh và tôi nghĩ có thể tôi có thể phát hiện ra sự khác biệt về nhiệt độ trước máy tính.

Tôi đã kết nối nó, nhưng sự chênh lệch nhiệt độ rất nhỏ (khi tôi ở phía trước hoặc không) 1-2 độ và tôi nghĩ rằng nó không thể đáng tin cậy như vậy

2. Cảm biến PIR. (https://www.sparkfun.com/products/13285) Cảm biến giá rẻ này được bán trên thị trường là "cảm biến chuyển động" nhưng chúng thực sự phát hiện những thay đổi trong bức xạ hồng ngoại nên về lý thuyết, nó có thể hoạt động, khi một người rời khỏi máy tính, cảm biến sẽ phát hiện điều đó.. Ngoài ra, các cảm biến này có một nút bấm thời gian chờ và độ nhạy. Vì vậy, tôi đã nối một cái và chơi với nó nhưng có vẻ như cảm biến của nó không được tạo ra cho phạm vi gần (nó có góc rộng), nó đã đưa ra tất cả các loại cảnh báo sai.

3. Nhận diện khuôn mặt bằng webcam. Tùy chọn này có vẻ rất thú vị, vì tôi đã chơi với lĩnh vực máy tính này trong các dự án khác của mình như: https://github.com/danionescu0/robot-camera-platfo… và https://github.com/danionescu0/image-processing- pr…

Đây là một miếng bánh! Nhưng có một số hạn chế: máy ảnh máy tính xách tay không thể được sử dụng cho các mục đích khác khi chương trình đang chạy và một số tài nguyên máy tính sẽ được yêu cầu cho việc đó. Vì vậy, tôi cũng đã bỏ ý tưởng này.

Nếu bạn có thêm ý tưởng về cách điều này có thể được thực hiện, xin vui lòng chia sẻ chúng, cảm ơn!

Đề xuất: