Innholdsfortegnelse:

Oversikt: Home Entertainment and Security System: 6 trinn
Oversikt: Home Entertainment and Security System: 6 trinn

Video: Oversikt: Home Entertainment and Security System: 6 trinn

Video: Oversikt: Home Entertainment and Security System: 6 trinn
Video: НЕ ВЗДУМАЙ снимать аккумулятор с машины. Делай это ПРАВИЛЬНО ! 2024, November
Anonim
Oversikt: Home Entertainment and Security System
Oversikt: Home Entertainment and Security System
Oversikt: Home Entertainment and Security System
Oversikt: Home Entertainment and Security System
Oversikt: Home Entertainment and Security System
Oversikt: Home Entertainment and Security System

Om søknaden

Dette IOT -systemet er et hjemmeunderholdnings- og sikkerhetssystem.

  1. Sikkerhet

    1. Trykk på RFID -kort og input lagres i Firebase.
    2. Hvis du er autorisert, kan du gå fredelig inn, og bildet blir tatt og lastet opp til S3
    3. Hvis det er uautorisert, kommer forsvarsseksjonen inn og en LCD -skjerm sier at du ikke er autorisert.
  2. Forsvar

    1. Trykk på knappen på dashbordet.
    2. Lasertårn vil angripe i tilfeldig burst og hastighet.
  3. Underholdning

    1. Hvis det oppdages bevegelse, starter spillet.
    2. Etter at brukeren har spilt spillet, blir poengsummen lagret i Firebase.
    3. LDR -verdier tas og sendes ut på dashbordet.

Denne applikasjonen er kontrollerbar og synlig via IBM Node-Red-webserveren. Vi bruker AWS og IBM Cloud Services, og vi brukte Firebase som vår database.

Oppsummering av trinnene som vil bli beskrevet

  • Krav til maskinvare
  • Sikkerhet - Hvordan lage et sikkerhetssystem som bruker RFID -inngang og en programvare for gjenkjenning av bilder
  • Forsvar - Hvordan lage et lasertårn
  • Underholdning - Hvordan lage et Simon -sier -spill
  • IOT App Watson på IBM Bluemix - Slik integrerer du alle systemene i ett dashbord

Gå videre og få tilgang til pdf -filen for en mer detaljert forklaring på hvordan du oppretter dette prosjektet.

Trinn 1: Krav til maskinvare

Dette er hva du trenger

  1. Sikkerhet

    • 1 bringebær Pi
    • 1 LCD
    • 1 RFID -leser
    • 1 PiCam
    • 2 RFID -kort/knapper
    • X Kvinne -> Mannlige jumperkabler
  2. Forsvar

    • 1 bringebær Pi
    • 2 10 ㏀ Motstand (for knapper)
    • 2 Micro Servo
    • 1 650nm lasersendermodul
    • 2 Trykknapp
    • 1 summer
    • 3 små gummibånd/kabelbindere (for festing)
    • X Kvinne -> Mannlige jumperkabler
    • X Vanlige hoppkabler
    • 1 Transistor
    • 1 kondensator
  3. Underholdning

    • 1 bringebær Pi
    • 3 1, motstand (for lysdioder)
    • 1 10㏀ motstand (for LDR)
    • 3 lysdioder (forskjellige farger)
    • 3 knapper
    • 1 LDR
    • 1 LCD
    • 1 Pir -bevegelsessensor
    • X Kvinne -> Mannlige jumperkabler
    • X Vanlige hoppkabler

Trinn 2: Sikkerhet

Sikkerhet
Sikkerhet
Sikkerhet
Sikkerhet
Sikkerhet
Sikkerhet

Opprette maskinvaren til sikkerhetssystemet

Koble kretsene som vist i fritz -diagrammet

Opprette programvaren for sikkerhetssystemet

  1. Konfigurer AWS ved å lage en ting
  2. Installer AWS Python Library
  3. Installer LCD -bibliotek
  4. Installer RFID -bibliotek
  5. Sett opp Firebase
  6. Oppsett S3 -lagring
  7. Installer Boto på Raspberry Pi
  8. Installer AWS ClI på Raspberry Pi
  9. Lag AWS -legitimasjon
  10. Konfigurer AWS
  11. Last opp security.py til RPi
  12. Last opp imagerecognition.py til RPi

security.py er en kode som vil lese rfid -innganger og oppdage om brukeren er en inntrenger eller ikke. Hvis brukeren blir gjenkjent, blir et bilde tatt og lastet opp til s3. Koden publiserer også et emne i aws MQTT

Trinn 3: Forsvar

Forsvar
Forsvar
Forsvar
Forsvar
Forsvar
Forsvar

Opprette lasertårnets maskinvare

  1. Vi lager lasertårnet ved å bruke 2 servoer og 1 lasermodul
  2. Koble kretsene som vist i fritz -diagrammet

Lage lasertårnprogramvaren

Koden nedenfor vil få lasertårnet til å skyte i tilfeldige retninger, i tilfeldige utbrudd og hastighet

laserturret.py

fra gpiozero import LED, summer, knapp, servoimport tid fra signalimport pause import tilfeldig

#led = LED (12)

#pir = MotionSensor (19, sample_rate = 5, queue_len = 1) buzzer_pin = Summer (17) angrep = Knapp (5, pull_up = False) #reset = Knapp (6, pull_up = False) servo1 = Servo (18) servo2 = Servo (24)

def ledON ():

led.on () print ("LED is on") def ledOFF (): led.off () print ("LED is off")

def fire ():

print ("våpen varmt") 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)

notater = {

'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 (frekvens, lengde): #create funksjonen "buzz" og mat den tonehøyde og varighet)

hvis (frekvens == 0):

time.sleep (lengde) returperiode = 1,0 / frekvens #frekvensforsinkelseValue = periode / 2 #calculate the time for half of the wave numCycles = int (length * frequency) #number of waves = duratime x freq for i in range (numCycles): #start en sløyfe fra 0 til variabelen "sykluser" beregnet over buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)

def play (melodi, tempo, pause, tempo = 0,800):

for i i området (0, len (melodi)): # Spill av sangnoteDurasjon = tempo/tempo buzz (melodi , noteDuration) # Endre frekvensen langs sangenoten pauseBetweenNotes = noteDuration * pause tid. sove (pauseBetweenNotes)

mens det er sant:

laserturret () pause;

Trinn 4: Underholdning

Underholdning
Underholdning
Underholdning
Underholdning
Underholdning
Underholdning

Opprette underholdningsmaskinvaren

Vi lager Simon-says-knappespillet, som du må følge mønsteret til lysdiodene lyser opp og trykke på de tilsvarende knappene. Den laster opp score og tidsstempel til brannbasen NoSQL -databasen for videre bruk i dashbordene.

Koble kretsene som vist i Fritzing -diagrammet.

Opprette underholdningsprogramvaren

underholdning.py

import RPi. GPIO som GPIOimport threading import tid import tilfeldig import os import tweepy fra rpi_lcd import LCD fra delprosess import anrop fra tid import søvn fra datetime import datetime fra Fire import Fire 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) Fire = firebase. FirebaseApplication (' https:// iotca2 -12f48.firebaseio.com ', None) lcd = LCD () lcd.text (' Have fun! ', 1) lcd.text (' Good Luck! ', 2) sleep (1) # Red, Yellow, Green LIGHT = [40, 38, 36] BUTTONS = [37, 33, 35] NOTES = ["E3", "A4", "E4"] # verdier du kan endre som påvirker spillhastigheten = 0,5 # flagg som brukes til å signalisere spill status is_displaying_pattern = Falsk is_won_curr ent_level = False is_game_over = False # game state 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) for i i område (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (channel): global current_step_of_level, current_, current_ is_game_over hvis ikke is_displaying_pattern og ikke is_won_current_level og ikke is_game_over: flash_led_for_button (kanal) hvis kanal == BUTTONS [mønster [current_step_of_level]: current_step_of_level += 1 hvis current_step_of_level> = current_ is_vel flash_led_for_button (button_channel): led = LIGHT [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. TSput (LINE): GPIO.output (LIGHT [mønster , GPIO. HIGH) time.sleep (hastighet) GPIO.output (LIGHT [mønster , GPIO. LOW) time.sleep (speed) is_displaying_pattern = False def wait_for_player_to_repeat_pattern. GPIO.output (LIGHTS, GPIO. LOW) def send_data (score): lcd.text ('End of game,', 1) lcd.text ('See you soon!', 2) datestr = str (datetime. nå ()) mens True: print (datestr) print (score) data = {'Date': datestr, 'Score': score} result = firebase.post ('/scores/', data) print (result) if score> 2: status = 'Noen har scoret' +(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! score er"} farger!.format (current_level - 1)) sleep (2) print ("Takk for at du spilte! / 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 (): prøv: os.system ('cls' if os.name == 'nt 'annet' klart ') print ("Start ny runde! / n") initialize_gpio () start_game_monitor () endelig: GPIO.cleanup () hvis _name_ ==' _main_ ': main ()

Trinn 5: IOT App Watson på IBM Bluemix [del ett]

Sett opp Blumix IoT Service

  1. Sett opp en Gateway -enhetstype
  2. Sett opp en enhet

Gjør trinn 1 og 2 3 ganger. En RPi er for en seksjon (Sikkerhet/forsvar/underholdning)

Sett opp Node-Red

Kjør node-rødt

node-rød start

  1. Gå til administrasjonspaletten i hamburgermenyen (øverst til høyre)
  2. Last ned følgende paller

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

Trinn 6: Node Red Flows

Node rød flyter
Node rød flyter
Node rød flyter
Node rød flyter
Node rød flyter
Node rød flyter
Node rød flyter
Node rød flyter

Last ned filene og eksporter til nodenød.

Sikkerhetsnode-rød

ingen

Forsvar Rpi Node-Red

laserturret.txt

Underholdning Rpi Node-Red

  • underholdning rpi flow.txt
  • ldr rpi flow.txt

IBM Bluemix Node-Red

Anbefalt: