Mündəricat:

Avtomatik kilidləmə kompüter sistemi: 4 addım
Avtomatik kilidləmə kompüter sistemi: 4 addım

Video: Avtomatik kilidləmə kompüter sistemi: 4 addım

Video: Avtomatik kilidləmə kompüter sistemi: 4 addım
Video: İlham Əliyev Şamaxıda belə futbol oynadı #shorts 2024, Iyul
Anonim
Image
Image
Quraşdırma və Yükləmə
Quraşdırma və Yükləmə

Bu təlimatda kompüter ekran kilidinin təhlükəsizliyini araşdıracağıq. Əməliyyat sistemlərində istifadəçi siçana və ya klaviaturaya toxunmadığı təqdirdə ekranınızı kilidləyəcək konfiqurasiya edilə bilən bir fasilə var.

Varsayılan adətən bir dəqiqəyə yaxındır. Bu standarta əməl etsəniz və kompüterinizi sıx bir mühitdə tərk etsəniz, ekran kilidlənənə qədər kimsə kompüterinizə daxil ola bilər. Bir neçə saniyəyə təyin etsəniz, klaviaturaya toxunmadığınız zaman tez -tez kilid ekranı alacaqsınız və bu sizi narahat edir …

Bir gün bir iş yoldaşı məndən soruşdu ki, bu problemi kompüteri orada olmadıqda kilidləyən bir cihazla "həll edə bilərəmmi?"

Arduino və infraqırmızı termometr sensoru, PIR sensoru və ya bəlkə də kompüterdə üz tanıma istifadə etmək kimi başımda bir neçə variant araşdırdım, amma daha sadə bir üsula qərar verdim:

Arduino Leonardo HID funksiyasını (klaviaturanı təqlid etmək) ultrasəs məsafə sensoru ilə birləşdirərək bir insanın kompüterdən istifadə edib -etmədiyini aşkar edəcəyik, əks halda cihaz kompüteri bağlamaq üçün USB vasitəsilə düymələr kombinasiyasını göndərəcək.

Addım 1: Komponentlər

Bu, cihazı çörək taxtası üzərində quracağımız anlayışın bir sübutudur

Lazım olacaq:

1. Arduino Leonardo (Leonardodan istifadə etmək vacibdir, çünki klaviaturanı təqlid edə bilər)

2. HC-SR04 ultrasəs məsafə sensoru

3. 2 x 10 K dəyişən rezistorlar

4. çörək taxtası, çörək taxtası telləri

5. USB kabeli

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

Addım 2: Montaj və Yükləmə

Quraşdırma və Yükləmə
Quraşdırma və Yükləmə

Əvvəlcə bütün lazımi komponentlərin və Arduino IDE -nin olub olmadığını yoxlayın. Qısaca keçid addımlarına gedəcəyəm və hər zaman əlavə olunan qıvrım sxeminə nəzər sala bilərsiniz

Məclis

1. Leonardonu çörək taxtasına qoyun və rezin bantla yerində saxlayın

2. iki dəyişən rezistoru, OLED ekranı və ultrasəs sensorunu çörək taxtasına qoyun

3. sahələri və vcc -ləri birləşdirin

4. rezistorların orta sancaqlarını arduino A0 və A1 -ə qoşun

5. ekranın SDA və SCL -ni Leonardoda qeyd olunan SDA və SCL -ə qoşun

6. ultrasəs sensorunun tetikleyicisini və yankı pinini Leonardonun 12, 13 rəqəmsal pininə qoşun

7. USB -ni kompüterə qoşun

Yükləmək

Əvvəlcə lazımi arduino kitabxanalarını yükləməli və quraşdırmalısınız:

1. GOFi2cOLED kitabxanası:

2. Ultrasonik-HC-SR04 kitabxanası:

Arduino kitabxanalarını necə quracağınızı bilmirsinizsə, bu təlimatı oxuyun.

Yuxarıdakı kitabxanaları yüklədikdən və yüklədikdən sonra buradakı arduino depomu klonlaya və ya yükləyə bilərsiniz: https://github.com/danionescu0/arduino və bu eskizi istifadə edəcəyik: https://github.com/danionescu0 /arduino/ağac/usta…

Və ya aşağıdakı kodu kopyalayıb yapışdıra bilərsiniz:

/ * * Bu layihənin istifadə etdiyi kitabxanalar: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #"Wire.h" daxil et "GOFi2cOLED.h" daxil et "Ultrasonik.h" daxil et

GOFi2cOLED GOFoled;

Ultrasonik ultrasəs (12, 13);

const bayt məsafəsiPot = A0;

const bayt timerPot = A1; const float faizMaxDistanceChangedAllowed = 25; int actualDistance; işarəsiz uzun maxDistanceDetectionTime; bool lockTimerStarted = yalan;

boş quraşdırma ()

{Serial.begin (9600); Keyboard.begin (); başlatmaDisplay (); }

boşluq döngəsi ()

{clearDisplay (); actualDistance = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = milis (); Serial.println ("kilid taymeri başlayır"); } else if (! shouldEnableLockTimer ()) {Serial.println ("kilid taymeri əlil"); lockTimerStarted = yalan; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Ekran kilidi"); } gecikmə (100); }

bool shouldLockScreen ()

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

bool olmalıdırEnEnableLockTimer ()

{int icazə verilən məsafə = faizMaxDistanceChangedAllowed / 100 * getDistance (); getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> icazə verilən məsafə; }

yazmaqStatusData () boşdur

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "Taymer:", String (getTimer ())); setDisplayText (1, "AktualDistance:", String (actualDistance)); int countDown = getTimer () - (milis () - maxDistanceDetectionTime) / 1000; String mesajı = ""; if (shouldLockScreen ()) {message = "kilid göndərildi"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } başqa {mesaj = "yox"; } setDisplayText (1, "Kilidləmə:", mesaj); }

void initializeDisplay ()

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

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

{GOFoled.setTextSize (fontSize); GOFoled.println (etiket + ":" + məlumatlar); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int məsafəSum = 0; for (bayt i = 0; i <10; i ++) {distanceSum+= ultrasəs. Aralıq (CM); }

dönüş məsafəsiSum / 10;

}

int getDistance ()

{dönüş xəritəsi (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{dönüş xəritəsi (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("basaraq"); Keyboard.press (KEY_LEFT_CTRL); gecikmə (10); Keyboard.press (KEY_LEFT_ALT); gecikmə (10); Keyboard.write ('l'); gecikmə (10); Keyboard.releaseAll (); }

Nəhayət, usdu kabelindən istifadə edərək arduino kompüterini qoşun və eskizini arduinoya yükləyin.

Addım 3: Cihazdan istifadə

Cihazdan istifadə
Cihazdan istifadə

Arduino kompüterə qoşulduqda, sensorun qarşısındakı məsafəni davamlı olaraq izləyəcək və məsafə artarsa kompüterə "kilid" ekran düymələri kombinasiyasını göndərəcək.

Cihazın bəzi konfiqurasiyaları var:

1. Normal məsafə, məsafə A0 -a bağlı dəyişən müqavimət istifadə edərək konfiqurasiya edilə bilər. Məsafə OLED -də də göstərilir. Məsafə 25% artdıqda geri sayma başlayacaq

2. Zaman aşımı (geri sayma). A1 -ə qoşulan rezistordan saniyələrdəki fasilə də konfiqurasiya edilə bilər. Vaxt bitdikdə kilidləmə əmri göndəriləcək

3. Kilidi açar kombinasiyası. Varsayılan kilid düymələri birləşməsi Ubuntu Linux 18 (CTRL+ALT+L) üçün işləmək üçün qurulmuşdur. Kombinasiyanı dəyişdirmək üçün eskizinizi əməliyyat sisteminizə uyğun olaraq dəyişdirməlisiniz:

4. Zaman aşımı və məsafədən qorunma. Bu, klaviaturanı təqlid edən bir cihaz olduğundan, klaviatura funksiyalarını deaktiv etmək mexanizminin olması yaxşı olar. Eskizimdə zaman aşımı və məsafənin "1" dən daha böyük olmasını seçdim. (İstəsəniz bunu kodda dəyişə bilərsiniz)

"LockScreen ()" funksiyasını tapın və dəyişdirin

void lockScreen () {Serial.println ("basaraq"); Keyboard.press (KEY_LEFT_CTRL); gecikmə (10); Keyboard.press (KEY_LEFT_ALT); gecikmə (10); Keyboard.write ('l'); gecikmə (10); Keyboard.releaseAll (); }

Arduino xüsusi açarlarının tam siyahısı üçün bura baxın:

Addım 4: Digər yanaşmalar

Bu tətbiqdən əvvəl digər tətbiqləri də nəzərdən keçirdim:

1. İnfraqırmızı termometr (MLX90614 https://www.sparkfun.com/products/10740). İnfraqırmızı termometr, bir obyektin uzaqdan yaydığı infraqırmızı radiasiyanı analiz edərək temperaturu ölçən bir cihazdır. Ətrafımda yatan biri vardı və düşündüm ki, bəlkə də kompüterin qarşısında temperatur fərqini aşkar edə bilərəm.

Bağladım, amma temperatur fərqi çox kiçik idi (qabaqda olanda da yox idi) 1-2 dərəcə idi və düşünürdüm ki, bu qədər etibarlı ola bilməz

2. PIR sensoru. (https://www.sparkfun.com/products/13285) Bu ucuz sensorlar "hərəkət sensoru" olaraq satılır, lakin həqiqətən infraqırmızı radiasiyadakı dəyişiklikləri aşkar edirlər, buna görə də bir adam kompüteri tərk edəndə sensorun aşkar edə biləcəyi nəzəri olaraq işləyə bilər. ki.. Həmçinin bu sensorlar zaman aşımı və həssaslıq düymələrinə malikdir. Beləliklə, birini bağladım və onunla oynadım, amma görünür ki, sensor yaxın məsafədə deyil (geniş bir bucağa malikdir), hər cür yalan xəbərdarlıq verdi.

3. Veb kameradan istifadə edərək üz tanıma. Bu kompüter sahəsi ilə digər layihələrimdə oynadığım üçün bu seçim çox maraqlı görünürdü: https://github.com/danionescu0/robot-camera-platfo… və https://github.com/danionescu0/image-processing- pr…

Bu tort parçası idi! Ancaq bəzi çatışmazlıqlar var idi: proqram işləyərkən noutbuk kamerası başqa məqsədlər üçün istifadə edilə bilməzdi və bunun üçün bəzi kompüter qaynaqları tələb olunacaqdı. Buna görə də bu fikri tərk etdim.

Bunun necə edilə biləcəyinə dair daha çox fikriniz varsa, paylaşın, təşəkkürlər!

Tövsiyə: