Mundarija:

Avtomatik qulflash tizimi: 4 qadam
Avtomatik qulflash tizimi: 4 qadam

Video: Avtomatik qulflash tizimi: 4 qadam

Video: Avtomatik qulflash tizimi: 4 qadam
Video: Автомат Кир Мошинани Ишлатишни Ўрганамиз Барча Сирлари Билан 2024, Iyul
Anonim
Image
Image
O'rnatish va yuklash
O'rnatish va yuklash

Ushbu qo'llanmada biz kompyuter ekranini qulflash xavfsizligini o'rganamiz. Operatsion tizimlar sozlanishi tanaffusga ega, agar foydalanuvchi sichqoncha yoki klaviaturaga tegmagan bo'lsa, ekran qulflanadi.

Odatda standart qiymat bir daqiqaga yaqin. Agar siz ushbu standartga amal qilsangiz va kompyuteringizni band bo'lmagan joyda qoldirsangiz, ekran qulflanmaguncha kimdir sizning kompyuteringizga kirishi mumkin. Agar siz uni bir necha soniya qilib qo'ysangiz, klaviaturaga tegmaganingizda qulflangan ekran tez -tez paydo bo'ladi.

Bir kuni ishdagi hamkasbim mendan bu muammoni, agar u yo'q bo'lganda, kompyuterni qulflaydigan biron bir qurilma yordamida "hal qila olsam bo'ladimi" deb so'radi va men bu vazifani bajardim:)

Men boshimda arduino va infraqizil termometr sensori, PIR sensori yoki kompyuterda yuzni aniqlash kabi bir nechta variantlarni kashf qildim, lekin men oddiyroq usulni tanladim:

Biz Arduino Leonardo HID funksiyasini (klaviaturani taqlid qilish) ultratovushli masofa sensori bilan birlashtiramiz, agar odam kompyuterdan foydalanayotganligini aniqlasa, aks holda qurilma kompyuterni qulflash uchun USB orqali tugmalar birikmasini yuboradi.

1 -qadam: komponentlar

Chunki bu biz qurilmani non taxtasida quramiz degan tushunchaning isboti

Sizga kerak bo'ladi:

1. Arduino Leonardo (Leonardodan foydalanish muhim, chunki u klaviaturani taqlid qila oladi)

2. HC-SR04 ultratovushli masofa sensori

3. 2 x 10 K o'zgaruvchan rezistorlar

4. non taxtasi, non paneli simlari

5. USB kabeli

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

2 -qadam: o'rnatish va yuklash

O'rnatish va yuklash
O'rnatish va yuklash

Birinchidan, barcha kerakli komponentlar va Arduino IDE mavjudligini tekshiring. Men qisqa vaqt ichida ulanish bosqichlariga o'tmoqchiman va siz har doim biriktirilgan fritzing sxemasini ko'rib chiqishingiz mumkin

O'rnatish

1. Leonardoni non taxtasiga qo'ying va uni rezina bant bilan mahkamlang

2. ikkita o'zgaruvchan rezistorni, OLED displeyini va ultrasonik sensorni taxtaga qo'ying

3. maydonchalar va vcclarni ulang

4. rezistorlarning o'rta pimlarini arduino A0 va A1 ga ulang

5. displeyning SDA va SCL -ni Leonardoda belgilangan SDA va SCL -ga ulang

6. ultratovush sensori tetik va aks -pinini Leonardoning 12, 13 raqamli piniga ulang

7. USB -ni kompyuterga ulang

Yuklab olish

Avval siz kerakli arduino kutubxonalarini yuklab olishingiz va o'rnatishingiz kerak bo'ladi:

1. GOFi2cOLED kutubxonasi:

2. Ultrasonik-HC-SR04 kutubxonasi:

Agar siz arduino kutubxonalarini qanday o'rnatishni bilmasangiz, ushbu qo'llanmani ko'rib chiqing.

Yuqoridagi kutubxonalarni yuklaganingizdan va o'rnatganingizdan so'ng, bu erdagi mening arduino omborini klonlashingiz yoki yuklab olishingiz mumkin: https://github.com/danionescu0/arduino va biz bu eskizdan foydalanamiz: https://github.com/danionescu0 /arduino/daraxt/usta …

Yoki quyidagi kodni nusxalash va joylashtirish mumkin:

/ * * Ushbu loyihada ishlatiladigan kutubxonalar: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonik-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #"Wire.h" ni qo'shish #"GOFi2cOLED.h" ni qo'shish #"Ultrasonik.h" ni kiritish

GOFi2cOLED GOFoled;

Ultrasonik ultratovush (12, 13);

const bayt masofasiPot = A0;

const bayt timerPot = A1; const float foizMaxDistanceChangedAllowed = 25; int actualDistance; imzosiz uzoq maxDistanceDetectionTime; bool lockTimerStarted = noto'g'ri;

bo'sh o'rnatish ()

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

bo'sh halqa ()

{clearDisplay (); haqiqiyDistance = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("qulf taymeri boshlanadi"); } if if (! shouldEnableLockTimer ()) {Serial.println ("qulf taymeri o'chirilgan"); lockTimerStarted = noto'g'ri; } if (mustLockScreen ()) {lockScreen (); Serial.println ("Ekranni qulflash"); } kechikish (100); }

boL shouldLockScreen ()

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

bool kerakEnableLockTimer ()

{int ruxsat berilgan masofa = foizMaxDistanceChangedAllowed / 100 * getDistance (); getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> ruxsat etilgan masofa; }

yozishni bekor qilishStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ()))); setDisplayText (1, "Taymer:", String (getTimer ())); setDisplayText (1, "Haqiqiy masofa:", String (haqiqiy masofa)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; String xabari = ""; if (shouldLockScreen ()) {message = "qulf yuborildi"; } if if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } boshqa {xabar = "yo'q"; } setDisplayText (1, "Qulflash:", xabar); }

void initializeDisplay ()

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

void setDisplayText (bayt fontSize, String yorlig'i, String ma'lumotlari)

{GOFoled.setTextSize (fontSize); GOFoled.println (yorliq + ":" + ma'lumotlar); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int masofasiSum = 0; uchun (bayt i = 0; i <10; i ++) {masofaSum+= ultratovushli. Rangli (CM); }

qaytish masofasiSum / 10;

}

int getDistance ()

{qaytish xaritasi (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{qaytish xaritasi (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("bosish"); Keyboard.press (KEY_LEFT_CTRL); kechikish (10); Keyboard.press (KEY_LEFT_ALT); kechikish (10); Keyboard.write ('l'); kechikish (10); Keyboard.releaseAll (); }

Nihoyat, usdu kabeli yordamida kompyuterni arduino -ga ulang va eskizini arduino -ga yuklang.

3 -qadam: Qurilmadan foydalanish

Qurilmadan foydalanish
Qurilmadan foydalanish

Arduino kompyuterga ulanganda, u sensor oldidagi masofani doimiy ravishda kuzatib boradi va agar masofa oshsa, kompyuterga "qulflangan" ekranli tugmalar birikmasini yuboradi.

Qurilmaning bir nechta konfiguratsiyasi mavjud:

1. Oddiy masofa, masofani A0 ga ulangan o'zgaruvchan qarshilik yordamida sozlash mumkin. OLEDda masofa ham ko'rsatiladi. Qachonki masofa 25% ga oshsa, ortga hisoblash boshlanadi

2. Vaqt tugashi (hisoblash). A1 ga ulangan rezistordan ham soniyalarda kutish mumkin. Vaqt tugashi bilan blokirovka buyrug'i yuboriladi

3. Qulf tugmalar birikmasi. Standart qulflash tugmachalari kombinatsiyasi Ubuntu Linux 18 (CTRL+ALT+L) uchun ishlaydi. Kombinatsiyani o'zgartirish uchun siz eskizni operatsion tizimingizga muvofiq o'zgartirishingiz kerak:

4. Vaqt va masofadan himoyalanish. Bu klaviaturani taqlid qiladigan qurilma bo'lgani uchun klaviatura funksiyasini o'chirish mexanizmiga ega bo'lish maqsadga muvofiqdir. Eskizimda men tanladimki, tanaffus va masofa "1" dan katta bo'lishi kerak. (agar xohlasangiz, buni kodda o'zgartirishingiz mumkin)

"LockScreen ()" funktsiyasini toping va o'zgartiring

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

Arduino maxsus kalitlarining to'liq ro'yxati uchun bu erga qarang:

4 -qadam: Boshqa yondashuvlar

Ushbu dasturdan oldin men boshqa ilovalarni ham ko'rib chiqdim:

1. Infraqizil termometr (MLX90614 https://www.sparkfun.com/products/10740). Infraqizil termometr - bu ob'ektni masofadan chiqaradigan infraqizil nurlanishini tahlil qilish orqali haroratni o'lchaydigan qurilma. Men yotardim va men kompyuter oldida harorat farqini aniqlay olaman deb o'yladim.

Men uni bog'ladim, lekin harorat farqi juda kichik edi (men oldimda bo'lganimda yoki bo'lmaganimda) 1-2 daraja va menimcha, bu unchalik ishonchli bo'lmaydi

2. PIR sensori. (https://www.sparkfun.com/products/13285) Bu arzon sensorlar "harakat sensori" sifatida sotiladi, lekin ular haqiqatan ham infraqizil nurlanishdagi o'zgarishlarni aniqlaydilar, shuning uchun nazariy jihatdan, agar odam kompyuterni tark etsa, sensor sezadi. Bu.. Bundan tashqari, bu datchiklar taymer va sezgirlik tugmalariga ega. Shunday qilib, men uni bir -biriga bog'lab qo'ydim va u bilan o'ynadim, lekin sensori yaqin masofaga o'rnatilmaganga o'xshaydi (u keng burchakka ega), u har xil noto'g'ri ogohlantirishlarni berdi.

3. Veb -kamera yordamida yuzni aniqlash. Bu variant juda qiziq bo'lib tuyuldi, chunki men boshqa kompyuter loyihalarida o'ynaganman: https://github.com/danionescu0/robot-camera-platfo… va https://github.com/danionescu0/image-processing- pr …

Bu tort bo'lagi edi! Ammo ba'zi kamchiliklar bor edi: dastur ishlayotganda noutbuk kamerasidan boshqa maqsadlarda foydalanish mumkin emas edi va buning uchun ba'zi kompyuter resurslari kerak bo'ladi. Shunday qilib, men ham bu fikrdan voz kechdim.

Agar buni qanday qilish mumkinligi haqida ko'proq fikringiz bo'lsa, ularni baham ko'ring, rahmat!

Tavsiya: