Πίνακας περιεχομένων:

Pool Pi Guy - AI Driven Alarm System and Pool Monitoring Using Raspberry Pi: 12 βήματα (με εικόνες)
Pool Pi Guy - AI Driven Alarm System and Pool Monitoring Using Raspberry Pi: 12 βήματα (με εικόνες)

Βίντεο: Pool Pi Guy - AI Driven Alarm System and Pool Monitoring Using Raspberry Pi: 12 βήματα (με εικόνες)

Βίντεο: Pool Pi Guy - AI Driven Alarm System and Pool Monitoring Using Raspberry Pi: 12 βήματα (με εικόνες)
Βίντεο: Vegan Since 1951! 32 Years Raw! A Natural Man of Many Skills; Mark Huberman 2024, Ιούλιος
Anonim
Pool Pi Guy - AI Driven Alarm System and Monitoring Pool Using Raspberry Pi
Pool Pi Guy - AI Driven Alarm System and Monitoring Pool Using Raspberry Pi

Το να έχεις μια πισίνα στο σπίτι είναι διασκεδαστικό, αλλά έρχεται με μεγάλη ευθύνη. Η μεγαλύτερη ανησυχία μου είναι η παρακολούθηση εάν κάποιος βρίσκεται κοντά στην πισίνα χωρίς επίβλεψη (ειδικά τα μικρότερα παιδιά). Η μεγαλύτερη ενόχλησή μου είναι να βεβαιωθώ ότι η γραμμή νερού της πισίνας δεν πηγαίνει ποτέ κάτω από την είσοδο της αντλίας, η οποία θα στεγνώσει την αντλία και θα την καταστρέψει κοστίζοντας $ $ $ σε επισκευές.

Πρόσφατα ανακάλυψα πώς να χρησιμοποιήσετε ένα Raspberry Pi με OpenCV και TensorFlow, μαζί με έναν αισθητήρα στάθμης νερού και μια ηλεκτρομαγνητική βαλβίδα για την επίλυση και των δύο ζητημάτων - και διασκεδάστε με αυτό!

Αποδεικνύεται επίσης ότι είναι ένα εξαιρετικό σύστημα συναγερμού - ενεργοποιημένη κίνηση, ελεγχόμενη με AI, απεριόριστα προσαρμόσιμη.

Ας βουτήξουμε.

Βήμα 1: Μεγάλο σχέδιο

Σε αυτό το διδακτικό θα δείξουμε πώς:

  1. Ρυθμίστε ένα Raspberry Pi με OpenCV και TensorFlow
  2. Συνδέστε μια κάμερα Web μέσω ενός μεγάλου καλωδίου USB
  3. Γράψτε έναν αλγόριθμο OpenCV για την ανίχνευση κίνησης
  4. Χρησιμοποιήστε το TensorFlow για ανίχνευση αντικειμένων
  5. Ρυθμίστε έναν διακομιστή ιστού στο Raspberry Pi για να εμφανίσετε τις ενδιαφέρουσες εικόνες
  6. Ενσωματωθείτε με το IFTTT για να ενεργοποιήσετε ειδοποιήσεις για κινητά σε περίπτωση που εντοπιστεί άτομο
  7. Συνδέστε ένα ρελέ HAT στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα που θα προσθέσει νερό στην πισίνα
  8. Συνδέστε έναν αισθητήρα στάθμης νερού στο Raspberry Pi και συνδεθείτε με αυτόν χρησιμοποιώντας το GPIO του Pi
  9. Γράψτε λίγο κώδικα για να τα κολλήσετε όλα μαζί

Βήμα 2: Λίστα αγορών

Λίστα με τα ψώνια
Λίστα με τα ψώνια

Όλα τα εξαρτήματα είναι άμεσα διαθέσιμα από την Amazon. Νιώστε ελεύθεροι να πειραματιστείτε και να ανταλλάξετε εξαρτήματα - αυτό είναι το μισό της διασκέδασης!

  1. Raspberry Pi
  2. Τροφοδοτικό Raspberry Pi (μην τσιγκουνευτείτε εδώ)
  3. Κάρτα μνήμης (μεγαλύτερη είναι καλύτερη)
  4. Θήκη (αυτή είναι αρκετά μεγάλη για να φιλοξενήσει τόσο το Pi όσο και το HAT)
  5. Κάμερα Web USB (οποιαδήποτε κάμερα θα το κάνει, αλλά θέλετε αυτή που να έχει καλές εικόνες και να εξισορροπεί τον φωτισμό καλά)
  6. Καλώδιο επέκτασης USB (εάν χρειάζεται - μετρήστε την απόσταση μεταξύ του Pi και του τόπου όπου θα τοποθετήσετε την κάμερα)
  7. Relay board HAT (αυτό έχει 3 ρελέ και χρειαζόμαστε μόνο ένα, αλλά θα βρείτε μια χρήση για τα άλλα αρκετά σύντομα!)
  8. Ηλεκτρομαγνητική βαλβίδα
  9. Ηλεκτρομαγνητική τοποθέτηση 1 και προσαρμογή 2 (αυτό εξαρτάται πραγματικά από το σε τι ταιριάζετε το σωληνοειδές, αλλά αυτά λειτούργησαν για μένα)
  10. Ηλεκτρομαγνητική τροφοδοσία (οποιοδήποτε 24V AC θα έκανε)
  11. Καλώδιο (πάλι, σχεδόν οποιοδήποτε καλώδιο 2 κλώνων θα έκανε - το ρεύμα είναι ελάχιστο)
  12. Water Level Float Switch (αυτό είναι μόνο ένα παράδειγμα, ελέγξτε τι μπορεί να συνδεθεί εύκολα με την πισίνα σας)
  13. Μερικά καλώδια Jumper και συνδετήρες καλωδίων

Βήμα 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, κάντε επανεκκίνηση και ssh σε αυτό - αν όλα λειτουργούσαν θα πρέπει να δείτε κάτι σαν αυτό:

Linux raspberrypi 4.14.98-v7+ #1200 SMP Τρίτη 12 Φεβρουαρίου 20:27:48 GMT 2019 armv7l

Τα προγράμματα που περιλαμβάνονται στο σύστημα Debian GNU/Linux είναι δωρεάν λογισμικό. οι ακριβείς όροι διανομής για κάθε πρόγραμμα περιγράφονται στα μεμονωμένα αρχεία στο/usr/share/doc/*/copyright. Το Debian GNU/Linux παρέχεται ΑΠΟΛΥΤΩΣ ΧΩΡΙΣ ΕΓΓΥΗΣΗ, στο βαθμό που επιτρέπεται από την ισχύουσα νομοθεσία. Τελευταία σύνδεση: Δευτέρα 13 Μαΐου 10:41:40 2019 από 104.36.248.13 pi@raspberrypi: ~ $

Βήμα 4: Ρύθμιση OpenCV

Ρύθμιση OpenCV
Ρύθμιση OpenCV

Το OpenCV είναι μια καταπληκτική συλλογή λειτουργιών χειρισμού εικόνας για όραση υπολογιστή. Θα μας επιτρέψει να διαβάσουμε εικόνες από την κάμερα Web, να τις χειριστούμε για να βρούμε περιοχές κίνησης, να τις αποθηκεύσουμε και πολλά άλλα. Η εγκατάσταση στο Raspberry Pi δεν είναι δύσκολη αλλά απαιτεί κάποια προσοχή.

Ξεκινήστε εγκαθιστώντας το virtaulenvwrapper: θα χρησιμοποιήσουμε το python για να κάνουμε όλο τον προγραμματισμό μας και το virtualenv θα μας βοηθήσει να κρατήσουμε τις εξαρτήσεις ξεχωριστές για το OpenCV και το TensorFlow έναντι του Flask ή του GPIO:

pi@raspberrypi: su $ sudo pip install virtualenvwrapper

Τώρα μπορείτε να εκτελέσετε "mkvirtualenv" για να δημιουργήσετε ένα νέο περιβάλλον, "workon" για να το δουλέψετε και πολλά άλλα.

Λοιπόν, ας δημιουργήσουμε ένα περιβάλλον για τον χειρισμό της εικόνας μας, με τον python 3 ως προεπιλεγμένο διερμηνέα (είναι το 2019, δεν υπάρχει λόγος να κολλήσουμε με τον παλαιότερο python 2):

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi@raspberrypi:

Είμαστε τώρα έτοιμοι να εγκαταστήσουμε το OpenCV. Θα ακολουθήσουμε κυρίως το εξαιρετικό σεμινάριο στο Learn OpenCV. Ακολουθήστε συγκεκριμένα το βήμα 1 και 2:

sudo apt -y updatesudo apt -y upgrade ## Εγκατάσταση εξαρτήσεων sudo apt-get -y εγκατάσταση build-basic checkinstall cmake pkg-config yasm sudo apt-get -y install git gfortran sudo apt-get -y install libjpeg8-dev libjasper- dev libpng12-dev sudo apt-get -y install libtiff5-dev sudo apt-get -y install libtiff-dev sudo apt-get -y install 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 -y install libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y install libavresample-dev sudo apt-get -y install 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 με δεσμούς python μέσα στο cv virtualenv (είστε ακόμα σε αυτό, σωστά;) χρησιμοποιώντας

pip εγκατάσταση opencv-contrib-python

Και αυτό είναι! Έχουμε εγκατεστημένο το OpenCV στο Raspberry Pi, έτοιμο να τραβήξει φωτογραφίες και βίντεο, να τα χειριστεί και να είναι ψύχραιμα.

Ελέγξτε ότι ανοίγοντας έναν διερμηνέα python και εισάγοντας 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. Η απόδοση των ελαφρών μοντέλων του στο μικροσκοπικό Pi είναι περίπου 1 καρέ ανά δευτερόλεπτο, το οποίο είναι απόλυτα κατάλληλο για εφαρμογές όπως η δική μας.

Θα ακολουθήσουμε βασικά το εξαιρετικό σεμινάριο της 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 install μαξιλάρι lxml jupyter matplotlib cython (cv pi@raspberrypi: su $ sudo apt-get install python-tk

Τώρα πρέπει να μεταγλωττίσουμε το protobuf της Google. Απλώς ακολουθήστε τις οδηγίες στο βήμα 4 του ίδιου εξαιρετικού σεμιναρίου

Τέλος, κλωνοποιήστε και ρυθμίστε τους ορισμούς του μοντέλου TensorFlow - ακολουθήστε το βήμα 5 στο φροντιστήριο Edje Electronics

Ακολουθήστε ελεύθερα το παράδειγμά τους και στο βήμα 6, είναι μια εξαιρετική εισαγωγή στην ανίχνευση αντικειμένων στο Raspberry Pi.

Βήμα 6: Ανίχνευση κίνησης με χρήση OpenCV

Ας ξεκινήσουμε δοκιμάζοντας ότι το OpenCV μπορεί να διασυνδεθεί με την κάμερά μας: ssh στο Raspberry Pi, μεταβείτε στο cv virtualenv (workon cv), ανοίξτε έναν διερμηνέα python (απλώς πληκτρολογήστε python) και εισαγάγετε τις ακόλουθες εντολές 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 () print ('Read size frame: {} x {}'. μορφή (frame.shape [1], frame.shape [0])

Με κάθε τύχη θα δείτε ότι το OpenCV μπόρεσε να διαβάσει ένα καρέ HD από την κάμερα.

Μπορείτε να χρησιμοποιήσετε το cv2.imwrite (διαδρομή, πλαίσιο) για να γράψετε αυτό το πλαίσιο στο δίσκο και να το επαναφέρετε για να το δείτε.

Η στρατηγική ανίχνευσης κίνησης είναι αρκετά απλή:

  1. Εργαστείτε σε πλαίσια χαμηλότερης ανάλυσης - δεν χρειάζεται να λειτουργείτε εδώ σε Full HD
  2. Επιπλέον, θολώστε τις εικόνες για να εξασφαλίσετε όσο το δυνατόν λιγότερο θόρυβο.
  3. Διατηρήστε τον μέσο όρο λειτουργίας των τελευταίων Ν καρέ. Για αυτήν την εφαρμογή, όπου ο ρυθμός καρέ είναι περίπου 1 FPS (μόνο και μόνο επειδή το TensorFlow χρειάζεται λίγο χρόνο ανά πλαίσιο), διαπίστωσα ότι το N = 60 επιστρέφει καλά αποτελέσματα. Και δεδομένου ότι μια προσεκτική εφαρμογή δεν απαιτεί περισσότερη CPU με περισσότερα πλαίσια που είναι εντάξει (χρειάζεται περισσότερη μνήμη - αλλά αυτό είναι αμελητέο όταν δουλεύουμε με τα πλαίσια χαμηλότερης ανάλυσης)
  4. Αφαιρέστε την τρέχουσα εικόνα από τον τρέχοντα μέσο όρο (απλά προσέξτε με την πληκτρολόγηση - πρέπει να επιτρέψετε θετικές και αρνητικές τιμές [-255.. 255], οπότε το πλαίσιο πρέπει να μετατραπεί σε int)
  5. Μπορείτε να εκτελέσετε την αφαίρεση σε μετατροπή γκρι κλίμακας του πλαισίου (και του μέσου όρου) ή να το κάνετε ξεχωριστά για καθένα από τα κανάλια RGB και στη συνέχεια να συνδυάσετε τα αποτελέσματα (η οποία είναι η στρατηγική που επέλεξα, καθιστώντας την ευαίσθητη στις αλλαγές χρώματος)
  6. Χρησιμοποιήστε ένα κατώφλι στο δέλτα και αφαιρέστε τον θόρυβο από τη διάβρωση και τη διαστολή
  7. Τέλος αναζητήστε περιγράμματα περιοχών με δέλτα - αυτές οι περιοχές είναι εκεί όπου έχει συμβεί κίνηση και η τρέχουσα εικόνα είναι διαφορετική από τον μέσο όρο των προηγούμενων εικόνων. Μπορούμε να βρούμε περαιτέρω κουτιά οριοθέτησης για αυτά τα περιγράμματα, αν χρειαστεί.

Έχω ενσωματώσει τον κώδικα για να το κάνω αυτό στην τάξη python DeltaFinder που μπορείτε να βρείτε στο github μου εδώ

Βήμα 7: Ανίχνευση αντικειμένων χρησιμοποιώντας το TensorFlow

Εάν έχετε ακολουθήσει τη διαδικασία εγκατάστασης του TensorFlow, έχετε ήδη δοκιμάσει ότι έχετε εγκαταστήσει και λειτουργεί το TensorFlow.

Για τον εντοπισμό ατόμων σε μια γενική υπαίθρια σκηνή, τα μοντέλα που έχουν προ -εκπαιδευτεί στο σύνολο δεδομένων COCO αποδίδουν αρκετά καλά - το οποίο είναι ακριβώς το μοντέλο που έχουμε κατεβάσει στο τέλος της εγκατάστασης TensorFlow. Απλά πρέπει να το χρησιμοποιήσουμε για συμπεράσματα!

Και πάλι, έχω ενσωματώσει τη φόρτωση και το συμπέρασμα του μοντέλου στην κλάση python TFClassify για να διευκολύνουμε τα πράγματα, τα οποία μπορείτε να βρείτε εδώ.

Βήμα 8: Ρύθμιση διακομιστή Web στο Raspberry Pi

Ρύθμιση διακομιστή Web στο Raspberry Pi
Ρύθμιση διακομιστή Web στο Raspberry Pi

Ο ευκολότερος τρόπος πρόσβασης στα αποτελέσματα ανίχνευσης αντικειμένων είναι ένα πρόγραμμα περιήγησης ιστού, οπότε ας δημιουργήσουμε έναν διακομιστή ιστού στο Raspberry Pi. Στη συνέχεια, μπορούμε να το ρυθμίσουμε για την προβολή εικόνων από έναν δεδομένο κατάλογο.

Υπάρχουν πολλές επιλογές για ένα πλαίσιο διακομιστή ιστού. Επέλεξα το Flask. Είναι εξαιρετικά διαμορφώσιμο και εύκολο να επεκταθεί με την Python. Δεδομένου ότι η "κλίμακα" που χρειαζόμαστε είναι ασήμαντη, ήταν κάτι παραπάνω από αρκετή.

Προτείνω να το εγκαταστήσετε σε ένα νέο virtualenv, οπότε:

pi@raspberrypi:. $ mkvirtualenv webserv

(webserv) pi@raspberrypi: ~ $ pip install Flask

Σημειώστε ότι με μια κανονική ρύθμιση δικτύου θα είναι προσβάσιμο μόνο όταν το πρόγραμμα περιήγησής σας είναι στο ίδιο ασύρματο LAN με το Raspberry Pi. Θα μπορούσατε να δημιουργήσετε μια διαμόρφωση χαρτογράφησης θύρας / NAT στο δρομολογητή σας στο Διαδίκτυο για να επιτρέψετε την εξωτερική πρόσβαση - αλλά σας το προτείνω. Ο κώδικας που έγραψα δεν επιχειρεί να παρέχει την ασφάλεια που θα χρειάζεστε όταν επιτρέπετε γενική πρόσβαση στο Διαδίκτυο στο Raspberry Pi σας.

Δοκιμάστε την εγκατάστασή σας ακολουθώντας τον οδηγό γρήγορης εκκίνησης Flask

Βήμα 9: Ειδοποιήσεις για κινητά από το Raspberry Pi χρησιμοποιώντας το IFTTT

Ειδοποιήσεις για κινητά από το Raspberry Pi χρησιμοποιώντας το IFTTT
Ειδοποιήσεις για κινητά από το Raspberry Pi χρησιμοποιώντας το IFTTT

Θέλω πολύ να λαμβάνω ειδοποιήσεις για κινητά όταν συμβαίνουν συμβάντα. Σε αυτή την περίπτωση, όταν εντοπίζεται ένα άτομο και όταν η στάθμη του νερού πέφτει χαμηλά. Ο πιο απλός τρόπος που βρήκα για να το κάνω αυτό, χωρίς να χρειάζεται να γράψω μια προσαρμοσμένη εφαρμογή για κινητά, είναι η χρήση του IFTTT. Το IFTTT σημαίνει "If This Then That" και επιτρέπει σε πολλούς τύπους γεγονότων να ενεργοποιήσουν πολλούς τύπους ενεργειών. Στην περίπτωσή μας, μας ενδιαφέρει η σκανδάλη IFTTT Maker Webhook. Αυτό μας επιτρέπει να ενεργοποιήσουμε μια ενέργεια IFTTT κάνοντας ένα αίτημα HTTP POST στον διακομιστή IFTTT με ένα ειδικό κλειδί που έχει εκχωρηθεί στον λογαριασμό μας, μαζί με δεδομένα που καθορίζουν τι συνέβη. Η ενέργεια που κάνουμε μπορεί να είναι τόσο απλή όσο η δημιουργία ειδοποίησης στην κινητή συσκευή μας χρησιμοποιώντας την εφαρμογή IFTTT για κινητά ή οτιδήποτε πιο περίπλοκο από αυτό.

Εδώ είναι πώς να το κάνετε αυτό:

  1. Δημιουργήστε έναν λογαριασμό IFTTT στο ifttt.com
  2. Ενώ είστε συνδεδεμένοι, μεταβείτε στη σελίδα ρυθμίσεων υπηρεσίας Webhook και εισαγάγετε τη διεύθυνση URL στο πρόγραμμα περιήγησής σας (κάτι σαν https://maker.ifttt.com/use/. Αυτή η ιστοσελίδα θα σας δείξει το κλειδί σας και τη διεύθυνση URL που θα χρησιμοποιήσετε για την ενεργοποίηση ενεργειών Το
  3. Δημιουργήστε μια μικροεφαρμογή IFTTT που θα δημιουργήσει μια ειδοποίηση για κινητά όταν ενεργοποιηθεί το Webhook με τις λεπτομέρειες του συμβάντος:

    1. Κάντε κλικ στο "My Applets" και στη συνέχεια στο "New Applet".
    2. Κάντε κλικ στο "+αυτό" και επιλέξτε "webhooks". Κάντε κλικ στην επιλογή "Λήψη αιτήματος ιστού" για να προχωρήσετε στις λεπτομέρειες
    3. Δώστε ένα όνομα στην εκδήλωσή σας, π.χ. "PoolEvent" και κάντε κλικ στην επιλογή "Δημιουργία σκανδάλης"
    4. Κάντε κλικ στο "+αυτό" και επιλέξτε "ειδοποιήσεις". Στη συνέχεια, επιλέξτε "Αποστολή εμπλουτισμένης ειδοποίησης από την εφαρμογή IFTTT"
    5. Για "τίτλο" επιλέξτε κάτι σαν "PoolPi"
    6. Για "μήνυμα" γράψτε "Η ομάδα Pi εντοπίστηκε:" και κάντε κλικ στην επιλογή "προσθήκη συστατικού".. "Value1".
    7. Επιστρέψτε στη διεύθυνση URL που αντιγράψατε στο βήμα 2. Θα εμφανίσει τη διεύθυνση URL που θα χρησιμοποιηθεί για την κλήση της νεοδημιουργημένης μικροεφαρμογής σας. Αντιγράψτε αυτήν τη διεύθυνση URL, αντικαθιστώντας το σύμβολο κράτησης θέσης {event} με το όνομα του συμβάντος (στο παράδειγμα PoolEvent)
  4. Κατεβάστε, εγκαταστήστε και συνδεθείτε στην εφαρμογή IFTTT για την κινητή συσκευή σας
  5. Εκτελέστε αυτό το σενάριο python στο Raspberry Pi για να το δείτε να λειτουργεί (σημειώστε ότι μπορεί να χρειαστούν μερικά δευτερόλεπτα ή λεπτά για να ενεργοποιηθεί στην κινητή συσκευή σας):

αιτήματα εισαγωγής

request.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Γεια σας ειδοποιήσεις"})

Βήμα 10: Προσθέστε ένα HAT Relay στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα

Προσθέστε ένα Relay HAT στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα
Προσθέστε ένα Relay HAT στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα
Προσθέστε ένα Relay HAT στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα
Προσθέστε ένα Relay HAT στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα
Προσθέστε ένα Relay HAT στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα
Προσθέστε ένα Relay HAT στο Raspberry Pi και συνδέστε το σε μια ηλεκτρομαγνητική βαλβίδα

Πριν προχωρήσετε σε αυτό το βήμα ΑΠΕΝΕΡΓΟΠΟΙΗΣΤΕ το Raspberry Pi: ssh σε αυτό και πληκτρολογήστε "sudo shutdown now" και μετά αποσυνδέστε το από το ρεύμα

Ο στόχος μας είναι να ενεργοποιήσουμε και να απενεργοποιήσουμε την παροχή ρεύματος σε μια ηλεκτρομαγνητική βαλβίδα - μια βαλβίδα που μπορεί να ανοίξει ή να κλείσει την παροχή νερού με βάση την τροφοδοσία 24V AC που λαμβάνει από ένα τροφοδοτικό. Τα ρελέ είναι τα ηλεκτρικά εξαρτήματα που μπορούν να ανοίξουν ή να κλείσουν ένα κύκλωμα με βάση ένα ψηφιακό σήμα που μπορεί να παρέχει το Raspberry Pi. Αυτό που κάνουμε εδώ είναι να συνδέσουμε ένα ρελέ σε αυτές τις ακίδες ψηφιακού σήματος του Raspberry Pi και να το κλείσουμε το κύκλωμα μεταξύ της τροφοδοσίας 24V AC και της ηλεκτρομαγνητικής βαλβίδας.

Οι ακίδες στο Raspberry Pi που μπορούν να λειτουργήσουν ως ψηφιακή είσοδος ή έξοδος ονομάζονται GPIO - Γενικής Χρήσης Εισόδου/Εξόδου και είναι η σειρά των 40 ακίδων στο πλάι του Pi. Με το Pi απενεργοποιημένο και τοποθετήστε το HAT του ρελέ σταθερά σε αυτό. Το ΚΑΠΕΛΟ που επέλεξα έχει 3 ρελέ και θα χρησιμοποιήσουμε μόνο ένα από αυτά. Φανταστείτε το μόνο που μπορείτε να κάνετε με τα άλλα δύο:)

Τώρα ενεργοποιήστε ξανά το Raspberry Pi. Το κόκκινο LED "ισχύος" στο ρελέ HAT πρέπει να ανάψει, υποδεικνύοντας ότι παίρνει ενέργεια από το Pi μέσω του GPIO. Ας δοκιμάσουμε ότι μπορούμε να το ελέγξουμε: ssh ξανά στο Pi, πληκτρολογήστε python και πληκτρολογήστε:

εισαγωγή gpiozero

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

Θα πρέπει να ακούσετε ένα ηχητικό "κλικ", που υποδεικνύει ότι το ρελέ είναι ενεργοποιημένο και να δείτε μια λυχνία LED να ανάβει, δείχνοντας ότι το πρώτο ρελέ βρίσκεται στη συνδεδεμένη θέση. Τώρα μπορείτε να πληκτρολογήσετε

dev.on ()

Που θα έστρεφε το ρελέ στη θέση "off" (περίεργο, το ξέρω …) και θα βγει () από τον python.

Τώρα χρησιμοποιώντας καλώδια βραχυκυκλωτήρων και το μακρύτερο καλώδιο συνδέστε το ρελέ μεταξύ της τροφοδοσίας 24V και της ηλεκτρομαγνητικής βαλβίδας. Δείτε το διάγραμμα. Τέλος, συνδέστε την ηλεκτρομαγνητική βαλβίδα σε μια βρύση χρησιμοποιώντας τους προσαρμογείς και ετοιμαστείτε να τα δοκιμάσετε όλα επαναλαμβάνοντας τις παραπάνω εντολές - θα πρέπει να ανοίγουν και να κλείνουν το νερό.

Συνδέστε έναν σωλήνα στην ηλεκτρομαγνητική βαλβίδα και βάλτε το άλλο άκρο βαθιά στην πισίνα. Έχετε τώρα ένα σύστημα εκκίνησης πισίνας ελεγχόμενο από υπολογιστή και ήρθε η ώρα να συνδέσετε έναν αισθητήρα για να του πείτε πότε θα εκτελεστεί.

Βήμα 11: Συνδέστε έναν αισθητήρα στάθμης νερού

Συνδέστε έναν αισθητήρα στάθμης νερού
Συνδέστε έναν αισθητήρα στάθμης νερού
Συνδέστε έναν αισθητήρα στάθμης νερού
Συνδέστε έναν αισθητήρα στάθμης νερού
Συνδέστε έναν αισθητήρα στάθμης νερού
Συνδέστε έναν αισθητήρα στάθμης νερού
Συνδέστε έναν αισθητήρα στάθμης νερού
Συνδέστε έναν αισθητήρα στάθμης νερού

Ένας αισθητήρας στάθμης νερού είναι απλά ένας πλωτήρας που συνδέει ένα ηλεκτρικό κύκλωμα όταν ο πλωτήρας είναι κάτω και το σπάει όταν επιπλέει. Εάν το τοποθετήσετε στην πισίνα στο σωστό ύψος, ο πλωτήρας θα ανέβει όταν η στάθμη του νερού είναι επαρκής, αλλά θα πέσει κάτω όταν δεν υπάρχει αρκετό νερό.

Για να μάθει το Raspberry Pi την κατάσταση του αισθητήρα στάθμης νερού, χρειαζόμαστε το Pi για να αισθανθεί ένα ανοιχτό ή κλειστό κύκλωμα. Ευτυχώς αυτό είναι πολύ απλό: οι ίδιοι σύνδεσμοι GPIO που χρησιμοποιούμε ως ψηφιακή έξοδος για τον έλεγχο των ρελέ μπορούν να λειτουργήσουν ως είσοδοι (επομένως το I στο GPIO). Συγκεκριμένα, εάν συνδέσουμε το ένα καλώδιο του αισθητήρα σε +3.3V στην υποδοχή GPIO και το άλλο καλώδιο αισθητήρα σε έναν πείρο που έχουμε διαμορφώσει ως πτυσσόμενη είσοδο (που σημαίνει ότι θα είναι κανονικά σε επίπεδο τάσης GND), ο πείρος αυτός θα μετρήσει μια ψηφιακή τάση "υψηλής" ή "ενεργοποίησης" μόνο όταν ο αισθητήρας στάθμης νερού κλείνει το κύκλωμα - όταν η στάθμη του νερού είναι χαμηλή. Χρησιμοποίησα το GPIO pin 16 ως είσοδο, το οποίο επισήμανα στην παραπάνω εικόνα.

Ο κώδικας python για τη διαμόρφωση του pin ως είσοδο και τον έλεγχο της τρέχουσας κατάστασής του είναι:

εισαγωγή gpiozero

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

Μια πιθανή πρόκληση είναι ότι όταν ο αισθητήρας απλώς αλλάζει κατάσταση, θα ταλαντεύεται γρήγορα μεταξύ των καταστάσεων ενεργοποίησης και απενεργοποίησης. Η λύση σε αυτό είναι γνωστή ως "debouncing" και αναζητά μια συνεπή αλλαγή της κατάστασης πριν αναλάβει δράση. Η βιβλιοθήκη GPIOZERO έχει κώδικα για να το κάνει αυτό, αλλά για κάποιο λόγο αυτός ο κώδικας δεν λειτούργησε καλά για μένα. Έγραψα έναν απλό βρόχο για να ενεργοποιήσω ειδοποιήσεις IFTTT όταν εντοπιστεί μια συνεπής αλλαγή κατάστασης, την οποία μπορείτε να βρείτε στο αποθετήριο μου εδώ.

Βήμα 12: Γράψτε κώδικα για να τα συνδέσετε όλα μαζί

Γράψτε κώδικα για να τα δέσετε όλα μαζί
Γράψτε κώδικα για να τα δέσετε όλα μαζί

Αυτό είναι. Η ρύθμιση μας ολοκληρώθηκε. Μπορείτε να γράψετε τον δικό σας κώδικα για να συνδέσετε τα πράγματα σε ένα πλήρες σύστημα ή να χρησιμοποιήσετε τον κώδικα που παρέχω. Για να το κάνετε αυτό, απλά δημιουργήστε τη δομή καταλόγου και κλωνοποιήστε το αποθετήριο, όπως παρακάτω:

mkdir poolpi

cd poolpi git clone

Στη συνέχεια, επεξεργαστείτε τα αρχεία που ονομάζονται ifttt_url.txt στους καταλόγους motion_alert και water_level για να έχετε τη διεύθυνση URL για το δικό σας γάντζο ιστού IFTTT με το μυστικό κλειδί σας. Θα μπορούσατε να χρησιμοποιήσετε δύο διαφορετικά αγκίστρια ιστού για διαφορετικές ενέργειες.

Τέλος, θέλουμε αυτός ο κώδικας να εκτελείται αυτόματα. Ο ευκολότερος τρόπος για να το πετύχετε αυτό είναι μέσω της υπηρεσίας crontab Linux. Μπορούμε να προσθέσουμε μερικές γραμμές crontab για δύο κύριες εργασίες:

  1. Εκτελέστε τα τρία προγράμματά μας: τον ανιχνευτή αντικειμένων, τον αισθητήρα στάθμης νερού και τον διακομιστή ιστού σε κάθε επανεκκίνηση
  2. Εκκαθάριση του καταλόγου εξόδου, διαγραφή παλιών εικόνων και παλιών αρχείων βίντεο (επέλεξα να διαγράψω αρχεία παλαιότερα από 1 ημέρα και φωτογραφίες παλαιότερα από 7 ημέρες - πειραματιστείτε ελεύθερα)

Για να κάνετε αυτόν τον τύπο crontab -e που θα ανοίξει το πρόγραμμα επεξεργασίας κειμένου nano. Προσθέστε τις ακόλουθες γραμμές στο κάτω μέρος του αρχείου:

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 -delete @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 Challenge
IoT Challenge
IoT Challenge
IoT Challenge

Δευτέρα στο IoT Challenge

Συνιστάται: