Πίνακας περιεχομένων:

Σύστημα αυτόματου κλειδώματος υπολογιστή: 4 βήματα
Σύστημα αυτόματου κλειδώματος υπολογιστή: 4 βήματα

Βίντεο: Σύστημα αυτόματου κλειδώματος υπολογιστή: 4 βήματα

Βίντεο: Σύστημα αυτόματου κλειδώματος υπολογιστή: 4 βήματα
Βίντεο: Βρες το κλειδί ενεργοποίησης των Windows σου εύκολα! 2024, Νοέμβριος
Anonim
Image
Image
Συναρμολόγηση & Μεταφόρτωση
Συναρμολόγηση & Μεταφόρτωση

Σε αυτό το σεμινάριο θα διερευνήσουμε την ασφάλεια του κλειδώματος οθόνης του υπολογιστή. Τα λειτουργικά συστήματα έχουν ρυθμιζόμενο χρονικό όριο που θα κλειδώσει την οθόνη σας εάν ο χρήστης δεν έχει αγγίξει το ποντίκι ή το πληκτρολόγιο.

Συνήθως η προεπιλογή είναι περίπου ένα λεπτό. Εάν ακολουθήσετε αυτήν την προεπιλογή και αφήσετε τον υπολογιστή σας σε ένα πολυάσχολο περιβάλλον, κάποιος μπορεί να έχει πρόσβαση στον υπολογιστή σας εκείνο το λεπτό μέχρι να κλειδώσει η οθόνη. Αν το ρυθμίσετε σε λίγα δευτερόλεπτα, θα εμφανίζεται η οθόνη κλειδώματος πολύ συχνά όταν δεν αγγίζετε το πληκτρολόγιο και αυτό είναι ενοχλητικό…

Μια μέρα ένας συνάδελφος εργασίας με ρώτησε αν μπορώ να "διορθώσω" αυτό το ζήτημα με κάποιο είδος συσκευής που κλειδώνει τον υπολογιστή όταν δεν είναι εκεί και πήρα την πρόκληση:)

Έχω διερευνήσει αρκετές επιλογές στο μυαλό μου, όπως χρήση arduinos και αισθητήρα θερμόμετρου υπέρυθρης ακτινοβολίας, αισθητήρα PIR ή ίσως ανίχνευσης προσώπου στον υπολογιστή, αλλά έχω προσαρμοστεί σε μια απλούστερη μέθοδο:

Θα συνδυάσουμε τη λειτουργικότητα Arduino Leonardo HID (εξομοίωση πληκτρολογίου) με έναν υπερηχητικό αισθητήρα απόστασης για να ανιχνεύσουμε εάν κάποιος χρησιμοποιεί τον υπολογιστή, αν όχι η συσκευή θα στείλει έναν συνδυασμό πλήκτρων μέσω USB για να κλειδώσει τον υπολογιστή.

Βήμα 1: Στοιχεία

Επειδή αυτό είναι μια απόδειξη της ιδέας, θα χτίσουμε τη συσκευή σε ένα breadboard

Θα χρειαστείς:

1. Arduino Leonardo (είναι σημαντικό να χρησιμοποιήσετε το Leonardo γιατί μπορεί να μιμηθεί το πληκτρολόγιο)

2. Υπερηχητικός αισθητήρας απόστασης HC-SR04

3. Μεταβλητές αντιστάσεις 2 x 10 K

4. breadboard, σύρματα breadboard

5. Καλώδιο USB

6. Οθόνη OLED (https://www.adafruit.com/product/931)

Βήμα 2: Συναρμολόγηση και μεταφόρτωση

Συναρμολόγηση & Μεταφόρτωση
Συναρμολόγηση & Μεταφόρτωση

Αρχικά ελέγξτε αν έχετε όλα τα απαραίτητα εξαρτήματα και ένα Arduino IDE. Θα πάω εν συντομία στα βήματα σύνδεσης και μπορείτε πάντα να ρίξετε μια ματιά στο συνημμένο σχηματικό σχήμα

Συνέλευση

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. Βιβλιοθήκη υπερήχων-HC-SR04:

Εάν δεν ξέρετε πώς να εγκαταστήσετε βιβλιοθήκες arduino, δείτε αυτό το σεμινάριο.

Αφού κατεβάσετε και εγκαταστήσετε τις παραπάνω βιβλιοθήκες, μπορείτε να κάνετε κλωνοποίηση ή λήψη του αποθετηρίου arduino που βρίσκεται εδώ: https://github.com/danionescu0/arduino και θα χρησιμοποιήσουμε αυτό το σκίτσο: https://github.com/danionescu0 /arduino/tree/master…

Or μπορείτε να αντιγράψετε και να επικολλήσετε τον παρακάτω κώδικα:

/ * * Βιβλιοθήκες που χρησιμοποιούνται από αυτό το έργο: * * 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;

Υπερήχων υπερήχων (12, 13)?

const byte distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int actualDistance; ανυπόγραφη μεγάλη maxDistanceDetectionTime; bool lockTimerStarted = false;

void setup ()

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

κενός βρόχος ()

{clearDisplay (); actualDistance = getActualDistance (); writeStatusData (); doDisplay (); εάν (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("έναρξη χρονοδιακόπτη κλειδώματος"); } else if (! shouldEnableLockTimer ()) {Serial.println ("απενεργοποιήθηκε ο χρονοδιακόπτης κλειδώματος"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Κλείδωμα οθόνης"); } καθυστέρηση (100); }

bool shouldLockScreen ()

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

bool shouldEnableLockTimer ()

{int allowDistance = percentMaxDistanceChangedAllowed / 100 * getDistance (); επιστροφή getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> επιτρέπεταιDistance; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Timer:", String (getTimer ())); setDisplayText (1, "ActualDistance:", String (actualDistance)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; Συμβολοσειρά = ""; if (shouldLockScreen ()) {message = "lock lock sent"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } else {μήνυμα = "όχι"; } setDisplayText (1, "Κλείδωμα:", μήνυμα); }

void initializeDisplay ()

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

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

{GOFoled.setTextSize (fontSize); GOFoled.println (ετικέτα + ":" + δεδομένα); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int distanceSum = 0; για (byte i = 0; i <10; i ++) {distanceSum+= υπερηχητικός. Βαθμός (CM); }

απόσταση επιστροφήςSum / 10;

}

int getDistance ()

{επιστροφή χάρτη (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{επιστροφή χάρτη (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("πατώντας"); Keyboard.press (KEY_LEFT_CTRL); καθυστέρηση (10)? Keyboard.press (KEY_LEFT_ALT); καθυστέρηση (10)? Keyboard.write ('l'); καθυστέρηση (10)? Keyboard.releaseAll (); }

Τέλος, συνδέστε το arduino στον υπολογιστή χρησιμοποιώντας το καλώδιο usb και ανεβάστε το σκίτσο στο arduino.

Βήμα 3: Χρήση της συσκευής

Χρήση της Συσκευής
Χρήση της Συσκευής

Όταν το arduino είναι συνδεδεμένο με τον υπολογιστή, θα παρακολουθεί συνεχώς την απόσταση μπροστά από τον αισθητήρα και θα στέλνει έναν συνδυασμό πλήκτρων οθόνης "κλειδώματος" στον υπολογιστή εάν αυξηθεί η απόσταση.

Η συσκευή έχει ορισμένες διαμορφώσεις:

1. Κανονική απόσταση, η απόσταση μπορεί να ρυθμιστεί χρησιμοποιώντας τη μεταβλητή αντίσταση που είναι συνδεδεμένη στο A0. Η απόσταση εμφανίζεται επίσης στο OLED. Όταν η απόσταση αυξηθεί κατά 25% από αυτήν που έχει οριστεί, θα αρχίσει μια αντίστροφη μέτρηση

2. Timeout (αντίστροφη μέτρηση). Το χρονικό όριο σε δευτερόλεπτα μπορεί επίσης να διαμορφωθεί από την αντίσταση που είναι συνδεδεμένη στο Α1. Όταν λήξει το χρονικό όριο, θα αποσταλεί η εντολή κλειδώματος

3. Κλείδωμα συνδυασμού πλήκτρων. Ο προεπιλεγμένος συνδυασμός κλειδιών κλειδώματος έχει ρυθμιστεί ώστε να λειτουργεί για το Ubuntu Linux 18 (CTRL+ALT+L). Για να αλλάξετε τον συνδυασμό πρέπει να τροποποιήσετε το σκίτσο σας σύμφωνα με το λειτουργικό σας σύστημα:

4. Timeout και προστασία απόστασης. Επειδή πρόκειται για μια συσκευή που μιμείται το πληκτρολόγιο, είναι καλή ιδέα να έχετε έναν μηχανισμό απενεργοποίησης της λειτουργικότητας του πληκτρολογίου. Στο σκίτσο μου επέλεξα ότι το χρονικό όριο και η απόσταση πρέπει να είναι μεγαλύτερα από το "1". (μπορείτε να το τροποποιήσετε στον κώδικα αν θέλετε)

Εντοπίστε και αλλάξτε τη λειτουργία "lockScreen ()"

void lockScreen () {Serial.println ("πάτημα"); Keyboard.press (KEY_LEFT_CTRL); καθυστέρηση (10)? Keyboard.press (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. Ανίχνευση προσώπου με χρήση κάμερας web. Αυτή η επιλογή φάνηκε πολύ ενδιαφέρουσα, καθώς έπαιξα με αυτόν τον τομέα υπολογιστών σε άλλα έργα μου όπως: https://github.com/danionescu0/robot-camera-platfo… και https://github.com/danionescu0/image-processing- πρ…

Αυτό ήταν κομμάτι κέικ! Αλλά υπήρχαν κάποια μειονεκτήματα: η κάμερα του φορητού υπολογιστή δεν μπορούσε να χρησιμοποιηθεί για άλλους σκοπούς κατά την εκτέλεση του προγράμματος, και θα απαιτούνταν ορισμένοι πόροι υπολογιστών για αυτό. Άφησα λοιπόν κι αυτή την ιδέα.

Αν έχετε περισσότερες ιδέες για το πώς θα μπορούσε να γίνει αυτό, μοιραστείτε τις, ευχαριστώ!

Συνιστάται: