Բովանդակություն:

Raspberry Pi Human Detector + Camera + Flask: 6 քայլ
Raspberry Pi Human Detector + Camera + Flask: 6 քայլ

Video: Raspberry Pi Human Detector + Camera + Flask: 6 քայլ

Video: Raspberry Pi Human Detector + Camera + Flask: 6 քայլ
Video: Система распознавания OpenCV на Raspberry Pi 3 2024, Հուլիսի
Anonim
Raspberry Pi մարդու դետեկտոր + տեսախցիկ + շիշ
Raspberry Pi մարդու դետեկտոր + տեսախցիկ + շիշ

Այս ձեռնարկում ես կանցնեմ իմ Raspberry Pi IoT նախագծի քայլերով ՝ օգտագործելով PIR շարժման տվիչ, Raspberry Camera մոդուլ ՝ պարզ անվտանգության IoT սարք կառուցելու համար և Ֆլասկով մուտք գործելով հայտնաբերման մատյան:

Քայլ 1: PIR շարժման ցուցիչ

PIR շարժման ցուցիչ
PIR շարժման ցուցիչ

PIR- ը նշանակում է «Պասիվ ինֆրակարմիր», և այս շարժման ցուցիչը շարժումներ է կատարում ՝ դիտելով ինֆրակարմիր տեսքը և հավաքելով ինֆրակարմիր փոփոխությունները: Հետևաբար, երբ տերևը և մարդը անցնում են սենսորով, այն միայն հայտնաբերում է մարդուն, քանի որ մենք ՝ որպես մարդիկ, ջերմություն ենք արտադրում և այդպիսով արձակում ինֆրակարմիր ճառագայթ: Հետևաբար, շարժման տվիչը լավ ընտրություն է մարդու շարժումները հայտնաբերելու համար:

Քայլ 2: PIR շարժման տվիչի կարգավորում

PIR շարժման տվիչի կարգավորում
PIR շարժման տվիչի կարգավորում

Գոյություն ունի երեք կապում PIR շարժման տվիչի համար `Power, Output և Ground: Պիների տակ կարող եք տեսնել պիտակները ՝ VCC հոսանքի համար, ելք ելքի համար և GND ՝ գետնին: Երբ սենսորը հայտնաբերում է շարժումները, Ելքի քորոցը բարձր ազդանշան կհանի Raspberry Pi- ի քորոցին, որի հետ դուք միացնում եք սենսորը: Power pin- ի համար ցանկանում եք համոզվել, որ այն հոսանքի համար միանում է Raspberry Pi- ի 5V պինին: Իմ նախագծի համար ես ընտրում եմ Output- ի կապը Pin11- ի վրա Pi- ին միացնելը:

Ամեն ինչ միացնելուց հետո կարող եք տեքստ գրել ձեր սենսորին ՝ գործարկելով ստորև բերված սցենարները.

ներմուծել RPi. GPIO- ն որպես GPIOimport time GPIO.cleanup () GPIO.setwarnings (False) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #Կարդալ ելքը PIR շարժման տվիչից Pin 11 -ում իսկ True: i = GPIO.input (11) եթե i == 0: #Երբ շարժման սենսորից ելքը LOW տպագիր է «Չի հայտնաբերվում», i time.sleep (0.1) elif i == 1: #Երբ շարժման տվիչից ելքը Բարձր տպագիր է » Շարժումը հայտնաբերված է », i time.sleep (0.1)

Գործարկեք սցենարը ձեր Pi- ի վրա և ձեր ձեռքերը կամ ձեր ընկերոջը դրեք սենսորի դիմաց `ստուգելու համար, թե արդյոք սենսորը արագացնում է շարժումը:

Քայլ 3: Raspberry Pi Camera մոդուլ և կարգավորում

Raspberry Pi Camera մոդուլը և կարգավորումը
Raspberry Pi Camera մոդուլը և կարգավորումը

Մարդը ջերմության պատճառով ինֆրակարմիր ճառագայթներ է արձակում, ինչպես նաև ջերմաստիճան ունեցող առարկաները: Հետևաբար, կենդանիները կամ տաք առարկաները կարող են նաև շարժման սենսոր խթանել: Մեզ անհրաժեշտ է միջոց ՝ ստուգելու, թե արդյոք հայտնաբերումը վավեր է: Իրականացման բազմաթիվ եղանակներ կան, բայց իմ նախագծում ես ընտրում եմ 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 (Կեղծ) GPIO.setmode (GPIO. BOARD) GPIO.setup (11, GPIO. IN) #Կարդացեք ելք PIR շարժման տվիչի հաղորդագրությունից = 'start' counter = 0 log_f = open ('static/log.txt', 'w') log_f.close ()

տեսախցիկ = PiCamera ()

pic_name = 0

camera.start_preview ()

ժամանակ. քուն (2)

իսկ ճշմարիտ:

i = GPIO.input (11) եթե i == 0: #Երբ շարժման սենսորից ելքը ցածր է, եթե հաշվիչ> 0: end = str (datetime.now ()) log_f = open ('static/log.txt', ' ա ') հաղորդագրություն = հաղորդագրություն' '; ավարտը ' + end +' / 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: #Երբ շարժման սենսորից ելքը բարձր է, եթե հաշվիչ == 0: ընթացիկ = str (datetime.now ()) հաղորդագրություն = «Մարդը հայտնաբերված է. ' +' Սկսվում է ' + ընթացիկ հաշվիչից = հաշվիչից + 1 տպագիր« Հայտնաբերվել է ներխուժողը », i time.sleep (0.1) camera.stop_preview ()

«Log.txt» - ի և պատկերների գրացուցակները «ստատիկ» են, ինչը անհրաժեշտ է Flask- ի աշխատանքի համար:

Քայլ 5: Կարգավորեք Ֆլասկի համար

Կարգավորում Flask- ի համար
Կարգավորում Flask- ի համար

Flask- ը միկրո վեբ շրջանակ է, որը գրված է Python- ում և հիմնված է Werkzeug գործիքակազմի և Jinja2 ձևանմուշի շարժիչի վրա: Հեշտ է իրականացնել և պահպանել: Flask- ի համար ավելի լավ ձեռնարկի համար ես խորհուրդ եմ տալիս այս հղումը ՝ Flask Mega Tutorial

Իմ նախագծի հիմնական սցենարը ՝ «route.py»:

appfolder ներմուծման ծրագրից Ֆլասկա տափաշիշից ներմուծում render_template, վերահղում ներմուծման օպերացիոն համակարգ

APP_ROOT = os.path.dirname (os.path.abspath (_ ֆայլ_)) # վերաբերում է Application_top- ին

APP_STATIC = os.path.join (APP_ROOT, «ստատիկ»)

@appFlask.route ('/', մեթոդներ = ['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 / route.py կաղապարներ / view.html static / log.txt 0-j.webp

Քայլ 6: Արդյունք

Արդյունք
Արդյունք

Այս իրականացման համար, ամեն ինչ ճիշտ կարգավորելուց հետո, դուք պետք է կարողանաք մուտք գործել ձեր Raspberry Pi ՝ մուտքագրելով դրա IP հասցեն դիտարկիչում, և արդյունքը պետք է նման լինի նկարի վերևի սանդղակին այս քայլին: