สารบัญ:
- ขั้นตอนที่ 1: ข้อกำหนดฮาร์ดแวร์
- ขั้นตอนที่ 2: ความปลอดภัย
- ขั้นตอนที่ 3: การป้องกัน
- ขั้นตอนที่ 4: ความบันเทิง
- ขั้นตอนที่ 5: IOT App Watson บน IBM Bluemix [ตอนที่หนึ่ง]
- ขั้นตอนที่ 6: Node Red Flows
วีดีโอ: ภาพรวม: ความบันเทิงภายในบ้านและระบบรักษาความปลอดภัย: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
เกี่ยวกับแอปพลิเคชัน
ระบบ IOT นี้เป็นระบบความบันเทิงภายในบ้านและระบบรักษาความปลอดภัย
-
ความปลอดภัย
- แตะบัตร RFID และการป้อนข้อมูลจะถูกบันทึกลงใน Firebase
- หากได้รับอนุญาต ให้เข้าไปอย่างสงบแล้วถ่ายรูปลง S3
- หากไม่ได้รับอนุญาต ฝ่ายป้องกันจะเข้ามาและหน้าจอ LCD จะแจ้งว่าคุณไม่ได้รับอนุญาต
-
ป้องกัน
- กดปุ่มบนแดชบอร์ด
- Laser Turrets จะโจมตีด้วยการระเบิดแบบสุ่มและความเร็ว
-
ความบันเทิง
- หากตรวจพบการเคลื่อนไหว เกมจะเริ่มขึ้น
- หลังจากที่ผู้ใช้เล่นเกม คะแนนจะถูกบันทึกลงใน Firebase
- ค่า LDR จะถูกนำไปและส่งออกบนแดชบอร์ด
แอปพลิเคชันนี้สามารถควบคุมและดูได้ผ่านเว็บเซิร์ฟเวอร์ IBM Node-Red เราใช้ประโยชน์จาก AWS และ IBM Cloud Services และเราใช้ Firebase เป็นฐานข้อมูลของเรา
สรุปขั้นตอนที่จะอธิบาย
- ข้อกำหนดด้านฮาร์ดแวร์
- ความปลอดภัย - วิธีสร้างระบบรักษาความปลอดภัยที่ใช้อินพุต RFID และซอฟต์แวร์จดจำภาพ
- Defense - วิธีสร้างป้อมปืนเลเซอร์
- ความบันเทิง - วิธีสร้างเกมไซมอนพูด
- IOT App Watson บน IBM Bluemix - วิธีรวมระบบทั้งหมดไว้ในแดชบอร์ดเดียว
ไปข้างหน้าและเข้าถึงไฟล์ pdf เพื่อดูคำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้างโครงการนี้
ขั้นตอนที่ 1: ข้อกำหนดฮาร์ดแวร์
นี่คือสิ่งที่คุณต้องการ
-
ความปลอดภัย
- 1 ราสเบอร์รี่ Pi
- 1 LCD
- เครื่องอ่าน RFID 1 เครื่อง
- 1 PicCam
- การ์ด/ปุ่ม RFID 2 ใบ
- X หญิง -> สายจัมเปอร์ชาย
-
ป้องกัน
- 1 ราสเบอร์รี่ Pi
- 2 10 ㏀ ตัวต้านทาน (สำหรับปุ่ม)
- 2 ไมโครเซอร์โว
- 1 โมดูลส่งสัญญาณเลเซอร์ 650nm
- 2 ปุ่มกด
- 1 Buzzer
- แถบยางขนาดเล็ก 3 เส้น/สายรัด (สำหรับยึด)
- X หญิง -> สายจัมเปอร์ชาย
- X สายกระโดดปกติ
- 1 ทรานซิสเตอร์
- 1 ตัวเก็บประจุ
-
ความบันเทิง
- 1 ราสเบอร์รี่ Pi
- 3 1 ㏀ ตัวต้านทาน (สำหรับ LED)
- 1 10㏀ ตัวต้านทาน (สำหรับ LDR)
- ไฟ LED 3 ดวง (สีต่างๆ)
- 3 ปุ่ม
- 1 LDR
- 1 LCD
- 1 Pir Motion Sensor
- X หญิง -> สายจัมเปอร์ชาย
- X สายกระโดดปกติ
ขั้นตอนที่ 2: ความปลอดภัย
การสร้างฮาร์ดแวร์ระบบรักษาความปลอดภัย
ต่อวงจรตามที่แสดงในแผนภาพ
การสร้างซอฟต์แวร์ระบบรักษาความปลอดภัย
- กำหนดค่า AWS ด้วยการสร้างสิ่งของ
- ติดตั้ง AWS Python Library
- ติดตั้ง LCD Library
- ติดตั้งห้องสมุด RFID
- ตั้งค่า Firebase
- ตั้งค่า S3 Storage
- ติดตั้ง Boto บน Raspberry Pi
- ติดตั้ง AWS ClI บน Raspberry Pi
- สร้างข้อมูลรับรอง AWS
- กำหนดค่า AWS
- อัปโหลด security.py ไปยัง RPi
- อัปโหลด imagerecognition.py ไปยัง RPi
security.py เป็นรหัสที่จะอ่านอินพุต rfid และตรวจสอบว่าผู้ใช้เป็นผู้บุกรุกหรือไม่ หากระบบจำผู้ใช้ได้ รูปภาพจะถูกถ่ายและอัปโหลดไปยัง s3 รหัสยังเผยแพร่ไปยังหัวข้อใน aws MQTT
ขั้นตอนที่ 3: การป้องกัน
การสร้างฮาร์ดแวร์ป้อมปืนเลเซอร์
- เราสร้างป้อมปืนเลเซอร์โดยใช้เซอร์โว 2 ตัวและโมดูลเลเซอร์ 1 ตัว
- ต่อวงจรตามที่แสดงในแผนภาพ
การสร้างซอฟต์แวร์ป้อมปืนเลเซอร์
รหัสด้านล่างจะทำให้ป้อมปืนเลเซอร์ยิงไปในทิศทางที่สุ่ม ในการสุ่มระเบิดและความเร็ว
laserturret.py
จาก gpiozero นำเข้า LED, Buzzer, ปุ่ม, เวลาเซอร์โวอิมพอร์ตจากการนำเข้าสัญญาณ หยุดการนำเข้าแบบสุ่ม
#led = LED(12)
#pir = MotionSensor(19, sample_rate=5, queue_len=1) buzzer_pin = Buzzer(17) โจมตี = ปุ่ม(5, pull_up=False) #reset = ปุ่ม(6, pull_up=False) servo1 = เซอร์โว(18) servo2 = เซอร์โว(24)
def ledON():
led.on() print("LED is on") def ledOFF(): led.off() print("LED is off")
def ไฟ ():
พิมพ์ ("อาวุธร้อนแรง") buzzer_pin.on() time.sleep(0.1) buzzer_pin.off()
def laserturret():
timeBetweenBurst = random.uniform (0.2, 1) timeBetweenShots = random.uniform (0.05, 0.2) servo1start = random.randrange (-1, 1) servo1end = random.randrange (-1, 1) servo2start = random.randrange (-1), 1) servo2end = random.randrange (-1, 1) numShots = random.randrange (5, 20) servo1change = (servo1end - servo1start) / numShots servo2change = (servo2end - servo2start) / numShots servo1.value = servo1start servo2.value = servo2start time.sleep (0.1) shot = 0 รายละเอียด = [timeBetweenBurst, timeBetweenShots, servo1.value, servo2.value, numShots] พิมพ์ (รายละเอียด) ในขณะที่ shot<numshots: shot+="1" servo1.value="servo1start" servo2.value="servo2start" servo1start="servo1change" servo2start="servo2change" time.sleep(timebetweenburst)
หมายเหตุ = {
'B0': 31, 'C1': 33, 'CS1': 35, 'D1': 37, 'DS1': 39, 'EB1': 39, 'E1': 41, 'F1': 44, 'FS1 ': 46, 'G1': 49, 'GS1': 52, 'A1': 55, 'AS1': 58, 'BB1': 58, 'B1': 62, 'C2': 65, 'CS2': 69, 'D2': 73, 'DS2': 78, 'EB2': 78, 'E2': 82, 'F2': 87, 'FS2': 93, 'G2': 98, 'GS2': 104, 'A2': 110, 'AS2': 117, 'BB2': 123, 'B2': 123, 'C3': 131, 'CS3': 139, 'D3': 147, 'DS3': 156, 'EB3 ': 156, 'E3': 165, 'F3': 175, 'FS3': 185, 'G3': 196, 'GS3': 208, 'A3': 220, 'AS3': 233, 'BB3': 233, 'B3': 247, 'C4': 262, 'CS4': 277, 'D4': 294, 'DS4': 311, 'EB4': 311, 'E4': 330, 'F4': 349, 'FS4': 370, 'G4': 392, 'GS4': 415, 'A4': 440, 'AS4': 466, 'BB4': 466, 'B4': 494, 'C5': 523, 'CS5 ': 554, 'D5': 587, 'DS5': 622, 'EB5': 622, 'E5': 659, 'F5': 698, 'FS5': 740, 'G5': 784, 'GS5': 831, 'A5': 880, 'AS5': 932, 'BB5': 932, 'B5': 988, 'C6': 1047, 'CS6': 1109, 'D6': 1175, 'DS6': 1245, 'EB6': 1245, 'E6': 1319, 'F6': 1397, 'FS6': 1480, 'G6': 1568, 'GS6': 1661, 'A 6': 1760, 'AS6': 1865, 'BB6': 1865, 'B6': 1976, 'C7': 2093, 'CS7': 2217, 'D7': 2349, 'DS7': 2489, 'EB7': 2489, 'E7': 2637, 'F7': 2794, 'FS7': 2960, 'G7': 3136, 'GS7': 3322, 'A7': 3520, 'AS7': 3729, 'BB7': 3729, 'B7': 3951, 'C8': 4186, 'CS8': 4435, 'D8': 4699, 'DS8': 4978 }
def buzz (ความถี่, ความยาว): #create ฟังก์ชัน "buzz" และป้อนระดับเสียงและระยะเวลา)
ถ้า(ความถี่==0):
time.sleep(length) ระยะคืนตัว = 1.0 / ความถี่ #frequency delayValue = period / 2 #คำนวณเวลาสำหรับครึ่งหนึ่งของคลื่น numCycles = int(length * frequency) #num ของคลื่น = duratime x freq สำหรับ i ในช่วง (numCycles): #start วนจาก 0 ถึงตัวแปร "รอบ" ที่คำนวณเหนือ buzzer_pin.on() time.sleep(delayValue) buzzer_pin.off() time.sleep(delayValue)
def play (ทำนอง, จังหวะ, หยุดชั่วคราว, เพซ=0.800):
สำหรับฉันอยู่ในช่วง (0, len (ทำนอง)): # เล่นเพลงโน้ต Duration = ก้าว / จังหวะ buzz (ทำนอง , noteDuration) # เปลี่ยนความถี่ตามโน้ตเพลงหยุดชั่วคราวBetweenNotes = noteDuration * หยุดชั่วคราว time.sleep(หยุดระหว่างหมายเหตุ)
ในขณะที่จริง:
laserturret() แตก;
ขั้นตอนที่ 4: ความบันเทิง
การสร้างความบันเทิงฮาร์ดแวร์
เราสร้างเกมปุ่ม Simon-says ซึ่งคุณต้องทำตามรูปแบบของไฟ LED ที่สว่างขึ้นและกดปุ่มที่เกี่ยวข้อง จะอัปโหลดคะแนนและการประทับเวลาลงในฐานข้อมูล Firebase NoSQL เพื่อใช้งานเพิ่มเติมในแดชบอร์ด
ต่อวงจรตามที่แสดงในแผนภาพ Fritzing
การสร้างซอฟต์แวร์เพื่อความบันเทิง
ความบันเทิง.py
นำเข้า RPi. GPIO เป็น GPIOimport เวลาเกลียวนำเข้า tweepy นำเข้าสุ่มนำเข้าระบบปฏิบัติการที่นำเข้าจาก rpi_lcd การนำเข้าแอลซีดีจากการเรียกกระบวนการย่อยที่นำเข้าจากเวลานอนที่นำเข้าจากวันที่และเวลาวันที่และเวลาที่นำเข้าจาก Firebase CONSUMER_KEY นำเข้า Firebase = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = 'ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY' ACCESS_KEY = '988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET = 'K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk' รับรองความถูกต้อง = tweepy. OAuthHandler (CONSUMER_KEY, CONSUMER_SECRET) auth.secure = auth.set_access_token ทรู (ACCESS_KEY, ACCESS_SECRET) API = tweepy. API (รับรองความถูกต้อง) Firebase = firebase. FirebaseApplication (' https:// iotca2 -12f48.firebaseio.com', None) lcd=LCD() lcd.text('Have fun!', 1) lcd.text('Good Luck!', 2) sleep(1) # Red, Yellow, Green LIGHTS = [40, 38, 36] BUTTONS = [37, 33, 35] NOTES = ["E3", "A4", "E4"] # ค่าที่คุณสามารถเปลี่ยนได้ซึ่งส่งผลต่อความเร็วในการเล่นเกม = 0.5 # ธงที่ใช้ส่งสัญญาณเกม สถานะ is_displaying_pattern = เท็จ is_won_curr ent_level = False is_game_over = False # สถานะเกม current_level = 1 current_step_of_level = 0 รูปแบบ = def initialize_gpio (): GPIO.setmode (GPIO. BOARD) GPIO.setup (LIGHTS, GPIO. OUT เริ่มต้น = GPIO. LOW) GPIO ตั้งค่า (BUTTONS, GPIO. IN, pull_up_down=GPIO. PUD_DOWN) สำหรับฉันในช่วง (3): GPIO.add_event_detect(BUTTONS, GPIO. FALLING, Verify_player_selection) def Verify_player_selection (channel): global current_step_of,_level, current_level is_game_over ถ้าไม่ใช่ is_displaying_pattern และไม่ใช่ is_won_current_level และไม่ใช่ is_game_over: flash_led_for_button(channel) if channel == BUTTONS[pattern[current_step_of_level]: current_step_of_level += 1 if current_step_of_level >= current_level:def current_step_over = 1 ระดับคือ flash_led_for_button(button_channel): led = LIGHTS[BUTTONS.index(button_channel)] GPIO.output(led, GPIO. HIGH) time.sleep(0.4) GPIO.output(led, GPIO. LOW) def add_new_color_to_pattern(): global is_won_current_level, cur Rent_step_of_level is_won_current_level = False current_step_of_level = 0 next_color = random.randint(0, 2) pattern.append(next_color) def display_pattern_to_player(): global is_displaying_pattern is_displaying_pattern = True GPIO.output(LIGHTS, GPIO. LOW) ระดับสำหรับ i: GPIO.output(LIGHTS[pattern, GPIO. HIGH) time.sleep(speed) GPIO.output(LIGHTS[pattern, GPIO. LOW) time.sleep(speed) is_displaying_pattern = False def wait_for_player_to_repeat_pattern (): ในขณะที่ไม่ใช่ is_won_current_level และไม่ใช่ is_game_over: time.sleep(0.1) def reset_board_for_new_game(): global is_displaying_pattern, is_won_current_level, is_game_over global current_level, current_step_of_level, รูปแบบ is_displaying_pattern_of False is_won_current_over = False คือ 0 GPIO.output(LIGHTS, GPIO. LOW) def send_data(score): lcd.text('End of game, ', 1) lcd.text('See you soon!', 2) datestr = str(วันที่และเวลา now()) ในขณะที่ True: print(datestr) print(score) data={ 'Date': datestr, 'Score': score } result = firebase.post('/scores/', data) print(result) if score > 2: status='Someone has คะแนน ' + (str(คะแนน)) +' ใน '+datestr+'!' api.update_status (status = status) break def start_game(): while True: add_new_color_to_pattern() display_pattern_to_player() wait_for_player_to_repeat_pattern() if is_game_over: send_data(current_level - 1) print("จบเกม! คะแนนคือ {} สี!\n".format(current_level - 1)) sleep(2) print("ขอบคุณสำหรับการเล่น!\n") lcd.text('', 1) lcd.text('', 2) break time.sleep(2) def start_game_monitor (): t = threading. Thread(target=start_game) t.daemon = True t.start() t.join() def main(): ลอง: os.system('cls' ถ้า os.name == 'nt ' อื่น 'ชัดเจน') พิมพ์ ("เริ่มต้นรอบใหม่!\n") initialize_gpio() start_game_monitor() ในที่สุด: GPIO.cleanup() ถ้า _name_ == '_main_': main()
ขั้นตอนที่ 5: IOT App Watson บน IBM Bluemix [ตอนที่หนึ่ง]
ตั้งค่า Blumix IoT Service
- ตั้งค่าประเภทอุปกรณ์เกตเวย์
- ตั้งค่าอุปกรณ์
ทำขั้นตอนที่ 1 และ 2 เป็นเวลา 3 ครั้ง หนึ่ง RPi สำหรับหนึ่งส่วน (ความปลอดภัย/การป้องกัน/ความบันเทิง)
ตั้งค่าโหนด-แดง
เรียกใช้โหนดสีแดง
โหนดสีแดงเริ่มต้น
- ไปที่จัดการจานสีในเมนูแฮมเบอร์เกอร์ (บนขวา)
-
ดาวน์โหลดพาเลทต่อไปนี้
- node-red-แดชบอร์ด
- node-red-contrib-firebase
- node-red-contrib-ibm-watson-iot
ขั้นตอนที่ 6: Node Red Flows
ดาวน์โหลดไฟล์และส่งออกไปยังโหนดสีแดงของคุณ
โหนดความปลอดภัย-สีแดง
ไม่มี
กลาโหม Rpi Node-Red
laserturret.txt
ความบันเทิง Rpi Node-Red
- ความบันเทิง rpi flow.txt
- ldr rpi flow.txt
IBM Bluemix Node-Red
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
KS-สวน:ภาพรวม: 9 ขั้นตอน
KS-Garden:ภาพรวม: KS-Garden สามารถใช้ในการรดน้ำ/ระบายอากาศ/ให้แสงสว่างแก่พืชสวน/เรือนกระจกในสวนหลังบ้านหรือพืชกล่องในร่มของคุณ (การออกแบบโมดูลาร์) ระบบ KS-Garden ประกอบด้วยโมดูลหลักดังต่อไปนี้ - หลัก กล่องระบบ - Relais และกล่องจ่ายไฟ
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)