Isi kandungan:

Sistem Komputer Kunci Auto: 4 Langkah
Sistem Komputer Kunci Auto: 4 Langkah

Video: Sistem Komputer Kunci Auto: 4 Langkah

Video: Sistem Komputer Kunci Auto: 4 Langkah
Video: Tutorial Belajar Komputer dari Nol, Fungsi Tombol Keyboard Komputer yang jarang diketahui 2024, Julai
Anonim
Image
Image
Perhimpunan & Muat Naik
Perhimpunan & Muat Naik

Dalam tutorial ini kita akan meneroka keselamatan kunci skrin komputer. Sistem operasi mempunyai batas waktu yang dapat dikonfigurasi yang akan mengunci skrin anda jika pengguna belum menyentuh tetikus atau papan kekunci.

Biasanya lalai adalah sekitar satu minit. Sekiranya anda mengikuti lalai ini dan membiarkan komputer anda dalam persekitaran sibuk seseorang mungkin mengakses komputer anda pada saat itu sehingga skrin terkunci. Sekiranya anda menetapkannya untuk beberapa saat, anda akan mendapat skrin kunci dengan kerap apabila anda tidak menyentuh papan kekunci dan itu menjengkelkan…

Suatu hari rakan kerja bertanya kepada saya jika saya dapat "menyelesaikan" masalah ini dengan beberapa jenis peranti yang mengunci komputer semasa dia tidak berada di sana, dan saya menyahut cabaran:)

Saya telah meneroka beberapa pilihan di kepala saya seperti menggunakan arduino dan sensor termometer inframerah, sensor PIR atau mungkin menggunakan pengesanan wajah di komputer, tetapi saya telah menggunakan kaedah yang lebih mudah:

Kami akan menggabungkan fungsi Arduino Leonardo HID (keyboard emulate) dengan sensor jarak ultrasonik untuk mengesan jika seseorang menggunakan komputer, jika tidak, peranti akan menghantar kombinasi kunci melalui USB untuk mengunci komputer.

Langkah 1: Komponen

Kerana ini adalah bukti konsep kita akan membina peranti di papan roti

Anda memerlukan:

1. Arduino Leonardo (penting untuk menggunakan Leonardo kerana dapat meniru papan kekunci)

2. Sensor jarak ultrasonik HC-SR04

3. Perintang pemboleh ubah 2 x 10 K

4. papan roti, wayar papan roti

5. Kabel USB

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

Langkah 2: Perhimpunan & Muat Naik

Perhimpunan & Muat Naik
Perhimpunan & Muat Naik

Periksa terlebih dahulu jika anda mempunyai semua komponen yang diperlukan dan Arduino IDE. Saya akan pergi ke langkah-langkah sambungan secara ringkas, dan anda selalu dapat melihat skema fritzing yang dilampirkan

perhimpunan

1. Letakkan Leonardo di papan roti dan pegang di tempatnya dengan gelang getah

2. letakkan dua perintang berubah-ubah, paparan OLED dan sensor ultrasonik di papan roti

3. sambungkan tanah dan vcc

4. sambungkan pin tengah perintang ke arduino A0 dan A1

5. sambungkan SDA dan SCL paparan ke SDA dan SCL yang bertanda di Leonardo

6. sambungkan pin pemicu dan echo sensor ultrasonik ke 12, 13 pin digital Leonardo

7. sambungkan USB ke komputer

Muat naik

Pertama sekali, anda perlu memuat turun dan memasang perpustakaan arduino yang diperlukan:

1. Perpustakaan GOFi2cOLED:

2. Perpustakaan ultrasonik-HC-SR04:

Sekiranya anda tidak tahu cara memasang perpustakaan arduino, lihat tutorial ini.

Selepas anda memuat turun dan memasang perpustakaan di atas, anda boleh mengklon atau memuat turun repositori arduino saya yang terdapat di sini: https://github.com/danionescu0/arduino, dan kami akan menggunakan lakaran ini: https://github.com/danionescu0 / arduino / pokok / tuan…

Atau anda boleh menyalin dan menampal kod di bawah:

/ * * Perpustakaan yang digunakan oleh projek ini: * * 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;

Ultrasonik ultrasonik (12, 13);

const byte jarakPot = A0;

const byte timerPot = A1; const float peratusMaxDistanceChangedAllowed = 25; int sebenarnya Jarak; maxDistanceDetectionTime max unsigned; bool lockTimerStarted = false;

persediaan tidak sah ()

{Serial.begin (9600); Papan kekunci.begin (); inisialisasiDisplay (); }

gelung kosong ()

{clearDisplay (); sebenarDistance = getActualDistance (); tulisStatusData (); doDisplay (); jika (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("kunci pemasa bermula"); } lain jika (! shouldEnableLockTimer ()) {Serial.println ("kunci pemasa dilumpuhkan"); lockTimerStarted = false; } jika (harusLockScreen ()) {lockScreen (); Serial.println ("Skrin kunci"); } kelewatan (100); }

bool harusLockScreen ()

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

bool harusEnableLockTimer ()

{int allowDistance = peratusMaxDistanceChangedAllowed / 100 * getDistance (); kembali getTimer ()> 1 && getDistance ()> 1 && sebenarDistance - getDistance ()> dibenarkanDistance; }

batal tulisStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Pemasa:", Rentetan (getTimer ())); setDisplayText (1, "ActualDistance:", String (sebenarDistance)); int countDown = getTimer () - (milis () - maxDistanceDetectionTime) / 1000; Mesej rentetan = ""; if (shouldLockScreen ()) {message = "kunci dihantar"; } lain jika (harusEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } lain {message = "tidak"; } setDisplayText (1, "Mengunci:", mesej); }

batal inisialisasi Paparan ()

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

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

{GOFoled.setTextSize (fontSize); GOFoled.println (label + ":" + data); }

batal doDisplay ()

{GOFoled.display (); }

kosongkan Paparan ()

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

int getActualDistance ()

{int jarakSum = 0; untuk (byte i = 0; i <10; i ++) {distanceSum + = ultrasonik. Ranging (CM); }

jarak balikSum / 10;

}

int getDistance ()

{peta kembali (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{peta kembali (analogRead (jarakPot), 0, 1024, 0, 20); }

kunci kosong Skrin ()

{Serial.println ("menekan"); Papan kekunci.press (KEY_LEFT_CTRL); kelewatan (10); Papan kekunci.press (KEY_LEFT_ALT); kelewatan (10); Keyboard.write ('l'); kelewatan (10); Papan Kekunci.releaseAll (); }

Akhirnya sambungkan komputer arduino menggunakan kabel usb, dan muat naik lakaran ke arduino.

Langkah 3: Menggunakan Peranti

Menggunakan Peranti
Menggunakan Peranti

Apabila arduino disambungkan ke komputer, ia akan terus memantau jarak di depan sensor dan menghantar kombinasi kunci skrin "kunci" ke komputer jika jarak meningkat.

Peranti mempunyai beberapa konfigurasi:

1. Jarak normal, jarak dapat dikonfigurasikan dengan menggunakan perintang pemboleh ubah yang dihubungkan ke A0. Jaraknya juga dipaparkan di OLED. Apabila jarak akan meningkat dengan 25% dari jarak yang ditetapkan, undur akan bermula

2. Waktu tamat (undur). Timeout dalam beberapa saat juga boleh dikonfigurasi dari perintang yang disambungkan ke A1. Apabila tamat masa tamat arahan kunci akan dihantar

3. Gabungan kunci kunci. Gabungan kunci kunci lalai disediakan untuk berfungsi untuk Ubuntu Linux 18 (CTRL + ALT + L). Untuk mengubah kombinasi anda perlu mengubah lakaran anda mengikut sistem operasi anda:

4. Perlindungan masa dan jarak. Kerana ini adalah peranti yang meniru papan kekunci, ada baiknya mempunyai mekanisme untuk mematikan fungsi papan kekunci. Dalam lakaran saya, saya telah memilih bahawa masa dan jarak mesti lebih besar daripada "1". (anda boleh mengubahnya dalam kod jika anda mahu)

Cari dan ubah fungsi "lockScreen ()"

void lockScreen () {Serial.println ("menekan"); Papan kekunci.press (KEY_LEFT_CTRL); kelewatan (10); Papan kekunci.press (KEY_LEFT_ALT); kelewatan (10); Keyboard.write ('l'); kelewatan (10); Papan Kekunci.releaseAll (); }

Untuk senarai penuh kunci khas arduino, lihat di sini:

Langkah 4: Pendekatan Lain

Sebelum pelaksanaan ini, saya telah mempertimbangkan beberapa pelaksanaan lain:

1. Termometer inframerah (MLX90614 https://www.sparkfun.com/products/10740). Termometer inframerah adalah alat yang mengukur suhu dengan menganalisis radiasi inframerah yang dipancarkan oleh objek pada jarak jauh. Saya ada yang terbaring dan saya fikir mungkin saya dapat mengesan perbezaan suhu di depan komputer.

Saya mengaitkannya, tetapi perbezaan suhu sangat kecil (ketika saya berada di depan atau tidak) 1-2 darjah dan saya fikir ia tidak boleh dipercayai

2. PIR sensor. (https://www.sparkfun.com/products/13285) Sensor murah ini dipasarkan sebagai "sensor gerakan" tetapi mereka benar-benar mengesan perubahan radiasi inframerah sehingga secara teori ia dapat berfungsi, ketika seseorang meninggalkan komputer, sensor akan mengesan itu.. Juga sensor ini mempunyai kenalan masa tamat dan kepekaan. Oleh itu, saya menyambungkannya dan bermain dengannya tetapi nampaknya sensor itu tidak dibuat untuk jarak dekat (ia mempunyai sudut lebar), ia memberi semua jenis amaran palsu.

3. Pengesanan wajah menggunakan kamera web. Pilihan ini kelihatan sangat menarik, kerana saya bermain dengan bidang komputer ini dalam projek lain seperti: https://github.com/danionescu0/robot-camera-platfo… dan https://github.com/danionescu0/image-processing- pr …

Ini adalah sekeping kek! Tetapi ada beberapa kekurangan: kamera komputer riba tidak dapat digunakan untuk tujuan lain ketika program berjalan, dan beberapa sumber komputer diperlukan untuk itu. Oleh itu, saya juga menjatuhkan idea ini.

Sekiranya anda mempunyai lebih banyak idea mengenai bagaimana ini dapat dilakukan, sila kongsikannya, terima kasih!

Disyorkan: