Kazalo:

Pregled: Domača zabava in varnostni sistem: 6 korakov
Pregled: Domača zabava in varnostni sistem: 6 korakov

Video: Pregled: Domača zabava in varnostni sistem: 6 korakov

Video: Pregled: Domača zabava in varnostni sistem: 6 korakov
Video: ТЕПЕРЬ НЕ ПРОПАДУ 10-ть самоделок ВЫРУЧАТ ГДЕ УГОДНО! 2024, November
Anonim
Pregled: Sistem za domačo zabavo in varnost
Pregled: Sistem za domačo zabavo in varnost
Pregled: Sistem za domačo zabavo in varnost
Pregled: Sistem za domačo zabavo in varnost
Pregled: Sistem za domačo zabavo in varnost
Pregled: Sistem za domačo zabavo in varnost

O aplikaciji

Ta sistem IOT je sistem za domačo zabavo in varnost.

  1. Varnost

    1. Dotaknite se kartice RFID in vnos se shrani v Firebase.
    2. Če ste pooblaščeni, lahko mirno vstopite in slika se posname in naloži na S3
    3. Če je nepooblaščen, pride obrambni odsek in na LCD -zaslonu se prikaže sporočilo, da niste pooblaščeni.
  2. Obramba
    1. Pritisnite gumb na armaturni plošči.
    2. Laserski stolpi bodo napadli v naključnem rafalu in hitrosti.
  3. Zabava
    1. Če se zazna gibanje, se igra začne.
    2. Ko igralec igra igro, se rezultat shrani v Firebase.
    3. Vrednosti LDR se vzamejo in prikažejo na armaturni plošči.

To aplikacijo je mogoče upravljati in si jo ogledati prek spletnega strežnika IBM Node-Red. Uporabljamo AWS in IBM Cloud Services, za bazo podatkov pa smo uporabili Firebase.

Povzetek korakov, ki bodo opisani

  • Strojne zahteve
  • Varnost - Kako ustvariti varnostni sistem, ki uporablja vhod RFID in programsko opremo za prepoznavanje slik
  • Obramba - Kako ustvariti laserski stolp
  • Zabava - kako ustvariti igro Simona pravi
  • IOT App Watson na IBM Bluemix - Kako integrirati vse sisteme v eno nadzorno ploščo

Pojdite naprej in odprite datoteko PDF za podrobnejšo razlago, kako ustvariti ta projekt.

1. korak: Zahteve po strojni opremi

To je tisto, kar boste potrebovali

  1. Varnost

    • 1 Malina Pi
    • 1 LCD
    • 1 RFID čitalnik
    • 1 PiCam
    • 2 RFID kartice/gumbi
    • X Ženski -> Moški mostični kabli
  2. Obramba
    • 1 Malina Pi
    • 2 10 ㏀ upor (za gumbe)
    • 2 mikro servo
    • 1 650nm laserski oddajni modul
    • 2 Pritisnite gumb
    • 1 zvočni signal
    • 3 majhne gumijaste trakove/kabelske vezice (za pritrditev)
    • X Ženski -> Moški mostični kabli
    • X Navadni skakalni kabli
    • 1 tranzistor
    • 1 Kondenzator
  3. Zabave

    • 1 Malina Pi
    • 3 1, upor (za LED)
    • 1 10㏀ upor (za LDR)
    • 3 LED (različne barve)
    • 3 gumbi
    • 1 LDR
    • 1 LCD
    • 1 Pir senzor gibanja
    • X Ženski -> Moški mostični kabli
    • X Navadni skakalni kabli

2. korak: Varnost

Varnost
Varnost
Varnost
Varnost
Varnost
Varnost

Ustvarjanje strojne opreme varnostnega sistema

Povežite vezja, kot je prikazano na diagramu fritzinga

Ustvarjanje programske opreme varnostnega sistema

  1. Konfigurirajte AWS tako, da ustvarite stvar
  2. Namestite knjižnico AWS Python
  3. Namestite knjižnico LCD
  4. Namestite knjižnico RFID
  5. Namestite Firebase
  6. Nastavitev shrambe S3
  7. Namestite Boto na Raspberry Pi
  8. Namestite AWS ClI na Raspberry Pi
  9. Ustvarite poverilnice AWS
  10. Konfigurirajte AWS
  11. Naložite security.py v RPi
  12. Naložite imagerecognition.py v RPi

security.py je koda, ki bo prebrala vnose rfid in zaznala, ali je uporabnik vsiljivec ali ne. Če je uporabnik prepoznan, bo slika posneta in naložena na s3. Koda se objavi tudi v temi v aws MQTT

3. korak: Obramba

Obramba
Obramba
Obramba
Obramba
Obramba
Obramba

Ustvarjanje strojne opreme laserskega stolpa

  1. Laserski stolp ustvarimo z uporabo 2 servomotorjev in 1 laserskega modula
  2. Povežite vezja, kot je prikazano na diagramu fritzinga

Ustvarjanje programske opreme za laserski stolp

S spodnjo kodo bo laserski stolp ustrelil v naključnih smereh, v naključnih rafalih in hitrosti

laserturret.py

od gpiozero import LED, Buzzer, Button, Servoimport time from import signal pause import random

#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 sveti") def ledOFF (): led.off () print ("LED ne sveti")

def fire ():

print ("orožje vroče") 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. = 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)

opombe = {

"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 (frekvenca, dolžina): #ustvarite funkcijo "buzz" in ji vnesite glasnost in trajanje)

če (frekvenca == 0):

time.sleep (dolžina) povratna doba = 1,0 / frekvenca #frequency delayValue = period / 2 #Izračunajte čas za polovico vala numCycles = int (dolžina * frekvenca) #število valov = trajanje x frekvenca za i v območju (numCycles): #začni zanko od 0 do spremenljivke "ciklov", izračunane nad buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)

def play (melodija, tempo, premor, tempo = 0,800):

za i v razponu (0, len (melodija)): # Predvajaj opombo pesmiDuration = pace/tempo buzz (melodija , noteDuration) # Spremeni frekvenco vzdolž pavze notne pesmiBetweenNotes = noteDuration * čas pavze.spavanje (pauseBetweenNotes)

medtem ko je res:

laserturret () prelom;

4. korak: Zabava

Zabava
Zabava
Zabava
Zabava
Zabava
Zabava

Ustvarjanje zabavne strojne opreme

Ustvarjamo igro gumbov Simon-says, ki jo morate upoštevati po vzorcu prižiganja LED in pritisniti ustrezne gumbe. Naloži rezultate in časovni žig v bazo podatkov Firebase NoSQL za nadaljnjo uporabo na nadzornih ploščah.

Povežite vezja, kot je prikazano na diagramu Fritzing.

Ustvarjanje programske opreme za zabavo

entertainment.py

uvoz RPi. GPIO kot GPIOimport navojev uvoz času uvoz naključno uvoz os uvoz tweepy od rpi_lcd uvoz LCD od podproces uvoz poziv času uvoza spanja od datetime uvoz datetime od firebase uvoz firebase CONSUMER_KEY = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = 'ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY "ACCESS_KEY =' 988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET =' K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk "avtorizacijski = tweepy. OAuthHandler (CONSUMER_KEY, CONSUMER_SECRET) auth.secure = Res auth.set_access_token (ACCESS_KEY, ACCESS_SECRET) API = tweepy. API (avtorizacija) firebase = firebase. FirebaseApplication (» https:// iotca2 -12f48.firebaseio.com ', Brez) lcd = LCD () lcd.text (' Lepo se imejte! ', 1) lcd.text (' Srečno! ', 2) spanje (1) # Rdeča, rumena, zelena SVETLOBE = [40, 38, 36] GUMBI = [37, 33, 35] OPOMBE = ["E3", "A4", "E4"] # vrednosti, ki jih lahko spremenite in vplivajo na hitrost igranja igre = 0,5 # zastavice, ki se uporabljajo za signaliziranje igre status is_displaying_pattern = Napačno is_won_curr ent_level = False is_game_over = False # stanje igre 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. nastavitev (BUTTONS, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) za i v razponu (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (kanal): globalni current_step_vel_vel, is_game_over, če ni is_playing_pattern in ne is_won_current_level in ne is_game_over: flash_led_for_button (channel) if channel == BUTTONS [vzorec [current_step_of_level]: current_step_of_level += 1 if_ current_lever_vrednost 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 (): globalno is_displaying_pattern is_displaying_pattern = True GPIO: GPIO.output (LIGHTS [vzorec , GPIO. HIGH) time.sleep (hitrost) GPIO.output (LIGHTS [pattern , GPIO. LOW) time.sleep (hitrost) is_displaying_pattern = False def wait_for_player_to_repeat_pattern (): čeprav ni is_won_current_level in not is_game_over: time.sleep (0.1) def reset_board_for_new_game (): globalna is_displaying_pattern, is_won_current_level, is_game_over globalna_razina GPIO.output (LIGHTS, GPIO. LOW) def send_data (score): lcd.text ('Konec igre', 1) lcd.text ('Se vidimo kmalu!', 2) datestr = str (datetime. now ()) medtem ko True: print (datestr) print (score) data = {'Date': datestr, 'Score': score} result = firebase.post ('/scores/', data) print (result) if score> 2: status = 'Nekdo je dosegel rezultat' +(str (rezultat))+'on'+datestr+'!' api.update_status (status = status) break def start_game (): medtem ko je 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! rezultat je {}" {n).format (current_level - 1)) sleep (2) print ("Hvala za igro! / 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 ("Začni nov krog! / n") initialize_gpio () start_game_monitor () končno: GPIO.cleanup () if _name_ ==' _main_ ': main ()

5. korak: IOT App Watson v IBM Bluemixu [prvi del]

Nastavite storitev Blumix IoT

  1. Nastavite vrsto naprave prehoda
  2. Nastavitev naprave

Naredite koraka 1 in 2 3 -krat. En RPi je za en razdelek (Varnost/Obramba/Zabava)

Nastavite Node-Red

Zaženi node-red

rdeči vozlišče

  1. Pojdite na upravljanje palete v meniju za hamburgerje (zgoraj desno)
  2. Prenesite naslednje palete

    1. node-red-armaturna plošča
    2. node-red-contrib-firebase
    3. node-red-contrib-ibm-watson-iot

6. korak: Rdeči tokovi vozlišča

Vozlišče Rdeči tokovi
Vozlišče Rdeči tokovi
Vozlišče Rdeči tokovi
Vozlišče Rdeči tokovi
Vozlišče Rdeči tokovi
Vozlišče Rdeči tokovi
Vozlišče Rdeči tokovi
Vozlišče Rdeči tokovi

Prenesite datoteke in jih izvozite v svoj vozliščni red.

Varnostno vozlišče-rdeče

nobena

Obramba Rpi vozlišče-rdeča

laserturret.txt

Zabava Rpi Node-Red

  • zabava rpi flow.txt
  • ldr rpi flow.txt

IBM Bluemix Node-rdeča

Priporočena: