สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: ประกอบฮาร์ดแวร์
- ขั้นตอนที่ 2: ตรวจสอบให้แน่ใจว่า Pi ของคุณเชื่อมต่อกับอินเทอร์เน็ต
- ขั้นตอนที่ 3: ตั้งค่ากล้อง
- ขั้นตอนที่ 4: ติดตั้ง Flask
- ขั้นตอนที่ 5: สร้างคลาสแบบฟอร์ม
- ขั้นตอนที่ 6: สร้างเทมเพลตขวด
- ขั้นตอนที่ 7: แสดงเทมเพลต
- ขั้นตอนที่ 8: สร้างคลาสตัวดำเนินการกล้อง
- ขั้นตอนที่ 9: สร้างโมดูลบันทึก
- ขั้นตอนที่ 10: เริ่มเซิร์ฟเวอร์
- ขั้นตอนที่ 11: ลองเลย
วีดีโอ: กล้องรักษาความปลอดภัย Raspberry Pi: 11 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
นี่คือคำแนะนำทีละขั้นตอนในการสร้างกล้องรักษาความปลอดภัย IoT ที่เปิดใช้งานการเคลื่อนไหวโดยใช้ Raspberry Pi คุณจะได้เรียนรู้วิธีสร้างเว็บเซิร์ฟเวอร์ขวดและรูปแบบที่อนุญาตให้ผู้ใช้ปรับความไวของกล้องและเวลาในการบันทึก เริ่ม/หยุดการบันทึกด้วยตนเอง และ/หรือถ่ายภาพที่จะบันทึกลงในเครื่อง
เสบียง
- Raspberry Pi 3
- กล้อง Pi
- เซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR
- การ์ด SD
- แหล่งพลังงาน
ขั้นตอนที่ 1: ประกอบฮาร์ดแวร์
ในขณะที่ปิด Pi ให้ใส่การ์ด micro-SD ลงใน Pi เสียบสายแพของโมดูลกล้องเข้ากับพอร์ตโมดูลกล้องบน Pi จากนั้นเชื่อมต่อ 3 พิน (VCC, OUT และ GND ที่มีป้ายกำกับ) ของตัวตรวจจับการเคลื่อนไหว PRI กับพิน GPIO ของ Pi เชื่อมต่อ VCC กับกำลังไฟ 5.5V, GND กับกราวด์ และ OUT เพื่อพิน 11 บน Pi
ขั้นตอนที่ 2: ตรวจสอบให้แน่ใจว่า Pi ของคุณเชื่อมต่อกับอินเทอร์เน็ต
ตอนนี้เปิด Pi โดยเชื่อมต่อกับแหล่งพลังงานและตรวจสอบว่าคุณเชื่อมต่อกับอินเทอร์เน็ตโดยใช้คำสั่ง ping หากคุณไม่ทราบวิธีเชื่อมต่อ Pi กับอินเทอร์เน็ต คลิกที่นี่
sudo ping www.google.com
หากคุณประสบความสำเร็จ คุณจะเห็นว่า Google ได้รับข้อมูลแล้ว
นอกจากนี้ คุณสามารถใช้ ifconfig เพื่อดูที่อยู่ IP ของคุณ
sudo ifconfig
ขั้นตอนที่ 3: ตั้งค่ากล้อง
ใช้คำสั่งต่อไปนี้เพื่อเปิดอินเทอร์เฟซการกำหนดค่า และเปิดใช้งานกล้องใน "ตัวเลือกการเชื่อมต่อ"
sudo raspi-config
หลังจากรีบูต คุณสามารถแสดงสถานะของกล้องเพื่อให้แน่ใจว่าเชื่อมต่ออย่างถูกต้อง
vcgencmd get_camera
สุดท้าย ติดตั้งโมดูล picamera
pip ติดตั้ง picamera
ขั้นตอนที่ 4: ติดตั้ง Flask
ติดตั้ง flask และ flask-restful module สำหรับ Python:
sudo apt-get ติดตั้ง python-dev python-pip
python -m pip ติดตั้งขวด flask-restful
ต่อไป เราจะติดตั้งโมดูลขวดหลามที่ใช้สำหรับสร้างแบบฟอร์ม
pip ติดตั้ง flask-wtf
ขั้นตอนที่ 5: สร้างคลาสแบบฟอร์ม
สร้างไดเร็กทอรีชื่อ iotProject เพื่อจัดเก็บไฟล์ทั้งหมดของคุณ
sudo mkdir iotProject
สร้างไฟล์ python ชื่อ "camControl.py"
sudo nano camControl.py
ในไฟล์นี้ เราจะสร้างคลาสของฟอร์ม ซึ่งช่วยให้เราสร้างเว็บฟอร์มพร้อมกล่องข้อความและเมนูแบบเลื่อนลงเพื่อให้ผู้ใช้เปลี่ยนการตั้งค่าของกล้อง เริ่ม/หยุดการบันทึกด้วยตนเอง และบันทึกวิดีโอได้
จาก flask_wtf นำเข้า FlaskForm จาก wtforms.validators นำเข้า DataRequired จาก wtforms นำเข้า SubmitField จาก wtforms นำเข้า validators, IntegerField, BooleanField, SelectField
คลาส camFrame (FlaskForm):
videoDuration = IntegerField('เวลาในการบันทึก (เป็นวินาที)')
ความไว = IntegerField('ความไวต่อการเคลื่อนไหว (ช่วง 25000-10000)\nยิ่งตัวเลขสูง กล้องก็จะยิ่งมีความไวน้อยลง', validators=[validators. NumberRange(min=2500, max=10000, message='Value Out of Range')])
options = SelectField('Options', options=[('none','No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('รูป', 'ถ่ายรูป')])
ส่ง= SubmitField('ส่ง')
ขั้นตอนที่ 6: สร้างเทมเพลตขวด
ในการสร้างส่วนติดต่อผู้ใช้ คุณต้องออกแบบเทมเพลต Flask ซึ่งใช้แบบฟอร์มที่คุณเพิ่งสร้างขึ้น ไฟล์นี้จะถูกเขียนด้วย html และจัดเก็บไว้ในโฟลเดอร์ชื่อ templates ซึ่งควรอยู่ในไดเร็กทอรีเดียวกันกับแบบฟอร์มของคุณ
ภายในโฟลเดอร์เทมเพลตของคุณ ให้สร้างไฟล์ชื่อ index.html ภายในไฟล์นี้ ให้ทำซ้ำรหัสที่แสดงด้านบน
ขั้นตอนที่ 7: แสดงเทมเพลต
ตอนนี้ได้เวลาสร้างไฟล์ที่แสดงเทมเพลตแล้ว สร้างไฟล์ชื่อ appCam.py (ตรวจสอบให้แน่ใจว่าคุณไม่ได้อยู่ในโฟลเดอร์เทมเพลตแล้ว) เนื้อหาไดนามิกที่ใช้ในเทมเพลตจะต้องใช้เป็นอาร์กิวเมนต์ที่มีชื่อในการเรียก render_template()
นำเข้า camControlfrom flask นำเข้า Flask, render_template, คำขอ, การตอบสนองจาก flask_restful นำเข้าทรัพยากร, Api, reqparse
แอพ = ขวด (_name_)
app.config['SECRET_KEY'] = '13542' api = API (แอป)
parser = reqparse. RequestParser ()
parser.add_argument('dur', type=int, help='ระยะเวลาของวิดีโอเมื่อตรวจพบการเคลื่อนไหว') parser.add_argument('sens', type=int, help='ระดับของการเคลื่อนไหวที่จำเป็นในการทริกเกอร์การบันทึก') parser.add_argument('opt', type=str, help='บันทึกวิดีโอหรือถ่ายภาพด้วยตนเอง')
อัปเดตคลาส (ทรัพยากร):
#Stuff for wtforms def post(self): args = parser.parse_args() #rc.input(args['dur'], args['sens'], args['opt']) #เขียนลงในไฟล์ข้อความที่ คุยกับกล้องที่ทำงานแบบขนาน 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() ส่งคืน {'dur': args['dur'], 'sens': args['sense'], 'opt':args['opt']}
@app.route('/', methods=['GET', 'POST'])
def index(): """Controller home page"" form = camControl.camFrame() #นี่คือแบบฟอร์มถ้า 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 เซ็นเซอร์ cameraSettingsFile.write(args[2][1] + '\n') #write opt cameraSettingsFile.close() imageDictionary = {"filename":"image.jpg"} return render_template('index.html', form=form, image = imageDictionary) อาร์กิวเมนต์[2][1] + '\n'))
api.add_resource (อัปเดต '/อัปเดต/')
ถ้า _name_ == '_main_':
app.run(host='0.0.0.0', port =80, debug=True, threaded=True)
ขั้นตอนที่ 8: สร้างคลาสตัวดำเนินการกล้อง
ตอนนี้เราต้องการสร้างไฟล์ชื่อ camOperator.py ในนั้นเราจะสร้างคลาสกล้องพร้อมวิธีการใช้งานกล้องโดยใช้ฟังก์ชัน PiCamera ที่มีอยู่แล้ว เราจะใช้ตัวอย่างของวัตถุนี้ในขั้นตอนต่อไป โดยเราจะรวมฟังก์ชันการทำงานของกล้องและเซ็นเซอร์ตรวจจับความเคลื่อนไหว
เมธอดที่กำหนดไว้ในคลาสนี้จะเปลี่ยนการตั้งค่า "บันทึก" ในกล้องรักษาความปลอดภัยโดยใช้อินพุตความไวและระยะเวลาที่ผู้ใช้จัดเตรียม ขณะที่สร้างค่าเริ่มต้นสำหรับตัวแปรเหล่านี้หากไม่มีอินพุตของผู้ใช้
นำเข้า RPi. GPIO เป็น GPIOนำเข้าเวลานำเข้า picamera จากวันที่และเวลานำเข้าวันที่เวลา
GPIO.setmode(GPIO.บอร์ด)
GPIO.setup(11, GPIO. IN)
ตรวจจับ = 0
กล้องระดับผู้ประกอบการ:
def _init_ (ตัวเอง):
#constructor self.cam = picamera. PiCamera() self.data = self.dur=10 self.sens=2500 self.opt="ไม่มี"
บันทึก def (ตัวเอง, dur):
#Records สำหรับระยะเวลาที่กำหนดโดยตัวควบคุม 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()
def operation(ตัวเอง, dur, sens):
#การทำงานหลักของกล้องที่คอยตรวจดูว่ามีคนอยู่ใกล้ๆ หรือไม่ ถ้ามนุษย์อยู่ใกล้ๆ นานพอ เราก็เริ่มบันทึกได้เลย! global detect i = GPIO.input(11) if i == 0: #When output from motion sensor is LOW detect=0 time.sleep(0.1) elif i == 1: #เมื่อเอาต์พุตจากเซ็นเซอร์ตรวจจับความเคลื่อนไหวสูง พิมพ์(" ตรวจจับการเคลื่อนไหว "+str(detect)) หากตรวจพบ >= sens*10: self.record(dur) print("RECORDED") ตรวจพบ = 0 time.sleep(0.1) ตรวจพบ += 1
ขั้นตอนที่ 9: สร้างโมดูลบันทึก
โปรแกรมสุดท้ายที่จำเป็นสำหรับโครงการนี้จะถูกเขียนในไฟล์ชื่อ rec.py ไฟล์นี้บอกให้กล้องทราบเมื่อจะบันทึก ระยะเวลาในการบันทึก และถ้า/เมื่อใดควรถ่ายภาพ โดยทำการตรวจสอบและอ่านข้อมูลผู้ใช้ที่เขียนไปยังไฟล์ข้อความจากขั้นตอนที่ 5 อย่างต่อเนื่อง หากไฟล์ได้รับการอัปเดต ไฟล์จะปรับค่าความไวและระยะเวลาตามลำดับ จากนั้นหากบันทึกหรือถ่ายภาพ ไฟล์จะบันทึกเนื้อหาไปที่ pi ในรูปแบบไฟล์.h264 หรือ.jpg
'' 'ทำงานควบคู่ไปกับเซิร์ฟเวอร์ขวด อ่านตัวแปรควบคุมที่กำหนดโดยแบบฟอร์มเซิร์ฟเวอร์ ตัวแปรควบคุมเซิร์ฟเวอร์ถูกตั้งค่าเป็นไฟล์แยกต่างหากเมื่อส่งแบบฟอร์มแล้ว โมดูลบันทึกจะอ่านตัวแปรเหล่านี้และอัปเดตกล้องตามตัวแปรเหล่านี้ ''' นำเข้า camOperator จาก datetime นำเข้า datetime เวลานำเข้า
rc = camOperator.cameraOperator()
cameraSettingsFile = open("cameraSettings.txt", 'w') cameraSettingsFile.close() #ที่นี่ เราเปิดและปิดในโหมดเขียนเพื่อลบเนื้อหาภายในไฟล์ก่อนที่ลูปหลักจะทำงาน
#วงเวียนต่อเนื่องที่คอยดูว่ามนุษย์อยู่ใกล้หรือไม่ ถ้าใช่ก็
#กล้องเริ่มบันทึก ฟังก์ชันนี้ทำงานแบบขนานกับขวด #server ที่ควบคุมกล้องนี้ recordingInProcess = False ในขณะที่ 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 สำหรับการตั้งค่าใน 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 = การตั้งค่า settingNum += 1 cameraSettingsFile.close()
#ลงมือปฏิบัติ
# ถ้า rc.opt == "ไม่มี": # ดำเนินการต่อถ้า rc.opt == "rec\n" และ recordingInProcess == เท็จ: พิมพ์ ("เรียกใช้คำสั่งบันทึกจากตัวควบคุม") #สร้างชื่อสำหรับวิดีโอตามเวลาปัจจุบัน 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" และ recordingInProcess == True: print("Stopping record command from controller") 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" และ 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('รูปภาพ/' + 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"
ขั้นตอนที่ 10: เริ่มเซิร์ฟเวอร์
SSH ลงใน pi และเริ่มเซิร์ฟเวอร์โดยใช้บรรทัดคำสั่งที่แสดงด้านบน
ขั้นตอนที่ 11: ลองเลย
เข้าถึงหน้าเว็บโดยใช้ที่อยู่ IP และคุณควรจะสามารถควบคุมกล้องได้จากระยะไกล!
แนะนำ:
กล้องรักษาความปลอดภัย Raven Pi: 7 ขั้นตอน (พร้อมรูปภาพ)
กล้องรักษาความปลอดภัย Raven Pi: นกกาพลาสติกตัวนี้กำลังเพลิดเพลินกับชีวิตหลังความตายในฐานะกล้องรักษาความปลอดภัย Raven Pi ที่ใช้งานได้จริงและน่าขนลุก มี Raspberry Pi อยู่ในท้องและมีกล้อง Pi ฝังอยู่ที่คอเพื่อจับภาพวิดีโอ HD ทุกครั้งที่ตรวจพบการเคลื่อนไหว ในขณะเดียวกันก็
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
กล้องรักษาความปลอดภัย VHS Library Pi: 3 ขั้นตอน (พร้อมรูปภาพ)
กล้องรักษาความปลอดภัย VHS Library Pi: นี่เป็นเคส VHS Video Library แบบเก่าที่ตอนนี้เป็นบ้านที่สมบูรณ์แบบสำหรับกล้องรักษาความปลอดภัย Raspberry Pi เคสนี้มี Pi Zero และกล้องมองผ่านกระดูกสันหลังของหนังสือปลอม เป็นงานสร้างที่เรียบง่ายด้วยรูปลักษณ์แบบโลกเก่า
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-