====== Гаражный парктроник ====== {{ :projects:parktronic:160510_lin_0286.jpg?nolink&700 |}} * Платформа: Iskra JS * Язык программирования: JavaScript * Тэги: умный гараж, парктроник, Iskra JS. ===== Что это? ===== Сколько царапин появляется на автомобиле во время парковки в гараж — проблемы бывают даже у профессионалов. Чтобы избежать лишних трат на кузовной ремонт, мы собрали ультразвуковой парктроник для гаража. Это устройство не требует монтажа в машине, смонтируйте его на стене и включите в розетку. ===== Что понадобится? ===== {{ :projects:parktronic:party2.png?nolink&700 |}} - [[amp>product/iskra-js?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Iskra JS]] - [[amp>product/structor-arduino?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Крепления Arduino и Iskra (#Структор)]] - [[amp>product/arduino-screw-shield?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Screw Shield]] - [[amp>product/arduino-troyka-shield?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Troyka Shield]] - [[amp>product/troyka-mosfet-n-channel-v3?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Силовой ключ (Troyka-модуль)]] - [[amp>product/structor-troyka?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Крепления Troyka (#Структор)]] - [[amp>product/hc-sr04-ultrasonic-sensor-distance-module?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Ультразвуковой дальномер HC-SR04]] - [[amp>product/led-module-rgb-ws2811-20x3pcs-screw-mountable?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Цветные адресуемые светодиодные кластеры WS2811]] - [[amp>product/power-supply-adapter-robiton-tn1000s?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Импульсный блок питания (1000 мА)]] - [[amp>collection/enclosures?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | Контейнеры для корпуса устройства]] - Автомобильный динамик - Винтовые клеммы ===== Как собрать? ===== - Возьмите плату Iskra JS и установите её на панель #структора.{{ :projects:parktronic:160510_lin_0303.jpg?nolink&700 |}} - Установите Screw Shield, а поверх неё — Troyka Shield.{{ :projects:parktronic:160510_lin_0300.jpg?nolink&700 |}} - Подключите ультразвуковой дальномер к Troyka Shield с помощью четырёх проводов «мама-мама» в следующем порядке: пины ''VCC'' и ''GND'' модуля соедините с аналогичным пинам на Troyka Shield, пин ''Trig'' подключите к пину ''8'', а пин ''Echo'' к пину ''9''.{{ :projects:parktronic:sonar.png?nolink |}}{{ :projects:parktronic:160510_lin_0298.jpg?nolink&700 |}} - Подключите к автомобильному динамику провода, идущие в комплекте с ним. Другие концы проводов зачистите.{{ :projects:parktronic:160510_lin_0295.jpg?nolink&700 |}} - Возьмите силовой ключ и подключите его к пину ''1'' на Troyka Shield с помощью трёхпроводного шлейфа «мама-мама». К клеммам модуля подведите провода динамика, как это показано на схеме. Провод «минус» силового ключа подключите к клемме ''5V'' Screw Shield.{{ :projects:parktronic:speaker_sonar.png?nolink |}} - Закрепите модуль в панели #структора.{{ :projects:parktronic:160510_lin_0294.jpg?nolink&700 |}} - Возьмите светодиодную гирлянду и прикрутите провода питания и управления к Screw Shield: красный провод ''+12V'' к клемме ''VIN'', белый провод к клемме ''GND'', а зеленый провод к клемме ''MOSI''.{{ :projects:parktronic:160510_lin_0291.jpg?nolink&700 |}} - Парктроник готов. Остаётся поместить его в аккуратный корпус. Возьмите контейнер подходящего размера и сделайте отверстия под провода динамика, гирлянды и питания.{{ :projects:parktronic:160510_lin_0289.jpg?nolink&700 |}} - Аналогично соберите корпус для динамика.{{ :projects:parktronic:160510_lin_0288.jpg?nolink&700 |}} - Установите устройство в гараже, подключите к питанию 12 Вольт, и паркуйтесь смело!{{ :projects:parktronic:160510_lin_0286.jpg?nolink&700 |}} ===== Алгоритм ===== * Измеряем расстояние ультразвуковым датчиком. * Если расстояние велико, звуковой и световой индикации нет. * С уменьшением расстояния увеличиваем частоту звукового сигнала и постепенно зажигаем всё большее количество сегментов ленты. * Если расстояние становится меньше заданного предела, зажигаем всю гирлянду сплошным красным цветом и издаём непрерывный звуковой сигнал. * Если расстояние не меняется в течение 10 секунд — выключаем индикацию. ===== Исходный код ===== // настраиваем SPI для работы со светодиодной гирляндой SPI2.setup({baud:3200000, mosi:B15, sck:B13, miso:B14}); // подключаем ультразвуковой дальномер var sonic = require('@amperka/ultrasonic').connect({ trigPin: P8, echoPin: P9 }); // подключаем динамик var speaker = require('@amperka/buzzer').connect(P1).frequency(440); var numberLed = 20; var halfNumberLed = numberLed / 2; var ledStrip = require('@amperka/led-strip').connect(SPI2, numberLed, 'RBG'); // задаём минимальное и максимально расстояние индикации var distance = {max: 50, min: 10}; // задаём используемые цвета var r = new Array(1, 0, 0); // красный цвет var g = new Array(0, 0, 1); // зеленый цвет var y = new Array(1, 0, 1); // желтый цвет var colors = new Array(r, r, y, y, y, g, g, g, g, g); // устанавливаем шаг изменения гирлянды var step = (distance.max - distance.min) / halfNumberLed; // создаём функцию управления гирляндой var light = function(cm) { // если расстояние больше максимального - прекращаем индикацию if (cm > distance.max) { ledStrip.clear(); } else { // для двух половин гирлянды задаем цвета в зависимости от расстояния for (var i = numberLed - 1, j = 0; j < halfNumberLed; --i, ++j) { if (cm <= distance.min) { ledStrip.putColor(i, {red: 1, green: 0, blue: 0}); ledStrip.putColor(j, {red: 1, green: 0, blue: 0}); } else if(cm - distance.min < j * step) { ledStrip.putColor(i, colors[j]); ledStrip.putColor(j, colors[j]); } } // все изменения цвета в гирлянде необходимо применить ledStrip.apply(); } }; // функция управления звуковой индикацией var sound = function(cm) { // задаем новый интервал звучания в зависимости от расстояния if (cm <= distance.min) { speaker.turnOn(); } else if (cm > distance.max) { speaker.turnOff(); } else { // вычисляем период звучания сигнала в зависимости от текущего расстояния var period = Math.round((cm - distance.min) / step + 1) / 10; speaker.beep(period, period); } }; // запрашиваем расстояние в сантиметрах каждые 100 мс setInterval(function() { sonic.ping(function(err, value) { // если измерения не вызвали ошибку, управляем индикацией if (!err) { light(value); sound(value); } }, 'cm'); }, 100); ===== Демонстрация работы устройства ====== {{youtube>POsyhLavV7k?large}} ===== Что дальше? ===== В этот проект легко добавить [[amp>product/troyka-potentiometer?utm_source=proj&utm_campaign=parktronic&utm_medium=wiki | потенциометр (Troyka-модуль)]], чтобы регулировать громкость звукового сигнала. Для полноценного использования парктроника рекомендуем дополнительно приобрести автомобиль или гараж, если их у вас ещё нет.