Diy

Сыграйте свою собственную мелодию темы, когда входите в комнату с Raspberry Pi

Сыграйте свою собственную мелодию темы, когда входите в комнату с Raspberry Pi

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

Тебе понадобится

Вы, вероятно , уже есть все части , которые вы должны сделать это , кроме геркона, что составляет около $ 2-3, или вы можете получить пакет из 5 чуть более $ 8 здесь .

  • Raspberry Pi (для этого подойдет любая модель).
  • 1 х 220 Ом резистор.
  • 1 х 1 кОм резистор.
  • 3 х 10 кОм резистор.
  • 1 х Магнитный геркон.
  • 1 х светодиодный.
  • 2 х кнопочный переключатель.
  • Макетная.
  • Соединительные кабели.
  • Компьютерный динамик или аналогичный.

Мы будем использовать Raspberry Pi для воспроизведения песни при входе в комнату, и разработаем схему с кнопками на макете, чтобы активировать ее с задержкой, и остановим программу.

Этот проект, хотя и сделан в основном для развлечения, охватывает основы для многих приложений в домашней домашней автоматизации. а также домашней безопасности DIY

Начиная

Давайте начнем с создания нашей схемы. Убедитесь, что ваш Pi отключен, и настройте схему следующим образом:

Fritzing Annotated HQ

Светодиод подключен к контакту 7 на нашем пи. Два кнопочных переключателя подключены к контактам 11 и 13, а геркон подключается к контакту 15. Наше питание подается на контакт 1 (3v3) и контакт 6 (Gnd).

схема выводов

Обязательно проверяйте все в нужном месте.

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

геркон установлен

Подключите выход 3,5 мм вашего Pi к вашей акустической системе. Когда все собрано вместе, оно должно выглядеть примерно так:

вся установка правильная

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

Теперь включите ваш Pi и получите к нему доступ через SSH, чтобы мы могли получить доступ к терминалу. Если вы не уверены, как это сделать, это руководство может помочь вам. Если вы используете Raspberry Pi с монитором, мышью и клавиатурой, пропустите этот шаг и откройте терминал.

Прежде чем начать, стоит проверить, в курсе ли вы. Введите sudo apt-get update в терминал.

Теперь мы можем перейти к тому, чтобы наш Пи говорил с нашей схемой.

Тестирование нашей установки

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

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

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

 nano test.py 

После открытия добавьте этот код в файл и нажмите Ctrl-C для выхода, следуя диалоговому окну сохранения:

 #This code was written for an article on www..com by Ian Buckley. import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7,GPIO.OUT) GPIO.setup(11,GPIO.IN) GPIO.setup(13,GPIO.IN) GPIO.setup(15,GPIO.IN) while True: GPIO.output(7,GPIO.HIGH) if (GPIO.input(11)==1): print("Button on GPIO 11") time.sleep(1) if (GPIO.input(13)==1): print("Button on GPIO 13") time.sleep(1) if (GPIO.input(15)==1): print("Button on GPIO 15") time.sleep(1) GPIO.cleanup() 

Этот код считывает значение кнопок и выводит их на экран при их изменении. Две кнопки имеют резисторы, поэтому при нажатии они сообщают о ВЫСОКОМ. Герконовый переключатель сообщает о ВЫСОКОМ, когда его магнит находится близко.

переключатели

Запустите программу:

 python test.py 

Вы должны увидеть светящийся светодиод и отчет на экране, когда вы нажмете две кнопки и потяните магнит от герконового переключателя. Если вы не получаете отклика при нажатии кнопок, проверьте схему еще раз и убедитесь, что все подключено, как и должно быть. Когда вы закончите тестирование, нажмите CTRL-C, чтобы остановить программу.

тест

Теперь мы можем собрать простую программу для установки, запуска и сброса нашего датчика двери. Мы рассмотрим код по частям и кратко объясним, что делает каждая часть, хотя, если вы хотите увидеть полный код, прокрутите вниз, чтобы увидеть его в полном объеме.

Нам нужно начать с импорта некоторых модулей:

 import Rpi.GPIO as GPIO import pygame.mixer import time 

Мы будем использовать модуль Pygame для воспроизведения нашей музыки. Он входит в стандартную комплектацию Raspbian Jessie и является отличной библиотекой для всего, что вам нужно для создания игр на Python и многих других удивительных проектов. .

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

 def activeSetup(): global active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7,GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0,10): GPIO.output(7,GPIO.HIGH) time.sleep(0.5) GPIO.output(7,GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7,GPIO.HIGH) print("Currently Active") else: return 

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

Вторая функция при вызове проверяет, активна ли система (или активна == 1 ). Если это так, он устанавливает систему в неактивное состояние ( active == 0 ), выключает светодиод и печатает на консоль. Если это не так, он дает вам 10-секундный обратный отсчет, чтобы покинуть комнату, в которой мигает светодиод, перед тем как остаться включенным, чтобы показать, что система активна.

Теперь мы можем определить функцию, которая будет следить за переключателем тростникового магнита:

 def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5) 

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

Внутри цикла while первый оператор if запускает музыку (чего у нас еще нет, но не волнуйтесь, она идет). Это позволяет музыке запускаться только в том случае, если система активна, геркон открыт, и он еще не воспроизводится.

Второй оператор if для нашей кнопки выхода. Если эта кнопка нажата, музыка останавливается и программа закрывается.

Третий оператор if предназначен для переключения, активна система или нет. Функция time.sleep здесь , чтобы предотвратить многократную кнопка читает при нажатии.

Теперь пришло время установить контакты Пи.

 GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT,initial=GPIO.LOW) GPIO.setup(11,GPIO.IN) GPIO.setup(13,GPIO.IN) GPIO.setup(15,GPIO.IN) 

Если вы уже экспериментировали с Пи, это должно быть вам знакомо. Аргумент initial = GPIO.LOW в настройке вывода 7 устанавливает его на низкий уровень, как только он инициализируется.

Теперь мы можем вызвать нашу функцию, которая установит систему как неактивную при запуске программы.

 activeSetup() 

Музыка Маэстро!

На данный момент, мы должны начать думать о музыке, чтобы играть. Вы можете выбрать любой музыкальный файл, который пожелаете, но сейчас мы выберем что-то доступное для всех. Если вы смотрите YouTube, вы, вероятно, уже знакомы с музыкой Кевина МакЛауда. Давайте скачаем фантастическую мелодию под названием «Одноглазый маэстро» . Это, наряду с большей частью музыки на его сайте, лицензировано Creative Commons, и есть много веских причин чтобы использовать контент с этими лицензиями для своих проектов.

Wget

Вернемся к нашему коду, нам нужно запустить микшер Pygame и загрузить нашу мелодию.

 pygame.mixer.init(44100,-16,2,1024) pygame.mixer.music.set_volume(1.0) name = "One-eyed Maestro.mp3" pygame.mixer.music.load(name) print("Loaded track - "+ str(name)) 

Первая строка этого блока запускает микшер Pygame . Последний аргумент в скобках — это буфер, который контролирует задержку воспроизведения звука. Если при воспроизведении музыки вы испытываете прерывистое воспроизведение позже, попробуйте увеличить это число до 4096. Настройки, поскольку они работают без проблем на Pi 3.

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

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

 while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break GPIO.cleanup() 

Цикл while ожидает ввода от любой кнопки и соответственно покидает или изменяет состояние на активное. Если состояние active становится равным 1, то вызывается функция watchDoor, которую мы определили ранее, и при следующем открытии дверцы будет играть наша мелодия. Мы также называем GPIO.cleanup () , чтобы сбросить наши контакты на выходе, который , как правило , хорошая практика для всех программ на Raspberry Pi.

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

 import RPi.GPIO as GPIO import pygame.mixer import time def activeSetup(): global active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7,GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0,10): GPIO.output(7,GPIO.HIGH) time.sleep(0.5) GPIO.output(7,GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7,GPIO.HIGH) print("Currently Active") else: return def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT,initial=GPIO.LOW) GPIO.setup(11,GPIO.IN) GPIO.setup(13,GPIO.IN) GPIO.setup(15,GPIO.IN) activeSetup() pygame.mixer.init(44100,-16,2,1024) pygame.mixer.music.set_volume(1.0) name = "One-eyed Maestro.mp3" pygame.mixer.music.load(name) print("Loaded track - "+ str(name)) while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break GPIO.cleanup() 

Если вы прокрутили здесь, чтобы сразу получить полный код, имейте в виду, что вам все равно нужно будет загрузить музыку на Pi, чтобы она заработала!

Теперь у вас должна быть действующая приветственная домашняя мелодия! Прикрепите тростниковый переключатель к двери и опробуйте его. Неловко танцевать не обязательно, но рекомендуется.

Этот проект охватывал основы для многих форм домашнего мониторинга, безопасности и автоматизации, и, надеюсь, тоже был веселым!

Теперь, когда вы зашли так далеко, зачем останавливаться на достигнутом? Вы можете добавить больше треков и сделать так, чтобы программа выбирала один случайный из списка. Вы можете добавить эстафету: « и другие объекты, которые могут быть активированы при входе. Если у вас есть домашняя музыкальная система, почему бы не создать музыкальную тему для каждой комнаты?

реле света

Будете ли вы создавать свое личное приветственное домашнее сообщение? Вы были изобретательны с герконами в своем доме другими способами? Если это так, оставьте комментарий о том, что вы планируете или уже сделали в разделе комментариев ниже!

Похожие посты
Diy

Вещи, которые вы должны иметь в виду, прежде чем брать ноутбук или смартфон в службу технической поддержки

Diy

Как использовать Arduino для съемки красивой скоростной фотографии

DiyLinux

Пять великолепных расширений Raspberry Pi, которые делают его еще более полезным

Diy

Первые шаги с Arduino: пристальный взгляд на печатную плату и структуру программы