תוכן עניינים:

מערכת מחשב נעילה אוטומטית: 4 שלבים
מערכת מחשב נעילה אוטומטית: 4 שלבים

וִידֵאוֹ: מערכת מחשב נעילה אוטומטית: 4 שלבים

וִידֵאוֹ: מערכת מחשב נעילה אוטומטית: 4 שלבים
וִידֵאוֹ: איך להפוך את המחשב למהיר יותר חלק 1, עידן מחשבים 2024, נוֹבֶמבֶּר
Anonim
Image
Image
הרכבה והעלאה
הרכבה והעלאה

במדריך זה אנו הולכים לחקור את האבטחה של נעילת מסך המחשב. למערכות ההפעלה יש פסק זמן הניתן להגדרה שינעל את המסך אם המשתמש לא נגע בעכבר או במקלדת.

בדרך כלל ברירת המחדל היא בערך דקה. אם תעקוב אחר ברירת המחדל ותשאיר את המחשב שלך בסביבה עמוסה מישהו עשוי לגשת למחשב שלך בדקה זו עד שהמסך יינעל. אם תגדיר אותו למספר שניות תקבל את מסך הנעילה לעתים קרובות מאוד כאשר אינך נוגע במקלדת וזה מעצבן …

יום אחד עמית לעבודה שאל אותי אם אני יכול "לתקן" את הבעיה הזו על ידי מכשיר כלשהו שנועל את המחשב כשהוא לא שם, ולקחתי את האתגר:)

בחנתי כמה אפשרויות בראש כמו שימוש בארדואינו וחיישן מדחום אינפרא אדום, חיישן PIR או אולי שימוש בזיהוי פנים במחשב, אבל הגעתי לשיטה פשוטה יותר:

אנו הולכים לשלב את פונקציונליות Arduino Leonardo HID (לחקות מקלדת) עם חיישן מרחק קולי כדי לזהות אם אדם משתמש במחשב, אם לא המכשיר ישלח שילוב מקשים באמצעות USB כדי לנעול את המחשב.

שלב 1: רכיבים

מכיוון שזו הוכחת מושג אנו הולכים לבנות את המכשיר על קרש לחם

אתה תצטרך:

1. ארדואינו לאונרדו (חשוב להשתמש בליאונרדו מכיוון שהוא יכול לחקות מקלדת)

2. חיישן מרחק קולי HC-SR04

3. נגדים משתנים 2x10 K

4. קרש לחם, חוטי לוח

5. כבל USB

6. תצוגת OLED (https://www.adafruit.com/product/931)

שלב 2: הרכבה והעלאה

הרכבה והעלאה
הרכבה והעלאה

בדוק תחילה אם יש לך את כל הרכיבים הדרושים ו- IDE של Arduino. אני הולך בקצרה לשלבי החיבור, ותמיד תוכל להסתכל על סכמטי הטיגון המצורפים

הַרכָּבָה

1. הניחו את לאונרדו על לוח הלוח והחזיקו אותו במקומו בעזרת גומייה

2. שים את שני הנגדים המשתנים, תצוגת ה- OLED והחיישן הקולי על לוח הלחם

3. לחבר שטחים ו- vcc

4. חבר את הפינים האמצעיים של הנגדים ל- arduino A0 ו- A1

5. חבר את SDA ו- SCL של התצוגה ל- SDA ו- SCL המסומנים על לאונרדו

6. חבר את סיכת ההדק וההד של החיישן הקולי ל -12, 13 הפינים הדיגיטליים של לאונרדו

7. חבר את ה- USB למחשב

העלה

קודם כל תצטרך להוריד ולהתקין את ספריות הארדואינו הדרושות:

1. ספריית GOFi2cOLED:

2. ספריית Ultrasonic-HC-SR04:

אם אינך יודע כיצד להתקין ספריות ארדואינו עיין במדריך זה.

לאחר שהורדת והתקנת את הספריות למעלה, תוכל לשכפל או להוריד את מאגר הארדואינים שלי הממוקם כאן: https://github.com/danionescu0/arduino, ונשתמש בשרטוט זה: https://github.com/danionescu0 /ארדואינו/עץ/מאסטר …

או שאתה יכול להעתיק ולהדביק את הקוד שלהלן:

/ * * ספריות המשמשות את הפרויקט הזה: * * GOFi2cOLED: https://github.com/hramrach/GOFi2cOLED * Ultrasonic-HC-SR04: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 */#include "Keyboard.h" #include "Wire.h" #include "GOFi2cOLED.h" #include "Ultrasonic.h"

GOFi2cOLED GOFoled;

אולטרסאונד קולי (12, 13);

const byte distancePot = A0;

const byte timerPot = A1; const float percentMaxDistanceChangedAllowed = 25; int actualDistance; maxDistanceDetectionTime לא חתום; bool lockTimerStarted = false;

הגדרת חלל ()

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

לולאת חלל ()

{clearDisplay (); actualDistance = getActualDistance (); writeStatusData (); doDisplay (); if (! lockTimerStarted && shouldEnableLockTimer ()) {lockTimerStarted = true; maxDistanceDetectionTime = millis (); Serial.println ("טיימר נעילה מתחיל"); } אחרת אם (! shouldEnableLockTimer ()) {Serial.println ("טיימר נעילה מושבת"); lockTimerStarted = false; } if (shouldLockScreen ()) {lockScreen (); Serial.println ("מסך נעילה"); } עיכוב (100); }

bool shouldLockScreen ()

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

bool shouldEnableLockTimer ()

{int allowDistance = percentMaxDistanceChangedAllowed / 100 * getDistance (); החזר getTimer ()> 1 && getDistance ()> 1 && actualDistance - getDistance ()> allowDistance; }

void writeStatusData ()

{setDisplayText (1, "MinDistance:", String (getDistance ())); setDisplayText (1, "טיימר:", מחרוזת (getTimer ())); setDisplayText (1, "ActualDistance:", String (actualDistance)); int countDown = getTimer () - (millis () - maxDistanceDetectionTime) / 1000; הודעת מחרוזת = ""; if (shouldLockScreen ()) {message = "נעילה נשלחה"; } אחרת אם (shouldEnableLockTimer () && countDown> = 0) {message = ".." + String (countDown); } אחר {message = "no"; } setDisplayText (1, "נעילה:", הודעה); }

לאתחל לאתחל Display ()

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

void setDisplayText (font byize, גודל מחרוזת, נתוני מחרוזת)

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

void 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); }

נעילת חלל מסך ()

{Serial.println ("לחיצה"); Keyboard.press (KEY_LEFT_CTRL); עיכוב (10); Keyboard.press (KEY_LEFT_ALT); עיכוב (10); Keyboard.write ('l'); עיכוב (10); Keyboard.releaseAll (); }

לבסוף חבר את הארדואינו את המחשב באמצעות כבל ה- USB, והעלה את הסקיצה לארדואינו.

שלב 3: שימוש במכשיר

שימוש במכשיר
שימוש במכשיר

כאשר הארדואינו מחובר למחשב הוא יפקח באופן רציף על המרחק מול החיישן וישלח שילוב מקשי מסך "נעילה" למחשב אם המרחק יגדל.

למכשיר מספר תצורות:

1. מרחק רגיל, ניתן להגדיר את המרחק באמצעות הנגד המשתנה המחובר ל- A0. המרחק מוצג גם ב- OLED. כאשר המרחק יגדל עם 25% מזה שמוגדר תחל ספירה לאחור

2. פסק זמן (ספירה לאחור). פסק הזמן בשניות ניתן להגדרה גם מהנגד המחובר ל- A1. עם תום הזמן הקצוב פקודת הנעילה תישלח

3. שילוב מקשי נעילה. שילוב מקשי מנעול ברירת המחדל מוגדר כך שיעבוד עבור אובונטו לינוקס 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- יחסי ציבור…

זו הייתה חתיכת עוגה! אך היו כמה חסרונות: לא ניתן להשתמש במצלמת המחשב הנייד למטרות אחרות כשהתוכנית פועלת, וכדי שיידרשו לכך משאבי מחשב. אז גם אני הרסתי את הרעיון הזה.

אם יש לך רעיונות נוספים כיצד ניתן לעשות זאת אנא שתף אותם, תודה!

מוּמלָץ: