Სარჩევი:

ავტომატური ჩაკეტვის კომპიუტერული სისტემა: 4 ნაბიჯი
ავტომატური ჩაკეტვის კომპიუტერული სისტემა: 4 ნაბიჯი

ვიდეო: ავტომატური ჩაკეტვის კომპიუტერული სისტემა: 4 ნაბიჯი

ვიდეო: ავტომატური ჩაკეტვის კომპიუტერული სისტემა: 4 ნაბიჯი
ვიდეო: HBO 4, დიაგნოსტიკა და საკუთარი თავის რეგულირება 2024, ივლისი
Anonim
Image
Image
შეკრება და ატვირთვა
შეკრება და ატვირთვა

ამ გაკვეთილში ჩვენ ვაპირებთ გამოვიკვლიოთ კომპიუტერის ეკრანის დაბლოკვის უსაფრთხოება. ოპერაციულ სისტემებს აქვთ კონფიგურირებადი ვადა, რომელიც ჩაკეტავს თქვენს ეკრანს, თუ მომხმარებელი არ შეეხო მაუსს ან კლავიატურას.

ჩვეულებრივ, ნაგულისხმევი არის დაახლოებით ერთი წუთი. თუ თქვენ დაიცავთ ამ ნაგულისხმევს და დატოვებთ თქვენს კომპიუტერს დაკავებულ გარემოში, ვიღაცას შეუძლია თქვენს კომპიუტერზე წვდომა იმ წუთში, სანამ ეკრანის ჩაკეტვა მოხდება. თუ რამდენიმე წამს დააყენებთ, ძალიან ხშირად მიიღებთ დაბლოკვის ეკრანს, როდესაც კლავიატურას არ შეეხებით და ეს გამაღიზიანებელია…

ერთ დღეს სამუშაო კოლეგამ მკითხა, შემიძლია თუ არა ამ საკითხის "მოგვარება" რაიმე სახის მოწყობილობით, რომელიც ბლოკავს კომპიუტერს, როდესაც ის იქ არ არის და მე მივიღე გამოწვევა:)

მე გამოვიკვლიე რამდენიმე ვარიანტი ჩემს თავში, როგორიცაა არდუინო და ინფრაწითელი თერმომეტრის სენსორი, PIR სენსორი ან შესაძლოა კომპიუტერში სახის გამოვლენის გამოყენება, მაგრამ მე უფრო მარტივ მეთოდს მივუდექი:

ჩვენ ვაერთიანებთ Arduino Leonardo HID ფუნქციონირებას (კლავიატურის იმიტაცია) ულტრაბგერითი დისტანციის სენსორთან, რათა დავადგინოთ, იყენებს თუ არა ადამიანი კომპიუტერს, თუ არა, მოწყობილობა გამოაგზავნის კლავიშთა კომბინაციას USB- ით კომპიუტერის დასაკეტად.

ნაბიჯი 1: კომპონენტები

რადგან ეს არის კონცეფციის დადასტურება, ჩვენ ვაპირებთ ავაშენოთ მოწყობილობა პურის დაფაზე

Შენ დაგჭირდება:

1. არდუინო ლეონარდო (მნიშვნელოვანია ლეონარდოს გამოყენება, რადგან მას შეუძლია კლავიატურის იმიტაცია)

2. HC-SR04 ულტრაბგერითი მანძილის სენსორი

3. 2 x 10 K ცვლადი რეზისტორები

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 * ულტრაბგერითი-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #მოიცავს "Wire.h" #მოიცავს "GOFi2cOLED.h" #მოიცავს "Ultrasonic.h"

GOFi2cOLED GOFoled;

ულტრაბგერითი ულტრაბგერითი (12, 13);

const ბაიტი distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int ფაქტობრივი მანძილი; ხელმოუწერელი გრძელი maxDistanceDetectionTime; bool lockTimerStarted = ყალბი;

ბათილად დაყენება ()

{Serial.begin (9600); კლავიატურა. დაწყება (); initializeDisplay (); }

ბათილი მარყუჟი ()

{clearDisplay (); ფაქტობრივი მანძილი = getActualDistance (); writeStatusData (); doDisplay (); თუ (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = ჭეშმარიტი; maxDistanceDetectionTime = მილი (); Serial.println ("ჩაკეტვის ტაიმერის დაწყება"); } else if (! shouldEnableLockTimer ()) {Serial.println ("ჩაკეტილი ტაიმერი გამორთულია"); lockTimerStarted = ყალბი; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("ეკრანის ჩაკეტვა"); } დაყოვნება (100); }

bool shouldLockScreen ()

{დაბრუნების lockTimerStarted && (millis () - maxDistanceDetectionTime) / 1000> getTimer (); }

bool shouldEnableLockTimer ()

{int ნებადართული = პროცენტული მაქსიმალურ მანძილზე შეცვლილი დაშვებული / 100 * getDistance (); დაბრუნება getTimer ()> 1 && getDistance ()> 1 && ფაქტობრივი მანძილი - getDistance ()> დაშვებული მანძილი; }

void writeStatusData ()

{setDisplayText (1, "მინიმალური მანძილი:", სიმებიანი (getDistance ())); setDisplayText (1, "ტაიმერი:", სიმებიანი (getTimer ())); setDisplayText (1, "ActualDistance:", სიმებიანი (ფაქტობრივი მანძილი)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; სიმებიანი შეტყობინება = ""; if (shouldLockScreen ()) {message = "დაბლოკვა გაიგზავნა"; } else if (shouldEnableLockTimer () && countDown> = 0) {message = ".." + სიმებიანი (countDown); } else {message = "no"; } setDisplayText (1, "ჩაკეტვა:", შეტყობინება); }

void initializeDisplay ()

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

void setDisplayText (ბაიტი fontSize, სიმებიანი ეტიკეტი, სიმებიანი მონაცემები)

{GOFoled.setTextSize (fontSize); GOFoled.println (ეტიკეტი + ":" + მონაცემები); }

void doDisplay ()

{GOFoled.display (); }

void clearDisplay ()

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

int getActualDistance ()

{int distanceSum = 0; for (ბაიტი i = 0; i <10; i ++) {distanceSum+= ულტრაბგერითი. დიაპაზონი (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 (); }

საბოლოოდ დაუკავშირეთ arduino კომპიუტერს USB კაბელის გამოყენებით და ატვირთეთ ესკიზი არდუინოში.

ნაბიჯი 3: მოწყობილობის გამოყენება

მოწყობილობის გამოყენება
მოწყობილობის გამოყენება

როდესაც arduino კომპიუტერთან არის დაკავშირებული, ის მუდმივად აკონტროლებს დისტანციას სენსორის წინ და დისტანციის გაზრდის შემთხვევაში კომპიუტერს გაუგზავნის "დაბლოკვის" კლავიშთა კომბინაციას.

მოწყობილობას აქვს რამდენიმე კონფიგურაცია:

1. ნორმალური მანძილი, მანძილის კონფიგურაცია შესაძლებელია ცვლადი რეზისტორის გამოყენებით, რომელიც დაკავშირებულია A0- სთან. მანძილი ასევე ნაჩვენებია OLED– ზე. როდესაც მანძილი გაიზრდება 25% –ით დადგენილზე, დაიწყება ათვლა

2. ტაიმაუტი (ათვლა). წამებში დროის ამოწურვა ასევე შესაძლებელია კონფიგურირებადი რეზისტორისგან, რომელიც დაკავშირებულია A1– თან. როდესაც ვადა ამოიწურება დაბლოკვის ბრძანება გაიგზავნება

3. საკვანძო კომბინაციის ჩაკეტვა. ნაგულისხმევი დაბლოკვის ღილაკების კომბინაცია შექმნილია 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 (); }

Arduino– ს სპეციალური გასაღებების სრული ჩამონათვალისთვის, შეამოწმეთ აქ:

ნაბიჯი 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- pr…

ეს ნამცხვრის ნაჭერი იყო! მაგრამ იყო გარკვეული ნაკლოვანებები: ლეპტოპის კამერა ვერ გამოიყენებოდა სხვა მიზნებისთვის პროგრამის გაშვებისას და ამისათვის საჭირო იქნებოდა კომპიუტერის გარკვეული რესურსი. ასე რომ, მეც ჩავაგდე ეს იდეა.

თუ თქვენ გაქვთ მეტი იდეა იმის შესახებ, თუ როგორ შეიძლება ამის გაკეთება, გთხოვთ გააზიაროთ ისინი, მადლობა!

გირჩევთ: