Annoy-O-Bug: компактная звуко-световая шутка на ATtiny85
Компоненты и материалы
| Печатная плата OSH Park (custom) | × | 1 |
| Пьезоизлучатель (Buzzer) | × | 1 |
| Светодиод (LED) | × | 1 |
| Резистор 330 Ом | × | 1 |
| Элемент питания CR2032 | × | 1 |
| Крепление для CR2032 | × | 1 |
| Микроконтроллер ATtiny85 | × | 1 |
| DIP-разъем 8 pin | × | 1 |
| Arduino UNO (для прошивки ATtiny) | × | 1 |
| Конденсатор 10 мкФ (для прошивки) | × | 1 |
Необходимые инструменты
- Паяльник
Приложения и сервисы
- Autodesk circuits.io
О проекте
Устройство достаточно мало, чтобы поместиться в банку от мятных конфет, но достаточно громко, чтобы его слышали по всему дому. Стоимость — всего несколько долларов за единицу. Идеальная комбинация для хорошей шутки!
Шаг 1: Схема

Печатную плату можно заказать на OSH Park (ссылка в разделе компонентов). Обязательно использовать ATtiny или эту плату не требуется — схему можно собрать на макетной плате за ~20 минут. Если важны компактность — лучше использовать печатную плату. На фото показана версия на макетной плате. ATtiny85 можно заменить на любой другой микроконтроллер.
Шаг 2: Сборка печатной платы

Плата простая для пайки. Важно: пьезоизлучатель и светодиод полярны. Длинный вывод пьезоизлучателя в круглый контактный площадку, короткий — в квадратный. Длинный вывод светодиода — в отверстие напротив белого прямоугольника. Сложнее всего припаять держатель батареи: сначала припаяйте все компоненты на лицевой стороне, затем заземляющий контакт держателя — через отверстие в центре DIP-разъема.
На плате есть белый прямоугольник для надписи — можно оставить сообщение для «жертвы» :). Хотите изменить плату? Скопируйте мой дизайн в circuits.io: https://circuits.io/circuits/2677013-annoying-circuit.
Шаг 3: Программное обеспечение
//Code produced by Alex Wulff: https://www.AlexWulff.com #define BUZZ 0 #define LED 1 #define BEEP_DELAY 30 #define LIGHT_DELAY 200 #define INITIAL 5000 //Значение в миллисекундах. //10,000 ms дает общее время последовательности 46.5 сек //20,000 ms дает общее время последовательности 91.5 сек //30,000 ms дает общее время последовательности 136.5 сек //Понятен принцип: каждые 10 сек добавляет 45 сек к общему времени. void setup() { pinMode(BUZZ, OUTPUT); pinMode(LED, OUTPUT); //Мигание светодиодом для проверки работоспособности for (int i = 0; i < 5; i++) { digitalWrite(LED, HIGH); delay(LIGHT_DELAY); digitalWrite(LED, LOW); delay(LIGHT_DELAY); } } void loop() { //50 итераций с уменьшением задержки по фактору 1/i for (int i = 1; i < 50; i++) { digitalWrite(BUZZ, HIGH); digitalWrite(LED, HIGH); delay(BEEP_DELAY); digitalWrite(BUZZ, LOW); digitalWrite(LED, LOW); delay(INITIAL/i); } }
Пример программы демонстрирует возможности устройства. Интервал между сигналами постепенно уменьшается, что становится очень раздражающим! Изменив INITIAL на большее значение, можно растянуть работу на неделю с ускорением каждый день. Можно запрограммировать случайные писки/мигания или мелодию в такт светодиоду — вариантов бесконечно много.
Создал симуляцию в Autodesk Circuits для тестирования скетча без сборки: https://circuits.io/circuits/4778452-the-annoy-o-bug-a-chirping-light-up-throwie/.
Шаг 4: Прошивка ATtiny85
Прошить ATtiny можно через Arduino Uno (или любую плату на ATmega) и конденсатор 10 мкФ. Инструкция: https://www.hackster.io/arjun/programming-attiny85-with-arduino-uno-afb829.
Осторожно извлекайте ATtiny из разъема — удобнее использовать плоскогубцы.
Шаг 5: Размещение
Размещение — половина удовольствия. При стоимости менее $5 за штуку можно сделать много устройств. Они помещаются в цветочные горшки, коробки, подушки, внутри ламп, на столах — куда угодно! С watchdog-таймером для сна ATtiny устройство может работать от элемента CR2032 более года.
Вот и всё! Нужна помощь с кодом или сборкой — пишите в комментариях.
Другие мои проекты: www.AlexWulff.com и https://www.hackster.io/AlexWulff.
Важное замечание: из-за природы проекта звуки могут быть приняты за угрозу взрыва. Не размещайте устройства в публичных местах, чтобы избежать проблем!
Код
Annoying Circuit (Arduino)
//Code produced by Alex Wulff: https://www.AlexWulff.com #define BUZZ 0 #define LED 1 #define INITIAL 5000 //10,000 ms yields a total sequence time of 46.5 Seconds //20,000 ms yields a total sequence time of 91.5 Seconds //30,000 ms yields a total sequence time of 136.5 Seconds //You get the pattern. Each 10 seconds yields another 45 //seconds of total time on the sequence. void setup() { pinMode(BUZZ, OUTPUT); pinMode(LED, OUTPUT); for (int i = 0; i < 5; i++) { digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); } } void loop() { for (int i = 1; i < 50; i++) { digitalWrite(BUZZ, HIGH); digitalWrite(LED, HIGH); delay(30); digitalWrite(0, LOW); digitalWrite(LED, LOW); delay(INITIAL/i); } }
Схемы
PCB Design
Производственный процесс
- Drone Pi: двухрежимный квадрокоптер Multiwii + Raspberry Pi для управления со смартфона и пульта
- Основные компоненты станка с ЧПУ: подробное объяснение
- Ключевые элементы эффективного кризисного коммуникационного менеджмента
- Набор MOSMusic: MOSFET, Arduino и управление светом по музыке
- Мастерство кросс-референсирования: руководство к точности и экономии затрат
- Ключевые компоненты надежной системы сжатого воздуха
- Как модернизация крана трансформирует ключевые компоненты для пиковой производительности
- Ключевые компоненты двухколонных ленточных пилорам
- Мастерство проектирования механически обрабатываемых деталей: всеобъемлющее руководство
- Рыночные тренды в аэрокосмической промышленности и точных авиационных компонентах