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

Raspberry Pi Human Detector + Camera + Flask: 6 βήματα
Raspberry Pi Human Detector + Camera + Flask: 6 βήματα

Βίντεο: Raspberry Pi Human Detector + Camera + Flask: 6 βήματα

Βίντεο: Raspberry Pi Human Detector + Camera + Flask: 6 βήματα
Βίντεο: Raspberry Pi 3 Tutorial - How to Set Up for Gaming & Entertainment Projects 2024, Νοέμβριος
Anonim
Ανιχνευτής Raspberry Pi Human + Camera + Flask
Ανιχνευτής Raspberry Pi Human + Camera + Flask

Σε αυτό το σεμινάριο, θα ακολουθήσω τα βήματα για το Raspberry Pi IoT Project - Χρήση αισθητήρα κίνησης PIR, μονάδα Raspberry Camera για δημιουργία απλής συσκευής ασφαλείας IoT και Πρόσβαση στο αρχείο καταγραφής ανίχνευσης με το Flask.

Βήμα 1: Αισθητήρας κίνησης PIR

Αισθητήρας κίνησης PIR
Αισθητήρας κίνησης PIR

Το PIR σημαίνει "Παθητικό Υπέρυθρο" και αυτός ο αισθητήρας κίνησης συλλέγει κινήσεις παρακολουθώντας την προβολή υπέρυθρων ακτίνων και επισημαίνοντας τις υπέρυθρες αλλαγές. Επομένως, με ένα φύλλο και έναν άνθρωπο να περνά τον αισθητήρα, ανιχνεύει μόνο τον άνθρωπο αφού εμείς ως άνθρωποι παράγουμε θερμότητα και έτσι εκπέμπουμε υπέρυθρες ακτίνες. Ως εκ τούτου, ο αισθητήρας κίνησης είναι μια καλή επιλογή για την ανίχνευση ανθρώπινων κινήσεων.

Βήμα 2: Ρύθμιση αισθητήρα κίνησης PIR

Ρύθμιση αισθητήρα κίνησης PIR
Ρύθμιση αισθητήρα κίνησης PIR

Υπάρχουν τρεις ακίδες για αισθητήρα κίνησης PIR, Power, Output και Ground. Κάτω από τις καρφίτσες μπορείτε να δείτε τις ετικέτες, VCC for Power, Out for Output και GND για γείωση. Όταν ο αισθητήρας ανιχνεύσει κινήσεις, ο πείρος εξόδου θα εξάγει ένα σήμα HIGH στην ακίδα Raspberry Pi με την οποία συνδέετε τον αισθητήρα. Για το Power pin, θέλετε να βεβαιωθείτε ότι συνδέεται με τον ακροδέκτη 5V στο Raspberry Pi για ισχύ. Για το έργο μου, επιλέγω να συνδέσω το pin Output με το Pin11 στο Pi.

Αφού συνδέσετε τα πάντα, μπορείτε να στείλετε κείμενο στον αισθητήρα σας εκτελώντας σενάρια όπως το παρακάτω:

εισαγωγή RPi. GPIO ως GPIOimport time GPIO.cleanup () GPIO.setwarnings (False) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #Read out output from PIR sensor sensor on Pin 11 while True: i = GPIO.input (11) εάν i == 0: #Όταν η έξοδος από τον αισθητήρα κίνησης είναι LOW print "No detection", i time.sleep (0.1) elif i == 1: #Όταν η έξοδος από τον αισθητήρα κίνησης είναι Υψηλή εκτύπωση " Ανίχνευση κίνησης ", i time.sleep (0,1)

Εκτελέστε το σενάριο στο Pi σας και βάλτε τα χέρια σας ή τον φίλο σας μπροστά από τον αισθητήρα για να ελέγξετε αν ο αισθητήρας αυξάνει την κίνηση.

Βήμα 3: Ενότητα και εγκατάσταση Raspberry Pi Camera

Ενότητα και ρύθμιση της κάμερας Raspberry Pi
Ενότητα και ρύθμιση της κάμερας Raspberry Pi

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

Για να χρησιμοποιήσετε τη μονάδα κάμερας, πρέπει πρώτα να βεβαιωθείτε ότι οι ακίδες είναι συνδεδεμένες στην υποδοχή κάμερας στο Pi. Τύπος

sudo raspi-config

στο Pi σας για να ανοίξετε τη διεπαφή διαμόρφωσης και ενεργοποιήστε την κάμερα στις "επιλογές διασύνδεσης". Μετά την επανεκκίνηση, μπορείτε να ελέγξετε εάν το Pi είναι πραγματικά συνδεδεμένο με την κάμερα πληκτρολογώντας

vcgencmd get_camera

και θα σας δείξει την κατάσταση. Το τελευταίο βήμα είναι να εγκαταστήσετε τη μονάδα picamera πληκτρολογώντας

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 από ημερομηνία ώρας εισαγωγή ημερομηνίας ώρας εισαγωγής χρόνου από την εισαγωγή PiCamera της picamera

GPIO.cleanup ()

GPIO.setwarnings (False) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #Read out output from PIR sensor sensor message = 'start' counter = 0 log_f = open ('static/log.txt', 'w') log_f.close ()

κάμερα = PiCamera ()

pic_name = 0

camera.start_preview ()

ώρα. ύπνος (2)

ενώ True:

i = GPIO.input (11) αν i == 0: #Όταν η έξοδος από τον αισθητήρα κίνησης είναι LOW αν ο μετρητής> 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 (τελικό) μετρητή = 0 εκτύπωση "Χωρίς εισβολείς", i time.sleep (0.1) elif i == 1: #Όταν η έξοδος από τον αισθητήρα κίνησης είναι Υ HIGHΗΛΗ αν ο μετρητής == 0: current = str (datetime.now ()) μήνυμα = 'Ανιχνεύτηκε άνθρωπος:' + 'ξεκινάει από' + τρέχων μετρητής = μετρητής + 1 εκτύπωση "Εντοπίστηκε εισβολέας", i time.sleep (0.1) camera.stop_preview ()

Οι κατάλογοι για το 'log.txt' και τις εικόνες είναι 'στατικοί', κάτι που είναι απαραίτητο για να λειτουργήσει το Flask.

Βήμα 5: Ρύθμιση για φιάλη

Ρύθμιση για φιάλη
Ρύθμιση για φιάλη

Το Flask είναι ένα micro web πλαίσιο γραμμένο σε Python και βασίζεται στην εργαλειοθήκη Werkzeug και στο πρότυπο κινητήρα Jinja2. Είναι εύκολο να εφαρμοστεί και να διατηρηθεί. Για ένα καλύτερο σεμινάριο για το Flask, προτείνω αυτόν τον σύνδεσμο: Flask Mega Tutorial

Το κύριο σενάριο, 'route.py', του έργου μου:

από appfolder εισαγωγή appFlaskfrlas φιάλη εισαγωγής

APP_ROOT = os.path.dirname (os.path.abspath (_ file_)) # αναφέρεται στο application_top

APP_STATIC = os.path.join (APP_ROOT, «στατικό»)

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

def view (): log_f = open (os.path.join (APP_STATIC, 'log.txt'), 'r') logs = log_f.readlines () final_logs = για log 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 / route.py templates / view.html static / log.txt 0-j.webp

Βήμα 6: Αποτέλεσμα

Αποτέλεσμα
Αποτέλεσμα

Για αυτήν την εφαρμογή, αφού ρυθμιστούν όλα σωστά, θα πρέπει να έχετε πρόσβαση στο Raspberry Pi πληκτρολογώντας τη διεύθυνση IP του στο πρόγραμμα περιήγησης και το αποτέλεσμα θα μοιάζει με εικόνα στην επάνω γραμμή σε αυτό το βήμα.