====== Как достать соседа с перфоратором ====== {{ :projects:radiatorbang:radiatorbang_overview.jpg?nolink |}} * Платформы: Iskra JS * Языки программирования: JavaScript * Тэги: перфоратор, сосед, батарея, молоток ===== Что это? ===== Достал сосед с перфоратором? Соберите автоматизированное устройство, которое заставит задуматься шумного умельца: «А не мешаю ли я жить другим?». ===== Что нам понадобится? ===== {{ :projects:radiatorbang:radiatorbang_parts.jpg?nolink |}} - [[amp>product/iskra-js?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Iskra JS]] - [[amp>product/arduino-troyka-shield?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Troyka Shield]] - [[amp>product/piezo-vibration-sensor?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Сенсор вибрации]] - [[amp>product/servo-fs5109m?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Сервопривод FS5109M]] - [[amp>product/servo-bracket-pair?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Соединительные скобы]] - [[amp>product/aluminum-servo-horn?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Втулка на вал сервопривода]] - [[amp>product/usb-cable-micro?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Кабель USB (A — Micro USB)]] - [[amp>product/wall-plug-1a?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Импульсный блок питания (1000 мА)]] - [[amp>product/structor-arduino?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Крепления Arduino и Iskra (#Структор)]] - [[amp>product/structor-big?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Пластины большие (#Структор)]] - [[amp>product/structor-middle?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Пластины средние (#Структор)]] - [[amp>product/structor-rail?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Рейки (#Структор)]] - [[amp>product/nylon-screw-m3x8?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Нейлоновые винты М3×8 (4 шт.)]] - [[amp>product/nylon-standoff-fm-m3x8?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Нейлоновые стойки «мама-папа» М3×8 (4 шт.)]] - [[amp>product/nylon-nut-m3?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | Нейлоновые гайки М3 (4 шт.)]] - Молоток - Хомуты для крепления труб - Железная пластина - Крепёжные элементы: винты, саморезы, гайки ===== Как собрать? ===== - Расширьте одно из отверстий в центре панели структора «крепление Arduino 7×8 шипов», проденьте в него болт и зафиксируйте снизу гайкой. Диаметр болта зависит от выбранного хомута для крепления корпуса к трубе.{{ :projects:radiatorbang:radiatorbang_build1.jpg?nolink |}} - Закрепите платформу Iskra JS на панели #структора «крепление Arduino 7×8 шипов» с помощью акриловых стоек. Стойки закрепите на панели винтами, сверху установите платформу и зафиксируйте гайками.{{ :projects:radiatorbang:radiatorbang_build2.jpg?nolink |}} - Установите Troyka Shield на плату Iskra JS.{{ :projects:radiatorbang:radiatorbang_build3.jpg?nolink |}} - Закрепите модуль сенсора вибрации с помощью саморезов на панели #структора «3×3 шипа».{{ :projects:radiatorbang:radiatorbang_build4.jpg?nolink |}} - Подключите сенсор вибрации к аналоговому пину ''A5'' Troyka Shield.{{ :projects:radiatorbang:radiatorbang_build5.jpg?nolink |}} - Подключите сервопривод через 3-х проводной шлейф к ''8'' пину Troyka Shield.{{ :projects:radiatorbang:radiatorbang_build6.jpg?nolink |}} В итоге должна получиться следующая схема:{{ :projects:radiatorbang:radiatorbang_scheme.png?nolink |}} - Прикрепите боковые панели («пластины 7×6 шипов») к основанию корпуса устройства («крепление Arduino 7×8 шипов») и на одной из них закрепите панельку #структора с датчиком вибрации.{{ :projects:radiatorbang:radiatorbang_build7.jpg?nolink |}} - Используя «лицевую панель Arduino c microUSB-интерфейсом 4×6 шипов» и рейки #структора соберите лицевую часть корпуса.{{ :projects:radiatorbang:radiatorbang_build8.jpg?nolink |}} - Прикрепите заднюю панель («пластина 6×6 шипов») к основанию корпуса. Установите верхнюю панель («пластина 7×8 шипов»), прикрепив её к передней, задней и боковым стенкам корпуса.{{ :projects:radiatorbang:radiatorbang_build9.jpg?nolink |}} - Прикрутите хомут для крепления труб к основанию собранного корпуса.{{ :projects:radiatorbang:radiatorbang_build10.jpg?nolink |}} - Возьмите железную пластину и согните её с двух сторон под 90 градусов в разных направлениях.{{ :projects:radiatorbang:radiatorbang_build11.jpg?nolink |}} - Закрепите два хомута на нижнем основанию железной пластины с помощью болтов.{{ :projects:radiatorbang:radiatorbang_build12.jpg?nolink |}} - Установите сервопривод через соединительную скобу на верхней части пластины.{{ :projects:radiatorbang:radiatorbang_build13.jpg?nolink |}} - C помощью дрели или шуруповёрта просверлите 3 отверстия в молотке и через втулку прикрепите молоток к сервоприводу.{{ :projects:radiatorbang:radiatorbang_build14.jpg?nolink |}} - Должна получится такая конструкция{{ :projects:radiatorbang:radiatorbang_build15.jpg?nolink |}} - Прошейте Iskra JS программой приведённой ниже. Теперь с помощью хомутов крепите устройство к батареи и пусть молот судьбы восстановит справедливость. ===== Алгоритм ===== * После подключения питания считываем данные с сенсора * если значение превысило порог, стучим молотком по батарее * повторяем цикл снова и снова ===== Исходный код ===== // подключаем модуль сервопривода к пину 8 var servo = require('@amperka/servo').connect(P8); // задаем количество и длительность каждого стука молотка (нот мелодии) var massMelody =[400, 400, 400, 150, 150, 400, 150, 150, 150, 400, 150]; // объявляем вспомогательные переменные var len = massMelody.length; var servoWork = false; var count = 0; // читаем значения с сенсора вибрации каждые 10 миллисекунд setInterval(function() { // создаём переменную и записываем в неё текущее значения сенсора вибрации var sensorVal = analogRead(A5); // если значение сенсора вибрации превысило допустимый порог if (sensorVal > 0.01) { // вызываем функцию стука молотком по батареи servoBang(); } }, 10); function servoBang() { // если сервопривод еще не отбил предыдущий запрос (стук), выходим из функции if (servoWork === true) { return; } // переходим в рабочий режим молотка servoWork = true; // проверяем все ли ноты мы отыграли if (count < len) { setTimeout(function() { // в зависимости от длительности текущей ноты опускаем молоток вниз servo.write(60); print('DOWN'); // по истечении 150 миллисекунд поднимаем молоток вверх setTimeout(function() { servo.write(30); print('UP'); // увеличиваем счётчик нот на единицу count++; print(count); // переходим в режим ожидания молотка новой команды servoWork = false; // вызываем функцию следующего стука servoBang(); // если вся мелодия отыграла по батареи if (count === len) { // через 300 миллисекунд переходим в режим ожидания новой команды setTimeout(function() { servoWork = false; count = 0; print('End'); }, 300); } }, 150); }, massMelody[count]); } } ===== Демонстрация работы устройства ===== {{youtube>VAcjZOS9ee8?large}} ===== Что дальше? ===== Время проведения ремонтных работ строго регламентировано. Оптимизируйте автоответчик, добавив в него [[amp>product/troyka-rtc?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | часы реального времени (Troyka-модуль)]], задайте график «тихих часов» и наслаждайтесь законной тишиной. Ваш сосед не фанат перфоратора, а любитель шумных тусовок? Добавив в устройство [[amp>product/troyka-sound-loudness-sensor?utm_source=proj&utm_campaign=radiatorbang&utm_medium=wiki | датчик шума (Troyka-модуль)]], вы сможете передать привет по батарее и ему.