İlan

Küçük çocukları dehşete düşürmek ve onlara şeker vermek sosyal olarak kabul edilebilir olarak kabul edildiğinde yılın o zamanı. Ah sevinç. Basit bir hareket algılayan Raspberry Pi Cadılar Bayramı ses kutusu oluşturmayı göstererek işinizi kolaylaştırmak için buradayım. İşte bir demo:

İşte İhtiyacınız Olanlar

Muhtemelen sahip olmadığınız tek parça hareket sensörüdür, yerel Microcenter veya Maplin'de bulabileceğiniz küçük ve ucuz bir parça.

  • Raspberry Pi (herhangi bir model yapacak).
  • Hareket sensörü (~ 3 $).
  • Bağlantı telleri.
  • Kablolu hoparlör (Bluetooth hoparlörlerin çoğunda hat girişi kullanma seçeneği bulunur).
  • 3,5 mm stereo kablo, erkek-erkek.

İşiniz bittiğinde, senkronize aydınlatma efektleri Cadılar Bayramı için Ev Işıkları ve Müzik Nasıl Senkronize EdilirBir Cadılar Bayramı evi partisine ev sahipliği yapıyor veya mahalledeki en havalı perili ev istiyorsanız, ışıklarınızı müzik ve ses efektlerine zamanında yakmak önemlidir. Daha fazla oku ama bu derste sadece korkutucu sesleri biraz ele alacağız!

instagram viewer

Kurulum

Raspbian Jessie Lite ve Python 2.7 kullanıyoruz, ancak Pi'nizde çalışan herhangi bir Linux dağıtımı iyi olmalı. Standart “raspberrypi.local” ana bilgisayar adında bıraktım, bu yüzden SSH'yi kullanarak uzaktan oturum açarak başlayın (Mac kullanıyorsanız, bir Terminal penceresi açın. İşte Windows'da aynı şey nasıl yapılır Windows'ta SSH Kullanmanın 4 Kolay YoluSSH, Linux ve diğer UNIX benzeri sistemlerde uzak terminallere güvenli bir şekilde erişmek için fiili bir çözümdür. Erişmek istediğiniz uzak bir SSH sunucunuz varsa, bir SSH istemcisi indirmeniz gerekir ... Daha fazla oku ) - veya masaüstü GUI'sı ile tam bir Raspbian kullanmayı seçtiyseniz, güncellemeye atlamaktan çekinmeyin.

ssh [email protected]. (ahududu şifresi olarak girin) sudo apt-get update. sudo apt-get kurulum python-pip. sudo pip kurulum gpiozero. 

Bu, Python'daki birçok yerleşik sensör ve düğme içeren GPIO pinleriyle çalışmak için basit bir kütüphane kurar. Sensörünüzü GPIO4 üzerindeki sinyal pimi, VCC 5V'ye ve GND GND'ye bağlı olarak bağlayın. Bu, tam modelinize göre değişebilir, bu nedenle bir pinout diyagramıyla onaylayın.

Raspberry Pi GPIO Diyagramı
İmaj Kredisi: raspberrypi.org

Yararlı bir şekilde, Pimoroni'deki Pi 2 kılıfımın üzerine doğrudan lazerle kazınmış bir pinout diyagramı var.

Etiketli Raspberry Pi Kılıfı

Şimdi hareket algılama komut dosyamızı yapalım.

nano motion.py. 

Yapıştır:

gpiozero'dan içe aktarım MotionSensor pir = MotionSensor (4) while True: pir.motion_detected: print ("Hareket algılandı!") başka: print ("Hareket yok")

Kaydetmek ve çıkmak için CTRL-X ve Y tuşlarına basın, ardından aşağıdakilerle çalıştırın:

python motion.py. 

Elinizi sensörün önünde sallayana kadar “Hareket Algılandı!” Üzerine gelene kadar ekranda “hareket yok” mesajının tekrarlandığını görmelisiniz.

Terminalde hareket algılandı

Mesaj hiç değişmezse, yanlış bağlamışsınız demektir.

Bu basit GPIOZero kütüphanesi hakkında daha fazla bilgi edinmek istiyorsanız, şuraya bakın: bu fantastik hile sayfası.

Ses Çalma

Taşınabilir hoparlörünüzü bağlayın ve gerekiyorsa güçlendirildiğinden emin olun. Kullanacağız pygame ses çalmak için kitaplık, bu yüzden devam edin ve yükleyin:

sudo apt-get yüklemek python-pygame. 

İlk olarak, çalmak için bir ses dosyasına ihtiyacımız var. Bunu masaüstü ortamından yapıyorsanız, devam edin ve bir WAV veya OGG bir yerden dosya (iyi bir seçim buldum ücretsiz Halloween sesleri burada) girin ve ana dizininize koyun. Önce altörneklemeyi öneririm ve küçük bir OGG formatına dönüştürme neyse.

Uzaktan bağlanıyor ve yalnızca komut satırını kullanıyorsanız, bazı sitelerle ilgili biraz daha zorlanıyoruz, çünkü wget komutu gerçek dosyayı alamayabilir. Bunun yerine yerel olarak masaüstümüze indirebilir ve scp (güvenli kopyalama) komutunu komut satırı üzerinden kopyalama. Daha fazla bilgi edinebilirsiniz scp hakkında burada, ancak şimdilik yeni bir Terminal sekmesi açın ve şunu yazın:

scp thunder.ogg [email protected]: 

Thunder.ogg öğesini uygun şekilde yeniden adlandırın, ancak bu finali unutmayın : (komut onsuz tamamlanır, ancak yapmasını istediğimiz şeyi yapmaz). Varsayılan olarak, bu dosyayı Pi kullanıcısının ana dizinine aktarır.

Şimdi bir ses çalmak için komut dosyasını değiştirelim. Bazı yeni modülleri içe aktararak başlayın:

ithalat pygame.mixer. pygame.mixer içe aktarma Ses. 

Ardından, mevcut içe aktarma ifadelerinden hemen sonra, test amacıyla aynı sesi tekrar tekrar döngüye sokacağız. Hareket algılama kodunuzun geri kalanını şimdilik olduğu gibi bırakın - çalışmaz, çünkü bu ses çalma döngüsünde sonsuza kadar sıkışacaktır.

pygame.init () pygame.mixer.init () # Pi kullanıcısının ana dizinine bir ses dosyası yükleyin (mp3 yok) gök gürültüsü = pygame.mixer. Ses ("/ home / pi / thunder.ogg") True iken: thunder.play () uyku (10) thunder.stop ()

Bu işlemi ilk denediğimde sesin çalmayı reddettiğini ve sadece tıkladığını unutmayın. Dosyanın boyutu veya bit hızı suçluydu: 15 saniyelik bir klip için 24 bit ve 5 MB'ın üzerindeydi. Yukarıda bağlandığım dönüştürücüyü kullanarak 16 bit'e kadar ölçeklendirmek, her şeyin güzel çalışmasını sağladı ve boyut sadece 260KB'ye düşürüldü!

Python uygulamanız çalışırken hoparlörlerinizden kötü bir tıslama fark ederseniz, ancak başka türlü yapmazsanız, şunu yazın:

sudo nano /boot/config.txt. 

Ve bu satırı sonuna ekleyin:

disable_audio_dither = 1. 

Değişikliklerin etkili olması için yeniden başlatın. Ya da rahatsız etmeyin, çünkü yine de bana yağmur gibi geliyor.

Son olarak, hareket algılandığında sesi çalmak için ana hareket kontrol döngüsünü değiştirelim. Tüm döngünün oynatılabilmesi ve çok fazla kesintisiz hareket olduğunda spam arabelleği görevi görmesi için 15 saniyelik bir gecikme kullanacağız.

while True: pir.motion_detected: print ("Hareket algılandı!") thunder.play () # oynatmanın tam olarak yapıldığından emin olun hareket algılamaya devam etmeden önce tamamlanır, ses uyku (15) "spam" önlemek için thunder.stop () başka: yazdır ("Hayır hareket")

Otomatik Başlat

Muhtemelen bunu pil ve internet bağlantısı olmayan bir yere kurmak istiyoruz, bu yüzden komut dosyasının bir komut satırı açmak zorunda kalmadan yeniden başlatmada çalışması gerekiyor. Bunu yapmak için mümkün olan en basit yöntemi kullanacağız: crontab Cron ve Crontab ile Linux'ta Görevleri ZamanlamaGörevleri otomatikleştirme yeteneği, zaten burada bulunan fütüristik teknolojilerden biridir. Her Linux kullanıcısı, kullanımı kolay bir arka plan hizmeti olan cron sayesinde zamanlama sistemi ve kullanıcı görevlerinden yararlanabilir. Daha fazla oku . Tür:

sudo crontab -e. 

Bu komutu ilk kez çalıştırıyorsanız, size hangi düzenleyicinin kullanılacağını sorarak başlayacaktır. Nano için 2. seçeneği seçtim. Seçtiğiniz düzenleyiciye önyükleme yapar, bu nedenle aşağıdaki satırı ekleyin:

@reboot python /home/pi/motion.py ve. 

Bu, motion.py betiğinizin her başlangıçta çalışacağı ve bunu sessizce gerçekleştireceği anlamına gelir (betiğin çıktısı yok sayılır). Denemek için yeniden başlatın.

Hareket olmasına rağmen hiçbir şey çalmazsa veya sadece küçük bir tıklama duyarsanız, tam dosya yolunu kullanmamış olabilirsiniz veya dosyanızın daha düşük bir bit hızına ve daha küçük dosya boyutuna dönüştürülmesi gerekebilir.

Daha Fazla Ses Ekle

Aynı efekti tekrar tekrar oynamak biraz sıkıcıdır, bu yüzden buna biraz rastgelelik ekleyelim. Daha fazla Cadılar Bayramı sesi indirin, bunları makul bir boyuta ve bit hızına ölçeklendirmeyi unutmayın, ardından bunları kullanarak Pi'nize gönderin scp eskisi gibi. Üç farklı çığlık türü ekledim.

Kodu, tek bir tanımlamak yerine pygame.mixer. Ses değişken, aslında bir dizi seslerin. Python ile bu basittir, sadece virgülle ayrılmış bir listesini köşeli parantezlerle sarın, şöyle:

sesleri = [pygame.mixer. Ses ("/ home / pi / thunder.ogg"), pygame.mixer. Ses ("/ home / pi / scary_scream.ogg"), pygame.mixer. Ses ("/ home / pi / girl_scream.ogg"), pygame.mixer. Ses ("/ home / pi / psycho_scream.ogg")]

Ardından, rastgele kütüphaneyi dosyanıza içe aktarın:

rasgele içe aktar. 

Şimdi ana hareket algılama döngüsünü aşağıdaki gibi değiştirin:

while True: pir.motion_detected: print ("Hareket algılandı!") playSound = random.choice (sesler) playSound.play () # oynatmanın olduğundan emin olun hareket algılamaya devam etmeden önce tamamen tamamlanmış, ses uyku (15) "spam" önlemek playSound.stop () başka: yazdır ("Hayır hareket")

Küçük değişikliğe dikkat edin: Tek bir Ses değişkenini çalmak yerine, random.choice sesler dizimizden rasgele bir ses seçmek, daha sonra bunu çalmak için işlev.

Sorun yaşıyorsanız tam kodu aşağıda bulabilirsiniz:

ithalat pygame. pygame.mixer içe aktarma Ses. gpiozero ithal MotionSensor. zaman ithalat uyku. rasgele pygame.init () içe aktar pygame.mixer.init () # bir ses dosyası yükleyin, komut dosyasıyla aynı dizin (mp3 yok) sesleri = [pygame.mixer. Ses ("/ home / pi / thunder.ogg"), pygame.mixer. Ses ("/ home / pi / scary_scream.ogg"), pygame.mixer. Ses ("/ home / pi / girl_scream.ogg"), pygame.mixer. Ses ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) while True: pir.motion_detected: print ("Hareket algılandı!") playSound = random.choice (sesler) playSound.play () # oynatmanın olduğundan emin olun hareket algılamaya devam etmeden önce tamamen tamamlanmış, ses uyku (15) "spam" önlemek playSound.stop () başka: yazdır ("Hayır hareket")

Sadece dört örnekle, her seferinde yüksek bir tekrarlama olasılığı vardır, ancak rahatsız edici ise daha fazla örnek ekleyebilirsiniz.

Bu kadar! Bazıları çalıların arasında sakla korkunç LED canavar gözleri 5 $ 'dan daha az ürkütücü Cadılar Bayramı parlayan gözler nasıl yapılırBu yıl Cadılar Bayramı dekorasyonlarını renklendirmek ister misin? Bu yeni başlayanların elektronik projesinde LED gözlerini 5 dolardan daha düşük bir fiyata nasıl yapacağınızı öğrenin. Daha fazla oku ve tüm çocuklar kapıya ulaşmadan önce çığlık attığından kendinize biraz şeker kurtarabilirsiniz. Ya da dolaba saklanın, çünkü küçük Johnny ağlattıktan sonra öfkeli bir anne kan için dışarı çıktı.

Yasal Uyarı: MakeUseOf, bu projeyi kullanımınızdan kaynaklanabilecek kişisel yaralanmalardan sorumlu değildir!

Yerel hile veya tedavi edicileri korkutmak için bu hareketle aktive edilmiş ses kutusunu yapacak mısınız? Bu Cadılar Bayramı'nda bir Raspberry Pi ile korkutucu efektler kurdun mu? Lütfen aşağıdaki yorumlarda bize bildirin!

James Yapay Zeka alanında lisans derecesine sahiptir ve CompTIA A + ve Network + sertifikalıdır. MakeUseOf'un baş geliştiricisi ve boş zamanlarını VR paintball ve boardgames oynayarak geçiriyor. Çocukluğundan beri bilgisayar yapıyor.