İçindekiler:

Otomatik Kilit Bilgisayar Sistemi: 4 Adım
Otomatik Kilit Bilgisayar Sistemi: 4 Adım

Video: Otomatik Kilit Bilgisayar Sistemi: 4 Adım

Video: Otomatik Kilit Bilgisayar Sistemi: 4 Adım
Video: Bilgisayar kullanan herkesin bilmesi gereken kısayol #shorts 2024, Temmuz
Anonim
Image
Image
Montaj ve Yükleme
Montaj ve Yükleme

Bu eğitimde, bilgisayar ekran kilidinin güvenliğini keşfedeceğiz. İşletim sistemleri, kullanıcı fareye veya klavyeye dokunmadıysa ekranınızı kilitleyecek yapılandırılabilir bir zaman aşımına sahiptir.

Genellikle varsayılan değer yaklaşık bir dakikadır. Bu varsayılanı izler ve bilgisayarınızı yoğun bir ortamda bırakırsanız, ekran kilitlenene kadar o dakika içinde birileri bilgisayarınıza erişebilir. Birkaç saniyeye ayarlarsanız, klavyeye dokunmadığınızda çok sık kilit ekranı alırsınız ve bu can sıkıcı bir durum…

Bir gün bir iş arkadaşım, o yokken bilgisayarı kilitleyen bir tür aygıtla bu sorunu "düzeltebilir miyim" diye sordu ve ben de bu zorluğu üstlendim:)

Arduino ve kızılötesi termometre sensörü, PIR sensörü veya belki bilgisayarda yüz algılama kullanmak gibi birkaç seçeneği kafamda araştırdım, ancak daha basit bir yönteme karar verdim:

Bir kişinin bilgisayarı kullanıp kullanmadığını algılamak için Arduino Leonardo HID işlevselliğini (klavyeyi öykünme) bir ultrasonik mesafe sensörü ile birleştireceğiz, değilse cihaz bilgisayarı kilitlemek için USB üzerinden bir tuş kombinasyonu gönderecektir.

Adım 1: Bileşenler

Bu bir kavram kanıtı olduğu için cihazı bir breadboard üzerine kuracağız.

İhtiyacın olacak:

1. Arduino Leonardo (klavyeyi taklit edebildiği için Leonardo kullanmak önemlidir)

2. HC-SR04 ultrasonik mesafe sensörü

3. 2 x 10 K değişken direnç

4. breadboard, breadboard telleri

5. USB kablosu

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

2. Adım: Montaj ve Yükleme

Montaj ve Yükleme
Montaj ve Yükleme

Öncelikle gerekli tüm bileşenlere ve bir Arduino IDE'ye sahip olup olmadığınızı kontrol edin. Ben kısaca bağlantı adımlarına geçeceğim ve her zaman ekteki fritzing şemasına göz atabilirsiniz.

toplantı

1. Leonardo'yu devre tahtasına koyun ve bir lastik bantla yerinde tutun

2. iki değişken direnci, OLED ekranı ve ultrasonik sensörü devre tahtasına yerleştirin

3. toprakları ve vcc'leri bağlayın

4. Dirençlerin orta pinlerini arduino A0 ve A1'e bağlayın

5. Ekranın SDA ve SCL'sini Leonardo'da işaretli SDA ve SCL'ye bağlayın

6. Ultrasonik sensörün tetik ve yankı pimini Leonardo'nun 12, 13 dijital pimine bağlayın

7. USB'yi bilgisayara bağlayın

Yüklemek

Öncelikle gerekli arduino kitaplıklarını indirip kurmanız gerekecek:

1. GOFi2cOLED kitaplığı:

2. Ultrasonic-HC-SR04 kütüphanesi:

Arduino kitaplıklarının nasıl kurulacağını bilmiyorsanız bu eğitime göz atın.

Yukarıdaki kütüphaneleri indirip kurduktan sonra, burada bulunan arduino depomu klonlayabilir veya indirebilirsiniz: https://github.com/danionescu0/arduino, biz de şu taslağı kullanacağız: https://github.com/danionescu0 /arduino/ağaç/usta…

Veya aşağıdaki kodu kopyalayıp yapıştırabilirsiniz:

/* * Bu proje tarafından kullanılan kitaplıklar: * * 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 bayt mesafePot = A0;

const bayt timerPot = A1; const float yüzdeMaxDistanceChangedAllowed = 25; int gerçek Uzaklık; imzasız uzun maxDistanceDetectionTime; bool lockTimerStarted = yanlış;

geçersiz kurulum()

{ Serial.başlangıç(9600); klavye.başla(); initializeDisplay(); }

boşluk döngüsü()

{ clearDisplay(); realDistance = getActualDistance(); writeStatusData(); doDisplay(); if (!lockTimerStarted && shouldEnableLockTimer()) { lockTimerStarted = true; maxDistanceDetectionTime = millis(); Serial.println("kilit zamanlayıcı başlangıcı"); } else if (!shouldEnableLockTimer()){ Serial.println("kilit zamanlayıcı devre dışı"); lockTimerStarted = yanlış; } if (shouldLockScreen()) { lockScreen(); Serial.println("Kilit ekranı"); } gecikme(100); }

bool olmalıdırLockScreen()

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

bool mustEnableLockTimer()

{ int allowDistance = yüzdeMaxDistanceChangedAllowed / 100 * getDistance(); return getTimer() > 1 && getDistance() > 1 && factDistance - getDistance() > allowDistance; }

geçersiz writeStatusData()

{ setDisplayText(1, "MinDistance:", String(getDistance())); setDisplayText(1, "Zamanlayıcı:", String(getTimer())); setDisplayText(1, "Gerçek Mesafe:", String(gerçekMesafe)); int countDown = getTimer() - (millis() - maxDistanceDetectionTime) / 1000; Dize mesajı = ""; if (shouldLockScreen()) { mesaj = "kilit gönderildi"; } else if (shouldEnableLockTimer() && countDown >= 0) { message = ".." + String(countDown); } başka { mesaj = "hayır"; } setDisplayText(1, "Kilitleme: ", mesaj); }

void initializeDisplay()

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

void setDisplayText(byte fontSize, String etiketi, String verileri)

{ GOFoled.setTextSize(fontSize); GOFoled.println(etiket + ":" + veri); }

geçersiz doDisplay()

{ GOFoled.display(); }

void clearDisplay()

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

int getActualMesafe()

{ int uzaklıkSum = 0; for (byte i=0;i<10;i++) { DistanceSum += ultrasonic. Ranging(CM); }

dönüş mesafesiToplam / 10;

}

int getDistance()

{ dönüş haritası(analogRead(timerPot), 0, 1024, 0, 200); }

int getTimer()

{ dönüş haritası(analogRead(distancePot), 0, 1024, 0, 20); }

void lockScreen()

{ Serial.println("basma"); Keyboard.press(KEY_LEFT_CTRL); gecikme(10); Keyboard.press(KEY_LEFT_ALT); gecikme(10); klavye.write('l'); gecikme(10); Keyboard.releaseAll(); }

Son olarak usb kablosunu kullanarak arduinoyu bilgisayara bağlayın ve çizimi arduinoya yükleyin.

3. Adım: Cihazı Kullanma

Cihazı Kullanma
Cihazı Kullanma

Arduino bilgisayara bağlandığında sensörün önündeki mesafeyi sürekli olarak izleyecek ve mesafe artarsa bilgisayara "kilit" ekran tuş kombinasyonu gönderecektir.

Cihazın bazı konfigürasyonları vardır:

1. Normal mesafe, mesafe, A0'a bağlı değişken direnç kullanılarak yapılandırılabilir. Mesafe ayrıca OLED'de görüntülenir. Mesafe ayarlanandan %25 arttığında geri sayım başlayacaktır.

2. Zaman aşımı (geri sayım). Saniye cinsinden zaman aşımı, A1'e bağlı dirençten de yapılandırılabilir. Zaman aşımı süresi dolduğunda kilit komutu gönderilir

3. Tuş kombinasyonunu kilitleyin. Varsayılan kilit tuşu kombinasyonu, Ubuntu Linux 18 (CTRL+ALT+L) için çalışacak şekilde ayarlanmıştır. Kombinasyonu değiştirmek için çiziminizi işletim sisteminize göre değiştirmeniz gerekir:

4. Zaman aşımı ve mesafe koruması. Bu, klavyeyi taklit eden bir aygıt olduğundan, klavye işlevini devre dışı bırakan bir mekanizmaya sahip olmak iyi bir fikirdir. Çizimimde zaman aşımı ve mesafenin "1" den büyük olması gerektiğini seçtim. (isterseniz bunu kodda değiştirebilirsiniz)

"lockScreen()" işlevini bulun ve değiştirin

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

Arduino özel anahtarlarının tam listesi için burayı kontrol edin:

4. Adım: Diğer Yaklaşımlar

Bu uygulamadan önce başka uygulamaları da düşündüm:

1. Kızılötesi termometre (MLX90614 https://www.sparkfun.com/products/10740). Kızılötesi termometre, uzaktaki bir nesne tarafından yayılan kızılötesi radyasyonları analiz ederek sıcaklığı ölçen bir cihazdır. Etrafta bir tane vardı ve belki bilgisayarın önünde sıcaklık farkını tespit edebilirim diye düşündüm.

Bağladım ama sıcaklık farkı çok küçüktü (öndeyken veya değilken) 1-2 derece ve bu kadar güvenilir olamayacağını düşündüm.

2. PIR sensörü. (https://www.sparkfun.com/products/13285) Bu ucuz sensörler "hareket sensörleri" olarak pazarlanmaktadır, ancak kızılötesi radyasyondaki değişiklikleri gerçekten tespit ederler, bu nedenle teorik olarak işe yarayabilir, bir kişi bilgisayardan ayrıldığında sensör algılar yani.. Ayrıca bu sensörlerde zaman aşımı ve hassasiyet düğmeleri bulunur. Bu yüzden bir tane bağladım ve onunla oynadım ama görünüşe göre sensör yakın bir mesafe için yapılmamış (geniş bir açıya sahip), her türlü yanlış uyarıyı verdi.

3. Web kamerasını kullanarak yüz algılama. Diğer projelerimde bu bilgisayar alanıyla oynadığım için bu seçenek çok ilginç görünüyordu: https://github.com/danionescu0/robot-camera-platfo… ve https://github.com/danionescu0/image-processing- pr…

Bu çocuk oyuncağıydı! Ancak bazı dezavantajlar vardı: Program çalışırken dizüstü bilgisayar kamerası başka amaçlar için kullanılamıyordu ve bunun için bazı bilgisayar kaynakları gerekliydi. Bu yüzden ben de bu fikirden vazgeçtim.

Bunun nasıl yapılabileceği hakkında daha fazla fikriniz varsa lütfen paylaşın, teşekkürler!

Önerilen: