Sisällysluettelo:
- Vaihe 1: Laitteistovaatimus
- Vaihe 2: Suojaus
- Vaihe 3: Puolustus
- Vaihe 4: Viihde
- Vaihe 5: IOT App Watson IBM Bluemix -palvelussa [osa 1]
- Vaihe 6: Solmun punaiset virtaukset
Video: Yleiskatsaus: Kotiviihde- ja turvajärjestelmä: 6 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Tietoja sovelluksesta
Tämä IOT -järjestelmä on kotiviihde- ja turvajärjestelmä.
-
Turvallisuus
- Napauta RFID -kortti ja syötteet tallennetaan Firebaseen.
- Jos sinulla on lupa, voit mennä rauhallisesti sisään ja kuva otetaan ja ladataan S3: een
- Jos luvaton, puolustusosa tulee sisään ja LCD -näyttö sanoo, että et ole valtuutettu.
-
Puolustus
- Paina kojelaudan painiketta.
- Laseritornit hyökkäävät satunnaisesti ja nopeasti.
-
Viihde
- Jos liike havaitaan, peli käynnistyy.
- Kun käyttäjä on pelannut pelin, pisteet tallennetaan Firebaseen.
- LDR -arvot otetaan ja tulostetaan kojelautaan.
Tämä sovellus on hallittavissa ja katseltavissa IBM Node-Red -verkkopalvelimen kautta. Käytämme AWS: ää ja IBM: n pilvipalveluja ja käytimme tietokantana Firebasea.
Yhteenveto kuvatuista vaiheista
- Laitteistovaatimukset
- Suojaus - Miten luodaan turvajärjestelmä, joka käyttää RFID -tuloa ja kuvan tunnistusohjelmistoa
- Puolustus - Kuinka luoda laser -torni
- Viihde - Simon -sanoo -pelin luominen
- IOT App Watson IBM Bluemixissä - Kuinka integroida kaikki järjestelmät yhdeksi kojelautaan
Siirry eteenpäin ja käytä pdf -tiedostoa saadaksesi yksityiskohtaisemman selityksen tämän projektin luomisesta.
Vaihe 1: Laitteistovaatimus
Tätä tarvitset
-
Turvallisuus
- 1 Vadelma Pi
- 1 LCD -näyttö
- 1 RFID -lukija
- 1 PiCam
- 2 RFID -korttia/-painiketta
- X Naaras -> Uroshyppykaapelit
-
Puolustus
- 1 Vadelma Pi
- 2 10 ㏀ Vastus (painikkeille)
- 2 Mikroservo
- 1 650nm laserlähetinmoduuli
- 2 Painike
- 1 summeri
- 3 pientä kuminauhaa/nippusiteitä (kiinnitystä varten)
- X Naaras -> Uroshyppykaapelit
- X Säännölliset hyppykaapelit
- 1 Transistori
- 1 kondensaattori
-
Viihdettä
- 1 Vadelma Pi
- 3 1 ㏀ Vastus (LEDeille)
- 1 10㏀ Vastus (LDR: lle)
- 3 LEDiä (eri värejä)
- 3 painiketta
- 1 LDR
- 1 LCD -näyttö
- 1 Pir -liikeanturi
- X Naaras -> Uroshyppykaapelit
- X Säännölliset hyppykaapelit
Vaihe 2: Suojaus
Turvajärjestelmän laitteiston luominen
Kytke piirit kuorrutuskaavion mukaisesti
Turvajärjestelmäohjelmiston luominen
- Määritä AWS luomalla asia
- Asenna AWS Python Library
- Asenna LCD -kirjasto
- Asenna RFID -kirjasto
- Asenna Firebase
- Määritä S3 -tallennus
- Asenna Boto Raspberry Pi: hen
- Asenna AWS ClI Raspberry Pi: hen
- Luo AWS -kirjautumistiedot
- Määritä AWS
- Lataa security.py RPi: hen
- Lataa imagerecognition.py RPi: hen
security.py on koodi, joka lukee RFID -tulot ja havaitsee, onko käyttäjä tunkeilija vai ei. Jos käyttäjä tunnistetaan, kuva otetaan ja ladataan s3: een. Koodi julkaistaan myös aiheeseen aws MQTT: ssä
Vaihe 3: Puolustus
Lasertornin luominen Laitteisto
- Luomme lasitornin käyttämällä 2 servoa ja 1 lasermoduulia
- Kytke piirit kuorrutuskaavion mukaisesti
Lasertorni -ohjelmiston luominen
Alla oleva koodi saa laseritornin ampumaan satunnaisiin suuntiin, satunnaisiin purskeisiin ja nopeuteen
laserturret.py
gpiozero -tuonti -LED, summeri, painike, servoimportin aika signaalin tuonnin taukon tuonnista satunnaisesti
#led = LED (12)
#pir = MotionSensor (19, sample_rate = 5, queue_len = 1) buzzer_pin = summeri (17) hyökkäys = Button (5, pull_up = False) #reset = Button (6, pull_up = False) servo1 = Servo (18) servo2 = Servo (24)
def ledON ():
led.on () print ("LED palaa") def ledOFF (): led.off () print ("LED ei pala")
palo ():
tulosta ("aseet kuuma") buzzer_pin.on () time.sleep (0.1) buzzer_pin.off ()
def laserturret ():
timeBetweenBurrst = 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 = [timeBetweenBurrst, timeBetweenShots, servo1.value, servo2.value, numShots] print (yksityiskohta) kuvattaessa <numshots: shot+= "1" servo1.value = "servo1start" servo2.value = "servo2start" servo1start = "servo1change" servo2start = "servo2change" fire () = "" time.sleep (timebetweenshots) = "" time.sleep (timebetweenburst)
muistiinpanot = {
'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 (taajuus, pituus): #luo toiminto "buzz" ja syötä sille piki ja kesto)
jos (taajuus == 0):
time.sleep (pituus) palautusjakso = 1,0 / taajuus #frekvenssi delayValue = period / 2 #laske aika puolet aallosta numCycles = int (pituus * taajuus) #aaltojen lukumäärä = kesto x taajuus i alueella (numCycles): #start the loop from 0 to muuttuja "cycles", joka on laskettu edellä buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)
def play (melodia, tempo, tauko, tahti = 0.800):
i alueella (0, len (melodia)): # Toista kappaleen nuottiKesto = vauhti/tempo surina (melodia , muistiinpanon kesto) # Muuta taajuutta kappaleen aikana pauseBetweenNotes = noteDuration * pause time.sleep (pauseBetweenNotes)
vaikka totta:
laserturret () tauko;
Vaihe 4: Viihde
Viihdelaitteiston luominen
Luomme Simon-sanoo-nappipelin, jonka on seurattava syttyvien merkkivalojen kaavaa ja painettava vastaavia painikkeita. Se lataa tulokset ja aikaleiman Firebase NoSQL -tietokantaan ja käyttää niitä edelleen koontinäytöissä.
Liitä piirit Fritzing -kaavion mukaisesti.
Viihdeohjelmiston luominen
viihde.py
tuonti RPi. GPIO kuten GPIOimport ketjuttaminen tuonti aikaan tuonti satunnainen tuonti os tuonti tweepy alkaen rpi_lcd tuonti kuvaruutuun alikäsittelyyn tuonti puhelun aika tuonti unta päivämääräaika tuonti datetime alkaen Firebase tuonti Firebase CONSUMER_KEY = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = 'ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY' ACCESS_KEY = '988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET = 'K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk' viran = 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 ', Ei mitään lcd = LCD () lcd.text (' Hauskaa! ', 1) lcd.text (' Onnea! ', 2) uni (1) # Punainen, keltainen, vihreä LIGHTS = [40, 38, 36] PAINIKKEET = [37, 33, 35] HUOMAUTUKSIA = ["E3", "A4", "E4"] # muutettavaa arvoa, jotka vaikuttavat pelin nopeuteen = 0,5 # lippua pelin merkitsemiseen tila is_displaying_pattern = Väärä is_won_curr ent_level = False is_game_over = Väärä # pelitila 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) i alueella (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, ellenőriz_player_selection) def tarkistaa_pelaajan_valinta (kanava): globaali nykyinen_vaihe_taso, taso, is_game_over jos ei is_displaying_pattern eikä is_won_current_level and not 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_le = 1 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 = 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 = todellinen GPIO. TS -tulos (GPIO): GPIO.output (LIGHTS [kuvio , GPIO. HIGH) time.sleep (nopeus) GPIO.output (LIGHTS [kuvio , GPIO. LOW) time.sleep (nopeus) is_displaying_pattern = Väärä def wait_for_player_to_repeat_pattern (): vaikka ei ole_voitettu_tason ja ei ole_pelin_peli: aika.unen (0,1) def reset_board_for_new_game (): globaali is_displaying_pattern, is_won_current_level, is_game_ver_velle_verf = nykyinen_kehys = nykyinen_kehys GPIO.output (LIGHTS, GPIO. LOW) def send_data (pisteet): lcd.text ('Pelin loppu', 1) lcd.text ('Nähdään pian!', 2) datestr = str (datetime. now ()), kun taas True: print (datestr) print (score) data = {'Date': datestr, 'Score': score} result = firebase.post ('/score/', data) print (result) if score> 2: status = 'Joku on tehnyt maalin' +(str (pisteet))+'päällä'+datestr+'!' api.update_status (status = status) break def start_game (): kun 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! pisteet on"}.format (current_level - 1)) uni (2) print ("Kiitos pelistä! / n") lcd.text ('', 1) lcd.text ('', 2) tauon aika.unen (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 ("Aloita uusi kierros! / n") initialize_gpio () start_game_monitor () lopuksi: GPIO.cleanup () if _name_ ==' _main_ ': main ()
Vaihe 5: IOT App Watson IBM Bluemix -palvelussa [osa 1]
Asenna Blumix IoT Service
- Määritä yhdyskäytävälaitetyyppi
- Määritä laite
Tee vaiheet 1 ja 2 3 kertaa. Yksi RPi on yhdelle osalle (turvallisuus/puolustus/viihde)
Aseta solmu-punainen
Suorita solmu-punainen
solmun punainen aloitus
- Siirry hallitsemaan palettia hampurilaisvalikossa (oikeassa yläkulmassa)
-
Lataa seuraavat paletit
- node-red-dashboard
- node-red-contrib-firebase
- node-red-contrib-ibm-watson-iot
Vaihe 6: Solmun punaiset virtaukset
Lataa tiedostot ja vie ne solmu-punaiseen.
Turvasolmu-punainen
ei mitään
Puolustus Rpi-solmu-punainen
laserturret.txt
Viihde Rpi-solmu-punainen
- viihde rpi flow.txt
- ldr rpi flow.txt
IBM Bluemix-solmu-punainen
Suositeltava:
KS-Garden: Yleiskatsaus: 9 vaihetta
KS-Garden: Yleiskatsaus: KS-Gardenilla voidaan kastella/tuulettaa/valaista puutarhasi/kasvihuoneesi kasveja takapihalla tai sisätiloissa kasvavia laatikkokasveja (modulaarinen rakenne) KS-Garden-järjestelmä koostuu pääasiassa seuraavista moduuleista: järjestelmälaatikko - Relais ja virtalähdelaatikko
Transistoriohjattu moottori kauko -ohjaimella; Piirin yleiskatsaus: 9 vaihetta
Transistoriohjattu moottori kauko -ohjaimella; Piirin yleiskatsaus: Tämä piiri on transistoriohjattu moottori, jossa on kauko -ohjain Kaukosäädin kytkee virran päälle Transistori kytkee moottorin päälle Ohjelman koodi lisää moottorin nopeutta ja pienennä sitten moottorin nopeutta nollaan
8-bittinen tietokone leipätaululla Yleiskatsaus: 3 vaihetta
Yleiskatsaus 8-bittiseen tietokoneeseen leipätaululla: Tavoitteeni tässä projektissa oli ymmärtää paremmin tietokoneen arkkitehtuuria, laitteistosuunnittelua ja kokoonpanotason kieliä. Koska olin yliopiston nuorempi opiskelija tietotekniikkaa, olin äskettäin suorittanut elektroniikan kursseja, laboratorioita ja
Piirilevyjen suunnittelu ja etsaus Yleiskatsaus: 5 vaihetta
Yleiskatsaus piirilevyjen suunnitteluun ja etsaukseen: Piirilevyjen suunnitteluun ja syövytykseen on useita tapoja yksinkertaisimmista monimutkaisimpiin. Samaan aikaan on helppo hämmentyä siitä, kumpi valita, mikä sopii parhaiten tarpeisiisi. Selventääksesi joitakin kysymyksiä, kuten
H -sillan (293D) käyttäminen 2 -vaihteisella Hobby Motors -autolla Ans Arduino; piirin yleiskatsaus: 9 vaihetta
H -sillan (293D) käyttäminen 2 -vaihteisella Hobby Motors -moottorilla Ans Arduino; piirin yleiskatsaus: H -silta 293D on integroitu piiri, joka pystyy käyttämään kahta moottoria. voi käyttää kahta moottoria kaksisuuntaisesti (eteen- ja taaksepäin) koodilla