Spisu treści:

System automatycznej blokady komputera: 4 kroki
System automatycznej blokady komputera: 4 kroki

Wideo: System automatycznej blokady komputera: 4 kroki

Wideo: System automatycznej blokady komputera: 4 kroki
Wideo: НЕ ВЗДУМАЙ снимать аккумулятор с машины. Делай это ПРАВИЛЬНО ! 2024, Listopad
Anonim
Image
Image
Montaż i przesyłanie
Montaż i przesyłanie

W tym samouczku zamierzamy zbadać bezpieczeństwo blokady ekranu komputera. Systemy operacyjne mają konfigurowalny limit czasu, który blokuje ekran, jeśli użytkownik nie dotknął myszy lub klawiatury.

Zwykle wartość domyślna wynosi około jednej minuty. Jeśli zastosujesz się do tego ustawienia domyślnego i pozostawisz komputer w ruchliwym środowisku, ktoś może uzyskać dostęp do Twojego komputera w tej chwili, dopóki ekran się nie zablokuje. Jeśli ustawisz go na kilka sekund, ekran blokady pojawi się bardzo często, gdy nie dotykasz klawiatury, a to jest denerwujące…

Pewnego dnia kolega z pracy zapytał mnie, czy mogę "naprawić" ten problem za pomocą jakiegoś urządzenia, które blokuje komputer, gdy go nie ma, i podjąłem wyzwanie:)

Zbadałem kilka opcji w mojej głowie, takich jak używanie arduino i czujnika termometru na podczerwień, czujnika PIR lub może używanie wykrywania twarzy na komputerze, ale zdecydowałem się na prostszą metodę:

Połączymy funkcjonalność Arduino Leonardo HID (emulacja klawiatury) z ultradźwiękowym czujnikiem odległości, aby wykryć, czy dana osoba korzysta z komputera, jeśli nie, urządzenie wyśle kombinację klawiszy przez USB, aby zablokować komputer.

Krok 1: Komponenty

Ponieważ jest to dowód koncepcji, zbudujemy urządzenie na płytce stykowej

Będziesz potrzebował:

1. Arduino Leonardo (ważne, aby używać Leonardo, ponieważ może emulować klawiaturę)

2. Ultradźwiękowy czujnik odległości HC-SR04

3. Rezystory zmienne 2 x 10 K

4. płytka stykowa, przewody płytki stykowej

5. Kabel USB

6. Wyświetlacz OLED (https://www.adafruit.com/product/931)

Krok 2: Montaż i przesyłanie

Montaż i przesyłanie
Montaż i przesyłanie

Najpierw sprawdź, czy masz wszystkie potrzebne komponenty i Arduino IDE. Pokrótce przejdę do etapów łączenia i zawsze możesz rzucić okiem na załączony schemat fritzowania

montaż

1. Połóż Leonardo na płytce stykowej i przymocuj gumką

2. umieść dwa zmienne rezystory, wyświetlacz OLED i czujnik ultradźwiękowy na płytce stykowej;

3. połącz masy i vcc

4. podłącz środkowe piny rezystorów do arduino A0 i A1

5. podłącz SDA i SCL wyświetlacza do SDA i SCL oznaczonego na Leonardo

6. podłącz spust i pin echa czujnika ultradźwiękowego do 12, 13 cyfrowych pinów Leonardo;

7. podłącz USB do komputera

Wgrywać

Przede wszystkim musisz pobrać i zainstalować niezbędne biblioteki arduino:

1. Biblioteka GOFi2cOLED:

2. Biblioteka Ultrasonic-HC-SR04:

Jeśli nie wiesz, jak zainstalować biblioteki arduino, zapoznaj się z tym samouczkiem.

Po pobraniu i zainstalowaniu powyższych bibliotek możesz sklonować lub pobrać moje repozytorium arduino znajdujące się tutaj: https://github.com/danionescu0/arduino, a my użyjemy tego szkicu: https://github.com/danionescu0 /arduino/drzewo/master…

Możesz też skopiować i wkleić poniższy kod:

/* * Biblioteki używane przez ten projekt: * * 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;

Ultradźwiękowy ultradźwiękowy(12, 13);

const byte distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int rzeczywistaOdległość; unsigned long maxDistanceDetectionTime; bool lockTimerStarted = false;

pusta konfiguracja()

{ Szeregowy.początek(9600); Klawiatura.początek(); zainicjowaćWyświetlanie(); }

pusta pętla()

{ wyczyśćWyświetlacz(); rzeczywistaOdległość = pobierzAktualnąOdległość(); writeStatusData(); doWyświetl(); if (!lockTimerStarted && powinienEnableLockTimer()) { lockTimerStarted = true; maxDistanceDetectionTime = mili(); Serial.println("rozpoczęcie zegara blokady"); } else if (!shouldEnableLockTimer()){ Serial.println("timer blokady wyłączony"); lockTimerStarted = false; } if (shouldLockScreen()) { lockScreen(); Serial.println("Ekran blokady"); } opóźnienie(100); }

bool powinien LockScreen()

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

bool powinienEnableLockTimer()

{ int allowDistance = percentMaxDistanceChangedAllowed / 100 * getDistance(); return getTimer() > 1 && getDistance() > 1 && currentDistance - getDistance() > allowDistance; }

void zapiszStatusData()

{ setDisplayText(1, "MinDistance:", String(getDistance())); setDisplayText(1, "Zegar:", String(getTimer())); setDisplayText(1, "RzeczywistaOdległość:", String(RzeczywistaOdległość)); int odliczanie = getTimer() - (millis() - maxDistanceDetectionTime) / 1000; Wiadomość ciąg = ""; if (shouldLockScreen()) { komunikat = "blokada wysłana"; } else if (shouldEnableLockTimer() && countDown >= 0) { message = ".." + String(countDown); } else { wiadomość = "nie"; } setDisplayText(1, "Blokowanie: ", wiadomość); }

void zainicjowaćWyświetlanie()

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

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

{ GOFoled.setTextSize(fontSize); GOFoled.println(etykieta + ":" + dane); }

nieważne wyświetlaj()

{ GOFoled.display(); }

nieważne wyczyśćWyświetlacz()

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

int pobierz rzeczywistą odległość()

{ int suma odległości = 0; for (bajt i=0;i<10;i++) { Suma odległości += ultradźwięki. Zakres (CM); }

odległość powrotuSuma / 10;

}

int pobierzOdległość()

{ return map(analogRead(timerPot), 0, 1024, 0, 200); }

int pobierzZegar()

{ return map(analogRead(distancePot), 0, 1024, 0, 20); }

nieważny ekran blokady()

{ Serial.println("naciśnięcie"); Keyboard.press(KEY_LEFT_CTRL); opóźnienie(10); Keyboard.press(KEY_LEFT_ALT); opóźnienie(10); Klawiatura.zapis('l'); opóźnienie(10); Keyboard.releaseAll(); }

Na koniec podłącz arduino do komputera za pomocą kabla usb i prześlij szkic do arduino.

Krok 3: Korzystanie z urządzenia

Korzystanie z urządzenia
Korzystanie z urządzenia

Gdy arduino jest podłączony do komputera, będzie stale monitorować odległość przed czujnikiem i wysyłać kombinację klawiszy ekranu blokady do komputera, jeśli odległość wzrośnie.

Urządzenie ma kilka konfiguracji:

1. Odległość normalna, odległość można skonfigurować za pomocą rezystora zmiennego podłączonego do A0. Odległość jest również wyświetlana na OLED. Gdy odległość wzrośnie o 25% od ustawionej odległości, rozpocznie się odliczanie

2. Limit czasu (odliczanie). Limit czasu w sekundach jest również konfigurowalny z rezystora podłączonego do A1. Po upływie limitu czasu polecenie blokady zostanie wysłane

3. Zablokuj kombinację klawiszy. Domyślna kombinacja klawiszy blokady jest skonfigurowana do pracy w systemie Ubuntu Linux 18 (CTRL + ALT + L). Aby zmienić kombinację, musisz zmodyfikować swój szkic zgodnie z systemem operacyjnym:

4. Limit czasu i ochrona odległości. Ponieważ jest to urządzenie emulujące klawiaturę, dobrym pomysłem jest posiadanie mechanizmu dezaktywacji funkcjonalności klawiatury. W moim szkicu wybrałem, że limit czasu i odległość muszą być większe niż „1”. (możesz to zmodyfikować w kodzie, jeśli chcesz)

Znajdź i zmień funkcję "lockScreen()"

void lockScreen(){ Serial.println("naciśnięcie"); Keyboard.press(KEY_LEFT_CTRL); opóźnienie(10); Keyboard.press(KEY_LEFT_ALT); opóźnienie(10); Klawiatura.zapis('l'); opóźnienie(10); Keyboard.releaseAll(); }

Pełną listę kluczy specjalnych arduino można znaleźć tutaj:

Krok 4: Inne podejścia

Przed tą implementacją rozważałem też kilka innych implementacji:

1. Termometr na podczerwień (MLX90614 https://www.sparkfun.com/products/10740). Termometr na podczerwień to urządzenie, które mierzy temperaturę, analizując promieniowanie podczerwone emitowane przez oddalony obiekt. Miałem jeden leżący i pomyślałem, że może uda mi się wykryć różnicę temperatur przed komputerem.

Podłączyłem go, ale różnica temperatur była bardzo mała (kiedy byłem z przodu, czy nie) 1-2 stopnie i myślałem, że to nie może być tak niezawodne

2. Czujnik PIR. (https://www.sparkfun.com/products/13285) Te tanie czujniki są reklamowane jako „czujniki ruchu”, ale naprawdę wykrywają zmiany w promieniowaniu podczerwonym, więc teoretycznie może działać, gdy ktoś odejdzie od komputera, czujnik wykryje to.. Również te czujniki mają wbudowane pokrętła timeout i czułości. Podłączyłem więc jeden i bawiłem się nim, ale wygląda na to, że czujnik nie jest przeznaczony do bliskiego zasięgu (ma szeroki kąt), daje wszelkiego rodzaju fałszywe alarmy.

3. Wykrywanie twarzy za pomocą kamery internetowej. Ta opcja wydawała się bardzo interesująca, ponieważ bawiłem się tym polem komputerowym w moich innych projektach, takich jak: https://github.com/danionescu0/robot-camera-platfo… i https://github.com/danionescu0/image-processing- pr…

To była bułka z masłem! Ale były też pewne wady: kamera laptopa nie mogła być używana do innych celów, gdy program był uruchomiony, a do tego potrzebne byłyby pewne zasoby komputera. Więc ja też porzuciłem ten pomysł.

Jeśli masz więcej pomysłów na to, jak można to zrobić, podziel się nimi, dzięki!

Zalecana: