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

Pool Pi Guy - מערכת אזעקה מונעת AI ומעקב אחר בריכה באמצעות פטל פטל: 12 שלבים (עם תמונות)
Pool Pi Guy - מערכת אזעקה מונעת AI ומעקב אחר בריכה באמצעות פטל פטל: 12 שלבים (עם תמונות)

וִידֵאוֹ: Pool Pi Guy - מערכת אזעקה מונעת AI ומעקב אחר בריכה באמצעות פטל פטל: 12 שלבים (עם תמונות)

וִידֵאוֹ: Pool Pi Guy - מערכת אזעקה מונעת AI ומעקב אחר בריכה באמצעות פטל פטל: 12 שלבים (עם תמונות)
וִידֵאוֹ: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, נוֹבֶמבֶּר
Anonim
Pool Pi Guy - מערכת אזעקה מונעת AI ומעקב אחר בריכה באמצעות פטל פטל
Pool Pi Guy - מערכת אזעקה מונעת AI ומעקב אחר בריכה באמצעות פטל פטל

להיות בריכה בבית זה כיף, אבל כרוך באחריות רבה. הדאגה הגדולה ביותר שלי היא ניטור אם מישהו נמצא ליד הבריכה ללא השגחה (במיוחד ילדים צעירים). הטרדה הגדולה ביותר שלי היא לוודא שקו המים בבריכה לעולם לא יורד מתחת לכניסת המשאבה, מה שהופך את המשאבה להתייבש ולהרוס אותה בעלות של $ $ $ בתיקונים.

לאחרונה גיליתי כיצד להשתמש ב- Raspberry Pi עם OpenCV ו- TensorFlow, יחד עם חיישן מפלס מים ושסתום סולנואיד כדי לפתור את שתי הבעיות - ותהנה מזה!

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

בואו לצלול פנימה.

שלב 1: תוכנית גדולה

במדריך זה נראה כיצד:

  1. הגדר פטל פטל עם OpenCV ו- TensorFlow
  2. חבר מצלמת רשת באמצעות כבל USB ארוך
  3. כתוב אלגוריתם OpenCV לאיתור תנועה
  4. השתמש ב- TensorFlow לאיתור אובייקטים
  5. הקמת שרת אינטרנט ב- Raspberry Pi כדי להציג את התמונות המעניינות
  6. השתלב עם IFTTT כדי להפעיל התראות ניידות במקרה שאדם מזוהה
  7. חבר ממסר HAT ל- Raspberry Pi וחבר אותו לשסתום סולנואיד שיוסיף מים לבריכה.
  8. חבר חיישן מפלס מים ל- Raspberry Pi והתממשק אליו באמצעות ה- GPIO של ה- Pi
  9. כתוב קוד כדי להדביק את הכל יחד

שלב 2: רשימת קניות

רשימת קניות
רשימת קניות

כל הרכיבים זמינים באמזון. אתם מוזמנים להתנסות ולהחליף רכיבים - זה חצי מהכיף!

  1. פאי פטל
  2. ספק כוח Raspberry Pi (אל תתקמצנו כאן)
  3. כרטיס זיכרון (גדול יותר עדיף)
  4. מארז (זה גדול מספיק בכדי להכיל גם את הפי וגם את הכובע)
  5. מצלמת רשת USB (כל מצלמת רשת תעשה זאת, אבל אתה רוצה אחת שתקבל תמונות טובות ותאזן היטב את התאורה)
  6. כבל הארכה USB (במידת הצורך - מדוד את המרחק בין ה- Pi למקום שבו היית מציב את המצלמה)
  7. לוח ממסר HAT (לזה יש 3 ממסרים ואנחנו צריכים רק אחד, אבל תמצא שימוש לשאר בקרוב!)
  8. סולנואיד
  9. התאמת סולנואיד 1 והתאמה 2 (זה באמת תלוי במה אתה מתאים את הסולנואיד, אבל אלה עבדו בשבילי)
  10. ספק כוח סולנואיד (כל AC 24V יעשה)
  11. כבל (שוב, כמעט כל כבל בן 2 גדילים יעשה - הזרם מינימלי)
  12. מתג צף מפלס מים (זוהי רק דוגמה, בדוק מה ניתן לחבר בקלות לבריכה שלך)
  13. כמה חוטי מגשר ומחברי חוטים

שלב 3: הגדר את ה- Raspberry Pi שלך

הגדר את ה- Raspberry Pi שלך
הגדר את ה- Raspberry Pi שלך

Raspberry Pi הוא מחשב קטן נהדר. הוא עולה רק 35 $, פועל בעקביות ויש בו המון תוכנות וחומרה תואמות. ההתקנה פשוטה למדי:

  1. פרמט את כרטיס ה- SD שלך. זה דורש טיפול מיוחד - Raspberry Pi יכול לאתחל רק מכרטיס SD בפורמט FAT. בצע את ההוראות הבאות.
  2. חבר את ה- Raspberry Pi למקלדת ועכבר USB, בתוספת צג HDMI, ופעל לפי ההנחיות במדריך ה- Raspberry Pi NOOBS. הקפד להתקין WiFi ולהפעיל גישה SSH. אל תשכח להגדיר סיסמה עבור חשבון ה- pi המוגדר כברירת מחדל.
  3. בהתקנת הרשת הביתית שלך כתובת IP סטטית ל- Raspberry Pi - זה יהיה הרבה יותר קל להיכנס ל- SSH.
  4. ודא שיש לך לקוח ssh מותקן על שולחן העבודה/המחשב הנייד שלך. עבור מחשב אישי הייתי ממליץ על Putty, אותו תוכל להתקין מכאן.
  5. נתק את ה- USB וה- HDMI מה- Raspberry Pi, הפעל אותו מחדש והיכנס לתוכו - אם הכל עבד אתה אמור לראות משהו כזה:

Linux raspberrypi 4.14.98-v7+ #1200 SMP ג 'פברואר 12 20:27:48 GMT 2019 armv7l

התוכניות הכלולות במערכת GNU/Linux של Debian הן תוכנות חינמיות; תנאי ההפצה המדויקים של כל תוכנית מתוארים בקבצים הבודדים ב-/usr/share/doc/*/copyright. דביאן GNU/Linux מגיעה עם אחריות לחלוטין, במידה שמותר על פי החוק החל. הכניסה האחרונה: שני 13 במאי 10:41:40 2019 מ- 104.36.248.13 pi@raspberrypi: ~ $

שלב 4: הגדר את OpenCV

הגדרת OpenCV
הגדרת OpenCV

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

התחל בהתקנת virtaulenvwrapper: נשתמש בפייתון לביצוע כל התכנות שלנו, ו- virtualenv יעזור לנו לשמור על תלות בנפרד עבור OpenCV ו- TensorFlow לעומת Flask או GPIO:

pi@raspberrypi: ~ $ sudo pip התקן virtualenvwrapper

כעת תוכל לבצע את "mkvirtualenv" ליצירת סביבה חדשה, "workon" לעבודה עליה ועוד.

אז בואו ניצור סביבה למניפולציות התמונות שלנו, עם פייתון 3 כמתורגמן המוגדר כברירת מחדל (זה 2019, אין סיבה להישאר עם הפייתון 2 הישן יותר):

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (cv) pi@raspberrypi: ~

כעת אנו מוכנים להתקין את OpenCV. לרוב נעקוב אחר ההדרכה המעולה ב- Learn OpenCV. בצע באופן ספציפי את שלב 1 ו -2:

sudo apt -y עדכונים sudo apt -y שדרוג ## התקן תלות sudo apt-get -y התקן build-essential checkinstall cmake pkg-config yasm sudo apt-get -y התקן git gfortran sudo apt-get -y התקן libjpeg8-dev libjasper- dev libpng12-dev sudo apt-get -y התקן libtiff5-dev sudo apt-get -y התקן libtiff-dev sudo apt-get -y התקן libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get- y התקן libxine2-dev libv4l-dev cd/usr/include/linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y התקן libgstreamer0.10-dev libgstreamer-plugins-base0. 10-dev sudo apt-get -y install libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y install libatlas-base-dev sudo apt-get -y install libmp3lame-dev libtheora-dev sudo apt-get -י התקן libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y התקן libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y התקן libavresample-dev sudo apt-get -y התקן x264 v4l-utils sudo apt -get -y התקן libprotobuf -dev protobuf-compiler sudo apt-get -y install libgoogle-glog-dev libgflags-dev sudo apt-get -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get install libqtgui4 sudo apt-get install libqt4- מִבְחָן

עכשיו אנחנו יכולים פשוט להתקין את OpenCV עם קשרי פייתון בתוך ה- cv virtualenv (אתה עדיין נמצא בו, נכון?) באמצעות

pip התקן opencv-contrib-python

וזה הכל! יש לנו OpenCV מותקן ב- Raspberry Pi שלנו, מוכן לצלם תמונות וסרטונים, לתפעל אותם ולהיות מגניב.

בדוק זאת על ידי פתיחת מתורגמן פייתון ויבוא opencv ובדוק שאין טעויות:

(cv) pi@raspberrypi: ~ $ python

Python 3.5.3 (ברירת מחדל, 27 בספטמבר 2018, 17:25:39) [GCC 6.3.0 20170516] ב- Linux הקלד "עזרה", "זכויות יוצרים", "זיכויים" או "רישיון" למידע נוסף. >>> יבוא cv2 >>>

שלב 5: הגדרת TensorFlow

הגדרת TensorFlow
הגדרת TensorFlow

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

בעצם נעקוב אחר ההדרכה המעולה של Edje Electronics, עם שינויים המתאפשרים על ידי הפצות חדשות יותר של TensorFlow:

pi@raspberrypi: ~ $ workon cv

(cv) pi@raspberrypi: ~ $ pip install tensorflow (cv) pi@raspberrypi: ~ $ sudo apt-get install libxml2-dev libxslt-dev (cv) pi@raspberrypi: ~ $ pip להתקין כרית lxml jupyter matplotlib cython (cv) pi@raspberrypi: ~ $ sudo apt-get להתקין python-tk

כעת עלינו לאסוף את הפרוטובוף של גוגל. פשוט עקוב אחר ההוראות בשלב 4 של אותה הדרכה מצוינת

לבסוף, שיבוט והגדר את הגדרות המודל של TensorFlow - בצע את שלב 5 במדריך Edje Electronics

אל תהסס לעקוב אחר הדוגמה שלהם גם בשלב 6, זוהי מבוא מצוין לזיהוי אובייקטים ב- Raspberry Pi.

שלב 6: זיהוי תנועה באמצעות OpenCV

נתחיל בבדיקה ש- OpenCV יכול להתממשק עם מצלמת הרשת שלנו: ssh אל ה- Raspberry Pi, נעבור ל- cv virtualenv (workon cv), פתח מתורגמן פייתון (פשוט הקלד python) והזן את פקודות הפייתון הבאות:

יבוא cv2

cap = cv2. VideoCapture (0) cap.set (cv2. CAP_PROP_FRAME_WIDTH, 1920) cap.set (cv2. CAP_PROP_FRAME_HEIGHT, 1080) ret, frame = cap.read () הדפסה ('גודל מסגרת קריאה: {} x {}'.format (frame.shape [1], frame.shape [0])

עם כל מזל שתראו ש- OpenCV הצליח לקרוא מסגרת HD מהמצלמה.

אתה יכול להשתמש ב- cv2.imwrite (נתיב, מסגרת) כדי לכתוב את המסגרת הזו לדיסק ולהחזיר אותה בחזרה כדי להביט בפועל.

האסטרטגיה לזהות תנועה די פשוטה קדימה:

  1. עבודה על מסגרות ברזולוציה נמוכה יותר - אין צורך לפעול כאן ב- Full HD
  2. יתר על כן, טשטשו את התמונות בכדי להבטיח כמה שפחות רעש.
  3. שמור על ממוצע פועל של מסגרות N האחרונות. ליישום זה, שבו קצב המסגרות הוא סביב 1 FPS (רק בגלל ש- TensorFlow לוקח זמן לפריים), גיליתי ש- N = 60 מחזיר תוצאות טובות. ומכיוון שיישום זהיר אינו דורש יותר מעבד עם יותר מסגרות שזה בסדר (זה דורש יותר זיכרון - אבל זה זניח כאשר אנו עובדים עם מסגרות ברזולוציה נמוכה יותר)
  4. הפחת את התמונה הנוכחית מהממוצע הרץ (רק היזהר בהקלדה - עליך לאפשר ערכים חיוביים ושליליים [-255.. 255], כך שצריך להמיר את המסגרת ל- int)
  5. אתה יכול לבצע את החיסור בהמרה בקנה מידה אפור של המסגרת (והממוצע), או לעשות זאת בנפרד עבור כל אחד מערוצי ה- RGB ולאחר מכן לשלב את התוצאות (שזו האסטרטגיה שבחרתי, מה שהופך אותה לרגישה לשינויי צבע)
  6. השתמש בסף על הדלתא והסר רעש על ידי שחיקה והתרחבות
  7. לבסוף חפשו קווי מתאר של אזורים עם דלתא - אזורים אלה הם המקום בו התרחשה תנועה והתמונה הנוכחית שונה מהממוצע של תמונות קודמות. במידת הצורך, נוכל למצוא תיבות תוחמות לקווי מתאר אלה.

צירפתי את הקוד לשם כך בשיעור פייתון DeltaFinder שתוכל למצוא ב- github שלי כאן

שלב 7: איתור אובייקטים באמצעות TensorFlow

אם עקבת אחר הליך ההתקנה של TensorFlow, כבר בדקת שהתקנת TensorFlow ועובדת.

לצורך גילוי אנשים בסצנת חוץ כללית, מודלים שהוכשרו מראש על מערך הנתונים של COCO מתפקדים די טוב - שזה בדיוק הדגם שהורדנו בסוף ההתקנה של TensorFlow. אנחנו רק צריכים להשתמש בו להסקת מסקנות!

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

שלב 8: הגדר שרת אינטרנט ב- Raspberry Pi

הגדר שרת אינטרנט ב- Raspberry Pi
הגדר שרת אינטרנט ב- Raspberry Pi

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

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

אני מציע להתקין אותו ב- virtualenv חדש, כך:

pi@raspberrypi: ~ $ mkvirtualenv webserv

(webserv) pi@raspberrypi: ~ $ pip להתקין בקבוק

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

בדוק את ההתקנה שלך על ידי ביצוע מדריך ההתחלה המהירה של הבקבוק

שלב 9: התראות ניידות מ- Raspberry Pi באמצעות IFTTT

התראות ניידות מ- Raspberry Pi באמצעות IFTTT
התראות ניידות מ- Raspberry Pi באמצעות IFTTT

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

הנה איך לעשות זאת:

  1. צור חשבון IFTTT ב- ifttt.com
  2. בזמן הכניסה, עבור לדף הגדרות השירות של Webhook והזן את כתובת האתר בדפדפן שלך (משהו כמו https://maker.ifttt.com/use/. דף אינטרנט זה יראה לך את המפתח ואת כתובת האתר שבה אתה צריך להשתמש כדי להפעיל פעולות..
  3. צור יישומון IFTTT שייצור הודעה לנייד כאשר ה- Webhook יופעל עם פרטי האירוע:

    1. לחץ על "היישומונים שלי" ולאחר מכן על "יישום חדש".
    2. לחץ על "+זה" ובחר "webhooks". לחץ על "קבל בקשת אינטרנט" כדי להמשיך לפרטים
    3. תן לאירוע שלך שם, למשל "PoolEvent" ולחץ על "צור טריגר"
    4. לחץ על "+זה" ובחר "התראות". לאחר מכן בחר "שלח הודעה עשירה מאפליקציית IFTTT"
    5. עבור "כותרת" בחר משהו כמו "PoolPi"
    6. עבור "הודעה" כתוב "Pool Pi זוהה:" ולחץ על "הוסף מרכיב".. "Value1".
    7. חזור אל כתובת האתר שהעתקת בשלב 2. היא תציג את כתובת האתר לשימוש כדי להפעיל את היישומון החדש שנוצר. העתק את כתובת האתר הזו, והחליף את מציין המיקום {event} בשם האירוע (לדוגמה, PoolEvent)
  4. הורד, התקן והתחבר לאפליקציית IFTTT למכשיר הנייד שלך
  5. הפעל סקריפט פייתון זה ב- Raspberry Pi כדי לראות אותו פועל (שים לב שאולי ייקח כמה שניות או דקות להפעיל במכשיר הנייד שלך):

בקשות ייבוא

requests.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "שלום הודעות"})

שלב 10: הוסף כובע ממסר ל- Raspberry Pi וחבר אותו לשסתום סולנואיד

הוסף ממסר HAT ל- Raspberry Pi וחבר אותו לשסתום סולנואיד
הוסף ממסר HAT ל- Raspberry Pi וחבר אותו לשסתום סולנואיד
הוסף ממסר HAT ל- Raspberry Pi וחבר אותו לשסתום סולנואיד
הוסף ממסר HAT ל- Raspberry Pi וחבר אותו לשסתום סולנואיד
הוסף ממסר HAT ל- Raspberry Pi וחבר אותו לשסתום סולנואיד
הוסף ממסר HAT ל- Raspberry Pi וחבר אותו לשסתום סולנואיד

לפני שתמשיך בשלב זה כבה את ה- Raspberry Pi שלך: ssh אליו והקלד "כיבוי sudo כעת" ולאחר מכן נתק אותו מהחשמל

המטרה שלנו היא להדליק ולכבות את אספקת החשמל לשסתום סולנואיד - שסתום שיכול לפתוח או לסגור את אספקת המים בהתבסס על הספק 24V AC שהוא מקבל מאספקת חשמל. ממסרים הם הרכיבים החשמליים שיכולים לפתוח או לסגור מעגל המבוסס על אות דיגיטלי ש- Raspberry Pi שלנו יכול לספק. מה שאנחנו עושים כאן הוא לחבר ממסר לסיכות האות הדיגיטליות האלה של ה- Raspberry Pi, ולגרום לו לסגור את המעגל בין ספק הכוח 24V AC לבין שסתום הסולנואיד.

הסיכות ב- Raspberry Pi שיכולות לשמש ככניסה או פלט דיגיטאלי נקראות GPIO - קלט/פלט למטרה כללית והן מהוות את שורת 40 הפינים בצד של הפי. כאשר ה- Pi כבוי והכנס לתוכו את ממסר ה- HAT. ל- HAT שבחרתי יש 3 ממסרים, ואנו נשתמש רק באחד מהם. דמיין את כל מה שאתה יכול לעשות עם השניים האחרים:)

עכשיו הפעל שוב את ה- Raspberry Pi. נורית ה"הספק "האדומה על ממסר ה- HAT אמורה להידלק, מה שמעיד שהיא מקבלת חשמל מה- Pi דרך ה- GPIO. בואו נבדוק שנוכל לשלוט בזה: ssh לתוך ה- Pi שוב, הזן פייתון והקלד:

יבוא gpiozero

dev = gpiozero. DigitalOutputDevice (26, initial_value = True) dev.off ()

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

dev.on ()

מה שיסובב את הממסר למצב "כבוי" (מוזר, אני יודע …) ויוצא () מהפיתון.

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

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

שלב 11: חבר חיישן מפלס מים

חבר חיישן מפלס מים
חבר חיישן מפלס מים
חבר חיישן מפלס מים
חבר חיישן מפלס מים
חבר חיישן מפלס מים
חבר חיישן מפלס מים
חבר חיישן מפלס מים
חבר חיישן מפלס מים

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

כדי ש- Raspberry Pi יידע את הסטטוס של חיישן מפלס המים, אנו זקוקים ל- Pi כדי לחוש מעגל פתוח או סגור. למרבה המזל זה פשוט מאוד: אותם מחברי GPIO בהם אנו משתמשים כפלט דיגיטלי לשליטה בממסרים יכולים לשמש ככניסות (מכאן ה- I ב- GPIO). באופן ספציפי, אם נחבר חוט אחד של החיישן ל- 3.3V +במחבר GPIO וחוט החיישן השני לפין שאנו מגדירים ככניסה נפתחת (כלומר הוא יהיה בדרך כלל ברמת מתח GND), סיכה זו תמדוד מתח דיגיטלי "גבוה" או "מופעל" רק כאשר חיישן מפלס המים סוגר את המעגל - כאשר מפלס המים נמוך. השתמשתי בסיכה 16 של GPIO כקלט, שסימנתי בתמונה למעלה.

קוד הפיתון להגדרת הסיכה כקלט ובדיקת מצבו הנוכחי הוא:

יבוא gpiozero

level_input = gpiozero. Button (16) water_low = level_input.is_pressed

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

שלב 12: כתוב קוד כדי לקשור הכל ביחד

כתוב קוד כדי לקשור הכל ביחד
כתוב קוד כדי לקשור הכל ביחד

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

mkdir poolpi

cd poolpi git שיבוט

לאחר מכן, ערוך את הקבצים ששמם ifttt_url.txt בספריות motion_alert ו- water_level כך שיהיו להם כתובת האתר של וו IFTTT משלך עם המפתח הסודי שלך. תוכל להשתמש בשני ווים אינטרנט שונים לפעולות שונות.

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

  1. הפעל את שלוש התוכניות שלנו: גלאי האובייקטים, חיישן מפלס המים ושרת האינטרנט בכל הפעלה מחדש
  2. ניקוי מדריך הפלט, מחיקת תמונות ישנות וקבצי וידיאו ישנים (בחרתי למחוק קבצים מעל יום אחד ותמונות מעל 7 ימים - אל תהסס להתנסות)

כדי לעשות את זה סוג crontab -e שיפתח את עורך הטקסט הננו שלך. הוסף את השורות הבאות לתחתית הקובץ:

0 1 * * * find/home/pi/poolpi/output -type f -name " *.avi" -mtime +1 -delete

0 2 * * * find/home/pi/poolpi/output -type f -name " *.jpg" -mtime +7 -למחוק @reboot python3 /home/pi/poolpi/motion_alert/webserv/webserv.py @reboot python3 /home/pi/poolpi/motion_alert/motion_obj_alert.py @reboot python3 /home/pi/poolpi/water_level/test_water_level.py

לבסוף, הפעל מחדש את ה- Raspberry Pi שלך. כעת הוא מוכן לשמור על הבריכה מלאה ובטוחה.

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

עשייה שמחה!

אתגר IoT
אתגר IoT
אתגר IoT
אתגר IoT

מקום שני באתגר IoT

מוּמלָץ: