Taula de continguts:

Visió general: Sistema de seguretat i entreteniment domèstic: 6 passos
Visió general: Sistema de seguretat i entreteniment domèstic: 6 passos

Vídeo: Visió general: Sistema de seguretat i entreteniment domèstic: 6 passos

Vídeo: Visió general: Sistema de seguretat i entreteniment domèstic: 6 passos
Vídeo: Загадка Титаника : Как они могли не заметить айсберг?! Самая подробная история! 2024, Juny
Anonim
Visió general: sistema de seguretat i entreteniment domèstic
Visió general: sistema de seguretat i entreteniment domèstic
Visió general: sistema de seguretat i entreteniment domèstic
Visió general: sistema de seguretat i entreteniment domèstic
Visió general: sistema de seguretat i entreteniment domèstic
Visió general: sistema de seguretat i entreteniment domèstic

Quant a l'aplicació

Aquest sistema IOT és un sistema de seguretat i entreteniment per a la llar.

  1. Seguretat

    1. Toqueu la targeta RFID i l'entrada es desa a Firebase.
    2. Si està autoritzat, podeu entrar pacíficament i la foto es fa i es penja a S3
    3. Si no està autoritzat, entra la secció de defensa i una pantalla LCD indicarà que no està autoritzat.
  2. Defensa
    1. Premeu el botó del tauler.
    2. Les torretes làser atacaran en ràfegues i velocitats aleatòries.
  3. Entreteniment

    1. Si es detecta moviment, el joc començarà.
    2. Quan l'usuari juga el joc, la puntuació es desa a Firebase.
    3. Es prendran els valors LDR i es mostraran al tauler.

Aquesta aplicació es pot controlar i visualitzar mitjançant el servidor web IBM Node-Red. Fem servir AWS i IBM Cloud Services i hem utilitzat Firebase com a base de dades.

Resum dels passos que es descriuran

  • Requisits de maquinari
  • Seguretat: com es crea un sistema de seguretat que utilitza l'entrada RFID i un programari de reconeixement d'imatges
  • Defensa - Com crear una torreta làser
  • Entreteniment: com crear un joc Simon-says
  • IOT App Watson a l'IBM Bluemix - Com integrar tots els sistemes en un únic tauler de control

Seguiu endavant i accediu al fitxer pdf per obtenir una explicació més detallada sobre com crear aquest projecte.

Pas 1: requisit de maquinari

Això és el que necessitareu

  1. Seguretat

    • 1 Raspberry Pi
    • 1 pantalla LCD
    • 1 lector RFID
    • 1 PiCam
    • 2 botons / targetes RFID
    • X femella -> cables de pont masculí
  2. Defensa
    • 1 Raspberry Pi
    • 2 Resistència de 10 ㏀ (per a botons)
    • 2 Micro Servo
    • 1 mòdul de transmissor làser de 650 nm
    • 2 Polsador
    • 1 timbre
    • 3 petites bandes de goma / lligadures de cable (per fixar)
    • X femella -> cables de pont masculí
    • X cables de salt regulars
    • 1 transistor
    • 1 condensador
  3. Entreteniments

    • 1 Raspberry Pi
    • 3 1 ㏀ Resistència (per a LEDs)
    • 1 resistència de 10㏀ (per LDR)
    • 3 LEDs (diferents colors)
    • 3 botons
    • 1 LDR
    • 1 pantalla LCD
    • 1 sensor de moviment Pir
    • X femella -> cables de pont masculí
    • X cables de salt regulars

Pas 2: seguretat

Seguretat
Seguretat
Seguretat
Seguretat
Seguretat
Seguretat

Creació del maquinari del sistema de seguretat

Connecteu els circuits tal com es mostra al diagrama fritzing

Creació del programari del sistema de seguretat

  1. Configureu AWS creant una cosa
  2. Instal·leu la biblioteca AWS Python
  3. Instal·leu la biblioteca LCD
  4. Instal·leu la biblioteca RFID
  5. Configuració de Firebase
  6. Configuració de l’emmagatzematge S3
  7. Instal·leu Boto al Raspberry Pi
  8. Instal·leu AWS ClI a Raspberry Pi
  9. Creeu credencials AWS
  10. Configureu AWS
  11. Pengeu security.py a RPi
  12. Pengeu imagerecognition.py a RPi

security.py és un codi que llegirà les entrades RFID i detectarà si l'usuari és un intrús o no. Si es reconeix l'usuari, es prendrà una imatge i es penjarà a s3. El codi també publica un tema a aws MQTT

Pas 3: Defensa

Defensa
Defensa
Defensa
Defensa
Defensa
Defensa

Creació del maquinari de la torreta làser

  1. Creem la torreta làser mitjançant 2 servos i 1 mòdul làser
  2. Connecteu els circuits tal com es mostra al diagrama fritzing

Creació del programari de la torreta làser

El codi següent farà que la torreta làser dispari en direccions aleatòries, en ràfegues aleatòries i velocitat

laserturret.py

des del LED d’importació gpiozero, zumbador, botó, temps de Servoimport de la importació del senyal importació de pausa aleatòria

#led = LED (12)

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

def ledON ():

led.on () print ("El LED està encès") def ledOFF (): led.off () print ("El LED està apagat")

def fire ():

print ("armes calentes") 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) 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] imprimeix (detall) mentre es dispara <numshots: shot + = "1" servo1.value = "servo1start" servo2.value = "servo2start" servo1start = "servo1change" servo2start = "servo2change" fire () = "" time.sleep (timebetweenshots) = "" time.sleep (timebetweenburst)

notes = {

"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 (freqüència, longitud): #crea la funció "buzz" i alimenta-la amb el to i la durada)

si (freqüència == 0):

time.sleep (length) period de retorn = 1,0 / freqüència #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): #start a loop from 0 to the variable "cycles" calculate above buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)

reproducció definida (melodia, tempo, pausa, ritme = 0,800):

per a l’interval (0, len (melodia)): # Reprodueix la cançó noteDuration = pace / tempo buzz (melodia , noteDuration) # Canvia la freqüència al llarg de la nota de la cançó pausaBetweenNotes = noteDuration * pausa time.sleep (pauseBetweenNotes)

mentre que és cert:

laserturret () trencar;

Pas 4: Entreteniment

Entreteniment
Entreteniment
Entreteniment
Entreteniment
Entreteniment
Entreteniment

Creació del maquinari d’entreteniment

Creem el joc de botons Simon-says, que heu de seguir el patró dels LEDs que s’encenen i premem els botons corresponents. Penja puntuacions i marca de temps a la base de dades NoSQL de Firebase per a un ús posterior als taulers.

Connecteu els circuits tal com es mostra al diagrama de Fritzing.

Creació del programari d’entreteniment

entertainment.py

importació RPi. GPIO com GPIOimport temps d'importació roscat tweepy importar importar a l'atzar import us de LCD importació rpi_lcd de trucada d'importació subprocés de suspensió d'importacions de temps des de la data i hora de data i hora d'importació de base de foc CONSUMER_KEY base de foc import = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = ACCESS_KEY 'ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY' = '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 ', Cap) lcd = LCD () lcd.text (' Diverteix-te! ', 1) lcd.text (' Bona sort! ', 2) dormir (1) # Vermell, groc, verd LLUMS = [40, 38, 36] BOTONS = [37, 33, 35] NOTES = ["E3", "A4", "E4"] # valors que podeu canviar que afecten la velocitat de joc = 0,5 # senyalitzadors utilitzats per assenyalar el joc status is_displaying_pattern = False is_won_curr ent_level = Fals is_game_over = Fals # game game 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. setup (BUTTONS, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) per a l’interval (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (channel): current_step_of_level, current_level, current_level, current_level is_game_over if not is_displaying_pattern and not is_won_current_level and not 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_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 (): is_displaying_pattern is_displaying_pattern = True GPIO.output (LIGHTS, GPU): GPIO.output (LIGHTS [patró , GPIO. HIGH) time.sleep (velocitat) GPIO.output (LIGHTS [patró , GPIO. LOW) time.sleep (velocitat) is_displaying_pattern = Def. Def. Wait_for_player_to_repeat_pattern (): mentre no is_won_current_level and not 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_disle_tern GPIO.output (LIGHTS, GPIO. LOW) def send_data (score): lcd.text ('Final del joc', 1) lcd.text ('Fins aviat!', 2) datestr = str (datetime. now ()) mentre que True: print (datestr) print (score) data = {'Date': datestr, 'Score': score} result = firebase.post ('/ scores /', data) print (result) if score> 2: status = 'Algú ha puntuat' + (str (score)) + 'on' + 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! n" és {} colors!).format (current_level - 1)) sleep (2) print ("Gràcies per jugar! / 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 (): try: os.system ('cls' if os.name == 'nt 'else' clear ') print ("Comença una nova ronda! / n") initialize_gpio () start_game_monitor () finalment: GPIO.cleanup () if _name_ ==' _main_ ': main ()

Pas 5: aplicació IOT Watson a IBM Bluemix [primera part]

Configureu el servei IoT Blumix

  1. Configureu un tipus de dispositiu de passarel·la
  2. Configureu un dispositiu

Feu els passos 1 i 2 durant 3 vegades. Un RPi és per a una secció (Seguretat / Defensa / Entreteniment)

Configureu Node-Red

Executa vermell de node

inici vermell node

  1. Ves a gestionar la paleta al menú de l'hamburguesa (dalt a la dreta)
  2. Descarregueu els següents palets

    1. node-red-dashboard
    2. node-red-contrib-firebase
    3. node-red-contrib-ibm-watson-iot

Pas 6: Fluxos vermells del node

Node Fluxos vermells
Node Fluxos vermells
Node Fluxos vermells
Node Fluxos vermells
Node Fluxos vermells
Node Fluxos vermells
Node Fluxos vermells
Node Fluxos vermells

Baixeu-vos els fitxers i exporteu-los al vermell del vostre node.

Node de seguretat: vermell

cap

Defensa Rpi Node-Red

laserturret.txt

Entreteniment Rpi Node-Red

  • entreteniment rpi flow.txt
  • ldr rpi flow.txt

IBM Bluemix Node-Red

Recomanat: