Реклама

Это снова время года, когда считается социально приемлемым пугать маленьких детей и дарить им конфеты. Ох радость Я здесь, чтобы облегчить вашу работу, показывая вам, как создать простую звуковую коробку Raspberry Pi Halloween для движения. Вот демо:

Вот то, что вам нужно

Вероятно, единственной деталью, которой у вас еще нет, является датчик движения, небольшая и недорогая деталь, которую вы сможете найти в местном микроцентре или на 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]. (введите raspberry в качестве пароля) sudo apt-get update. sudo apt-get установить python-pip. sudo pip установить gpiozero. 

Это устанавливает простую библиотеку для работы с выводами GPIO в Python со многими типами встроенных датчиков и кнопок. Подключите датчик с сигнальным контактом на GPIO4, VCC подключен к 5V и GND подключен к GND. Это может варьироваться в зависимости от вашей конкретной модели, поэтому подтвердите с помощью схемы распиновки.

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

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

С надписью Raspberry Pi чехол

Теперь давайте сделаем наш скрипт обнаружения движения.

nano motion.py. 

Вставить в:

из gpiozero import MotionSensor pir = MotionSensor (4) в то время как True: if pir.motion_detected: print («Обнаружено движение!») else: print («Нет движения»)

Нажмите CTRL-X, затем Y, чтобы сохранить и выйти, затем запустите:

python motion.py. 

Вы должны видеть сообщение «нет движения», повторяющееся на экране, пока вы не махнете рукой перед датчиком, когда оно будет задерживаться на «Обнаружено движение!»

Обнаружено движение в терминале

Если сообщение не меняется вообще, вы неправильно его подключили.

Если вы хотите узнать больше об этой простой библиотеке GPIOZero, взгляните на этот фантастический шпаргалка.

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

Подключите ваш портативный динамик и убедитесь, что он включен, если это необходимо. Мы будем использовать Pygame библиотека для воспроизведения звуков, так что давайте установим ее:

sudo apt-get установить python-pygame. 

Во-первых, нам нужен звуковой файл для воспроизведения. Если вы делаете это из среды рабочего стола, тогда скачайте WAV или же OGG файл откуда-то (я нашел хороший выбор здесь звучит бесплатный Хэллоуин) и поместите его в свой домашний каталог. Я бы посоветовал сначала уменьшить частоту дискретизации и преобразование в небольшой формат OGG так или иначе.

Если вы подключаетесь удаленно и используете только командную строку, у нас есть немного больше проблем с некоторыми сайтами, так как Wget Команда не может получить фактический файл. Вместо этого мы можем загрузить его локально на наш рабочий стол и использовать УПП (безопасное копирование) команда для копирования через командную строку. Вы можете узнать больше о scp здесь, но сейчас откройте новую вкладку «Терминал» и введите:

scp thunder.ogg [email protected]: 

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

Теперь давайте изменим скрипт для воспроизведения звука. Начните с импорта некоторых новых модулей:

импорт pygame.mixer. из pygame.mixer импорт звука. 

Затем, сразу после существующих операторов импорта, мы будем повторять один и тот же звук снова и снова для целей тестирования. Оставьте оставшуюся часть вашего кода, чувствительного к движению, как есть на данный момент - он просто не запустится, так как он застрянет в этом цикле воспроизведения звука навсегда.

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

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

Если вы замечаете неприятный шипение ваших ораторов во время работы приложения Python, но не иначе, введите:

sudo nano /boot/config.txt. 

И добавьте эту строку в конце:

disable_audio_dither = 1. 

Перезапустите, чтобы изменения вступили в силу. Или не беспокойтесь, так как это все равно звучало как дождь для меня.

Наконец, давайте изменим основной цикл проверки движения, чтобы воспроизводить звук при обнаружении движения. Мы будем использовать 15-секундную задержку, чтобы можно было воспроизвести весь цикл и действовать в качестве спам-буфера для случаев, когда есть много безостановочного движения.

в то время как True: если pir.motion_detected: print («Обнаружено движение!») thunder.play () # гарантирует, что воспроизведение полностью завершено до возобновления обнаружения движения, предотвращает «спам» звука sleep (15) thunder.stop () else: print ("No движение ")

Начать автоматически

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

sudo crontab -e. 

Если вы впервые запускаете эту команду, она сначала спросит вас, какой редактор использовать. Я выбрал вариант 2, для нано. Он загрузится в выбранный вами редактор, поэтому добавьте следующую строку:

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

Это означает, что ваш сценарий motion.py будет запускаться при каждом запуске, и будет выполняться без вывода сообщений (поэтому любые выходные данные из сценария будут игнорироваться). Перезагрузитесь, чтобы попробовать.

Если ничего не воспроизводится, несмотря на движение, или вы слышите лишь небольшой щелчок, возможно, вы не указали полный путь к файлу, или ваш файл может нуждаться в преобразовании в более низкий битрейт и меньший размер файла.

Добавить больше звуков

Повторять один и тот же эффект немного скучно, поэтому давайте добавим немного случайности. Загрузите еще несколько звуков Хэллоуина, не забывая уменьшать их до разумного размера и битрейта, а затем отправляйте их своему Пи, используя УПП как прежде. Я добавил три разных типа крика.

Измените код так, чтобы вместо определения одного 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. Звук ("/ home / pi / psycho_scream.ogg")]

Затем импортируйте случайную библиотеку в ваш файл:

импортировать случайным образом. 

Теперь измените основной цикл обнаружения движения следующим образом:

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

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

Вот полный код на случай, если у вас возникли проблемы:

импорт пигмей. из pygame.mixer импорт звука. из gpiozero импорт MotionSensor. от времени ввозят спать. импортировать случайные pygame.init () pygame.mixer.init () # загрузить звуковой файл, тот же каталог, что и скрипт (без mp3s) sounds = [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) в то время как True: если pir.motion_detected: print ("Обнаружено движение!") playSound = random.choice (звуки) playSound.play () # убедитесь, что воспроизведение имеет был полностью завершен до возобновления обнаружения движения, предотвращает "спам" звука сна (15) playSound.stop () else: print ("Нет движение ")

С четырьмя сэмплами высока вероятность повторения каждый раз, но вы можете добавить больше сэмплов, если это раздражает.

Это оно! Спрячь это в кустах с некоторыми страшные светодиодные глаза монстра Как сделать жуткие светящиеся глаза на Хэллоуин дешевле, чем за 5 долларовХотите оживить свои украшения на Хэллоуин в этом году? Узнайте, как сделать светодиодные глаза менее чем за 5 долларов в этом электронном проекте для начинающих. Подробнее и вы сможете сэкономить немного конфет, так как все дети убежали с криками, даже не дойдя до двери. Или спрячьтесь в шкафу, потому что злая мама жаждет крови после того, как вы заставили маленького Джонни плакать.

Отказ от ответственности: MakeUseOf не несет ответственности за любые травмы, которые могут возникнуть в результате использования вами этого проекта!

Будете ли вы делать эту звуковую коробку, активируемую движением, чтобы напугать местных трюков? Вы настроили какие-нибудь страшные эффекты с Raspberry Pi в этот Хэллоуин? Пожалуйста, дайте нам знать об этом в комментариях ниже!

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