Sadržaj:
- Korak 1: PIR senzor pokreta
- Korak 2: Postavljanje PIR senzora pokreta
- Korak 3: Modul i podešavanje kamere Raspberry Pi
- Korak 4: Kombinirajte PIR senzor pokreta i modul kamere
- Korak 5: Postavljanje za Flask
- Korak 6: Rezultat
Video: Ljudski detektor Raspberry Pi + kamera + bočica: 6 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
U ovom vodiču ću proći kroz korake za svoj Raspberry Pi IoT projekat - Korišćenjem PIR senzora pokreta, modula Raspberry Camera za izgradnju jednostavnog sigurnosnog IoT uređaja i pristupom evidenciji otkrivanja pomoću Flaska.
Korak 1: PIR senzor pokreta
PIR označava "pasivno infracrveno" i ovaj senzor pokreta hvata pokrete gledajući infracrveni prikaz i uzimajući infracrvene promjene. Stoga, s listom i čovjekom koji prolazi pored senzora, detektira samo čovjeka jer mi kao ljudi stvaramo toplinu i tako emitiramo infracrveni zrak. Stoga je senzor pokreta dobar izbor za otkrivanje ljudskih pokreta.
Korak 2: Postavljanje PIR senzora pokreta
Postoje tri pina za PIR senzor pokreta, napajanje, izlaz i uzemljenje. Ispod pinova možete vidjeti oznake, VCC za napajanje, Out za izlaz i GND za uzemljenje. Kada senzor detektira pokrete, izlazni pin će emitirati VISOKI signal na pin Raspberry Pi s kojim povezujete senzor. Za Power pin, želite biti sigurni da je spojen na 5V pin na Raspberry Pi radi napajanja. Za svoj projekt, odlučio sam spojiti izlazni pin sa Pin11 na Pi.
Nakon što sve povežete, možete poslati tekstualnu poruku svom senzoru pokretanjem skripti poput ove u nastavku:
uvesti RPi. GPIO kao GPIOimport vrijeme GPIO.cleanup () GPIO.setwarnings (False) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #Pročitajte izlaz sa PIR senzora pokreta na Pin 11 dok je True: i = GPIO.input (11) if i == 0: #Kad je izlaz sa senzora pokreta LOW ispis "Nema detekcije", i time.sleep (0.1) elif i == 1: #Kada je izlaz sa senzora pokreta HIGH print " Pokret je otkriven ", i time.sleep (0,1)
Pokrenite skriptu na svom Pi i stavite ruke ili prijatelja ispred senzora da provjerite da li senzor hvata pokrete.
Korak 3: Modul i podešavanje kamere Raspberry Pi
Zbog toplote ljudi emituju infracrvene zrake, pa tako i objekti sa temperaturama. Stoga i životinje ili vrući predmeti mogu aktivirati senzor pokreta. Potreban nam je način da provjerimo je li otkrivanje valjano. Postoji mnogo načina za implementaciju, ali u svom projektu odlučujem se koristiti modul kamere Raspberry Pi za snimanje slika kada senzor pokreta uhvati pokrete.
Da biste koristili modul kamere, najprije se uvjerite da su pinovi priključeni u utor za kameru na Pi. Tip
sudo raspi-config
na vašem Pi da biste otvorili konfiguracijsko sučelje i omogućili kameru u 'opcijama sučelja'. Nakon ponovnog pokretanja, možete provjeriti je li Pi zaista povezan s kamerom upisivanjem
vcgencmd get_camera
i pokazat će vam status. Zadnji korak je instaliranje modula pikamera upisivanjem
pip install pikamera
Nakon svih postavki, kameru možete testirati pokretanjem skripti poput ove u nastavku:
iz pikamera iz uvoza PiCamera
from time import sleep camera = PiCamera () camera.start_preview () sleep (2) camera.capture ('image.jpg') camera.stop_preview ()
Slika će biti pohranjena kao 'image.jpg' u direktoriju isto kao i ona iz vaše skripte kamere. Primijetite, želite biti sigurni da postoji 'sleep (2)' i da je broj veći od 2 kako bi kamera imala dovoljno vremena za prilagođavanje svjetlosnog stanja.
Korak 4: Kombinirajte PIR senzor pokreta i modul kamere
Ideja mog projekta je da će senzor pokreta i kamera biti okrenuti u istom smjeru. Kad god senzor pokreta uhvati pokrete, kamera će snimiti sliku kako bismo mogli provjeriti šta uzrokuje pokrete nakon toga.
Skripta:
uvoz RPi. GPIO kao GPIOiz datuma uvoza uvoz datuma i vremena uvoz sa pikamere uvoz PiCamera
GPIO.cleanup ()
GPIO.setwarnings (False) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #Pročitajte izlaz sa poruke PIR senzora pokreta = 'start' counter = 0 log_f = open ('static/log.txt', 'w') log_f.close ()
kamera = PiCamera ()
pic_name = 0
camera.start_preview ()
time.sleep (2)
dok je True:
i = GPIO.input (11) if i == 0: #Kad je izlaz sa senzora pokreta LOW ako je brojač> 0: end = str (datetime.now ()) log_f = open ('static/log.txt', ' a ') poruka = poruka +'; kraj na ' + end +' / n 'ispis (poruka) log_f.write (poruka) log_f.close () final =' static/' + str (pic_name) + ".jpg" pic_name = pic_name + 1 camera.capture (final) counter = 0 ispis "Nema uljeza", i time.sleep (0.1) elif i == 1: #Kada je izlaz sa senzora pokreta HIGH ako je counter == 0: current = str (datetime.now ()) message = 'Otkriven čovjek:' + 'početak na' + trenutni brojač = brojač + 1 ispis "Otkriven uljez", i time.sleep (0.1) camera.stop_preview ()
Direktoriji za 'log.txt' i slike su 'statični', što je potrebno za rad Flaska.
Korak 5: Postavljanje za Flask
Flask je mikro web okvir napisan na Pythonu i zasnovan na Werkzeug alatu i Jinja2 predlošku. Lako se implementira i održava. Za bolji vodič za Flask preporučujem ovu vezu: Flask Mega Tutorial
Glavna skripta, 'routes.py', mog projekta:
iz foldera za uvoz appFlaskiz boce za uvoz render_template, preusmjeri uvoz os
APP_ROOT = os.path.dirname (os.path.abspath (_ file_)) # se odnosi na application_top
APP_STATIC = os.path.join (APP_ROOT, 'static')
@appFlask.route ('/', methods = ['GET', 'POST'])
def view (): log_f = open (os.path.join (APP_STATIC, 'log.txt'), 'r') logs = log_f.readlines () final_logs = za dnevnike prijavljivanja: final_logs.append (log. strip ()) name = str (len (final_logs) -1)+'. jpg' return render_template ('view.html', logs = final_logs, filename = name)
HTML datoteka 'view.html' nalazi se na gornjoj traci (jer kada ovdje kopiram HTML kodove, ona se zapravo pretvara u HTML FORMAT …)
I struktura projekta trebala bi izgledati nešto dolje (ali naravno ima više datoteka od ovih):
iotproject / appfolder / routes.py templates / view.html static / log.txt 0-j.webp
Korak 6: Rezultat
Za ovu implementaciju, nakon što se sve ispravno postavi, trebali biste moći pristupiti svom Raspberry Pi upisivanjem njegove IP adrese u preglednik, a rezultat bi u ovom koraku trebao izgledati kao slika na gornjoj traci.