Умная входная система в стиле Ситхов: Imperial March при входе в дом
Компоненты и расходные материалы
- Particle Photon — 2 шт.
- Arduino UNO — 1 шт.
- Adafruit Music Maker MP3 Shield — 1 шт.
- Adafruit PIR Motion Sensor — 1 шт.
- Светодиоды — 2 шт.
- Резисторы 220 Ом — 2 шт.
- Перемычки — 1 комплект
- Динамик 3Вт, 4 Ом — 1 шт.
- Беспаечные платы — 2 шт.
- USB Micro B зарядное устройство — 1 шт.
- USB-A — B кабель — 1 шт.
- Пинхейдер 36 позиций — 1 шт.
Необходимые инструменты
- Паяльник
Программное обеспечение и онлайн-сервисы
- Particle Cloud
О проекте
Моя дочь — фанат «Звёздных войн» (даже не видела фильмов). Она заставляла меня играть «Имперский марш» (тема Дарт Вейдера) в её костюме, чтобы она могла в 들어오ть в комнату с пафосом. Так родилась идея: автоматически определять приход домой и включать Имперский марш перед входом в дом.
Проект простой — отлично для новичков. Интересен тем, что впервые использую паттерн publish/subscribe через облако и интегрирую разные микроконтроллеры в одном проекте. Photon прост для облачных решений, а Arduino предлагает огромный выбор периферии. Их легкое объединение позволило быстро реализовать идею.
Шаг 1: Сборка датчика (сенсора)
Время: 10 мин
Детали: Photon, резистор 220 Ом, светодиод, PIR-датчик, макетная плата, перемычки, USB Micro B кабель
Подключите светодиод к Photon (анод — D0, катод через резистор на GND). Светодиод опционален, но показывает состояние датчика.
Подключите PIR-датчик: GND → GND Photon, 5V → Vin Photon, сигнал → D7 Photon. Важно: проверьте даташит вашего датчика — порядок пинов может отличаться. Сигнальный пин должен выдавать 3.3V (совместимо с Photon).
Питание через USB. Загрузите код сенсора (ниже) через Particle IDE. При движении перед датчиком светодиод загорится, в консоли Particle Dashboard появится событие.
Шаг 2: Сборка триггера (приёмника)
Время: 10 мин
Детали: Photon, резистор 220 Ом, светодиод, макетная плата, перемычки male/female
Светодиод так же (D0). Подключите male-перемычки к Vin, GND и D7 Photon. D7 пойдёт на GPIO Music Maker Shield, Vin/GND — для питания Photon от Arduino.
Загрузите код триггера (ниже) через Particle IDE (выберите правильное устройство, так как теперь их два).
Шаг 3: Сборка Arduino с Music Maker Shield
Время: 20 мин
Детали: Arduino Uno, Adafruit Music Maker Shield, Photon, резистор 220 Ом, светодиод, мини-макетная плата, перемычки, USB кабель
Инструменты: паяльник
В шилт входят пинхейдеры — их нужно припаять. Я добавил male-хедеры сверху для GPIO и питания от Photon. (Female-хедеры были бы удобнее для male/male перемычек, но были только male).
Подключите: D7 Photon → GPIO7 шилда, Vin Photon → 5V шилда, GND Photon → GND шилда. Динамик клеммником к выходу шилда (я использовал один динамик из сломанной игрушки).
Подключите Arduino к ПК, загрузите скетч (ниже). Готово! Пройдите перед датчиком и ждите музыку.
О коде
Первый опыт с publish/subscribe на Photon. Очень просто.
В коде сенсора: при HIGH на пине PIR публикуется событие в Particle Cloud:
published = Particle.publish("motion-detected", NULL, 60, PRIVATE);
Изначально публиковал публично — получал ложные срабатывания от чужих устройств. Сделал приватным (PRIVATE) и в подписке указал MY_DEVICES:
Particle.subscribe("motion", soundAlarm, MY_DEVICES);
Код триггера просто обрабатывает событие: зажигает светодиод, поднимает HIGH на GPIO7 на 2 секунды.
Скетч Arduino ждёт HIGH на GPIO7, затем ждёт 60 секунд (время припарковаться, собрать вещи, войти в дом) и проигрывает MP3 (track001.mp3) с SD-карты.
Развёртывание проекта
Сенсор установлен в гараже на полке рядом с машиной. Триггер + Arduino + Music Maker + динамик — на кухонном столе (где обычно сидит дочь). Оба места с доступом к розеткам для питания.
Код
Код сенсора (C/C++)
// Пин светодиода D0
int led = D0;
// Пин PIR датчика D6
int pir = D6;
// Флаг успешной публикации
bool published;
void setup() {
pinMode(led, OUTPUT);
pinMode(pir, INPUT);
digitalWrite(led, LOW);
}
void loop() {
if (digitalRead(pir) == HIGH) { // движение обнаружено
digitalWrite(led, HIGH);
published = Particle.publish("motion-detected", NULL, 60, PRIVATE);
if (!published) { // если публикация не удалась
for (int i = 0; i < 10; i++) { // мигание 10 раз
digitalWrite(led, LOW); delay(500);
digitalWrite(led, HIGH); delay(500);
}
}
} else {
digitalWrite(led, LOW); // нет движения
}
delay(2000); // пауза 2 сек перед следующим чтением
}
Код триггера (C/C++)
int led = D0;
int trigger = D7;
void soundAlarm(const char *event, const char *data) {
digitalWrite(led, HIGH);
digitalWrite(trigger, HIGH);
delay(2000);
digitalWrite(trigger, LOW);
digitalWrite(led, LOW);
}
void setup() {
Particle.subscribe("motion", soundAlarm, MY_DEVICES);
pinMode(led, OUTPUT);
pinMode(trigger, OUTPUT);
}
void loop() { }
Код Arduino + Music Maker Shield (Arduino)
/************************************************************
* Проигрывание MP3 с SD-карты через Adafruit Music Maker Shield
* по триггеру от Photon на GPIO пине шилда.
* Библиотека и туториал Adafruit:
* https://learn.adafruit.com/adafruit-music-maker-shield-vs1053-mp3-wav-wave-ogg-vorbis-player/pinouts
************************************************************/
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>
// Пины Music Maker Shield
#define SHIELD_RESET -1 // не используется
#define SHIELD_CS 7 // VS1053 chip select
#define SHIELD_DCS 6 // VS1053 data/command select
#define CARDCS 4 // SD card chip select
#define DREQ 3 // VS1053 data request (interrupt pin)
Adafruit_VS1053_FilePlayer musicPlayer =
Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
int photonPin = 7; // GPIO пин, к которому подключён Photon
void setup() {
musicPlayer.begin();
SD.begin(CARDCS);
musicPlayer.setVolume(1, 1); // меньшие числа = громче
// musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT); // фоновое воспроизведение не используется
musicPlayer.GPIO_pinMode(photonPin, INPUT);
}
void loop() {
if (musicPlayer.GPIO_digitalRead(photonPin) == HIGH) {
delay(60000); // ждём 60 сек перед воспроизведением
musicPlayer.playFullFile("track001.mp3"); // блокирующее воспроизведение
}
delay(500);
}
Схемы
Fritzing-файлы: sensor.fzz (сенсор), trigger.fzz (триггер).
Производственный процесс
- Основные компоненты станка с ЧПУ: подробное объяснение
- Ключевые элементы эффективного кризисного коммуникационного менеджмента
- Будущее производства: тренды, таланты и инновации
- Annoy-O-Bug: компактная звуко-световая шутка на ATtiny85
- Нанотехнологии: новый рубеж в безопасности IoT
- Ключевые компоненты надежной системы сжатого воздуха
- Как модернизация крана трансформирует ключевые компоненты для пиковой производительности
- Техник завтрашнего дня: навыки, инструменты и роли в цифровом заводе
- Ключевые компоненты двухколонных ленточных пилорам
- Мастерство проектирования механически обрабатываемых деталей: всеобъемлющее руководство