Hirdetés

Megint ez az évszak, amikor társadalmi szempontból elfogadhatónak tekintik a gyermekek félelmét és édességet adni nekik. Ó öröm. Azért vagyok itt, hogy megkönnyítsem a munkádat, megmutatva, hogyan lehet elkészíteni egy egyszerű, mozgásérzékelő Raspberry Pi Halloween hangdobozt. Itt egy bemutató:

Itt van, amire szüksége lesz

Valószínűleg az egyetlen olyan alkatrész, amely még nincs meg a mozgásérzékelő, egy kicsi és olcsó alkatrész, amelyet a helyi Microcenternél vagy a Maplinnél találhat.

  • Raspberry Pi (bármely modell megteszi).
  • Mozgásérzékelő (~ 3 USD).
  • Hookup vezetékek.
  • Vezetékes hangszóró (a legtöbb Bluetooth hangszórónak lehetősége van vonal bemenetet használni).
  • 3,5 mm-es sztereo kábel, hím-hím.

Ha elkészült, érdemes felvenni néhányat szinkronizált fényhatások Hogyan szinkronizálhatjuk a házi lámpákat és a zenét a Halloween számáraAkár Halloween házibuliot rendez, akár a környék legmenőbb kísértetjárta házát akarja tartani, elengedhetetlen, hogy a fények időben felvillanjanak a zene és a hanghatások számára. Olvass tovább

is, de ebben az oktatóanyagban csak az ijesztő hangokat kicsit fedjük le!

Felállítása

Raspbian Jessie Lite-t és Python 2.7-et használunk, de minden Linux disztrónak, amely a Pi-n fut, jól kell lennie. A szabványos „raspberrypi.local” gazdagépnevet hagytam, tehát kezdje meg távolról az SSH használatával jelentkezzen be (nyissa meg a Terminál ablakot, ha Mac rendszeren van. Íme hogyan lehet ugyanezt megtenni a Windows rendszerben 4 egyszerű módszer az SSH használatához Windows rendszerbenAz SSH a de facto megoldás a távoli terminálok biztonságos eléréséhez Linux és más UNIX-szerű rendszerekben. Ha van egy távoli SSH-kiszolgáló, amelyet elérni szeretne, letöltnie kell egy SSH-klienst ... Olvass tovább ) - vagy ha a teljes Raspbian használatát választotta az asztali grafikus felhasználói felülettel, nyugodtan ugorjon a frissítésre.

ssh [email protected]. (jelszóként írja be a málnát) sudo apt-get update. sudo apt-get install python-pip. sudo pip install gpiozero. 

Ez egy egyszerű könyvtárat telepít a Python GPIO tűivel való együttműködésre, sokféle beépített érzékelővel és gombbal. Csatlakoztassa az érzékelőt a GPIO4 jelű tüskével, a VCC-vel 5V-ra csatlakoztatva és a GND-vel a GND-hez csatlakoztatva. Ez a modelltől függően változhat, ezért erősítse meg egy pinout diagrammal.

Raspberry Pi GPIO diagram
Kép jóváírás: raspberrypi.org

Hasznos, hogy a Pimoroni Pi 2-es tokja lézerrel maratott egy pinout diagrammal.

Címkézett Raspberry Pi Case

Most készítsük el a mozgásérzékelési szkriptet.

nano motion.py. 

Beillesztés:

a gpiozero importálásából MotionSensor pir = MotionSensor (4) míg igaz: ha a pir.motion_detected: print ("mozgás észlelve!") egyébként: print ("nincs mozgás")

A mentéshez és a kilépéshez nyomja meg a CTRL-X, majd az Y billentyűt, majd futtassa a következővel:

python motion.py. 

A képernyőn meg kell ismételnie a „nincs mozgás” üzenetet mindaddig, amíg a kezét az érzékelő előtt nem hullámozza, amikor az a „Mozgásérzékelés!”

Mozgás érzékelve a terminálon

Ha az üzenet egyáltalán nem változik, akkor rosszul vezette be.

Ha érdekel többet megtudni erről az egyszerű GPIOZero könyvtárról, nézzen meg ez a fantasztikus cheatsheet.

Hang lejátszása

Csatlakoztassa a hordozható hangszórót, és gondoskodjon róla, hogy a tápellátás táplálja, ha szükséges. Mi fogjuk használni a pygame könyvtár hangok lejátszásához, tehát folytassa és telepítse:

sudo apt-get install python-pygame. 

Először is egy hangfájl szükséges a lejátszáshoz. Ha ezt az asztali környezetből végzi, akkor folytassa és töltse le a WAV vagy OGG fájl valahonnan (jó választást találtam a ingyenes Halloween hangok itt), és helyezze be az otthoni könyvtárba. Azt javaslom, hogy levonjanak mintavételt először és konvertálás egy kis OGG formátumba egyébként is.

Ha távoli kapcsolatot létesít, és csak a parancssort használja, néhány oldallal kissé nehezebbek vagyunk, mivel a wget A parancs nem foghatja meg a tényleges fájlt. Ehelyett helyben letölthetjük az asztalra és használhatjuk a scp (biztonságos másolás) parancs a parancssoron keresztüli másoláshoz. Tudhat meg többet a scp-ről itt, de egyelőre nyisson meg egy új Terminál fület, és írja be:

scp thunder.ogg [email protected]: 

Nevezze át a thunder.ogg nevet, de ne felejtse el ezt a végső értéket : (a parancs nélküle teljes lesz, de nem fog megtenni azt, amit szeretnénk.) Alapértelmezés szerint ez átviszi a fájlt a Pi felhasználó otthoni könyvtárába.

Most módosítsuk a szkriptet hang lejátszásához. Először importáljon néhány új modult:

import pygame.mixer. from pygame.mixer import Sound. 

Majd közvetlenül a meglévő importálási nyilatkozatok után ugyanazt a hangot újra és újra hurcoljuk a tesztelés céljából. Hagyja meg a mozgásérzékelő kód többi részét, ahogy a mostanában van - csak nem fog futni, mivel örökre be fog ragadni ebbe a hanglejátszási hurokba.

pygame.init () pygame.mixer.init () # hangfájl letöltése a Pi felhasználó saját könyvtárába (mp3 nélkül) mennydörgés = pygame.mixer. Hang ("/ home / pi / thunder.ogg"), miközben igaz: thunder.play () sleep (10) thunder.stop ()

Vegye figyelembe, hogy amikor eredetileg kipróbáltam ezt a folyamatot, a hang megtagadta a lejátszást, és csak kattintott rá. A fájl mérete vagy bitráta volt a tettes: 24 bites volt, és több mint 5 MB egy 15 másodperces klip számára. A 16-bites méretezés a fentiekhez kapcsolt konverter használatával minden szépen működött, és a méret mindössze 260KB-ra csökkent!

Ha észrevehetően sziszegő hangot észlel a hangszóróiból, amikor a Python alkalmazás fut, de nem másképpen, írja be:

sudo nano /boot/config.txt. 

És illessze be ezt a sort a végére:

disable_audio_dither = 1. 

Indítsa újra a módosítások hatályba lépését. Vagy ne zavarjanak, mivel egyébként nekem esőnek hangzott.

Végül módosítsuk a fő mozgás-ellenőrző hurkot, hogy a hang lejátszásakor mozgás észlelhető legyen. 15 másodperces késleltetést használunk annak érdekében, hogy az egész hurok lejátszható legyen, és spampufferként működjön, ha sok non-stop mozgás van.

míg igaz: ha a pir.motion_detected: print ("mozgás észlelve!") thunder.play () # ellenőrizze, hogy a lejátszás teljes volt-e a mozgásérzékelés folytatása előtt befejezi, megakadályozza a hangos alvás spamképzését (15) thunder.stop () egyébként: print ("Nem mozgás")

Automatikus indítás

Valószínűleg akkumulátorral és internetkapcsolat nélkül szeretnénk ezt beállítani, ezért a szkriptnek újra kell indulnia, anélkül hogy meg kellene nyitnia egy parancssort. Ehhez a lehető legegyszerűbb módszert fogjuk használni: a crontab Hogyan ütemezzük a feladatokat Linuxon a Cron és a Crontab segítségévelA feladatok automatizálásának képessége egyike azoknak a futurisztikus technológiáknak, amelyek már itt vannak. A Linux és a felhasználói feladatok ütemezése minden Linux felhasználó számára előnyös lehet, a cron, amely egy könnyen használható háttérszolgáltatásnak köszönhető. Olvass tovább . Típus:

sudo crontab -e. 

Ha ez a parancs futtatja először, akkor azzal kezdődik, hogy megkérdezi tőle, hogy melyik szerkesztőt használja. A 2. lehetőséget választottam a nano számára. A rendszer elindul a választott szerkesztőbe, tehát adja hozzá a következő sort:

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

Ez azt jelenti, hogy a motion.py szkript minden indításkor fut, és ezt csendesen hajtja végre (így a szkript minden kimenetét figyelmen kívül hagyja). Indítsa újra, hogy kipróbálja.

Ha a mozgás ellenére semmi sem játszik le, vagy csak egy kis kattintást hall, akkor előfordulhat, hogy nem használta a teljes fájlútvonalat, vagy előfordulhat, hogy a fájlnak alacsonyabb bitrátára és kisebb fájlméretet kell konvertálnia.

Add További hangok

Ugyanazon hatás lejátszása kicsit unalmas, ezért adjunk hozzá némi véletlenszerűséget. Töltse le még néhány Halloween hangot, emlékezve arra, hogy ésszerű méretre méretezze és bitrá tegye őket, majd küldje el a Pi-hez a scp mint azelőtt. Három különböző típusú sikolyot adtam hozzá.

Módosítsa a kódot úgy, hogy az egyetlen meghatározása helyett pygame.mixer. Hang változó, valójában egy sor a hangok. A Python esetében ez egyszerű, csak vesszővel elválasztott listát szögletes zárójelben veszi körül, így:

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

Ezután importálja a véletlenszerű könyvtárat a fájlba, a következőkkel:

import véletlenszerűen. 

Most módosítsa a fő mozgásérzékelő hurkot az alábbiak szerint:

míg igaz: ha a pir.motion_detected: print ("mozgás észlelve!") playSound = random.choice (hangok) playSound.play () # ellenőrizze, hogy a lejátszás rendelkezik-e a mozgásérzékelés folytatása előtt teljesen befejeződött, megakadályozza a hangos alvás "spammelését" (15) playSound.stop () egyébként: print ("Nem mozgás")

Vegye figyelembe a kisebb változást: az egyetlen Hangváltozó lejátszása helyett a random.choice funkció, hogy véletlenszerű hangot válasszon a hangtömbből, majd ezt lejátssza.

Itt található a teljes kód, ha problémák merülnek fel:

import pygame. from pygame.mixer import Sound. a gpiozero import MotionSensorból. az időből importálj aludni. import véletlenszerű pygame.init () pygame.mixer.init () # töltsön be egy hangfájlt, ugyanabban a könyvtárban, mint a szkript (nincsenek mp3-k) hangok = [pygame.mixer. Hang ("/ home / pi / thunder.ogg"), pygame.mixer. Hang ("/ home / pi / scary_scream.ogg"), pygame.mixer. Hang ("/ home / pi / girl_scream.ogg"), pygame.mixer. Hang ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) míg igaz: ha a pir.motion_detected: print ("mozgás észlelve!") playSound = random.choice (hangok) playSound.play () # ellenőrizze, hogy a lejátszás rendelkezik-e a mozgásérzékelés folytatása előtt teljesen befejeződött, megakadályozza a hangos alvás "spammelését" (15) playSound.stop () egyébként: print ("Nem mozgás")

Mindössze négy mintával nagy a valószínűsége az ismétlésnek minden alkalommal, de további mintákat is hozzáadhat, ha ez bosszantó.

Ez az! Másokkal elrejteni a bokrokban ijesztő LED szörnyeteg szemek Hogyan készítsünk kísérteties Halloween izzó szemeket kevesebb, mint 5 dollárértSzeretné élvezni a Halloween dekorációt ebben az évben? Tanulja meg, hogyan készíthet LED-szemeket kevesebb, mint 5 dollárért ebben a kezdő elektronikai projektben. Olvass tovább , és képesnek kell lennie arra, hogy mentsen el néhány édességet, mivel az összes gyerek sikoltozva elmenekül, mielőtt még az ajtót elérnék. Vagy bújj el a szekrénybe, mert egy dühös anyuka vérzik, miután kis Johnny sírt.

Jogi nyilatkozat: A MakeUseOf nem vállal felelősséget semmilyen személyi sérülésért, amelyet a projekt használata okozhat!

Elkészíti ezt a mozgással aktivált hangdobozt, hogy megijesztse a helyi trükköket vagy kezelőket? Beállítottál valami ijesztő hatást egy Málna Pi-val ebben a Halloween-ben? Kérjük, ossza meg velünk az alábbi megjegyzésekben!

James rendelkezik mesterséges intelligencia BSc-vel, CompTIA A + és Network + tanúsítvánnyal rendelkezik. A MakeUseOf vezető fejlesztője, és szabadidejét VR paintballon és társasjátékokon játszik. Gyerekkora óta épít PC-ket.