INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-23 12:53
Oor die aansoek
Hierdie IOT -stelsel is 'n tuisvermaak- en sekuriteitstelsel.
-
Sekuriteit
- Tik op RFID -kaart en invoer word in Firebase gestoor.
- As u gemagtig is, kan u vreedsaam ingaan en die foto word geneem en na S3 gelaai
- As dit ongemagtig is, kom die verdedigingsafdeling en 'n LCD -skerm sal sê dat u nie gemagtig is nie.
-
Verdediging
- Druk die knoppie op die paneelbord.
- Lasertorings val in willekeurige sarsies en spoed aan.
-
Vermaak
- As beweging opgespoor word, begin die spel.
- Nadat die gebruiker die spel gespeel het, word die telling in Firebase gestoor.
- LDR -waardes word geneem en op die paneelbord weergegee.
Hierdie toepassing is beheerbaar en sigbaar via die IBM Node-Red-webbediener. Ons maak gebruik van AWS en IBM Cloud Services en ons gebruik Firebase as ons databasis.
Opsomming van die stappe wat beskryf sal word
- Hardewarevereistes
- Beveiliging - Hoe om 'n sekuriteitstelsel te skep wat RFID -invoer en sagteware vir beeldherkenning gebruik
- Verdediging - Hoe om 'n lasertoring te maak
- Vermaak - Hoe om 'n Simon -sê -speletjie te skep
- IOT App Watson op IBM Bluemix - Hoe om al die stelsels in een paneelbord te integreer
Gaan na die pdf -lêer vir 'n meer gedetailleerde verduideliking van hoe u hierdie projek kan skep.
Stap 1: Hardewarevereiste
Dit is wat u nodig het
-
Sekuriteit
- 1 Framboos Pi
- 1 LCD
- 1 RFID -leser
- 1 PiCam
- 2 RFID -kaarte/knoppies
- X Female -> Manlike jumper kabels
-
Verdediging
- 1 Framboos Pi
- 2 10 ㏀ Weerstand (vir knoppies)
- 2 Mikro Servo
- 1 650nm lasersender module
- 2 Drukknoppie
- 1 Gonser
- 3 klein rubberbande/kabelbinders (vir bevestiging)
- X Female -> Manlike jumper kabels
- X Gereelde springkabels
- 1 Transistor
- 1 Kondensator
-
Vermaak
- 1 Framboos Pi
- 3 1, Weerstand (vir LED's)
- 1 10㏀ Weerstand (vir LDR)
- 3 LED's (verskillende kleure)
- 3 knoppies
- 1 LDR
- 1 LCD
- 1 Pir Bewegingsensor
- X Female -> Manlike jumper kabels
- X Gereelde springkabels
Stap 2: Sekuriteit
Skep die hardeware van die sekuriteitstelsel
Verbind die stroombane soos in die ritsdiagram getoon
Skep die sagteware vir die sekuriteitstelsel
- Stel AWS op deur 'n ding te skep
- Installeer AWS Python Library
- Installeer LCD -biblioteek
- Installeer RFID -biblioteek
- Stel Firebase op
- Stel S3 -berging op
- Installeer Boto op Raspberry Pi
- Installeer AWS ClI op Raspberry Pi
- Skep AWS -geloofsbriewe
- Stel AWS op
- Laai security.py op na RPi
- Laai imagerecognition.py op na RPi
security.py is 'n kode wat rfid -insette sal lees en kan vasstel of die gebruiker 'n indringer is of nie. As die gebruiker herken word, word 'n prent geneem en na s3 gelaai. Die kode publiseer ook 'n onderwerp in aws MQTT
Stap 3: Verdediging
Die skepping van die lasertoring -hardeware
- Ons maak die lasertoring met behulp van 2 servo's en 1 lasermodule
- Verbind die stroombane soos in die ritsdiagram getoon
Die skep van die lasertoringsagteware
Die onderstaande kode laat die lasertoring in ewekansige rigtings skiet, in willekeurige sarsies en spoed
laserturret.py
vanaf gpiozero invoer LED, gonser, knoppie, servo invoer tyd vanaf sein invoer onderbreek invoer ewekansig
#led = LED (12)
#pir = MotionSensor (19, sample_rate = 5, queue_len = 1) buzzer_pin = Gonser (17) aanval = 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 af")
def fire ():
druk ("wapens warm") 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)
notas = {
'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 (frekwensie, lengte): #skep die funksie "buzz" en voer dit die toonhoogte en duur)
as (frekwensie == 0):
time.sleep (lengte) terugkeerperiode = 1.0 / frekwensie #frequency delayValue = period / 2 #bereken die tyd vir die helfte van die golf numCycles = int (lengte * frekwensie) #aantal golwe = duur x frekwensie vir i in reeks): #begin 'n lus van 0 na die veranderlike 'siklusse' wat bo buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue) bereken word
def play (melodie, tempo, pouse, tempo = 0.800):
vir i in reeks (0, len (melodie)): # Speel liedjie nootDuur = tempo/tempo buzz (melodie , nootduur) # Verander die frekwensie langs die liedjie noot pauseBetweenNotes = noteDuration * pause time.sleep (pauseBetweenNotes)
terwyl dit waar is:
laserturret () breek;
Stap 4: Vermaak
Die skep van die vermaaklikheidshardeware
Ons skep die Simon-sê-knoppiespel, wat u volgens die patroon van die LED's moet volg en op die ooreenstemmende knoppies druk. Dit laai tellings en tydstempel op in die Firebase NoSQL -databasis vir verdere gebruik in die dashboards.
Verbind die stroombane soos aangedui in die Fritzing -diagram.
Die skep van die vermaaklikheidsprogrammatuur
vermaak.py
invoer RPi. GPIO as GPIOimport threading invoer tyd invoer ewekansige invoer os invoer tweepy van rpi_lcd invoer LCD uit subprocess invoer oproep van tyd invoer slaap uit DATETIME invoer DATETIME van firebase invoer firebase 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) firebase = firebase. FirebaseApplication (https:// iotca2 -12f48.firebaseio.com ', Geen) lcd = LCD () lcd.text (' Geniet dit! ', 1) lcd.text (' Sterkte! ', 2) slaap (1) # Rooi, geel, groen LIGTE = [40, 38, 36] BUTTONS = [37, 33, 35] NOTAS = ["E3", "A4", "E4"] # waardes wat u kan verander wat die spelsnelheid beïnvloed = 0.5 # vlae wat gebruik word om speletjies aan te dui status is_displaying_pattern = Onwaar is_won_curr ent_level = False is_game_over = Onwaar # 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. opstelling (BUTTONS, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) vir i in reeks (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (channel): global current_step_of_level, current_vel_, current_ is_game_over indien nie_displaying_patroon en is_won_current_level nie en is_game_over nie: flash_led_for_button (kanaal) as channel == BUTTONS [patroon [current_step_of_level]: current_step_of_level += 1 as current_step_of_level> = current_ is_vel_ 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 = Valse 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 (LIG) in: GPIO.output (LIGHTS [patroon , GPIO. HIGH) time.sleep (speed) GPIO.output (LIGHTS [patroon , GPIO. LOW) time.sleep (speed) is_displaying_pattern = Valse def wait_for_player_to_repeat_pattern (): hoewel nie is_won_current_level en nie 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_patroon_val_verloop_patroon_val_stroom_patroon_val_stroom_patroon_val_stroom_patroon_val_stroom GPIO.output (LIGHTS, GPIO. LOW) def send_data (telling): lcd.text ('Einde van die spel', 1) lcd.text ('Sien jou binnekort!', 2) datestr = str (datetime. nou ()) terwyl True: print (datestr) print (score) data = {'Date': datestr, 'Score': score} result = firebase.post ('/scores/', data) print (resultaat) as telling> 2: status = 'Iemand het behaal' +(str (telling))+'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! n score is {} colors!.format (current_level - 1)) sleep (2) print ("Dankie dat u gespeel het! / 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 (): probeer: os.system ('cls' as os.name == 'nt 'anders' duidelik ') druk ("Begin nuwe rondte! / n") initialiseer_gpio () start_game_monitor () uiteindelik: GPIO.cleanup () as _name_ ==' _main_ ': main ()
Stap 5: IOT App Watson op IBM Bluemix [Deel een]
Stel Blumix IoT -diens op
- Stel 'n Gateway -toesteltipe op
- Stel 'n toestel op
Doen stappe 1 en 2 3 keer. Een RPi is vir een afdeling (sekuriteit/verdediging/vermaak)
Stel Node-Red op
Begin knooprooi
knooppunt-rooi begin
- Gaan na die palet in die hamburger -spyskaart (regs bo)
-
Laai die volgende palletjies af
- node-rooi-dashboard
- node-red-contrib-firebase
- node-red-contrib-ibm-watson-iot
Stap 6: Knooprooi vloei
Laai die lêers af en voer dit uit na u node-rooi.
Sekuriteitsknooppunt-rooi
niks nie
Verdediging Rpi Node-Red
laserturret.txt
Vermaak Rpi Node-Red
- vermaak rpi flow.txt
- ldr rpi flow.txt
IBM Bluemix Node-Red
Aanbeveel:
Tuisgemaakte sekuriteitstelsel met sensorfusie: 5 stappe
Tuisgemaakte sekuriteitstelsel met sensorfusie: die idee agter hierdie projek is om 'n goedkoop en maklik gemaakte sekuriteitsensor te skep wat gebruik kan word om u te waarsku as iemand dit oorsteek. Die oorspronklike doel was om iets te skep wat my in kennis kan stel as iemand by die trappe stap, maar ek ook
KS-Garden: Oorsig: 9 stappe
KS-Garden: Oorsig: KS-Garden kan gebruik word om u tuin/kweekhuisplante in die agterplaas of u binnenshuise kweekplante te besproei/uit te vent/aan te lig (modulêre ontwerp) Die KS-Garden-stelsel bestaan hoofsaaklik uit die volgende modules- Hoof stelsel boks - Relais en kragbron
PCB Ontwerp en ets Oorsig: 5 stappe
PCB -ontwerp en etsoorsig: Daar is verskillende maniere om PCB's te ontwerp en te ets, van die eenvoudigste tot die mees gesofistikeerde. Intussen is dit maklik om deurmekaar te raak oor watter een om te kies, watter een die beste by u behoeftes sal pas
Deur 'n H -brug (293D) te gebruik om 2 geared hobbymotors Ans Arduino te bestuur; oorsig van die kring: 9 stappe
Die gebruik van 'n H -brug (293D) om 2 -stokstokmotors Ans Arduino aan te dryf; Oorsig van die kring: Die H -brug 293D is 'n geïntegreerde stroombaan wat in staat is om 2 motors aan te dryf. kan die twee motors in twee rigtings ry (vorentoe en agteruit) met 'n kode
Crystal Ball Project -oorsig: 10 stappe
Crystal Ball-projekoorsig: hierdie instruksies is geskep ter voldoening aan die projekvereiste van die Makecourse aan die Universiteit van Suid-Florida (www.makecourse.com) My Crystal Ball-projek is 'n kombinasie van die 1950's Mattel-speelding, die Magic Eight-ball en 'n fortuin tel