Мазмуну:

Auto Lock Computer System: 4 кадам
Auto Lock Computer System: 4 кадам

Video: Auto Lock Computer System: 4 кадам

Video: Auto Lock Computer System: 4 кадам
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Ноябрь
Anonim
Image
Image
Орнотуу жана жүктөө
Орнотуу жана жүктөө

Бул үйрөткүчтө биз компьютердин экран кулпусунун коопсуздугун изилдейбиз. Операциондук системалардын конфигурацияланган убакыты бар, эгерде колдонуучу чычканга же клавиатурага тийбесе, анда экранды кулпулап коет.

Адатта, демейки бир мүнөттүн тегерегинде. Эгер сиз бул демейки эрежени аткарып, компьютериңизди бош эмес чөйрөдө калтырсаңыз, экран кулпуланганга чейин кимдир бирөө сиздин компьютериңизге кириши мүмкүн. Эгер сиз муну бир нече секундага койсоңуз, клавиатурага тийбей турганда кулпуланган экранды көп аласыз жана бул кыжырды келтирет …

Бир күнү кесиптешим менден бул маселени ал жокто компьютерди кулпулап турган кандайдыр бир түзмөк аркылуу чече аламбы деп сурады, мен бул көйгөйдү көтөрдүм:)

Мен башымда ардуино жана инфракызыл термометр сенсорун, PIR сенсорун колдонуу же компьютерде жүздү аныктоону колдонуу сыяктуу бир нече варианттарды изилдедим, бирок мен жөнөкөй ыкмага көндүм:

Биз Arduino Leonardo HID функциясын (клавиатураны тууроо) ультрадыбыштуу аралык сенсору менен айкалыштырабыз, эгерде адам компьютерди колдонуп жаткандыгын аныктоо үчүн, эгерде түзүлүш компьютерди кулпулоо үчүн USB аркылуу ачкычтардын айкалышын жөнөтөт.

1 -кадам: Компоненттер

Анткени бул - биз аппаратты нан үстүнө курабыз деген түшүнүктүн далили

Сага керек болот:

1. Ардуино Леонардо (Леонардону колдонуу маанилүү, анткени ал клавиатураны туурай алат)

2. HC-SR04 УЗИ аралык сенсор

3. 2 х 10 К өзгөрмөлүү резисторлор

4. нан плитасы, нан зымдары

5. USB кабели

6. OLED дисплейи (https://www.adafruit.com/product/931)

2 -кадам: Орнотуу жана Жүктөө

Орнотуу жана жүктөө
Орнотуу жана жүктөө

Алгач сизде бардык керектүү компоненттер жана Arduino IDE бар -жогун текшериңиз. Мен кыскача туташуу кадамдарына барайын деп жатам, жана сиз дайыма тиркелген фризинг схемасын карай аласыз

Ассамблея

1. Леонардону нандын үстүнө коюп, резина боосу менен кармаңыз

2. эки өзгөрмөлүү резисторлорду, OLED дисплейди жана УЗИ сенсорун нан тактасына коюңуз

3. аянтчаларды жана vcc'терди туташтыруу

4. резисторлордун орто казыктарын arduino A0 жана A1 туташтырыңыз

5. дисплейдин SDA жана SCL'ин Леонардодо белгиленген SDA жана SCLге туташтырыңыз

6. УЗИ сенсорунун триггерин жана жаңырык пинин Леонардонун 12, 13 санарип казыктарына туташтырыңыз

7. USB'ди компьютерге туташтыруу

Жүктөө

Биринчиден, сиз керектүү arduino китепканаларын жүктөп алып, орнотушуңуз керек:

1. GOFi2cOLED китепканасы:

2. УЗИ-HC-SR04 китепканасы:

Эгерде сиз arduino китепканаларын кантип орнотууну билбесеңиз, бул окуу куралын караңыз.

Жогорудагы китепканаларды жүктөп, орноткондон кийин, бул жерде жайгашкан менин arduino репозиторийимди клондоштуруп же жүктөп алсаңыз болот: https://github.com/danionescu0/arduino, биз бул эскизди колдонобуз: https://github.com/danionescu0 /arduino/дарак/мастер…

Же төмөнкү кодду көчүрүп, чаптап койсоңуз болот:

/ * * Бул долбоордо колдонулган китепканалар: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #"Wire.h" кошуу #"GOFi2cOLED.h" кошуу #"Ultrasonic.h" кошуу

GOFi2cOLED GOFoled;

УЗИ УЗИ (12, 13);

const байт аралыгыPot = A0;

const байт timerPot = A1; const float процентMaxDistanceChangedAllowed = 25; int actualDistance; кол коюлбаган узак maxDistanceDetectionTime; bool lockTimerStarted = false;

жараксыз орнотуу ()

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

боштук цикл ()

{clearDisplay (); actualDistance = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = миллис (); Serial.println ("кулпулоо таймери башталат"); } else if (! shouldEnableLockTimer ()) {Serial.println ("кулпу таймери өчүрүлгөн"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("Кулпуланган экран"); } кечиктирүү (100); }

bool shouldLockScreen ()

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

bool shouldEnableLockTimer ()

{int allowedDistance = процентMaxDistanceChangedAllowed / 100 * getDistance (); getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> allowedDistance; }

Void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ()))); setDisplayText (1, "Таймер:", String (getTimer ())); setDisplayText (1, "ActualDistance:", String (actualDistance)); int countDown = getTimer () - (миллис () - maxDistanceDetectionTime) / 1000; String message = ""; if (shouldLockScreen ()) {message = "кулпу жөнөтүлдү"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } else {message = "no"; } setDisplayText (1, "Locking:", билдирүү); }

void initializeDisplay ()

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

void setDisplayText (байт fontSize, String label, String data)

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

жараксыз doDisplay ()

{GOFoled.display (); }

Void clearDisplay ()

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

int getActualDistance ()

{int distanceSum = 0; for (байт i = 0; i <10; i ++) {distanceSum+= ultrasonic. Ranging (CM); }

кайтуу аралыгыСум / 10;

}

int getDistance ()

{кайтуу картасы (analogRead (timerPot), 0, 1024, 0, 200); }

int getTimer ()

{кайтуу картасы (analogRead (distancePot), 0, 1024, 0, 20); }

void lockScreen ()

{Serial.println ("басуу"); Keyboard.press (KEY_LEFT_CTRL); кечигүү (10); Keyboard.press (KEY_LEFT_ALT); кечигүү (10); Keyboard.write ('l'); кечигүү (10); Keyboard.releaseAll (); }

Акыры, USB кабелин колдонуп, ардуинону компьютерге туташтырып, эскизин arduinoго жүктөңүз.

3 -кадам: Түзмөктү колдонуу

Түзмөктү колдонуу
Түзмөктү колдонуу

Ардуино компьютерге туташканда, ал сенсордун алдындагы аралыкты тынымсыз көзөмөлдөп турат жана эгер аралык көбөйсө, "кулпу" экран баскычтарынын комбинациясын компьютерге жөнөтөт.

Түзмөктүн конфигурациялары бар:

1. Кадимки аралык, аралыкты A0го туташкан өзгөрмө резистордун жардамы менен конфигурациялоого болот. Алыстык OLEDде да көрсөтүлөт. Качан аралык 25% га көбөйгөндө, артка саноо башталат

2. Тайм -аут (артка саноо). Секунддардагы күтүү убактысы A1ге туташкан резистордон конфигурацияланат. Күтүү мөөнөтү бүткөндө, кулпу буйругу жөнөтүлөт

3. Lock key комбинациясы. Демейки кулпу баскычтарынын айкалышы Ubuntu Linux 18 (CTRL+ALT+L) үчүн иштөө үчүн орнотулган. Айкалышты өзгөртүү үчүн эскизди операциялык системага жараша өзгөртүү керек:

4. Тайм -аут жана аралыктан коргоо. Бул клавиатураны эмуляциялоочу түзүлүш болгондуктан, клавиатуранын иштешин өчүрүү механизмине ээ болуу жакшы. Эскизимде мен күтүү убактысы жана аралык "1ден" чоңураак болушу керектигин тандадым. (эгер кааласаңыз, муну коддон өзгөртө аласыз)

"LockScreen ()" функциясын табыңыз жана өзгөртүңүз

void lockScreen () {Serial.println ("басуу"); Keyboard.press (KEY_LEFT_CTRL); кечигүү (10); Keyboard.press (KEY_LEFT_ALT); кечигүү (10); Keyboard.write ('l'); кечигүү (10); Keyboard.releaseAll (); }

Ардуино атайын ачкычтарынын толук тизмесин бул жерден текшериңиз:

4 -кадам: Башка ыкмалар

Бул ишке ашыруунун алдында мен дагы башка ишке ашырууларды карап чыктым:

1. Инфракызыл термометр (MLX90614 https://www.sparkfun.com/products/10740). Инфракызыл термометр - бул объект тарабынан алыстан чыккан инфракызыл нурланууну анализдөө аркылуу температураны өлчөөчү прибор. Менде бирөө жатты, мен компьютердин алдында температуранын айырмасын аныктай алам деп ойлодум.

Мен аны илип койгом, бирок температуранын айырмасы өтө кичине болчу (мен алдыда болсом дагы) 1-2 градус жана мен ишенчээк эмес деп ойлогом

2. PIR сенсор. (https://www.sparkfun.com/products/13285) Бул арзан сенсорлор "кыймыл сенсорлору" катары сатылат, бирок алар инфракызыл нурлануунун өзгөрүшүн чындап аныкташат, ошондуктан теория боюнча ал адам компьютерден чыкканда сенсор аныктайт ошол.. Ошондой эле бул сенсорлордун күтүү убактысы жана сезгичтик баскычтары бар. Ошентип, мен бирөөнү туташтырып, аны менен ойнодум, бирок сенсор жакын аралыкта иштебеген окшойт (анын кең бурчу бар), ал ар кандай жалган эскертүүлөрдү берди.

3. Веб -камера аркылуу жүздү аныктоо. Бул вариант абдан кызыктуу көрүндү, анткени мен бул компьютер талаасы менен башка долбоорлорумда ойногом: https://github.com/danionescu0/robot-camera-platfo… жана https://github.com/danionescu0/image-processing- пр…

Бул торттун бир бөлүгү болчу! Бирок кээ бир кемчиликтери бар болчу: ноутбук камерасы программа иштеп турганда башка максаттарда колдонулбайт, ал үчүн кээ бир компьютердик ресурстар талап кылынат. Ошентип, мен да бул идеядан баш тарттым.

Эгерде сизде муну кантип жасоо жөнүндө көбүрөөк ойлоруңуз болсо, анда аларды бөлүшүңүз, рахмат!

Сунушталууда: