Inhoudsopgave:

Overzicht: Home Entertainment- en beveiligingssysteem: 6 stappen
Overzicht: Home Entertainment- en beveiligingssysteem: 6 stappen

Video: Overzicht: Home Entertainment- en beveiligingssysteem: 6 stappen

Video: Overzicht: Home Entertainment- en beveiligingssysteem: 6 stappen
Video: Home Assistant - Kantoor verlichting met Scènes en Automatisering #19 2024, Juni-
Anonim
Overzicht: Home Entertainment en Beveiligingssysteem
Overzicht: Home Entertainment en Beveiligingssysteem
Overzicht: Home Entertainment en Beveiligingssysteem
Overzicht: Home Entertainment en Beveiligingssysteem
Overzicht: Home Entertainment en Beveiligingssysteem
Overzicht: Home Entertainment en Beveiligingssysteem

Over de toepassing:

Dit IOT-systeem is een Home Entertainment- en Beveiligingssysteem.

  1. Veiligheid

    1. Tik op RFID-kaart en de invoer wordt opgeslagen in Firebase.
    2. Indien geautoriseerd, kunt u rustig naar binnen gaan en wordt de foto gemaakt en geüpload naar S3
    3. Indien ongeautoriseerd, komt de verdedigingssectie binnen en een LCD-scherm geeft aan dat u niet geautoriseerd bent.
  2. Verdediging

    1. Druk op de knop op het dashboard.
    2. Laserturrets vallen in willekeurige burst en snelheid aan.
  3. Amusement

    1. Als er beweging wordt gedetecteerd, wordt het spel gestart.
    2. Nadat de gebruiker het spel heeft gespeeld, wordt de score opgeslagen in Firebase.
    3. LDR-waarden worden genomen en op het dashboard weergegeven.

Deze applicatie is bestuurbaar en zichtbaar via de IBM Node-Red webserver. We maken gebruik van AWS en IBM Cloud Services en we gebruikten Firebase als onze database.

Samenvatting van de stappen die zullen worden beschreven

  • Hardwarevereisten
  • Beveiliging - Hoe maak je een beveiligingssysteem dat gebruikmaakt van RFID-invoer en beeldherkenningssoftware?
  • Verdediging - Hoe maak je een laserkoepel?
  • Entertainment - Hoe maak je een Simon-says-game?
  • IOT-app Watson op IBM Bluemix - Hoe alle systemen in één dashboard te integreren?

Ga je gang en open het pdf-bestand voor een meer gedetailleerde uitleg over het maken van dit project.

Stap 1: Hardwarevereiste

Dit heb je nodig

  1. Veiligheid

    • 1 Raspberry Pi
    • 1 LCD
    • 1 RFID-lezer
    • 1 PiCam
    • 2 RFID-kaarten/knoppen
    • X Vrouwelijk -> Mannelijke startkabels
  2. Verdediging

    • 1 Raspberry Pi
    • 2 10 ㏀ Weerstand (voor knoppen)
    • 2 microservo's
    • 1 650nm laserzendermodule
    • 2 Drukknop
    • 1 zoemer
    • 3 kleine elastiekjes/kabelbinders (voor bevestiging)
    • X Vrouwelijk -> Mannelijke startkabels
    • X Normale startkabels
    • 1 transistor
    • 1 condensator
  3. Amusement

    • 1 Raspberry Pi
    • 3 1 ㏀ Weerstand (voor LED's)
    • 1 10㏀-weerstand (voor LDR)
    • 3 LED's (verschillende kleuren)
    • 3 knoppen
    • 1 LDR
    • 1 LCD
    • 1 Pir-bewegingssensor
    • X Vrouwelijk -> Mannelijke startkabels
    • X Normale startkabels

Stap 2: Beveiliging

Veiligheid
Veiligheid
Veiligheid
Veiligheid
Veiligheid
Veiligheid

De hardware van het beveiligingssysteem maken

Sluit de circuits aan zoals weergegeven in het fritzing-diagram

De beveiligingssysteemsoftware maken

  1. Configureer AWS door iets te maken
  2. Installeer de AWS Python-bibliotheek
  3. Installeer LCD-bibliotheek
  4. RFID-bibliotheek installeren
  5. Firebase instellen
  6. S3-opslag instellen
  7. Installeer Boto op Raspberry Pi
  8. Installeer AWS ClI op Raspberry Pi
  9. AWS-referenties maken
  10. AWS configureren
  11. Upload security.py naar RPi
  12. Upload imagerecognition.py naar RPi

security.py is een code die rfid-invoer leest en detecteert of de gebruiker een indringer is of niet. Als de gebruiker wordt herkend, wordt er een afbeelding gemaakt en geüpload naar s3. De code publiceert ook naar een onderwerp in aws MQTT

Stap 3: Verdediging

Verdediging
Verdediging
Verdediging
Verdediging
Verdediging
Verdediging

De laserturret-hardware maken

  1. We maken de laserkoepel met behulp van 2 servo's en 1 lasermodule
  2. Sluit de circuits aan zoals weergegeven in het fritzing-diagram

De laserturret-software maken

De onderstaande code laat de laserkoepel in willekeurige richtingen schieten, met willekeurige bursts en snelheid

laserturret.py

van gpiozero import LED, Buzzer, Button, Servoimport tijd van signaal import pauze import willekeurig

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

zeker vuur():

print("wapens hot") buzzer_pin.on() time.sleep(0.1) buzzer_pin.off()

def laserturret():

timeBetweenBurst = willekeurig.uniform(0.2, 1) timeBetweenShots = willekeurig.uniform (0.05, 0.2) servo1start = willekeurig.randbereik(-1, 1) servo1end = willekeurig.randbereik(-1, 1) servo2start = willekeurig.randbereik(-1, 1) servo2end = random.randbereik(-1, 1) numShots = willekeurig.randbereik (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" time.sleep(time time.sleep(time betweenburst)

notities = {

'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(frequentie, lengte): #create de functie "buzz" en voer het de toonhoogte en duur)

if(frequentie==0):

time.sleep(length) return period = 1.0 / frequency #frequency delayValue = periode / 2 #bereken de tijd voor de helft van de golf numCycles = int(length * frequency) #num of waves = duratime x freq for i in range(numCycles): #start een lus van 0 naar de variabele "cycli" die hierboven is berekend buzzer_pin.on() time.sleep(delayValue) buzzer_pin.off() time.sleep(delayValue)

def play (melodie, tempo, pauze, tempo=0.800):

voor i in range(0, len(melody)): # Play song noteDuration = tempo/tempo buzz(melody, noteDuration) # Verander de frequentie langs de song note pauseBetweenNotes = noteDuration * pause time.sleep(pauzeTussenNotities)

terwijl waar:

laserturret() breken;

Stap 4: Amusement

Amusement
Amusement
Amusement
Amusement
Amusement
Amusement

De entertainmenthardware maken

We maken het Simon-says-knoppenspel, waarbij je het patroon van de oplichtende LED's moet volgen en op de bijbehorende knoppen moet drukken. Het uploadt scores en tijdstempels in de Firebase NoSQL-database voor verder gebruik in de dashboards.

Sluit de circuits aan zoals weergegeven in het Fritzing-diagram.

De entertainmentsoftware maken

entertainment.py

import RPi. GPIO als GPIOimport threading import eenmalige import willekeurige import os import tweepy van rpi_lcd import LCD uit deelproces import oproep van tijd import slaap van datetime import datetime van firebase import firebase gebruikerscode = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = 'ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY' ACCESS_KEY = '988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET = 'K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk' auth = tweepy. OAuthHandler (gebruikerscode, 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', Geen) lcd=LCD() lcd.text('Veel plezier!', 1) lcd.text('Veel succes!', 2) slaap(1) # Rood, Geel, Groen LICHTEN = [40, 38, 36] KNOPPEN = [37, 33, 35] OPMERKINGEN = ["E3", "A4", "E4"] # waarden die u kunt wijzigen die de speelsnelheid beïnvloeden = 0,5 # vlaggen die worden gebruikt om het spel te signaleren status is_displaying_pattern = Onwaar is_won_curr ent_level = False is_game_over = False # gamestatus 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) voor i binnen bereik(3): GPIO.add_event_detect(BUTTONS, GPIO. FALLING, confirm_player_selection) def confirm_player_selection(channel): global current_step_of_level, current_level, is_won_current is_game_over if not is_displaying_pattern en niet is_won_current_level en niet 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 >= is huidige_level: current_level += 1 is_won 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_level, 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. LOW) voor i binnen bereik (current_level): GPIO.output(LIGHTS[patroon, GPIO. HIGH) time.sleep(snelheid) GPIO.output(LIGHTS[patroon, GPIO. LOW) time.sleep(speed) is_displaying_pattern = False def wait_for_player_to_repeat_pattern (): while not is_won_current_level en niet 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_displaying_pattern = False is_won_current_level_over = False current_current_level_over = False is_current_level_over GPIO.output(LIGHTS, GPIO. LOW) def send_data(score): lcd.text('Einde van het spel, ', 1) lcd.text('Tot ziens!', 2) datestr = str(datetime. now()) while True: print(datestr) print(score) data={ 'Datum': datestr, 'Score': score } result = firebase.post('/scores/', data) print(result) if score > 2: status='Iemand heeft gescoord ' + (str(score)) +' op '+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 is {} kleuren!\n".format(current_level - 1)) sleep(2) print("Bedankt voor het spelen!\n") lcd.text('', 1) lcd.text('', 2) pauzetijd.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("Begin nieuwe ronde!\n") initialize_gpio() start_game_monitor() eindelijk: GPIO.cleanup() if _name_ == '_main_': main()

Stap 5: IOT-app Watson op IBM Bluemix [deel één]

Blumix IoT-service instellen

  1. Een gateway-apparaattype instellen
  2. Een apparaat instellen

Voer stap 1 en 2 3 keer uit. Eén RPi is voor één sectie (Beveiliging/Defensie/Entertainment)

Node-Red instellen

Voer node-red. uit

knoop-rode start

  1. Ga naar palet beheren in het hamburgermenu (rechtsboven)
  2. Download de volgende pallets

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

Stap 6: Knooppunt rode stromen

Knooppunt rode stromen
Knooppunt rode stromen
Knooppunt rode stromen
Knooppunt rode stromen
Knooppunt rode stromen
Knooppunt rode stromen
Knooppunt rode stromen
Knooppunt rode stromen

Download de bestanden en exporteer ze naar je node-red.

Beveiligingsknooppunt-rood

geen

Defensie Rpi Knooppunt-Rood

laserturret.txt

Entertainment Rpi Node-Rood

  • entertainment rpi flow.txt
  • ldr rpi flow.txt

IBM Bluemix Node-Red

Aanbevolen: