реклама

Това е времето на годината отново, когато се смята за социално приемливо да ужасяваш малките деца и да им даваш бонбони. О, радост. Тук съм, за да улесня работата ви, като ви покажа как да направите обикновена звукова кутия Raspberry Pi Хелоуин, разпознаваща движенията. Ето демонстрация:

Ето какво ще ви трябва

Вероятно единствената част, която вече нямате, е сензорът за движение, малка и евтина част, която трябва да можете да намерите в местния Микроцентър или Maplin.

  • Raspberry Pi (който и да е модел).
  • Сензор за движение (~ $ 3).
  • Проводници за свързване.
  • Кабелен високоговорител (повечето Bluetooth високоговорители ще имат възможност да използват вградени линии).
  • 3,5 мм стерео кабел, мъжко към мъжко.

След като свършите, може да искате да добавите някои синхронизирани светлинни ефекти Как да синхронизираме домашните светлини и музиката за ХелоуинНезависимо дали сте домакин на домашно парти на Хелоуин или искате най-готината къща с обитатели в квартала, като светлините ви светят навреме към музика и звукови ефекти. Прочетете още

instagram viewer
също, но в този урок ще покрием само малко страшните звуци!

Настройвам

Използваме Raspbian Jessie Lite и Python 2.7, но всеки Linux дистрибутор, който работи на вашия Pi, трябва да е добре. Оставих го на стандартното име на хост „raspberrypi.local“, така че започнете с влизане от разстояние с помощта на SSH (отворете прозорец на терминала, ако сте на Mac. Ето как да направите същото в Windows 4 лесни начина за използване на SSH в WindowsSSH е фактическото решение за сигурен достъп до отдалечени терминали на Linux и други подобни на UNIX системи. Ако имате отдалечен SSH сървър, до който искате да получите достъп, ще трябва да изтеглите SSH клиент ... Прочетете още ) - или ако сте избрали да използвате пълен Raspbian с графичен интерфейс на работния плот, не се колебайте да преминете към актуализиране.

ssh [email protected]. (въведете малината като парола) sudo apt-get update. sudo apt-get install python-pip. sudo pip инсталирайте gpiozero. 

Това инсталира обикновена библиотека за работа с GPIO щифтовете в Python с много видове вградени сензори и бутони. Свържете сензора си със сигналния щифт на GPIO4, VCC свързан към 5V и GND свързан с GND. Това може да варира в зависимост от вашия точен модел, така че потвърдете с диаграма на фиксиране.

Raspberry Pi GPIO диаграма
Кредит за изображение: raspberrypi.org

Полезно е, че моят случай на Pi 2 от Pimoroni има диаграмна лазерна гравирана директно върху него.

Маркиран Raspberry Pi Case

Сега нека направим нашия скрипт за откриване на движение.

nano motion.py. 

Поставяне в:

от gpiozero import MotionSensor pir = MotionSensor (4) докато вярно: ако pir.motion_detected: print ("движение е открито!") else: print ("Без движение")

Натиснете CTRL-X, след това Y, за да запазите и излезете, след което стартирайте с:

python motion.py. 

Трябва да видите съобщението „без движение“ да се повтаря на екрана, докато не махнете с ръка пред сензора, когато той ще се зазове на „Открито движение!“

Движението е открито в терминал

Ако съобщението не се промени изобщо, вие сте го свързали погрешно.

Ако се интересувате да научите повече за тази проста GPIOZero библиотека, разгледайте този фантастичен мамят.

Възпроизвеждане на звук

Свържете портативния си високоговорител и се уверете, че е захранван, ако трябва. Ще използваме Pygame библиотека за възпроизвеждане на звуци, така че продължете и го инсталирайте:

sudo apt-get install python-pygame. 

Първо, имаме нужда от звуков файл, за да играем. Ако правите това от работната среда, продължете и изтеглете WAV или OGG файл от някъде (намерих добър избор от безплатни Хелоуин звучи тук) и го поставете в домашната си директория. Първо бих предложил преобразуване и конвертиране в малък OGG формат така или иначе.

Ако се свързвате дистанционно и използвате само командния ред, имаме малко повече затруднения с някои сайтове, тъй като Wget командата може да не вземе същинския файл. Вместо това можем да го изтеглим локално на нашия десктоп и да използваме SCP (защитено копие) команда за копиране през командния ред. Можете да научите повече за scp тук, но засега отворете нов раздел Terminal и напишете:

scp thunder.ogg [email protected]: 

Преименувайте thunder.ogg според случая, но не забравяйте този финал : (командата ще се изпълни без нея, но няма да направи това, което искаме). По подразбиране това ще прехвърли файла в домашната директория на потребителя Pi.

Сега да променим сценария, за да възпроизведем звук. Започнете с импортиране на нови модули:

импортиране на pygame.mixer. от pygame.mixer import Sound. 

Тогава точно след съществуващите декларации за импортиране, ще прекъснем един и същ звук за целите на тестването. Оставете останалата част от вашия код за засичане на движение, както е за сега - той просто няма да стартира, тъй като ще бъде заседнал в този звук игра завинаги.

pygame.init () pygame.mixer.init () # заредете звуков файл в домашната директория на Pi потребител (без mp3) гръм = pygame.mixer. Звук ("/ home / pi / thunder.ogg"), докато True: thunder.play () sleep (10) thunder.stop ()

Обърнете внимание, че когато първоначално опитах този процес, звукът отказа да свири и вместо това просто щракна. Размерът на файла или битрейт е виновникът: той е 24-битов и над 5 MB за 15 секунден клип. Мащабирането на това до 16-битово използване на преобразувателя, към който се свързах по-горе, направи всичко да работи добре, а размерът беше намален до само 260KB!

Ако забележите гадно съскане от високоговорителите си, когато приложението ви Python работи, но не иначе, въведете:

sudo nano /boot/config.txt. 

И добавете този ред в края:

disable_audio_dither = 1. 

Рестартирайте, за да влязат в сила промените. Или не се притеснявайте, тъй като така или иначе ми звучеше като дъжд.

И накрая, нека да променим основния контур за проверка на движението, за да възпроизвежда звука при откриване на движение. Ще използваме 15-секундно закъснение, за да може да се възпроизведе целия цикъл и да действаме като буфер за спам, когато има много непрекъснато движение.

докато True: ако pir.motion_detected: print ("движение открито!") thunder.play () # проверете дали възпроизвеждането е напълно завършен преди възобновяване на откриването на движение, предотвратява "спам" на звуков режим на заспиване (15) thunder.stop () else: print ("Не движение ")

Стартирайте автоматично

Вероятно искаме да настроим това някъде с батерия и без интернет връзка, така че скриптът трябва да се стартира при рестартиране, без да се налага да отваряте команден ред. За целта ще използваме най-простия възможен метод: кронтабът Как да планирате задачи в Linux с Cron и CrontabСпособността за автоматизиране на задачи е една от онези футуристични технологии, които вече са тук. Всеки потребител на Linux може да се възползва от система за планиране и потребителски задачи, благодарение на cron, лесна за използване фонова услуга. Прочетете още . Тип:

sudo crontab -e. 

Ако за първи път стартирате тази команда, тя ще започне с въпроса какъв редактор да използвате. Избрах вариант 2, за нано. Ще се зарежда в избрания от вас редактор, така че добавете следния ред:

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

Това означава, че вашият motion.py скрипт ще се изпълнява при всяко стартиране и го правите безшумно (така че всеки изход от скрипта ще бъде игнориран). Рестартирайте, за да го изпробвате.

Ако нищо не се възпроизвежда, въпреки че има движение или чуете само малко щракване, може да не сте използвали пълния път към файла или файлът ви може да се нуждае от конвертиране в по-нисък битрейт и по-малък размер на файла.

Добавете още звуци

Възпроизвеждането на същия ефект отново и отново е малко скучно, така че нека добавим малко случайност към него. Изтеглете още няколко звука на Хелоуин, като не забравяте да ги намалите до разумен размер и битрейт, след което ги изпратете на вашия Pi с помощта SCP по старому. Добавих три различни вида писъци.

Променете кода така, че вместо да определяте единичен pygame.mixer. Звук променлива, ние всъщност създаваме масив на звуци. Това е просто с Python, просто заобиколете списък със разделени със запетая квадратни скоби, като така:

звуци = [pygame.mixer. Звук ("/ home / pi / thunder.ogg"), pygame.mixer. Звук ("/ home / pi / scary_scream.ogg"), pygame.mixer. Звук ("/ home / pi / girl_scream.ogg"), pygame.mixer. Звук ("/ начало / пи / psycho_scream.ogg")]

След това импортирайте произволната библиотека във вашия файл, като:

импортиране на случаен принцип. 

Сега променете основния контур за определяне на движение, както следва:

докато вярно: ако pir.motion_detected: отпечатате ("движението е засечено!") playSound = random.choice (звуци) playSound.play () # уверете, че възпроизвеждането има е напълно завършен преди възобновяване на откриването на движение, предотвратява "спам" на звуков режим на заспиване (15) playSound.stop () друго: print ("Не движение ")

Обърнете внимание на незначителната промяна: вместо да възпроизвеждаме единичната променлива на звука, ние използваме random.choice функция за избиране на случаен звук от нашия звуков масив, а след това възпроизвеждане на това.

Ето пълния код в случай, че имате проблеми:

импортира пигама. от pygame.mixer import Sound. от gpiozero import MotionSensor. от времето импортиране сън. импортиране на случаен pygame.init () pygame.mixer.init () # заредете звуков файл, същата директория като скрипт (без mp3) звучи = [pygame.mixer. Звук ("/ home / pi / thunder.ogg"), pygame.mixer. Звук ("/ home / pi / scary_scream.ogg"), pygame.mixer. Звук ("/ home / pi / girl_scream.ogg"), pygame.mixer. Звук ("/ home / pi / psycho_scream.ogg")] pir = MotionSensor (4) докато вярно: ако pir.motion_detected: отпечатате ("движението е засечено!") playSound = random.choice (звуци) playSound.play () # уверете, че възпроизвеждането има е напълно завършен преди възобновяване на откриването на движение, предотвратява "спам" на звуков режим на заспиване (15) playSound.stop () друго: print ("Не движение ")

Само с четири проби има голяма вероятност от повторение всеки път, но можете да добавите още проби, ако това е досадно.

Това е! Скрийте го в храстите с някои страшни LED очи на чудовище Как да си направите призрачни светещи очи за Хелоуин за по-малко от 5 долараИскате ли да подправите вашите декорации за Хелоуин тази година? Научете как да направите LED очи за по-малко от $ 5 в този електронен проект за начинаещи. Прочетете още и би трябвало да можете да си спестите малко бонбони, тъй като всички деца бягат да крещят, преди дори да стигнат до вратата. Или отидете да се скриете в килера, защото разгневена мама е без кръв, след като сте накарали малкия Джони да плаче.

Отказ от отговорност: MakeUseOf не носи отговорност за лични наранявания, които могат да възникнат от използването на този проект!

Ще правите ли тази звукова кутия с активирано движение, за да изплашите местните трикове или пречистватели? Настроихте ли някакви страшни ефекти с Raspberry Pi на този Хелоуин? Моля, уведомете ни за това в коментарите по-долу!

Джеймс има бакалавърска степен по изкуствен интелект и е сертифициран като CompTIA A + и Network +. Той е водещ разработчик на MakeUseOf и прекарва свободното си време, играейки VR пейнтбол и настолни игри. Той изгражда компютри още от дете.