Inhoudsopgave:
- Stap 1: Hardwarevereiste
- Stap 2: Beveiliging
- Stap 3: Verdediging
- Stap 4: Amusement
- Stap 5: IOT-app Watson op IBM Bluemix [deel één]
- Stap 6: Knooppunt rode stromen
Video: Overzicht: Home Entertainment- en beveiligingssysteem: 6 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Over de toepassing:
Dit IOT-systeem is een Home Entertainment- en Beveiligingssysteem.
-
Veiligheid
- Tik op RFID-kaart en de invoer wordt opgeslagen in Firebase.
- Indien geautoriseerd, kunt u rustig naar binnen gaan en wordt de foto gemaakt en geüpload naar S3
- Indien ongeautoriseerd, komt de verdedigingssectie binnen en een LCD-scherm geeft aan dat u niet geautoriseerd bent.
-
Verdediging
- Druk op de knop op het dashboard.
- Laserturrets vallen in willekeurige burst en snelheid aan.
-
Amusement
- Als er beweging wordt gedetecteerd, wordt het spel gestart.
- Nadat de gebruiker het spel heeft gespeeld, wordt de score opgeslagen in Firebase.
- 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
-
Veiligheid
- 1 Raspberry Pi
- 1 LCD
- 1 RFID-lezer
- 1 PiCam
- 2 RFID-kaarten/knoppen
- X Vrouwelijk -> Mannelijke startkabels
-
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
-
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
De hardware van het beveiligingssysteem maken
Sluit de circuits aan zoals weergegeven in het fritzing-diagram
De beveiligingssysteemsoftware maken
- Configureer AWS door iets te maken
- Installeer de AWS Python-bibliotheek
- Installeer LCD-bibliotheek
- RFID-bibliotheek installeren
- Firebase instellen
- S3-opslag instellen
- Installeer Boto op Raspberry Pi
- Installeer AWS ClI op Raspberry Pi
- AWS-referenties maken
- AWS configureren
- Upload security.py naar RPi
- 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
De laserturret-hardware maken
- We maken de laserkoepel met behulp van 2 servo's en 1 lasermodule
- 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
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
- Een gateway-apparaattype instellen
- 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
- Ga naar palet beheren in het hamburgermenu (rechtsboven)
-
Download de volgende pallets
- node-rood-dashboard
- node-red-contrib-firebase
- node-red-contrib-ibm-watson-iot
Stap 6: 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:
KS-Garden:Overzicht: 9 stappen
KS-Garden:Overzicht: KS-Garden kan worden gebruikt om uw tuin/kasplanten in de achtertuin of uw binnenkweekbakplanten te irrigeren/ventileren/verlichting te geven (Modulair ontwerp) Het KS-Garden systeem bestaat voornamelijk uit de volgende modules: systeemdoos - Relais- en voedingsdoos
Geavanceerd beveiligingssysteem: 7 stappen
Geavanceerd beveiligingssysteem: Heb je ooit je huis volledig willen beveiligen en het voor indringers onmogelijk maken om je huis binnen te komen? Dan is dit de oplossing voor jou! Ik heb Advanced Security System gemaakt, dit is een systeem dat je huis van binnen en van buiten beveiligt
8-bits computer op een breadboard-overzicht: 3 stappen
8-bits computer op een breadboard Overzicht: Mijn doel voor dit project was om een beter begrip te krijgen van computerarchitectuur, hardwareontwerp en talen op assemblageniveau. Als junior aan de universiteit studeer ik computertechniek en had ik onlangs cursussen afgerond over elektronica, labs i
Overzicht van PCB-ontwerpen en etsen: 5 stappen:
Overzicht van ontwerpen en etsen van PCB's: Er zijn verschillende manieren om PCB's te ontwerpen en te etsen, van de eenvoudigste tot de meest geavanceerde. Ondertussen is het gemakkelijk om in de war te raken over welke u moet kiezen, welke het beste bij uw behoeften past. Om enkele vragen zoals t
Overzicht van Flash-vectorillustratie: 8 stappen
Flash Vector Illustratie Walkthrough: Vector Illustratie is vaak best moeilijk om je oude noggin rond soms te wikkelen - vooral voor beginners. Hoewel de meeste illustratoren de neiging hebben om de grotere, meer orthodoxe illustratietoepassingen zoals Adobe Illustrator en Freehand te gebruiken, kies ik ervoor om u