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

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

Для этого проекта используется та же схема. Вот демо.

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

Скорее всего, вы уже будете владеть всеми частями, необходимыми для этого, за исключением герконового переключателя, который стоит около 2–3 долл. США, или вы можете получить пакет из 5 за чуть более 8 долл. Здесь.

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

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

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

а также DIY домашней безопасности

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

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

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

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

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

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

это может помочь вам начать.

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

nano test.py

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

#This code was written for an article on www.MakeUseOf.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 и многих других потрясающих проектов.

,

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

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

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

Вторая функция при вызове проверяет, активна ли система (или активного == 1). Если это так, система становится неактивной (Активный == 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)

Если вы уже проводили какие-либо эксперименты с Пи, это должно быть вам знакомо. начальное = 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 Программа, вам нужно будет указать полный путь в скобках при определении переменной имени.

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

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 ожидает ввода от любой из кнопок и соответственно покидает или изменяет состояние на активное. Если активное состояние становится равным 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, чтобы она заработала!

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

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

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

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

реле света

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

Ссылка на основную публикацию
Adblock
detector