תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-23 14:46
לגבי האפליקציה
מערכת IOT זו היא מערכת בידור ואבטחה ביתית.
-
בִּטָחוֹן
- הקש על כרטיס RFID והקלט נשמרים ב- Firebase.
- אם אתה מורשה, תוכל להיכנס בשלווה והתמונה צולמת והועלתה ל- S3
- אם לא מורשה, נכנס סעיף ההגנה ומסך LCD יגיד שאתה לא מורשה.
-
הֲגָנָה
- לחץ על הלחצן בלוח המחוונים.
- צריחי לייזר יתקפו בפרץ ובמהירות אקראיים.
-
בידור
- אם תתגלה תנועה, המשחק יתחיל.
- לאחר שהמשתמש משחק את המשחק, הציון נשמר ב- Firebase.
- ערכי LDR יילקחו ויפלטו על לוח המחוונים.
יישום זה ניתן לשליטה ולצפייה באמצעות שרת האינטרנט IBM Node-Red. אנו עושים שימוש ב- AWS ובשירותי הענן של IBM והשתמשנו ב- Firebase כמאגר הנתונים שלנו.
סיכום השלבים שיתוארו
- דרישות חומרה
- אבטחה - כיצד ליצור מערכת אבטחה המשתמשת בקלט RFID ותוכנת זיהוי תמונות
- הגנה - כיצד ליצור צריח לייזר
- בידור - כיצד ליצור משחק של סיימון אומר
- IOT App Watson ב- IBM Bluemix - כיצד לשלב את כל המערכות בלוח מחוונים אחד
קדימה, גשו לקובץ ה- pdf להסבר מפורט יותר כיצד ליצור פרויקט זה.
שלב 1: דרישת חומרה
זה מה שתצטרך
-
בִּטָחוֹן
- 1 פטל פטל
- 1 LCD
- קורא RFID אחד
- 1 PiCam
- 2 כרטיסי/לחצנים RFID
- X נקבה -> כבלי מגשר זכר
-
הֲגָנָה
- 1 פטל פטל
- 2 10 ㏀ נגד (לכפתורים)
- 2 מיקרו סרוו
- מודול משדר לייזר של 650 ננומטר
- 2 לחצן לחיצה
- באזר 1
- 3 רצועות גומי קטנות/קשרי כבל (לתיקון)
- X נקבה -> כבלי מגשר זכר
- X כבלי קפיצה רגילים
- 1 טרנזיסטור
- 1 קבלים
-
בילויים
- 1 פטל פטל
- 3 1 "נגד (עבור נוריות)
- 1 10㏀ נגד (עבור LDR)
- 3 נוריות (צבעים שונים)
- 3 כפתורים
- 1 LDR
- 1 LCD
- חיישן תנועה Pir אחד
- X נקבה -> כבלי מגשר זכר
- X כבלי קפיצה רגילים
שלב 2: אבטחה
יצירת חומרת מערכת האבטחה
חבר את המעגלים כפי שמוצג בתרשים הטיגון
יצירת תוכנת מערכת האבטחה
- הגדר את AWS על ידי יצירת דבר
- התקן את AWS Python Library
- התקן את ספריית LCD
- התקן את ספריית RFID
- הגדר את Firebase
- הגדרת אחסון S3
- התקן את Boto ב- Raspberry Pi
- התקן את AWS ClI ב- Raspberry Pi
- צור אישורי AWS
- הגדר את AWS
- העלה את security.py ל- RPi
- העלה את imagerecognition.py ל- RPi
security.py הוא קוד שיקרא קלט rfid ויזהה אם המשתמש הוא פולש או לא. אם המשתמש יזוהה, התמונה תצלם ותעלה ל- s3. הקוד מתפרסם גם בנושא ב- aws MQTT
שלב 3: הגנה
יצירת חומרת צריח הלייזר
- אנו יוצרים את צריח הלייזר באמצעות 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
- הגדר סוג התקן Gateway
- הגדר מכשיר
בצע את שלבים 1 ו -2 3 פעמים. RPi אחד מיועד לסעיף אחד (אבטחה/הגנה/בידור)
הגדר Node-Red
הפעל את הצומת אדום
התחלה בצומת אדום
- עבור ללוח הניהול בתפריט ההמבורגרים (למעלה מימין)
-
הורד את המשטחים הבאים
- צומת-אדום-לוח מחוונים
- node-red-contrib-firebase
- node-red-contrib-ibm-watson-iot
שלב 6: זרימות אדום של הצומת
הורד את הקבצים וייצא אל הצומת האדום שלך.
צומת אבטחה-אדום
אף אחד
צומת Rpi Node-Red
laserturret.txt
בידור Rpi Node-Red
- בידור rpi flow.txt
- ldr rpi flow.txt
צומת אדום של Bluemix של IBM
מוּמלָץ:
KS-Garden: סקירה כללית: 9 שלבים
KS-Garden: סקירה כללית: ניתן להשתמש ב- KS-Garden להשקיה/לפרוק/להדליק את גינת החממה/החממה שלך בחצר האחורית או את צמחי הגידול הפנימיים שלך (עיצוב מודולרי) מערכת KS-Garden מורכבת בעיקר מהמודולים הבאים- ראשי תיבת מערכת - Relais ותיבת אספקת חשמל
מערכת בידור סופר נינטנדו מעץ (SNES): 11 שלבים
מערכת בידור סופר נינטנדו מעץ (SNES): בחנות יצרנית בווינה, נתקלתי במקרה במערכת עץ בידור סופר נינטנדו (SNES). כשהייתי ילד שיחקתי עם קונסולת משחקים כזו עם אחי הבכור. כפי שזיהיתי להתמכר שוב לסופר מריו
סקירה כללית של מחשב 8 סיביות על לוח קרשים: 3 שלבים
סקירה כללית של מחשב 8 סיביות על הלוח: המטרה שלי לפרויקט זה הייתה לבנות הבנה טובה יותר של ארכיטקטורת מחשבים, עיצוב חומרה ושפות ברמת הרכבה. בהיותי ג'וניור באוניברסיטה לומד הנדסת מחשבים, סיימתי לאחרונה קורסים בנושא אלקטרוניקה, מעבדות
סקירה כללית של עיצוב וחריטה של PCB: 5 שלבים
סקירה כללית על עיצוב PCB וחריטה: ישנן מספר דרכים לעצב ולחרוט PCB, מהפשוטות ביותר ועד המתוחכמות ביותר. בינתיים קל להתבלבל לגבי מי לבחור, איזו מהן תתאים ביותר לצרכיך. על מנת להבהיר כמה שאלות כמו
סקירה כללית של פרויקט קריסטל בול: 10 שלבים
סקירה כללית של פרויקט קריסטל בול: הוראה זו נוצרה לצורך דרישת הפרוייקט של בית המקדש באוניברסיטת דרום פלורידה (www.makecourse.com) פרויקט כדור הבדולח שלי הוא שילוב של צעצוע מאטל משנות החמישים מג'יק שמונה הכדור ו טלפון עתידות