İçindekiler:
- Adım 1: Donanım Gereksinimi
- 2. Adım: Güvenlik
- 3. Adım: Savunma
- 4. Adım: Eğlence
- Adım 5: IBM Bluemix'te Watson IOT Uygulaması [Birinci Bölüm]
- Adım 6: Düğüm Kırmızı Akışları
Video: Genel Bakış: Ev Eğlence ve Güvenlik Sistemi: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Uygulama Hakkında
Bu IOT sistemi bir Ev Eğlence ve Güvenlik Sistemidir.
-
Güvenlik
- RFID Kartı'na dokunun ve giriş Firebase'e kaydedilir.
- Yetki verilirse huzurla girilir ve fotoğraf çekilir ve S3'e yüklenir.
- Yetkisiz ise savunma bölümü gelir ve LCD Ekran yetkili olmadığınızı söyleyecektir.
- Savunma
- Kontrol panelindeki düğmesine basın.
- Lazer Taretler rastgele patlama ve hızda saldıracak.
-
Eğlence
- Hareket algılanırsa oyun başlayacaktır.
- Kullanıcı oyunu oynadıktan sonra puan Firebase'e kaydedilir.
- LDR değerleri alınacak ve gösterge tablosunda çıktısı alınacaktır.
Bu uygulama, IBM Node-Red web sunucusu aracılığıyla denetlenebilir ve görüntülenebilir. AWS ve IBM Cloud Services'ı kullanıyoruz ve veritabanımız olarak Firebase'i kullandık.
Açıklanacak adımların özeti
- Donanım Gereksinimleri
- Güvenlik - RFID girişi ve bir görüntü tanıma yazılımı kullanan bir güvenlik sistemi nasıl oluşturulur
- Savunma - Bir lazer taret nasıl oluşturulur
- Eğlence - Bir Simon-says oyunu nasıl oluşturulur
- IBM Bluemix'te IOT App Watson - Tüm sistemler tek bir gösterge panosuna nasıl entegre edilir
Devam edin ve bu projenin nasıl oluşturulacağına dair daha ayrıntılı bir açıklama için pdf dosyasına erişin.
Adım 1: Donanım Gereksinimi
ihtiyacın olacak şey bu
-
Güvenlik
- 1 Ahududu Pi
- 1 LCD
- 1 RFID Okuyucu
- 1 PiKamera
- 2 RFID Kartı/Düğmesi
- X Dişi -> Erkek jumper kabloları
- Savunma
- 1 Ahududu Pi
- 2 10 ㏀ Direnç (Düğmeler için)
- 2 Mikro Servo
- 1 650nm Lazer Verici Modülü
- 2 Basma Düğmesi
- 1 Zil
- 3 Küçük Lastik Bant/Kablo Bağları (sabitlemek için)
- X Dişi -> Erkek jumper kabloları
- X Normal Atlama Kabloları
- 1 Transistör
- 1 Kapasitör
-
Eğlenceler
- 1 Ahududu Pi
- 3 1 ㏀ Direnç (LED'ler için)
- 1 10㏀ Direnç (LDR için)
- 3 LED (Farklı Renkler)
- 3 Düğme
- 1 LDR
- 1 LCD
- 1 Pir Hareket Sensörü
- X Dişi -> Erkek jumper kabloları
- X Normal Atlama Kabloları
2. Adım: Güvenlik
Güvenlik sistemi donanımını oluşturma
Devreleri fritzing şemasında gösterildiği gibi bağlayın
Güvenlik sistemi yazılımının oluşturulması
- Bir şey oluşturarak AWS'yi yapılandırın
- AWS Python Kitaplığını Yükleyin
- LCD Kitaplığını Yükle
- RFID Kitaplığını Yükle
- Firebase'i kurun
- S3 Depolama Kurulumu
- Boto'yu Raspberry Pi'ye yükleyin
- AWS CLI'yi Raspberry Pi'ye yükleyin
- AWS Kimlik Bilgileri Oluşturun
- AWS'yi yapılandırın
- security.py'yi RPI'ye yükleyin
- imagerecognition.py dosyasını RPi'ye yükleyin
security.py, rfid girişlerini okuyacak ve kullanıcının bir davetsiz misafir olup olmadığını tespit edecek bir koddur. Kullanıcı tanınırsa, bir resim çekilir ve s3'e yüklenir. Kod ayrıca aws MQTT'deki bir konuyu yayınlar
3. Adım: Savunma
Lazer taret Donanımını oluşturma
- 2 servo ve 1 lazer modülü kullanarak lazer taretini oluşturuyoruz.
- Devreleri fritzing şemasında gösterildiği gibi bağlayın
Lazer taret Yazılımını oluşturma
Aşağıdaki kod, lazer taretinin rastgele yönlerde, rastgele patlamalarda ve hızda atış yapmasını sağlayacaktır
lazerturret.py
gpiozero'dan içe aktarma LED'i, Buzzer, Düğme, Servoimport süresi sinyalden içe aktarma duraklatma içe aktarma rastgele
#led = LED(12)
#pir = MotionSensor(19, sample_rate=5, tail_len=1) buzzer_pin = Buzzer(17) saldırı = Düğme(5, pull_up=Yanlış) #reset = Düğme(6, pull_up=Yanlış) servo1 = Servo(18) servo2 = Servo(24)
tanımlı ledON():
led.on() print("LED yanıyor") def ledOFF(): led.off() print("LED kapalı")
kesinlikle ateş():
print("sıcak silahlar") buzzer_pin.on() time.sleep(0.1) buzzer_pin.off()
def lazerturret():
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 detay = [timeBetweenBurst, timeBetweenShots, servo1.value, servo2.value, numShots] print(detay) while shot<numshots: shot+="1" servo1.value="servo1start" servo2.value="servo2start" servo1start="servo1change" servo2start="servo2change" time.sleep(timebetweenburst)
notlar = {
'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(frekans, uzunluk): #"buzz" fonksiyonunu yaratın ve onu perde ve süre ile besleyin)
if(sıklık==0):
time.sleep(uzunluk) dönüş periyodu = 1.0 / frekans #frekans gecikmeDeğeri = periyot / 2 #dalganın yarısı için süreyi hesapla numCycles = int(uzunluk * frekans) #dalga sayısı = aralıkta i için süre x frekans(numCycles)): #0'dan yukarıda hesaplanan "döngüler" değişkenine bir döngü başlat buzzer_pin.on() time.sleep(delayValue) buzzer_pin.off() time.sleep(delayValue)
def play(melodi, tempo, duraklama, tempo=0.800):
for i in range(0, len(melody)): # Play şarkı notaSüresi = tempo/tempo buzz(melodi, notSüresi) # Şarkı notası boyunca frekansı değiştirin duraklamaBetweenNotes = notDuration * duraklama süresi.sleep(duraklatBetweenNotes)
Doğru iken:
lazerturret() kırılması;
4. Adım: Eğlence
Eğlence Donanımı Oluşturma
LED'lerin yanma düzenini takip etmeniz ve ilgili düğmelere basmanız gereken Simon-diyor düğme oyununu yaratıyoruz. Gösterge tablolarında daha fazla kullanım için puanları ve zaman damgasını firebase NoSQL veritabanına yükler.
Devreleri Fritzing şemasında gösterildiği gibi bağlayın.
Eğlence Yazılımını Oluşturma
eğlence.py
ithalat RPi. GPIO = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = 'ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY' ACCESS_KEY = 'Firebase ithalat Firebase tüketici_anahtarı gelen tarih saat ithalat datetime gelen zaman ithalat uykudan alt süreç ithalat çağrısından rpi_lcd ithalat LCD'den GPIOimport parçacığı ithalat zamanını içe rastgele ithalat os ithalat tweepy olarak 988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET = 'K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk' yetkilendirme = tweepy. OAuthHandler (tüketici_anahtarı, CONSUMER_SECRET) auth.secure = Gerçek auth.set_access_token (ACCESS_KEY, ACCESS_SECRET) aPI = tweepy. API (auth) Firebase = firebase. FirebaseApplication (' https:// iotca2 -12f48.firebaseio.com', Yok) lcd=LCD() lcd.text('İyi eğlenceler!', 1) lcd.text('İyi Şanslar!', 2) uyku(1) # Kırmızı, Sarı, Yeşil IŞIKLAR = [40, 38, 36] DÜĞMELER = [37, 33, 35] NOTLAR = ["E3", "A4", "E4"] # oyun hızını etkileyen değiştirebileceğiniz değerler = 0,5 # oyunu işaret etmek için kullanılan bayraklar durum is_displaying_pattern = Yanlış is_won_curr ent_level = Yanlış is_game_over = Yanlış # oyun durumu current_level = 1 current_step_of_level = 0 model = def initialize_gpio(): GPIO.setmode(GPIO. BOARD) GPIO.setup(LIGHTS, GPIO. OUT, initial=GPIO. LOW) GPIO. i aralığında(3) kurulum(BUTTONS, GPIO. IN, pull_up_down=GPIO. PUD_DOWN): GPIO.add_event_detect(BUTTONS, GPIO. FALLING, doğrulama_player_selection) def doğrulama_player_selection(channel): global current_step_of_level_, current_level, is_level_ is_game_over is_displaying_pattern değilse ve is_won_current_level değilse ve is_game_over değilse: flash_led_for_button(channel) if channel == BUTTONS[pattern[current_step_of_level]: current_step_of_level += 1 eğer current_step_of_level >= current_level: true_def_n_= şu anki_level: true_def_n_= 1 geçerli_level ise: 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, kür rent_step_of_level is_won_current_level = Yanlış 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 = Gerçek GPIO.output(LIGHTS, GPIO. LOW) için geçerli seviye: GPIO.output(LIGHTS[desen, GPIO. HIGH) time.sleep(hız) GPIO.output(IIGHTS[desen, GPIO. LOW) time.sleep(hız) is_displaying_pattern = Yanlış tanım wait_for_player_to_repeat_pattern (): is_won_current_level değilken ve is_game_over değilken: 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, model is_displaying_pattern = Yanlışseviye is_displaying_pattern = Yanlış_seviye = Yanlış_seviye = geçerli_seviye = Geçerli_seviye GPIO.output(IŞIKLAR, GPIO. LOW) def send_data(skor): lcd.text('Oyun sonu,', 1) lcd.text('Yakında görüşürüz!', 2) datestr = str(datetime. şimdi()) Doğru iken: print(datestr) print(score) data={ 'Tarih': datestr, 'Puan': puan } sonuç = firebase.post('/scores/', veri) print(sonuç) eğer puan > 2: durum='Birisi puan aldı ' + (str(skor)) +' '+datestr+'!' api.update_status (durum = durum) break def start_game(): while True: add_new_color_to_pattern() display_pattern_to_player() wait_for_player_to_repeat_pattern() is_game_over: send_data(current_level - 1) print("Oyun Bitti! puan {} renklerdir!\n".format(current_level - 1)) sleep(2) print("Oyun için teşekkürler!\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(): deneyin: os.system('cls' if os.name == 'nt ' else 'clear') print("Yeni tura başla!\n") initialize_gpio() start_game_monitor() son olarak: GPIO.cleanup() if _name_ == '_main_': main()
Adım 5: IBM Bluemix'te Watson IOT Uygulaması [Birinci Bölüm]
Blumix IoT Service'i kurun
- Bir Ağ Geçidi Aygıt Türü Ayarlayın
- Bir Cihaz Kur
Adım 1 ve 2'yi 3 kez yapın. Bir RPI, bir bölüm içindir (Güvenlik/Savunma/Eğlence)
Node-Red'i kurun
kırmızı düğümü çalıştır
düğüm-kırmızı başlangıç
- Hamburger menüsünde paleti yönetmeye gidin (sağ üstte)
-
Aşağıdaki paletleri indirin
- düğüm-kırmızı-dashboard
- node-red-katkı-firebase
- düğüm-red-katkı-ibm-watson-iot
Adım 6: Düğüm Kırmızı Akışları
Dosyaları indirin ve node-red'inize dışa aktarın.
Güvenlik Düğümü-Kırmızı
Yok
Savunma Rpi Düğümü-Kırmızı
lazerturret.txt
Eğlence Rpi Düğümü-Kırmızı
- eğlence rpi akışı.txt
- ldr rpi akışı.txt
IBM Bluemix Düğümü-Kırmızı
Önerilen:
KS-Garden:Genel Bakış: 9 Adım
KS-Garden:Genel Bakış: KS-Garden, arka bahçenizdeki bahçe/sera bitkilerinizi veya iç mekan yetiştirme kutusu bitkilerinizi sulamak/havalandırmak/aydınlatmak için kullanılabilir (Modüler tasarım) KS-Garden sistemi temel olarak aşağıdaki modüllerden oluşur- Ana sistem kutusu - Röle ve güç kaynağı kutusu
Uzaktan Kumandalı Transistör Kontrollü Motor; Devreye Genel Bakış: 9 Adım
Transistör Kontrollü Uzaktan Kumandalı Motor;Devreye Genel Bakış: Bu devre uzaktan kumandalı transistör kontrollü bir motordur.Uzaktan kumanda gücü açar.Transistör motoru çalıştırır.Programın kodu motorun hızını artıracak ve ardından motor hızını sıfıra kadar azaltın.
Breadboard'da 8-Bit Bilgisayara Genel Bakış: 3 Adım
Breadboard Üzerindeki 8-Bit Bilgisayara Genel Bakış: Bu projedeki amacım, bilgisayar mimarisi, donanım tasarımı ve montaj düzeyindeki dillerin daha iyi anlaşılmasını sağlamaktı. Üniversitede bilgisayar mühendisliği okuyan bir Junior olarak, yakın zamanda elektronik, laboratuvarlar ve
PCB Tasarımı ve Aşındırma Genel Bakış: 5 Adım
PCB Tasarımı ve Aşındırma Genel Bakış: PCB'leri tasarlamanın ve dağlamanın en basitlerinden en karmaşıklarına kadar birçok yolu vardır. Bu arada, hangisini seçeceğiniz, hangisinin ihtiyaçlarınıza en uygun olacağı konusunda kafa karıştırmak kolaydır. gibi bazı soruları netleştirmek için
2 Redüktörlü Hobi Motorunu ve Arduino'yu Sürmek için H Köprüsü (293D) Kullanma; Devreye Genel Bakış: 9 Adım
2 Redüktörlü Hobi Motoru ve Arduino Devresini Sürmek için H Köprüsü(293D) Kullanmak Genel Bakış: H köprüsü 293D, 2 motoru sürebilen entegre bir devredir. H köprüsünün transistör veya MOSFET kontrol devrelerine göre avantajı, 2 motoru bir Kod ile çift yönlü (ileri ve geri) çalıştırabilir