Innholdsfortegnelse:
- Trinn 1: Krav til maskinvare
- Trinn 2: Sikkerhet
- Trinn 3: Forsvar
- Trinn 4: Underholdning
- Trinn 5: IOT App Watson på IBM Bluemix [del ett]
- Trinn 6: Node Red Flows
Video: Oversikt: Home Entertainment and Security System: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Om søknaden
Dette IOT -systemet er et hjemmeunderholdnings- og sikkerhetssystem.
-
Sikkerhet
- Trykk på RFID -kort og input lagres i Firebase.
- Hvis du er autorisert, kan du gå fredelig inn, og bildet blir tatt og lastet opp til S3
- Hvis det er uautorisert, kommer forsvarsseksjonen inn og en LCD -skjerm sier at du ikke er autorisert.
-
Forsvar
- Trykk på knappen på dashbordet.
- Lasertårn vil angripe i tilfeldig burst og hastighet.
-
Underholdning
- Hvis det oppdages bevegelse, starter spillet.
- Etter at brukeren har spilt spillet, blir poengsummen lagret i Firebase.
- 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
-
Sikkerhet
- 1 bringebær Pi
- 1 LCD
- 1 RFID -leser
- 1 PiCam
- 2 RFID -kort/knapper
- X Kvinne -> Mannlige jumperkabler
-
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
-
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
Opprette maskinvaren til sikkerhetssystemet
Koble kretsene som vist i fritz -diagrammet
Opprette programvaren for sikkerhetssystemet
- Konfigurer AWS ved å lage en ting
- Installer AWS Python Library
- Installer LCD -bibliotek
- Installer RFID -bibliotek
- Sett opp Firebase
- Oppsett S3 -lagring
- Installer Boto på Raspberry Pi
- Installer AWS ClI på Raspberry Pi
- Lag AWS -legitimasjon
- Konfigurer AWS
- Last opp security.py til RPi
- 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
Opprette lasertårnets maskinvare
- Vi lager lasertårnet ved å bruke 2 servoer og 1 lasermodul
- 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
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
- Sett opp en Gateway -enhetstype
- 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
- Gå til administrasjonspaletten i hamburgermenyen (øverst til høyre)
-
Last ned følgende paller
- node-red-dashboard
- node-red-contrib-firebase
- node-red-contrib-ibm-watson-iot
Trinn 6: Node Red Flows
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:
KS-Garden: Oversikt: 9 trinn
KS-Garden: Oversikt: KS-Garden kan brukes til å vanne/lufte./Tenne hagen din/drivhusplanter i bakgården eller dine innendørs vokseboksplanter (modulær design) KS-Garden-systemet består hovedsakelig av følgende moduler- Main systemboks - Reléer og strømforsyningsboks
Wooden Super Nintendo Entertainment System (SNES): 11 trinn
Wooden Super Nintendo Entertainment System (SNES): På en maker-faire i Wien kom jeg tilfeldigvis over et Super Nintendo Entertainment System (SNES) i tre. Jeg pleide å leke med en slik spillkonsoll med min eldre bror da jeg var barn. Da jeg kjente igjen å bli avhengig av Super Mario
8-biters datamaskin på et brødbrett Oversikt: 3 trinn
8-biters datamaskin på et brødbord Oversikt: Målet mitt med dette prosjektet var å bygge en bedre forståelse av datamaskinarkitektur, maskinvaredesign og språk på samlingsnivå. Da jeg var junior på universitetet og studerte datateknikk, hadde jeg nylig fullført kurs om elektronikk, laboratorier i
PCB Design og etsing Oversikt: 5 trinn
PCB Design og etsing Oversikt: Det er flere måter å designe og etse PCB, fra de enkleste til de mest sofistikerte. I mellomtiden er det lett å bli forvirret om hvilken du skal velge, hvilken som best passer dine behov. For å avklare noen spørsmål som t
Crystal Ball Project Oversikt: 10 trinn
Crystal Ball Project Oversikt: Denne instruksen ble opprettet for å oppfylle prosjektkravet til Makecourse ved University of South Florida (www.makecourse.com) My Crystal ball-prosjektet er en kombinasjon av 1950-tallets Mattel-leketøy Magic Eight-ball og en formue tlf