תוכן עניינים:

סקירה כללית: מערכת בידור ואבטחה ביתית: 6 שלבים
סקירה כללית: מערכת בידור ואבטחה ביתית: 6 שלבים

וִידֵאוֹ: סקירה כללית: מערכת בידור ואבטחה ביתית: 6 שלבים

וִידֵאוֹ: סקירה כללית: מערכת בידור ואבטחה ביתית: 6 שלבים
וִידֵאוֹ: סרטון מדהים ומרגש עם מסר חזק במיוחד 2024, יוני
Anonim
סקירה כללית: מערכת בידור ואבטחה ביתית
סקירה כללית: מערכת בידור ואבטחה ביתית
סקירה כללית: מערכת בידור ואבטחה ביתית
סקירה כללית: מערכת בידור ואבטחה ביתית
סקירה כללית: מערכת בידור ואבטחה ביתית
סקירה כללית: מערכת בידור ואבטחה ביתית

לגבי האפליקציה

מערכת IOT זו היא מערכת בידור ואבטחה ביתית.

  1. בִּטָחוֹן

    1. הקש על כרטיס RFID והקלט נשמרים ב- Firebase.
    2. אם אתה מורשה, תוכל להיכנס בשלווה והתמונה צולמת והועלתה ל- S3
    3. אם לא מורשה, נכנס סעיף ההגנה ומסך LCD יגיד שאתה לא מורשה.
  2. הֲגָנָה

    1. לחץ על הלחצן בלוח המחוונים.
    2. צריחי לייזר יתקפו בפרץ ובמהירות אקראיים.
  3. בידור

    1. אם תתגלה תנועה, המשחק יתחיל.
    2. לאחר שהמשתמש משחק את המשחק, הציון נשמר ב- Firebase.
    3. ערכי LDR יילקחו ויפלטו על לוח המחוונים.

יישום זה ניתן לשליטה ולצפייה באמצעות שרת האינטרנט IBM Node-Red. אנו עושים שימוש ב- AWS ובשירותי הענן של IBM והשתמשנו ב- Firebase כמאגר הנתונים שלנו.

סיכום השלבים שיתוארו

  • דרישות חומרה
  • אבטחה - כיצד ליצור מערכת אבטחה המשתמשת בקלט RFID ותוכנת זיהוי תמונות
  • הגנה - כיצד ליצור צריח לייזר
  • בידור - כיצד ליצור משחק של סיימון אומר
  • IOT App Watson ב- IBM Bluemix - כיצד לשלב את כל המערכות בלוח מחוונים אחד

קדימה, גשו לקובץ ה- pdf להסבר מפורט יותר כיצד ליצור פרויקט זה.

שלב 1: דרישת חומרה

זה מה שתצטרך

  1. בִּטָחוֹן

    • 1 פטל פטל
    • 1 LCD
    • קורא RFID אחד
    • 1 PiCam
    • 2 כרטיסי/לחצנים RFID
    • X נקבה -> כבלי מגשר זכר
  2. הֲגָנָה

    • 1 פטל פטל
    • 2 10 ㏀ נגד (לכפתורים)
    • 2 מיקרו סרוו
    • מודול משדר לייזר של 650 ננומטר
    • 2 לחצן לחיצה
    • באזר 1
    • 3 רצועות גומי קטנות/קשרי כבל (לתיקון)
    • X נקבה -> כבלי מגשר זכר
    • X כבלי קפיצה רגילים
    • 1 טרנזיסטור
    • 1 קבלים
  3. בילויים

    • 1 פטל פטל
    • 3 1 "נגד (עבור נוריות)
    • 1 10㏀ נגד (עבור LDR)
    • 3 נוריות (צבעים שונים)
    • 3 כפתורים
    • 1 LDR
    • 1 LCD
    • חיישן תנועה Pir אחד
    • X נקבה -> כבלי מגשר זכר
    • X כבלי קפיצה רגילים

שלב 2: אבטחה

בִּטָחוֹן
בִּטָחוֹן
בִּטָחוֹן
בִּטָחוֹן
בִּטָחוֹן
בִּטָחוֹן

יצירת חומרת מערכת האבטחה

חבר את המעגלים כפי שמוצג בתרשים הטיגון

יצירת תוכנת מערכת האבטחה

  1. הגדר את AWS על ידי יצירת דבר
  2. התקן את AWS Python Library
  3. התקן את ספריית LCD
  4. התקן את ספריית RFID
  5. הגדר את Firebase
  6. הגדרת אחסון S3
  7. התקן את Boto ב- Raspberry Pi
  8. התקן את AWS ClI ב- Raspberry Pi
  9. צור אישורי AWS
  10. הגדר את AWS
  11. העלה את security.py ל- RPi
  12. העלה את imagerecognition.py ל- RPi

security.py הוא קוד שיקרא קלט rfid ויזהה אם המשתמש הוא פולש או לא. אם המשתמש יזוהה, התמונה תצלם ותעלה ל- s3. הקוד מתפרסם גם בנושא ב- aws MQTT

שלב 3: הגנה

הֲגָנָה
הֲגָנָה
הֲגָנָה
הֲגָנָה
הֲגָנָה
הֲגָנָה

יצירת חומרת צריח הלייזר

  1. אנו יוצרים את צריח הלייזר באמצעות 2 סרוו ומודול לייזר אחד
  2. חבר את המעגלים כפי שמוצג בתרשים הטיגון

יצירת תוכנת צריח הלייזר

הקוד להלן יגרום לצריח הלייזר לירות בכיוונים אקראיים, בהתפרצויות ובמהירות אקראיות

laserturret.py

מ LED יבוא של gpiozero, באזר, לחצן, זמן ייבוא Servo מאיתור יבוא הפסקה של יבוא אקראי

#led = LED (12)

#pir = MotionSensor (19, sample_rate = 5, queue_len = 1) buzzer_pin = זמזם (17) התקפה = לחצן (5, pull_up = False) #reset = לחצן (6, pull_up = False) servo1 = סרוו (18) servo2 = סרוו (24)

def ledON ():

led.on () הדפס ("LED דולק") def ledOFF (): led.off () הדפס ("LED כבוי")

def fire ():

הדפס ("נשק חם") 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), 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 detail = [timeBetweenBurst, timeBetweenShots, servo1.value, servo2.value, numShots] הדפס (פירוט) תוך כדי צילום <numshots: shot+= "1" servo1.value = "servo1start" servo2.value = "servo2start" servo1start = "servo1change" servo2start = "servo2change" אש () = "" time.sleep (timebetweenshots) = "" 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}

באז באז (תדירות, אורך): #צור את הפונקציה "באז" והזן אותה את המגרש והמשך)

אם (תדירות == 0):

time.sleep (אורך) תקופת החזרה = 1.0 / תדירות #frequency delayValue = period / 2 #לחשב את הזמן למחצית הגל numCycles = int (אורך * תדר) #מספר גלי = משך זמן x תדירות עבור i בטווח (numCycles): #התחל לולאה מ -0 למשתנה "מחזורים" המחושב מעל buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)

משחק def (מנגינה, קצב, הפסקה, קצב = 0.800):

עבור i בטווח (0, לן (מנגינה)): # השמעת הערת השיר Duration = קצב/קצב באז (מנגינה , noteDuration) # שנה את התדירות לאורך הפסקת הערת השיר pauseBetweenNotes = noteDuration * time pause.sleep (pauseBetweenNotes)

בעוד שזה נכון:

laserturret () הפסקה;

שלב 4: בידור

בידור
בידור
בידור
בידור
בידור
בידור

יצירת חומרת הבידור

אנו יוצרים את משחק הכפתורים של סיימון אומר, שעליכם לעקוב אחר התבנית של נוריות הלדים המוארות וללחוץ על הכפתורים המתאימים. הוא מעלה ציונים וחותמת זמן למסד הנתונים NoSQL של בסיס האש לשימוש נוסף בלוחות המחוונים.

חבר את המעגלים כפי שמוצג בתרשים Fritzing.

יצירת תוכנת הבידור

בידור.פי

ייבוא RPi. GPIO כמו ייבוא OS יבוא אקראי יבוא השחלה יבוא זמן GPIOimport tweepy מ LCD יבוא rpi_lcd מן השיחה יבוא subprocess משינה יבוא זמן מן datetime datetime יבוא מן CONSUMER_KEY firebase יבוא firebase = "h5Sis7TXdoUVncrpjSzGAvhBH" CONSUMER_SECRET = ACCESS_KEY "ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY" = "988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET = 'K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk' auth = tweepy. OAuthHandler (CONSUMER_KEY, CONSUMER_SECRET) auth.secure = auth.set_access_token True (ACCESS_KEY, ACCESS_SECRET) API = tweepy. API (אימות) firebase = firebase. FirebaseApplication (' https:// iotca2 -12f48.firebaseio.com ', אין) lcd = LCD () lcd.text (' תהנה! ', 1) lcd.text (' בהצלחה! ', 2) שינה (1) # אדום, צהוב, ירוק אורות = [40, 38, 36] BUTTONS = [37, 33, 35] NOTES = ["E3", "A4", "E4"] # ערכים שאתה יכול לשנות שמשפיעים על מהירות המשחק = 0.5 # דגלים המשמשים לאותות משחק status is_displaying_pattern = שקר הוא_ון_קור ent_level = False is_game_over = False # מצב מצב current_level = 1 current_step_of_level = 0 pattern = def initialize_gpio (): GPIO.setmode (GPIO. BOARD) GPIO.setup (LIGHTS, GPIO. OUT, initial = GPIO. LOW) GPIO. התקנה (BUTTONS, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) עבור i בטווח (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (ערוץ): global current_step_of_level, current_ is_game_over אם לא is_displaying_pattern ולא is_won_current_level ולא is_game_over: flash_led_for_button (ערוץ) אם ערוץ == BUTTONS [pattern [current_step_of_level]: current_step_of_level += 1 אם current_step_of_level> = current_ is_vel 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 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 = current GPIO. TSput (LIG.interface): 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, pattern is_dis_ing_pal_stor_stor_stor_stor_stor_stor_store GPIO.output (LIGHTS, GPIO. LOW) def send_data (score): lcd.text ('סוף המשחק', 1) lcd.text ('נתראה בקרוב!', 2) datestr = str (datetime. now ()) בעוד True: הדפס (datestr) print (score) data = {'Date': datestr, 'Score': score} result = firebase.post ('/scores/', data) print (result) if score> 2: status = 'מישהו קלע' +(str (ניקוד))+'on'+datestr+'!' api.update_status (status = status) break def start_game (): בעוד נכון: add_new_color_to_pattern () display_pattern_to_player () wait_for_player_to_repeat_pattern () if is_game_over: send_data (current_level - 1) הדפסה ("Game Over! n) הוא"} צבעים!.format (current_level - 1)) sleep (2) הדפס ("תודה ששיחקת! / n") lcd.text ('', 1) lcd.text ('', 2) break time.sleep (2) def start_game_monitor (): t = threading. Thread (target = start_game) t.daemon = t.start () t.join () def main (): נסה: os.system ('cls' אם os.name == 'nt 'אחר' ברור ') הדפסה ("התחל סיבוב חדש! / n") אתחול_גפיו () start_game_monitor () סוף סוף: GPIO.cleanup () אם _name_ ==' _main_ ': main ()

שלב 5: אפליקציית IOT Watson ב- IBM Bluemix [חלק ראשון]

הגדר את שירות Blumix IoT

  1. הגדר סוג התקן Gateway
  2. הגדר מכשיר

בצע את שלבים 1 ו -2 3 פעמים. RPi אחד מיועד לסעיף אחד (אבטחה/הגנה/בידור)

הגדר Node-Red

הפעל את הצומת אדום

התחלה בצומת אדום

  1. עבור ללוח הניהול בתפריט ההמבורגרים (למעלה מימין)
  2. הורד את המשטחים הבאים

    1. צומת-אדום-לוח מחוונים
    2. node-red-contrib-firebase
    3. node-red-contrib-ibm-watson-iot

שלב 6: זרימות אדום של הצומת

צומת אדום זורם
צומת אדום זורם
צומת אדום זורם
צומת אדום זורם
צומת אדום זורם
צומת אדום זורם
צומת אדום זורם
צומת אדום זורם

הורד את הקבצים וייצא אל הצומת האדום שלך.

צומת אבטחה-אדום

אף אחד

צומת Rpi Node-Red

laserturret.txt

בידור Rpi Node-Red

  • בידור rpi flow.txt
  • ldr rpi flow.txt

צומת אדום של Bluemix של IBM

מוּמלָץ: