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

גלאי אנושי Raspberry Pi + מצלמה + בקבוק: 6 שלבים
גלאי אנושי Raspberry Pi + מצלמה + בקבוק: 6 שלבים

וִידֵאוֹ: גלאי אנושי Raspberry Pi + מצלמה + בקבוק: 6 שלבים

וִידֵאוֹ: גלאי אנושי Raspberry Pi + מצלמה + בקבוק: 6 שלבים
וִידֵאוֹ: SCP-261 Пан-мерное Торговый и эксперимент Войти 261 объявление Де + полный + 2024, נוֹבֶמבֶּר
Anonim
גלאי אנושי Raspberry Pi + מצלמה + בקבוק
גלאי אנושי Raspberry Pi + מצלמה + בקבוק

במדריך זה אעבור על השלבים של פרוייקט IoT Raspberry Pi שלי - שימוש בחיישן תנועה PIR, במודול מצלמת פטל לבניית מכשיר אבטחה פשוט וגישה ליומן האיתור באמצעות Flask.

שלב 1: חיישן תנועה PIR

חיישן תנועה PIR
חיישן תנועה PIR

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

שלב 2: הגדרת חיישן תנועה של PIR

הגדרת חיישן תנועה של PIR
הגדרת חיישן תנועה של PIR

ישנם שלושה סיכות לחיישן תנועה PIR, כוח, פלט וקרקע. מתחת לסיכות אתה יכול לראות את התוויות, VCC for Power, Out for Output ו- GND for ground. כאשר החיישן מזהה תנועות, סיכת הפלט תוציא אות גבוה לסיכה של Raspberry Pi שאיתה אתה מחבר את החיישן. עבור Power pin, אתה רוצה לוודא שהוא מתחבר לסיכה של 5V ב- Raspberry Pi לצורך הספק. עבור הפרויקט שלי, אני בוחר לחבר את סיכת הפלט עם Pin11 ב- Pi.

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

ייבא RPi. GPIO כ- GPIO ייבוא זמן GPIO.cleanup () GPIO.setwarnings (False) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #פלט קריאה מחיישן תנועה PIR בפין 11 בעוד True: i = GPIO.input (11) אם i == 0: #כאשר הפלט מחיישן התנועה הוא הדפסה נמוכה "אין זיהוי", i time.sleep (0.1) elif i == 1: #כאשר הפלט מחיישן התנועה הוא הדפסה גבוהה " תנועה זוהתה ", i time.sleep (0.1)

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

שלב 3: מודול מצלמה והגדרת פטל פטל

מודול והתקנה של מצלמת פטל
מודול והתקנה של מצלמת פטל

האדם פולט קרן אינפרא אדום בגלל החום, וכך גם עצמים עם טמפרטורות. לכן, בעלי חיים או חפצים חמים יכולים להפעיל גם את חיישן התנועה. אנחנו צריכים דרך לבדוק אם הגילוי תקף. ישנן דרכים רבות ליישם, אך בפרויקט שלי אני בוחר להשתמש במודול המצלמה של Raspberry Pi כדי לצלם תמונות כאשר חיישן התנועה קולט תנועות.

כדי להשתמש במודול המצלמה, תחילה עליך לוודא שהסיכות מחוברות לחריץ המצלמה ב- Pi. סוּג

sudo raspi-config

ב- Pi שלך כדי לפתוח את ממשק התצורה, ולאפשר את המצלמה ב'אפשרויות הממשק '. לאחר אתחול מחדש, תוכל לבדוק אם ה- Pi אכן מחובר למצלמה על ידי הקלדה

vcgencmd get_camera

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

pip להתקין picamera

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

מייבוא picamera PiCamera

מזמן ייבוא מצלמת שינה = PiCamera () camera.start_preview () sleep (2) camera.capture ('image.jpg') camera.stop_preview ()

התמונה תישמר בתור 'image.jpg' בספרייה זהה לתסריט של מצלמת התצלום שלך. שימו לב, אתם רוצים לוודא ש'שינה (2) 'נמצאת שם והמספר גדול מ -2 כך שלמצלמה יהיה מספיק זמן להתאים את מצב האור.

שלב 4: שלב את חיישן התנועה של PIR ואת מודול המצלמה

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

התסריט:

ייבוא RPi. GPIO כ- GPIO מזמן הייבוא של datetime מייבוא משעת Picamer יבוא PiCamera

GPIO.cleanup ()

GPIO.setwarnings (שקר) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #פלט קריאה מהודעת חיישן תנועה של PIR = מונה 'התחל' = 0 log_f = פתוח ('static/log.txt', 'w') log_f.close ()

מצלמה = PiCamera ()

pic_name = 0

camera.start_preview ()

time.sleep (2)

בעוד שזה נכון:

i = GPIO.input (11) אם i == 0: #כאשר הפלט מחיישן התנועה נמוך אם מונה> 0: end = str (datetime.now ()) log_f = open ('static/log.txt', ' א ') הודעה = הודעה +'; סוף ב- ' + סוף +' / n 'הדפס (הודעה) log_f.write (הודעה) log_f.close () final =' static/' + str (pic_name) + ".jpg" pic_name = pic_name + 1 camera.capture (סופי) counter = 0 הדפסה "אין פולשים", i time.sleep (0.1) elif i == 1: #כאשר הפלט מחיישן התנועה גבוה אם counter == 0: current = str (datetime.now ()) הודעה = 'בן אדם זוהה:' + 'התחל ב' + מונה זרם = מונה + הדפסה אחת "פולש זוהה", i time.sleep (0.1) camera.stop_preview ()

הספריות של 'log.txt' והתמונות הן 'סטטיות', וזה הכרחי כדי ש- Flask יפעל.

שלב 5: הגדרת בקבוק

התקנה עבור בקבוק
התקנה עבור בקבוק

Flask היא מסגרת מיקרו אינטרנט הכתובה ב- Python ומבוססת על ערכת הכלים Werkzeug ומנוע התבניות Jinja2. קל ליישום ולתחזוקה. לקבלת הדרכה טובה יותר עבור Flask, אני ממליץ על הקישור הזה: Taskorial Mega Tutorial

התסריט הראשי, 'routes.py', של הפרויקט שלי:

מייבוא יישום תיקייה appFlask מתוך בקבוק ייבוא render_template, הפניה מחדש של מערכת הייבוא

APP_ROOT = os.path.dirname (os.path.abspath (_ קובץ_)) # מתייחס ל application_top

APP_STATIC = os.path.join (APP_ROOT, 'סטטי')

@appFlask.route ('/', method = ['GET', 'POST'])

def view (): log_f = open (os.path.join (APP_STATIC, 'log.txt'), 'r') logs = log_f.readlines () final_logs = לכניסות יומנים: final_logs.append (log. strip ()) name = str (len (final_logs) -1)+'. jpg' return render_template ('view.html', logs = final_logs, filename = name)

קובץ ה- HTML 'view.html' נמצא בסרגל העליון (כי כשאני מעתיק את קודי ה- HTML לכאן, הוא למעשה הופך ל- HTML FORMAT …)

ומבנה הפרויקט צריך להיראות כמו משהו למטה (אבל כמובן שיש יותר קבצים מאלו):

iotproject / appfolder / routes.py תבניות / view.html סטטי / log.txt 0-j.webp

שלב 6: תוצאה

תוֹצָאָה
תוֹצָאָה

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

מוּמלָץ: