Cuprins:
- Pasul 1: Cerințe hardware
- Pasul 2: Securitate
- Pasul 3: Apărare
- Pasul 4: Divertisment
- Pasul 5: IOT App Watson pe IBM Bluemix [Prima parte]
- Pasul 6: Nodul Fluxurile roșii
Video: Prezentare generală: Sistem de securitate și divertisment la domiciliu: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Despre aplicație
Acest sistem IOT este un sistem de divertisment și securitate la domiciliu.
-
Securitate
- Atingeți Card RFID și intrarea este salvată în Firebase.
- Dacă sunteți autorizat, puteți intra pașnic și fotografia este făcută și încărcată în S3
- Dacă este neautorizat, intră secțiunea de apărare și un ecran LCD va spune că nu sunteți autorizat.
-
Apărare
- Apăsați butonul de pe tabloul de bord.
- Turelele laser vor ataca în rafală și viteză aleatorii.
-
Divertisment
- Dacă este detectată mișcare, jocul va începe.
- După ce utilizatorul joacă jocul, scorul este salvat în Firebase.
- Valorile LDR vor fi luate și afișate pe tabloul de bord.
Această aplicație este controlabilă și vizualizată prin serverul web IBM Node-Red. Folosim AWS și IBM Cloud Services și am folosit Firebase ca bază de date.
Rezumatul pașilor care vor fi descriși
- Cerințe hardware
- Securitate - Cum se creează un sistem de securitate care utilizează intrarea RFID și un software de recunoaștere a imaginilor
- Apărare - Cum se creează o turelă laser
- Divertisment - Cum să creați un joc Simon-says
- IOT App Watson pe IBM Bluemix - Cum se integrează toate sistemele într-un singur tablou de bord
Mergeți mai departe și accesați fișierul pdf pentru o explicație mai detaliată despre cum să creați acest proiect.
Pasul 1: Cerințe hardware
De asta vei avea nevoie
-
Securitate
- 1 Raspberry Pi
- 1 ecran LCD
- 1 cititor RFID
- 1 PiCam
- 2 carduri / butoane RFID
- X Femelă -> Cabluri jumper masculine
-
Apărare
- 1 Raspberry Pi
- 2 Rezistor de 10 ㏀ (pentru butoane)
- 2 Micro Servo
- 1 Modul emițător laser 650nm
- 2 Apăsați butonul
- 1 buzzer
- 3 benzi mici de cauciuc / legături de cablu (pentru fixare)
- X Femelă -> Cabluri jumper masculine
- X Cabluri de salt regulat
- 1 tranzistor
- 1 condensator
-
Distracții
- 1 Raspberry Pi
- 3 1 ㏀ Rezistor (pentru LED-uri)
- 1 rezistor 10㏀ (pentru LDR)
- 3 LED-uri (culori diferite)
- 3 butoane
- 1 LDR
- 1 ecran LCD
- 1 senzor de mișcare Pir
- X Femelă -> Cabluri jumper masculine
- X Cabluri salt regulate
Pasul 2: Securitate
Crearea hardware-ului sistemului de securitate
Conectați circuitele așa cum se arată în diagrama fritzing
Crearea software-ului sistemului de securitate
- Configurați AWS prin crearea unui lucru
- Instalați AWS Python Library
- Instalați Biblioteca LCD
- Instalați biblioteca RFID
- Configurați Firebase
- Configurare stocare S3
- Instalați Boto pe Raspberry Pi
- Instalați AWS ClI pe Raspberry Pi
- Creați acreditări AWS
- Configurați AWS
- Încărcați security.py pe RPi
- Încărcați imagerecognition.py pe RPi
security.py este un cod care va citi intrările RFID și va detecta dacă utilizatorul este sau nu un intrus. Dacă utilizatorul este recunoscut, o imagine va fi luată și încărcată în s3. Codul publică, de asemenea, pe un subiect din aws MQTT
Pasul 3: Apărare
Crearea turnului laser Hardware
- Creăm turela laser utilizând 2 servome și 1 modul laser
- Conectați circuitele așa cum se arată în diagrama fritzing
Crearea software-ului cu turelă laser
Codul de mai jos va face ca turela laser să tragă în direcții aleatorii, în rafale și viteză aleatorii
laserturret.py
din LED-ul de import gpiozero, Buzzer, Buton, Servoimport timp din importul semnalului pauză import aleatorie
#led = LED (12)
#pir = MotionSensor (19, sample_rate = 5, queue_len = 1) buzzer_pin = Buzzer (17) attack = Buton (5, pull_up = False) #reset = Buton (6, pull_up = False) servo1 = Servo (18) servo2 = Servo (24)
def ledON ():
led.on () print ("LED-ul este aprins") def ledOFF (): led.off () print ("LED-ul este stins")
def fire ():
print („arme fierbinți”) 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)
note = {
„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}
buzz def (frecvență, lungime): #creați funcția "buzz" și alimentați-l cu tonul și durata)
dacă (frecvență == 0):
time.sleep (length) period return = 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): #start a loop of 0 to the variable "cycles" calculate above buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)
redare def (melodie, tempo, pauză, ritm = 0.800):
pentru i în interval (0, len (melodie)): # Redare melodie note Durată = ritm / tempo zumzet (melodie , notă Durată) # Modificarea frecvenței de-a lungul notei melodiei pauzăBetweenNotes = noteDuration * pause time.sleep (pauseBetweenNotes)
în timp ce este adevărat:
laserturret () pauză;
Pasul 4: Divertisment
Crearea divertismentului Hardware
Creăm jocul cu butoane Simon-says, care trebuie să urmeze modelul luminilor LED-urilor și să apăsăm butoanele corespunzătoare. Încarcă scoruri și timestamp în baza de date NoSQL Firebase pentru o utilizare ulterioară în tablourile de bord.
Conectați circuitele așa cum se arată în diagrama Fritzing.
Crearea software-ului de divertisment
entertainment.py
import RPi. GPIO ca GPIOimport timp filetare import tweepy import aleatoare os de import de import de la LCD rpi_lcd import din apel subproces import din timpul de somn import din datetime datetime import din firebase CONSUMER_KEY firebase 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 ', Niciuna) lcd = LCD () lcd.text („Distrează-te!”, 1) lcd.text („Noroc!”, 2) somn (1) # Roșu, Galben, Verde LUMINI = [40, 38, 36] BUTONURI = [37, 33, 35] NOTE = ["E3", "A4", "E4"] # valori pe care le puteți modifica, care afectează viteza de joc = 0,5 # steaguri utilizate pentru a semnaliza jocul status is_displaying_pattern = False is_won_curr ent_level = False is_game_over = False # starea jocului 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) pentru i în intervalul (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (canal): current_step_of_level, current_level, current_level, current_level, current_level is_game_over if not is_displaying_pattern and not is_won_current_level și not is_game_over: flash_led_for_button (canal) if channel == BUTTONS [pattern [current_step_of_level]: current_step_of_level + = 1 if current_step_of_level = = current_le_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 = True GPIO.output (LIGHTS): GPIO.output (LIGHTS [pattern , GPIO. HIGH) time.sleep (speed) GPIO.output (LIGHTS [pattern , GPIO. LOW) time.sleep (speed) is_displaying_pattern = Def fals def wait_for_player_to_repeat_pattern (): while not is_won_current_level și 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_display_pattern GPIO.output (LIGHTS, GPIO. LOW) def send_data (scor): lcd.text („Sfârșitul jocului”, 1) lcd.text („Ne vedem curând!”, 2) datestr = str (datetime. now ()) în timp ce True: print (datestr) print (scor) data = {'Date': datestr, 'Score': score} result = firebase.post ('/ scores /', data) print (result) if score> 2: status = 'Cineva a marcat' + (str (scor)) + 'pe' + 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! scorul este {} culori!).format (current_level - 1)) sleep (2) print ("Vă mulțumim pentru joc! / 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 ("Începeți runda nouă! / n") initialize_gpio () start_game_monitor () în cele din urmă: GPIO.cleanup () if _name_ ==' _main_ ': main ()
Pasul 5: IOT App Watson pe IBM Bluemix [Prima parte]
Configurați serviciul Blumix IoT
- Configurați un tip de dispozitiv Gateway
- Configurați un dispozitiv
Faceți pașii 1 și 2 de 3 ori. Un RPi este pentru o singură secțiune (Securitate / Apărare / Divertisment)
Configurați Node-Red
Rulați nod roșu
nod roșu start
- Accesați pentru a gestiona paleta din meniul hamburger (dreapta sus)
-
Descărcați următoarele palete
- nod-roșu-tablou de bord
- nod-roșu-contrib-firebase
- nod-roșu-contrib-ibm-watson-iot
Pasul 6: Nodul Fluxurile roșii
Descărcați fișierele și exportați-le în roșu.
Nod de securitate - roșu
nici unul
Defence Rpi Node-Red
laserturret.txt
Divertisment Rpi Node-Red
- entertainment rpi flow.txt
- ldr rpi flow.txt
IBM Bluemix Node-Red
Recomandat:
KS-Garden: Prezentare generală: 9 pași
KS-Garden: Prezentare generală: KS-Garden poate fi utilizat pentru irigarea / ventilarea / iluminarea plantelor de grădină / de seră din curtea din spate sau a plantelor de interior pentru cutii de creștere (design modular) Sistemul KS-Garden constă în principal din următoarele module - Principal cutie sistem - Cutie relaxare și alimentare
Motor controlat cu tranzistor cu telecomandă; Prezentare generală a circuitului: 9 pași
Motor controlat cu tranzistor cu telecomandă; Prezentare generală a circuitului: Acest circuit este un motor controlat cu tranzistor cu telecomandă. Telecomanda pornește. Tranzistorul va porni motorul. Codul programului va crește viteza motorului și apoi reduceți viteza motorului până la zero
Prezentare generală a computerului pe 8 biți pe o placă de calcul: 3 pași
Prezentare generală a computerului pe 8 biți pe un panou de calcul: Scopul meu pentru acest proiect a fost de a construi o mai bună înțelegere a arhitecturii computerelor, a proiectării hardware și a limbajelor la nivel de asamblare. Fiind junior în universitatea care studiază ingineria computerelor, am absolvit recent cursuri de electronică, laboratoare și
Proiectare și gravare PCB Prezentare generală: 5 pași
Proiectare și gravare PCB Prezentare generală: Există mai multe moduri de proiectare și gravare PCB-uri, de la cele mai simple la cele mai sofisticate. Între timp, este ușor să vă confundați cu ce anume să alegeți, care dintre ele se potrivește cel mai bine nevoilor dvs. Pentru a clarifica câteva întrebări precum t
Utilizarea unui pod H (293D) pentru a acționa 2 motoare Hobby cu transmisie Ans Arduino; Prezentare generală a circuitului: 9 pași
Utilizarea unui pod H (293D) pentru a acționa 2 motoare Hobby cu transmisie Ans Arduino; prezentare generală a circuitului: Podul H 293D este un circuit integrat capabil să conducă 2 motoare. Avantajul podului H asupra tranzistorului sau a circuitelor de control MOSFET este că poate conduce cele 2 motoare bidirecțional (înainte și înapoi) cu un cod