Orodha ya maudhui:

Mfumo wa Kompyuta Kufuli kiotomatiki: Hatua 4
Mfumo wa Kompyuta Kufuli kiotomatiki: Hatua 4

Video: Mfumo wa Kompyuta Kufuli kiotomatiki: Hatua 4

Video: Mfumo wa Kompyuta Kufuli kiotomatiki: Hatua 4
Video: Электрика в квартире своими руками. Финал. Переделка хрущевки от А до Я. #11 2024, Julai
Anonim
Image
Image
Kusanya na Kupakia
Kusanya na Kupakia

Katika mafunzo haya tutachunguza usalama wa skrini ya kompyuta. Mifumo ya uendeshaji ina muda wa kusanidi ambao utafunga skrini yako ikiwa mtumiaji hajagusa panya au kibodi.

Kawaida chaguo-msingi ni karibu dakika moja. Ukifuata chaguo-msingi hiki na kuacha kompyuta yako katika mazingira yenye shughuli nyingi mtu anaweza kufikia kompyuta yako kwa dakika hiyo hadi skrini ifungwe. Ukiiweka kwa sekunde chache utapata skrini ya kufunga mara nyingi sana wakati haugusi kibodi na hiyo inakera…

Siku moja mfanyakazi mwenzangu aliniuliza ikiwa naweza "kurekebisha" suala hili kwa aina fulani ya kifaa kinachofunga kompyuta wakati hayupo, na nikachukua changamoto:)

Nimechunguza chaguzi kadhaa kichwani mwangu kama kutumia arduinos na sensor ya infrared thermometer, sensor ya PIR au labda kutumia utambuzi wa uso kwenye kompyuta, lakini nimekaa kwa njia rahisi:

Tutachanganya utendaji wa Arduino Leonardo HID (kuiga kibodi) na sensa ya umbali wa kugundua ikiwa mtu anatumia kompyuta, ikiwa sivyo kifaa kitatuma mchanganyiko muhimu kupitia USB ili kufunga kompyuta.

Hatua ya 1: Vipengele

Kwa sababu hii ni uthibitisho wa dhana tutaunda kifaa kwenye ubao wa mkate

Utahitaji:

1. Arduino Leonardo (ni muhimu kumtumia Leonardo kwa sababu inaweza kuiga kibodi)

2. HC-SR04 sensor ya umbali wa ultrasonic

3. 2 x 10 K vipinga tofauti

4. ubao wa mkate, waya za mkate

5. Kebo ya USB

Onyesho la OLED (https://www.adafruit.com/product/931)

Hatua ya 2: Kusanya na Kupakia

Kusanya na Kupakia
Kusanya na Kupakia

Kwanza angalia ikiwa una vifaa vyote vinavyohitajika na IDE ya Arduino. Nitaenda kwa kifupi kwa hatua za unganisho, na unaweza kutazama kila wakati muundo wa fritzing ulioambatanishwa

Mkutano

1. Weka Leonardo kwenye ubao wa mkate na ushikilie mahali pake na bendi ya mpira

2. weka vipikizi viwili vya kutofautisha, onyesho la OLED na sensor ya ultrasonic kwenye ubao wa mkate

3. unganisha viwanja na vcc's

4. unganisha pini za katikati za vipinga na arduino A0 na A1

5. unganisha SDA na SCL ya onyesho kwa SDA na SCL iliyowekwa alama kwenye Leonardo

6. unganisha kichocheo na pini ya mwangwi ya sensa ya ultrasonic kwa pini 12, 13 za dijiti za Leonardo

7. unganisha USB kwenye kompyuta

Pakia

Kwanza kabisa utahitaji kupakua na kusanikisha maktaba muhimu za arduino:

1. Maktaba ya GOFi2cOLED:

2. Maktaba ya Ultrasonic-HC-SR04:

Ikiwa haujui jinsi ya kusanikisha maktaba za arduino angalia mafunzo haya.

Baada ya kupakua na kusanikisha maktaba hapo juu, unaweza kushikilia au kupakua hazina yangu ya arduino iliyoko hapa: https://github.com/danionescu0/arduino, na tutatumia mchoro huu: https://github.com/danionescu0 / arduino / mti / bwana…

Au unaweza kunakili na kubandika nambari hapa chini:

/ * * Maktaba zinazotumiwa na mradi huu: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 * / #include "Kinanda.h" # pamoja na "Wire.h" # pamoja na "GOFi2cOLED.h" # pamoja na "Ultrasonic.h"

GOFi2cOLED GOFoled;

Ultrasonic ultrasonic (12, 13);

const byte umbaliPot = A0;

tim byte timerPot = A1; asilimia ya kuelea ya ConstaxMaxDistanceChangedAllowed = 25; int actualDistance; saini ndefu maxDistanceDetectionTime; bool lockTimerStarted = uongo;

kuanzisha batili ()

{Serial.begin (9600); Kinanda.anza (); AnzishaDisplay (); }

kitanzi batili ()

{clearDisplay (); Usaidizi halisi = pataUsaidizi wa kweli (); andikaStatusData (); fanya Onyesha (); ikiwa (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = kweli; maxDistanceDetectionTime = milimita (); Serial.println ("kipima muda cha kuanza"); } mwingine ikiwa (! shouldEnableLockTimer ()) {Serial.println ("lock timer imelemazwa"); lockTimerStarted = uwongo; } ikiwa (inapaswaLockScreen ()) {lockScreen (); Serial.println ("Skrini iliyofungwa"); } kuchelewa (100); }

bool inapaswa LockScreen ()

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

bool inapaswa WezeshaLockTimer ()

{int kuruhusiwaDistance = percentMaxDistanceChangedAllowed / 100 * getDistance (); kurudi GetTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> ruhusaDistance; }

kuandikaStatusData ()

{setDisplayText (1, "MinDistance:", Kamba (getDistance ())); setDisplayText (1, "Timer:", String (GetTimer ())); setDisplayText (1, "Ukweli halisi:", Kamba (actualDistance)); int countDown = GetTimer () - (millis () - maxDistanceDetectionTime) / 1000; Ujumbe wa kamba = ""; ikiwa (shouldLockScreen ()) {message = "lock sent"; } kingine ikiwa (inapaswaEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } mwingine {message = "no"; } setDisplayText (1, "Kufunga:", ujumbe); }

tupu initializeDisplay ()

{GOFoled.init (0x3C); GOFoled. clearDisplay (); Mshale wa GOFoled.set (0, 0); }

batili setDisplayText (byte fontSize, String studio, String data)

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

Onyesha batili ()

{GOFoled.display (); }

batili waziDisplay ()

{GOFoled.clearDisplay (); Mshale wa GOFoled.set (0, 0); }

upataji wa Ukweli ()

{int umbaliSum = 0; kwa (byte i = 0; i <10; i ++) {distanceSum + = ultrasonic. Kubadilisha (CM); }

umbali wa kurudiSum / 10;

}

kupata GetDistance ()

{ramani ya kurudi (AnalogRead (TimerPot), 0, 1024, 0, 200); }

kupataTimer ()

{ramani ya kurudi (AnalogSoma (umbaliPot), 0, 1024, 0, 20); }

utupu wa kufunga Skrini ()

{Serial.println ("kubonyeza"); Kinanda.press (KEY_LEFT_CTRL); kuchelewesha (10); Kinanda.press (KEY_LEFT_ALT); kuchelewesha (10); Andika kibodi ('l'); kuchelewesha (10); Kinanda.releaseAll (); }

Mwishowe unganisha arduino kompyuta kwa kutumia kebo ya usb, na upakie mchoro kwenye arduino.

Hatua ya 3: Kutumia Kifaa

Kutumia Kifaa
Kutumia Kifaa

Wakati arduino imeunganishwa na kompyuta itaendelea kufuatilia umbali mbele ya sensor na kutuma mchanganyiko wa kitufe cha "lock" kwa kompyuta ikiwa umbali unaongezeka.

Kifaa kina usanidi fulani:

1. Umbali wa kawaida, umbali unaweza kusanidiwa kwa kutumia kontena inayobadilika iliyounganishwa na A0. Umbali pia unaonyeshwa kwenye OLED. Wakati umbali utaongezeka na 25% kutoka kwa ile ambayo imewekwa hesabu itaanza

2. Muda wa kuisha (countdown). Kuisha kwa sekunde pia kunaweza kusanidiwa kutoka kwa kontena iliyounganishwa na A1. Wakati wa kuisha utakapomalizika amri ya kufuli itatumwa

3. Lock mchanganyiko muhimu. Mchanganyiko wa ufunguo wa chaguo-msingi umewekwa ili kufanya kazi kwa Ubuntu Linux 18 (CTRL + ALT + L). Ili kubadilisha mchanganyiko unahitaji kurekebisha mchoro wako kulingana na mfumo wako wa operesheni:

4. Muda wa ulinzi na umbali. Kwa sababu hiki ni kifaa kinachotoa kibodi ni wazo nzuri kuwa na utaratibu wa kuzima utendaji wa kibodi. Katika mchoro wangu nimechagua kuwa muda wa kuisha na umbali lazima uwe mkubwa zaidi ya "1". (unaweza kurekebisha hiyo kwenye nambari ikiwa unapenda)

Pata na ubadilishe kazi ya "lockScreen ()"

batili lockScreen () {Serial.println ("kubonyeza"); Kinanda.press (KEY_LEFT_CTRL); kuchelewesha (10); Kinanda.press (KEY_LEFT_ALT); kuchelewesha (10); Andika kibodi ('l'); kuchelewesha (10); Kinanda.releaseAll (); }

Kwa orodha kamili ya funguo maalum za arduino, angalia hapa:

Hatua ya 4: Njia zingine

Kabla ya utekelezaji huu nimezingatia utekelezaji mwingine pia:

1. Kipimajoto cha infrared (MLX90614 https://www.sparkfun.com/products/10740). Thermometer ya infrared ni kifaa kinachopima joto kwa kuchambua mionzi ya infrared inayotolewa na kitu kwa mbali. Nilikuwa na mmoja amelala karibu na nilifikiri labda ninaweza kugundua tofauti ya joto mbele ya kompyuta.

Nimeiunganisha, lakini tofauti ya joto ilikuwa ndogo sana (wakati nilikuwa mbele au la) digrii 1-2 na nilidhani haiwezi kuaminika sana

2. Sensor ya PIR. (https://www.sparkfun.com/products/13285) Sensorer hizi za bei rahisi zinauzwa kama "sensorer za mwendo" lakini hugundua mabadiliko katika mionzi ya infrared kwa hivyo kwa nadharia inaweza kufanya kazi, mtu anapoondoka kwenye kompyuta sensor itagundua. hiyo.. Pia sensorer hizi zina mkusanyiko wa vitisho vya muda wa kumaliza na unyeti. Kwa hivyo nimeunganisha moja na kucheza nayo lakini inaonekana kwamba sensorer haijatengenezwa kwa anuwai ya karibu (ina pembe pana), ilitoa kila aina ya tahadhari za uwongo.

3. Kugundua uso kwa kutumia kamera ya wavuti. Chaguo hili lilionekana kuvutia sana, kwani nilicheza na uwanja huu wa kompyuta katika miradi yangu mingine kama: https://github.com/danionescu0/robot-camera-platfo… na https://github.com/danionescu0/image-processing- pr…

Hii ilikuwa kipande cha keki! Lakini kulikuwa na mapungufu: kamera ya mbali haiwezi kutumiwa kwa madhumuni mengine wakati programu hiyo ilikuwa ikiendelea, na rasilimali zingine za kompyuta zingehitajika kwa hilo. Kwa hivyo nimeacha wazo hili pia.

Ikiwa una maoni zaidi juu ya jinsi hii inaweza kufanywa tafadhali shiriki, asante!

Ilipendekeza: