Obsah:

Prehľad: Systém domácej zábavy a zabezpečenia: 6 krokov
Prehľad: Systém domácej zábavy a zabezpečenia: 6 krokov

Video: Prehľad: Systém domácej zábavy a zabezpečenia: 6 krokov

Video: Prehľad: Systém domácej zábavy a zabezpečenia: 6 krokov
Video: 33. zasadnutie Mestského zastupiteľstva v Žiline | 20.6.2022 2024, November
Anonim
Prehľad: Systém domácej zábavy a zabezpečenia
Prehľad: Systém domácej zábavy a zabezpečenia
Prehľad: Systém domácej zábavy a zabezpečenia
Prehľad: Systém domácej zábavy a zabezpečenia
Prehľad: Systém domácej zábavy a zabezpečenia
Prehľad: Systém domácej zábavy a zabezpečenia

O aplikácii

Tento systém IOT je systémom domácej zábavy a zabezpečenia.

  1. Zabezpečenie

    1. Klepnite na RFID karta a vstup sa uloží do Firebase.
    2. Ak máte oprávnenie, môžete pokojne vstúpiť a obrázok sa nasníma a odovzdá do S3
    3. Ak je neoprávnený, vstúpi sekcia obrany a LCD obrazovka oznámi, že nie ste autorizovaný.
  2. Obrana
    1. Stlačte tlačidlo na palubnej doske.
    2. Laserové veže budú útočiť v náhodných dávkach a rýchlosťou.
  3. Zábava
    1. Ak sa zistí pohyb, hra sa spustí.
    2. Keď si hru používateľ zahrá, skóre sa uloží do Firebase.
    3. Hodnoty LDR budú prevzaté a odoslané na palubnú dosku.

Táto aplikácia je ovládateľná a zobraziteľná prostredníctvom webového servera IBM Node-Red. Využívame cloudové služby AWS a IBM a ako databázu sme použili Firebase.

Zhrnutie krokov, ktoré budú popísané

  • Hardvérové požiadavky
  • Zabezpečenie - Ako vytvoriť bezpečnostný systém, ktorý používa vstup RFID a softvér na rozpoznávanie obrázkov
  • Obrana - Ako vytvoriť laserovú vežu
  • Zábava - Ako vytvoriť hru Simon -say
  • IOT App Watson na IBM Bluemix - Ako integrovať všetky systémy do jedného palubného panela

Neváhajte a navštívte súbor pdf, kde nájdete podrobnejšie vysvetlenie, ako vytvoriť tento projekt.

Krok 1: Hardvérová požiadavka

To je to, čo budete potrebovať

  1. Zabezpečenie

    • 1 malina Pi
    • 1 LCD
    • 1 čítačka RFID
    • 1 PiCam
    • 2 karty/tlačidlá RFID
    • X Zásuvky -> Samčie prepojovacie káble
  2. Obrana
    • 1 malina Pi
    • 2 10 ㏀ odpor (pre tlačidlá)
    • 2 mikro servo
    • 1 650nm modul laserového vysielača
    • 2 Tlačidlo
    • 1 bzučiak
    • 3 malé gumové pásky/káblové zväzky (na upevnenie)
    • X Zásuvky -> Samčie prepojovacie káble
    • X bežných prepojovacích káblov
    • 1 tranzistor
    • 1 kondenzátor
  3. Zábavy

    • 1 malina Pi
    • 3 1 ㏀ Rezistor (pre LED diódy)
    • 1 10㏀ odpor (pre LDR)
    • 3 LED diódy (rôzne farby)
    • 3 tlačidlá
    • 1 LDR
    • 1 LCD
    • 1 snímač pohybu Pir
    • X Zásuvky -> Samčie prepojovacie káble
    • X bežných prepojovacích káblov

Krok 2: Zabezpečenie

Zabezpečenie
Zabezpečenie
Zabezpečenie
Zabezpečenie
Zabezpečenie
Zabezpečenie

Vytvorenie hardvéru systému zabezpečenia

Pripojte obvody podľa schémy spájania

Vytvorenie softvéru bezpečnostného systému

  1. Nakonfigurujte AWS vytvorením veci
  2. Nainštalujte si knižnicu AWS Python
  3. Nainštalujte knižnicu LCD
  4. Nainštalujte si knižnicu RFID
  5. Nastavte Firebase
  6. Nastavte úložisko S3
  7. Nainštalujte Boto na Raspberry Pi
  8. Nainštalujte AWS ClI na Raspberry Pi
  9. Vytvorte poverenia AWS
  10. Konfigurácia AWS
  11. Nahrajte security.py do RPi
  12. Nahrajte obrázok imagerecognition.py do RPi

security.py je kód, ktorý bude čítať vstupy rfid a zisťovať, či je užívateľ votrelec alebo nie. Ak je používateľ rozpoznaný, nasníma sa obrázok a odovzdá sa do s3. Kód tiež publikuje na tému v aws MQTT

Krok 3: Obrana

Obrana
Obrana
Obrana
Obrana
Obrana
Obrana

Vytvorenie hardvéru laserovej veže

  1. Laserovú vežu vytvárame pomocou 2 serv a 1 laserového modulu
  2. Pripojte obvody podľa schémy spájania

Vytvorenie softvéru laserovej veže

Nasledujúci kód prinúti laserovú vežu strieľať v náhodných smeroch, v náhodných dávkach a rýchlosťou

laserturret.py

z gpiozero import LED, bzučiak, tlačidlo, Servoimport čas od importu signálu pauza import náhodný

#led = LED (12)

#pir = MotionSensor (19, sample_rate = 5, queue_len = 1) buzzer_pin = Buzzer (17) attack = Button (5, pull_up = False) #reset = Button (6, pull_up = False) servo1 = Servo (18) servo2 = Servo (24)

def ledON ():

led.on () print („LED svieti“) def ledOFF (): led.off () print („LED nesvieti“)

def fire ():

vytlačiť ("zbrane horúce") 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 detail = [timeBetweenBurst, timeBetweenShots, servo1.value, servo2.value, numShots] print (detail) while shot <numshots: shot+= "1" servo1.value = "servo1start" servo2.value = "servo2start" servo1start = "servo1change" servo2start = "servo2change" fire () = "" time.sleep (timebetweenshots) = "" time.sleep (timebetweenburst)

poznámky = {

„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 (frekvencia, dĺžka): #vytvorte funkciu „buzz“a dajte jej výšku a trvanie)

ak (frekvencia == 0):

time.sleep (length) return period = 1.0 / Frequency #frequency delayValue = period / 2 #calcuate the time for half of the wave numCycles = int (length * frequency) #num of waves = duratime x freq for i in range (numCycles): #spustite slučku od 0 do premennej „cykly“vypočítanej vyššie buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)

def play (melódia, tempo, pauza, tempo = 0,800):

pre i v rozsahu (0, len (melódia)): # Prehrať poznámku k skladbe Trvanie = tempo/tempo bzučať (melódia , notaDurácia) # Zmeniť frekvenciu pozdĺž pauzy noty k piesniBetweenNotes = notaDurácia * čas pauzy.spánok (pauseBetweenNotes)

kým je pravda:

laserturret () prestávka;

Krok 4: Zábava

Zábava
Zábava
Zábava
Zábava
Zábava
Zábava

Vytváranie zábavného hardvéru

Vytvárame gombíkovú hru Simon-say, v ktorej musíte postupovať podľa rozsvietenia diód LED a stlačiť príslušné tlačidlá. Odošle skóre a časovú pečiatku do databázy NoSQL firebase na ďalšie použitie na dashboardoch.

Pripojte obvody podľa Fritzingovho diagramu.

Vytvorenie zábavného softvéru

Entertainment.py

import RPi. GPIO as GPIOimport threading import časového import random import osí dovozné tweepy z rpi_lcd dovoznej LCD z čiastkové proces importu volanie z časového dovoznej spánku z datetime import datetime z Firebase import Firebase CONSUMER_KEY = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = '' ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY ACCESS_KEY =, 988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET =' K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk 'auth = tweepy. OAuthHandler (CONSUMER_KEY, CONSUMER_SECRET) auth.secure = True auth.set_access_token (ACCESS_KEY, ACCESS_SECRET) api = tweepy. API (auth) Firebase = firebase. FirebaseApplication (' https:// iotca2 -12f48.firebaseio.com ', None) lcd = LCD () lcd.text (' Bavte sa! ', 1) lcd.text (' Veľa šťastia! ', 2) spánok (1) # červená, žltá, zelená SVETLÁ = [40, 38, 36] BUTTONS = [37, 33, 35] NOTES = ["E3", "A4", "E4"] # hodnoty, ktoré môžete zmeniť a ktoré ovplyvňujú rýchlosť hrania hry = 0,5 # vlajok použitých na signalizáciu hry status is_displaying_pattern = False is_won_curr ent_level = False is_game_over = False # herný stav 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. nastavenie (BUTTONS, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) pre i v rozsahu (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (channel): global current_step_of_level, current_ is_game_over, ak nie je 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 islev_cur kur 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.output (LIGHTS [vzor , GPIO. HIGH) time.sleep (rýchlosť) GPIO.output (LIGHTS [vzor , GPIO. LOW) time.sleep (speed) is_displaying_pattern = False def wait_for_player_to_repeat_pattern (): aj keď nie je_won_current_level a nie je_game_over: time.sleep (0,1) GPIO.output (LIGHTS, GPIO. LOW) def send_data (skóre): lcd.text ('End of game', 1) lcd.text ('See you soon!', 2) datestr = str (datetime. now ()) while True: print (datestr) vytlačiť (skóre) údaje = {'Dátum': datestr, 'Skóre': skóre} výsledok = firebase.post ('/skóre/', údaje) vytlačiť (výsledok), ak je skóre> 2: status = 'Niekto dal gól' +(str (skóre))+'na'+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 ("Game Over! score is {} colors!".format (current_level - 1)) spánok (2) tlač („Ďakujeme, že hráte! / n“) lcd.text ('', 1) lcd.text ('', 2) prestávka.spánok (2) def start_game_monitor (): t = threading. Thread (target = start_game) t.daemon = True t.start () t.join () def main (): try: os.system ('cls' if os.name == 'nt 'else' clear ') print ("Začnite nové kolo! / n") initialize_gpio () start_game_monitor () nakoniec: GPIO.cleanup () if _name_ ==' _main_ ': main ()

Krok 5: Aplikácia IOT Watson na serveri IBM Bluemix [prvá časť]

Nastavte službu Blumix IoT

  1. Nastavte typ zariadenia brány
  2. Nastavte zariadenie

Vykonajte kroky 1 a 2 trikrát. Jedno RPi je pre jednu sekciu (bezpečnosť/obrana/zábava)

Nastavte Node-Red

Spustite node-red

uzol-červený štart

  1. V ponuke hamburgera (vpravo hore) prejdite na správu palety
  2. Stiahnite si nasledujúce palety

    1. uzol-červená-palubná doska
    2. node-red-contrib-firebase
    3. node-red-contrib-ibm-watson-iot

Krok 6: Červené toky uzla

Uzol červené toky
Uzol červené toky
Uzol červené toky
Uzol červené toky
Uzol červené toky
Uzol červené toky
Uzol červené toky
Uzol červené toky

Stiahnite si súbory a exportujte do svojho uzla-červená.

Bezpečnostný uzol-červený

žiadny

Obrana Rpi Node-Red

laserturret.txt

Zábava Rpi Node-Red

  • zábava rpi flow.txt
  • ldr rpi flow.txt

IBM Bluemix Node-Red

Odporúča: