Cuprins:

Cameră de securitate Raspberry Pi: 11 pași (cu imagini)
Cameră de securitate Raspberry Pi: 11 pași (cu imagini)

Video: Cameră de securitate Raspberry Pi: 11 pași (cu imagini)

Video: Cameră de securitate Raspberry Pi: 11 pași (cu imagini)
Video: Raspberry Pi 5MP Camera Unboxing 2024, Noiembrie
Anonim
Cameră de securitate Raspberry Pi
Cameră de securitate Raspberry Pi

Acesta este un pas cu pas care poate fi instruit despre cum să creați o cameră de securitate activată prin mișcare, utilizând un Raspberry Pi. Veți învăța cum să creați un server web și un formular care să permită utilizatorului să regleze sensibilitatea camerei și timpul de înregistrare, să pornească / să oprească manual o înregistrare și / sau să facă o fotografie care va fi salvată local.

Provizii

  • Raspberry Pi 3
  • Camera Pi
  • Senzor de mișcare PIR
  • card SD
  • Sursa de putere

Pasul 1: Asamblați hardware-ul

Asamblați hardware-ul
Asamblați hardware-ul
Asamblați hardware-ul
Asamblați hardware-ul
Asamblați hardware-ul
Asamblați hardware-ul
Asamblați hardware-ul
Asamblați hardware-ul

În timp ce Pi este oprit, introduceți cardul micro-SD în Pi. Introduceți cablul panglică al modulului camerei în portul modulului camerei de pe Pi. Apoi, conectați cei 3 pini (etichetați VCC, OUT și GND) ai detectorului de mișcare PRI la pinii GPIO ai lui Pi. Conectați VCC la 5,5V de putere, GND la masă și OUT la pinul 11 de pe Pi.

Pasul 2: Asigurați-vă că Pi-ul dvs. este conectat la Internet

Asigurați-vă că Pi-ul dvs. este conectat la Internet
Asigurați-vă că Pi-ul dvs. este conectat la Internet

Acum, porniți Pi conectându-l la o sursă de alimentare și verificați dacă sunteți conectat la internet folosind comanda ping. Dacă nu știți cum să vă conectați Pi-ul la internet, faceți clic aici.

sudo ping www.google.com

Dacă aveți succes, ar trebui să vedeți că datele sunt primite de google.

În plus, puteți utiliza ifconfig pentru a vă vedea adresa IP.

sudo ifconfig

Pasul 3: configurați camera

Utilizați următoarea comandă pentru a deschide interfața de configurare și activați camera în „opțiunile de interfață”.

sudo raspi-config

După repornire, puteți afișa starea camerei dvs. pentru a vă asigura că aceasta este conectată corect.

vcgencmd get_camera

În cele din urmă, instalați modulul picamera.

pip instala picamera

Pasul 4: Instalați Flask

Instalați balonul și modulul de odihnă pentru Python:

sudo apt-get install python-dev python-pip

python -m pip instala balon balon-odihnitor

Apoi, vom instala un modul flacon python utilizat pentru crearea formularelor.

pip instala flask-wtf

Pasul 5: Creați o clasă de formular

Creați un director numit iotProject pentru a stoca toate fișierele în.

sudo mkdir iotProject

Creați un fișier python numit „camControl.py”.

sudo nano camControl.py

În acest fișier vom crea clasa noastră de formular, care ne permite să creăm un formular web cu casete de text și un meniu derulant pentru ca utilizatorul să poată schimba setările camerei, să pornească / oprească manual o înregistrare și să captureze videoclipuri.

din flask_wtf import FlaskFormde la wtforms.validators import DataRequired from wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField

clasa camFrame (FlaskForm):

videoDuration = IntegerField ('Timp de înregistrare (în secunde)')

sensibilitate = IntegerField („Sensibilitate la mișcare (interval 2500-10000) n Cu cât este mai mare numărul, cu atât camera este mai puțin sensibilă”, validators = [validators. NumberRange (min = 2500, max = 10000, mesaj = 'Valoare în afara intervalului')])

options = SelectField ('Options', options = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('pic', 'Take Picture')])

submit = SubmitField („Trimiteți”)

Pasul 6: Creați un șablon de balon

Creați un șablon de balon
Creați un șablon de balon

Pentru a crea interfața cu utilizatorul, trebuie să proiectați un șablon Flask care utilizează formularul pe care tocmai l-ați creat. Acest fișier va fi scris în html și stocat într-un folder numit șabloane, care ar trebui să fie în același director cu formularul dvs.

În interiorul folderului șabloane, creați un fișier numit index.html. În acest fișier, copiați codul de mai sus.

Pasul 7: redați șablonul

Acum este timpul să creați un fișier care redă șablonul. Creați un fișier numit appCam.py (asigurați-vă că nu mai sunteți în folderul șabloane). Orice conținut dinamic utilizat în șablon trebuie utilizat ca argument numit în apelul la render_template ().

import camControlfrom flask import Flask, render_template, request, Răspuns de la flask_restful import Resource, Api, reqparse

app = Flask (_ nume_)

app.config ['SECRET_KEY'] = '13542' api = Api (aplicație)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Durata videoclipului când este detectată mișcarea') parser.add_argument ('sens', type = int, help = 'Nivelul de mișcare necesar pentru declanșarea unei înregistrări') parser.add_argument ('opt', type = str, help = 'Înregistrați manual un videoclip sau capturați o imagine')

Actualizare clasă (resursă):

#Stuff for wtforms def post (self): args = parser.parse_args () # rc.input (args ['dur'], args ['sens'], args ['opt']) #write în fișierul text care vorbește cu camera care rulează în paralel cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #write dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

@ app.route ('/', methods = ['GET', 'POST'])

def index (): "" "Pagina principală a controlerului" "" form = camControl.camFrame () # acesta este un formular dacă request.method == 'POST': print (request.form) args = [i for i in request.form.items ()] # rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = open ("cameraSettings.txt ", 'w') cameraSettingsFile.write (args [0] [1] + '\ n') #write dur cameraSettingsFile.write (args [1] [1] + '\ n') #write sens cameraSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"filename": "image.jpg"} returnează model_rend ('index.html', form = form, image = imageDictionary)

api.add_resource (Actualizare, '/ update /')

dacă _name_ == '_main_':

app.run (gazdă = '0.0.0.0', port = 80, depanare = Adevărat, subiect = Adevărat)

Pasul 8: Creați o clasă de operator de cameră

Acum vrem să creăm un fișier numit camOperator.py. În acesta vom crea o clasă de camere cu metode de acționare a camerei, utilizând funcțiile PiCamera deja disponibile. Vom folosi o instanță a acestui obiect în pasul următor în care vom combina funcționalitatea camerei și senzorul de mișcare.

Metodele definite în această clasă modifică setările de „înregistrare” de pe camera de securitate utilizând intrările de sensibilitate și durată pe care le furnizează utilizatorul, stabilind în același timp valori implicite pentru aceste variabile dacă intrarea utilizatorului nu este prezentă.

importați RPi. GPIO ca GPIOimportați picamera de import timp din datetime import datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

detect = 0

camera de clasa Operator:

def _init _ (auto):

#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "none"

înregistrare def (auto, dur):

#Records pentru durata dată setată de controler videoName = str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') Self.cam.start_recording ('/ home / pi / iotProject / videos /' + videoName + '.h264') time.sleep (dur) self.cam.stop_recording ()

operație def (self, dur, sens):

#Funcționarea principală a camerei care verifică în mod constant pentru a vedea dacă un om este în apropiere, dacă un om rămâne în jur suficient de mult timp, începem să înregistrăm! global detect i = GPIO.input (11) if i == 0: #When output from sensor motion is LOW detect = 0 time.sleep (0.1) elif i == 1: #When output from motion motion is HIGH print (" mișcare detectată "+ str (detect)) dacă detect> = sens * 10: auto.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detect + = 1

Pasul 9: Creați modulul de înregistrare

Ultimul program necesar acestui proiect va fi scris într-un fișier numit rec.py. Acest fișier îi spune camerei când să înregistreze, cât timp să înregistreze și dacă / când să facă o fotografie. Face acest lucru verificând și citind în mod constant datele utilizatorului scrise în fișierul text de la pasul 5. Dacă fișierul a fost actualizat, acesta ajustează valorile sensibilității și duratei în mod corespunzător și apoi, dacă se face o înregistrare sau o fotografie, salvează conținutul în pi, fie într-un format de fișier.h264, fie.jpg.

'' 'Rulează în paralel cu serverul balon, citind variabilele de control stabilite de formularele serverului. Variabilele de control ale serverului sunt setate într-un fișier separat odată cu trimiterea formularelor. Modulul rec citește aceste variabile și actualizează camera pe baza acestora. '' 'import camOperator de la data de import data de timp de import de timp

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #aici, deschidem și închidem în modul de scriere pentru a șterge conținutul din fișier înainte de a rula bucla principală

# O buclă continuă care urmărește pentru a vedea dacă oamenii sunt în apropiere. Dacă sunt, atunci

#camera începe să înregistreze. Această funcție rulează în paralel cu balonul #server care controlează această cameră. recordingInProcess = False în timp ce True: # check / record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #change the settings of the camera based on the server cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 pentru setarea în cameraSettingsFile.readlines (): if settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #Sensitivity change rc.sens = int (setting) elif settingNum == 2: #Action change rc.opt = setting SettingNum + = 1 cameraSettingsFile.close ()

#execută o acțiune

# if rc.opt == "none": # continuați dacă rc.opt == "rec / n" și recordingInProcess == False: print ("Rularea comenzii de înregistrare de la controler") # Generați numele pentru video în funcție de ora curentă videoName = "snappedVid _" + str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/ home / pi / iotProject / videos / '+ videoName +'.h264 ') recordingInProcess = True elif rc.opt == "stop / n" and recordingInProcess == True: print ("Oprirea comenzii de înregistrare de la controler") rc.cam.stop_recording () recordingInProcess = False cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile. write ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" and recordingInProcess == False: print ("Snap a pic command from the controller") pictureName = "snappedPic_ "+ str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('pictures /' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile. write (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Pasul 10: Porniți serverul

Porniți serverul
Porniți serverul

SSH în pi și porniți serverul folosind linia de comandă prezentată mai sus.

Pasul 11: ÎNCERCAȚI

ÎNCEARCĂ!
ÎNCEARCĂ!
ÎNCEARCĂ!
ÎNCEARCĂ!

Accesați pagina web utilizând adresa IP și ar trebui să puteți controla camera de la distanță!

Recomandat: