Taula de continguts:
- Pas 1: requisit de maquinari
- Pas 2: seguretat
- Pas 3: Defensa
- Pas 4: Entreteniment
- Pas 5: aplicació IOT Watson a IBM Bluemix [primera part]
- Pas 6: Fluxos vermells del node
Vídeo: Visió general: Sistema de seguretat i entreteniment domèstic: 6 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
Quant a l'aplicació
Aquest sistema IOT és un sistema de seguretat i entreteniment per a la llar.
-
Seguretat
- Toqueu la targeta RFID i l'entrada es desa a Firebase.
- Si està autoritzat, podeu entrar pacíficament i la foto es fa i es penja a S3
- Si no està autoritzat, entra la secció de defensa i una pantalla LCD indicarà que no està autoritzat.
- Defensa
- Premeu el botó del tauler.
- Les torretes làser atacaran en ràfegues i velocitats aleatòries.
-
Entreteniment
- Si es detecta moviment, el joc començarà.
- Quan l'usuari juga el joc, la puntuació es desa a Firebase.
- 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
-
Seguretat
- 1 Raspberry Pi
- 1 pantalla LCD
- 1 lector RFID
- 1 PiCam
- 2 botons / targetes RFID
- X femella -> cables de pont masculí
- 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
-
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
Creació del maquinari del sistema de seguretat
Connecteu els circuits tal com es mostra al diagrama fritzing
Creació del programari del sistema de seguretat
- Configureu AWS creant una cosa
- Instal·leu la biblioteca AWS Python
- Instal·leu la biblioteca LCD
- Instal·leu la biblioteca RFID
- Configuració de Firebase
- Configuració de l’emmagatzematge S3
- Instal·leu Boto al Raspberry Pi
- Instal·leu AWS ClI a Raspberry Pi
- Creeu credencials AWS
- Configureu AWS
- Pengeu security.py a RPi
- 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
Creació del maquinari de la torreta làser
- Creem la torreta làser mitjançant 2 servos i 1 mòdul làser
- 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
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
- Configureu un tipus de dispositiu de passarel·la
- 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
- Ves a gestionar la paleta al menú de l'hamburguesa (dalt a la dreta)
-
Descarregueu els següents palets
- node-red-dashboard
- node-red-contrib-firebase
- node-red-contrib-ibm-watson-iot
Pas 6: Fluxos vermells del node
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:
KS-Garden: Visió general: 9 passos
KS-Garden: Visió general: KS-Garden es pot utilitzar per regar / deshacer. / Il·luminar les plantes del jardí / hivernacle al jardí del darrere o les plantes de caixa de cultiu interior (disseny modular) El sistema KS-Garden consisteix principalment en els mòduls següents: caixa del sistema - Relais i caixa d'alimentació
Motor controlat amb transistor amb control remot; Visió general del circuit: 9 passos
Motor controlat amb transistor amb control remot; Visió general del circuit: aquest circuit és un motor controlat per transistors amb comandament a distància. El control remot encén el transistor. a continuació, reduïu la velocitat del motor fins a zero
Visió general del disseny i gravat de PCB: 5 passos
Visió general del disseny i gravat de PCB: hi ha diverses maneres de dissenyar i gravar PCB, des de les més senzilles fins a les més sofisticades. Mentrestant, és fàcil confondre’s sobre quin triar, quin s’adapta millor a les vostres necessitats. Per tal d’aclarir algunes preguntes com ara
Sistema de seguretat domèstic DSC habilitat per Internet: 22 passos
Sistema de seguretat domèstica DSC habilitat per Internet: modifiqueu un sistema de seguretat domèstica DSC existent perquè estigui habilitat a Internet i s'autocontroli. Aquesta instrucció suposa que teniu un Raspberry Pi en funcionament. Tingueu en compte que aquesta implementació té les següents deficiències: Si un lladre talla el cable DSL entrant
Ús d’un pont H (293D) per conduir 2 motors Hobby Geared Ans Arduino; Visió general del circuit: 9 passos
Utilització d’un pont H (293D) per conduir 2 motors Hobby Geared Ans Arduino; visió general del circuit: el pont H 293D és un circuit integrat capaç de conduir 2 motors. L’avantatge del pont H sobre circuits de control de transistor o MOSFET és que pot accionar els 2 motors bidireccionalment (endavant i endarrere) amb un codi