Гаражный парктроник

  • Платформа: Iskra JS
  • Язык программирования: JavaScript
  • Тэги: умный гараж, парктроник, Iskra JS.

Что это?

Сколько царапин появляется на автомобиле во время парковки в гараж — проблемы бывают даже у профессионалов. Чтобы избежать лишних трат на кузовной ремонт, мы собрали ультразвуковой парктроник для гаража. Это устройство не требует монтажа в машине, смонтируйте его на стене и включите в розетку.

Что понадобится?

Как собрать?

  1. Возьмите плату Iskra JS и установите её на панель #структора.
  2. Установите Screw Shield, а поверх неё — Troyka Shield.
  3. Подключите ультразвуковой дальномер к Troyka Shield с помощью четырёх проводов «мама-мама» в следующем порядке: пины VCC и GND модуля соедините с аналогичным пинам на Troyka Shield, пин Trig подключите к пину 8, а пин Echo к пину 9.
  4. Подключите к автомобильному динамику провода, идущие в комплекте с ним. Другие концы проводов зачистите.
  5. Возьмите силовой ключ и подключите его к пину 1 на Troyka Shield с помощью трёхпроводного шлейфа «мама-мама». К клеммам модуля подведите провода динамика, как это показано на схеме. Провод «минус» силового ключа подключите к клемме 5V Screw Shield.
  6. Закрепите модуль в панели #структора.
  7. Возьмите светодиодную гирлянду и прикрутите провода питания и управления к Screw Shield: красный провод +12V к клемме VIN, белый провод к клемме GND, а зеленый провод к клемме MOSI.
  8. Парктроник готов. Остаётся поместить его в аккуратный корпус. Возьмите контейнер подходящего размера и сделайте отверстия под провода динамика, гирлянды и питания.
  9. Аналогично соберите корпус для динамика.
  10. Установите устройство в гараже, подключите к питанию 12 Вольт, и паркуйтесь смело!

Алгоритм

  • Измеряем расстояние ультразвуковым датчиком.
  • Если расстояние велико, звуковой и световой индикации нет.
  • С уменьшением расстояния увеличиваем частоту звукового сигнала и постепенно зажигаем всё большее количество сегментов ленты.
  • Если расстояние становится меньше заданного предела, зажигаем всю гирлянду сплошным красным цветом и издаём непрерывный звуковой сигнал.
  • Если расстояние не меняется в течение 10 секунд — выключаем индикацию.

Исходный код

parktronic.js
// настраиваем 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);

Демонстрация работы устройства

Что дальше?

В этот проект легко добавить потенциометр (Troyka-модуль), чтобы регулировать громкость звукового сигнала.

Для полноценного использования парктроника рекомендуем дополнительно приобрести автомобиль или гараж, если их у вас ещё нет.