В этой публикации пойдёт речь о создании простого парктроника на базе Arduino.

Немного теории. Парктроник или Парковочный радар это устройство предназначенное для отслеживания расстояния между автомобилем и каким — то объектом, как правило парктроники устанавливают с задней части машины.

Даже несмотря на цену ~1936 рублей я решил смастерить свой вариант этого устройства. Начать я решил с малого, и создал наверное самый простой парктроник из всех возможных.

И так от теории к практике, для сборки устройства нам понадобится, 3 светодиода (я взял разных цветов, так проще и нагляднее); Пьезоизлучатель с генератором*; Ультразвуковой дальномер HC-SR04; Резистор на 220 ом и мощностью 0.25 ватта (хотя уместны и другие, большая мощность тут не к чему) и Arduino любой модели.

Сборка.

  1. GND (-) светодиодов и пьезоизлучателя соеденяем вместе и подключаем в пин GND через резистор.
  2. VCC (+) у дальномера соеденяем с пином +5V Arduino, Trig в 10, Echo в 11, а куда GND думаю уже ясно.

Хорошо, схему мы собрали, что дальше? А дальше пишем программу, для тех кто не знает Arduino программируется на ЯП Wiring, это упрощённый C++, в качестве IDE проще всего использовать Arduino IDE.

Вот программа:

int trigPin = 10; // номер пина Trig
int echoPin = 11; // номер пина Echo
int rLed = 12; // номер пина к которому подключён красный LED
int yLed = 8; // номер пина к которому подключён жёлтый LED
int bLed = 9; // номер пина к которому подключён синий LED
int buzz = 7; // номер пина к которому подключён пьезоизлучатель

void setup() {
  // Настраиваем пины
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);
  pinMode(bLed, OUTPUT); 
  pinMode(yLed, OUTPUT); 
  pinMode(rLed, OUTPUT); 
  pinMode(buzz, OUTPUT);

}

void loop() {
  int duration, distance;
  // для большей точности установим значение LOW на пине Trig 
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  // Теперь установим высокий уровень на пине Trig
  digitalWrite(trigPin, HIGH);
  // Подождем 10 ?s 
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW); 
  // Узнаем длительность высокого сигнала на пине Echo
  duration = pulseIn(echoPin, HIGH); 
  // Рассчитаем расстояние
  distance = duration / 58;

  if (distance > 20) { // Если расстояние > 20 см то
    digitalWrite(bLed, HIGH); // Включаем только синий LED
    digitalWrite(yLed, LOW);
    digitalWrite(rLed, LOW);
    digitalWrite(buzz, LOW);
  }

  else if (distance <= 20 && distance > 10) { // Расстояние от 
    // 20 до 10 
    digitalWrite(yLed, HIGH); // Включаем только жёлтый LED
    digitalWrite(bLed, LOW);
    digitalWrite(rLed, LOW);
    digitalWrite(buzz, LOW);
  }

  else if (distance < 10) { // Расстояние < 10
    digitalWrite(rLed, HIGH); // Включаем только красный LED
    digitalWrite(yLed, LOW);
    digitalWrite(bLed, LOW);
    digitalWrite(buzz, HIGH); // И пьезоизлучатель
  }
  
  delay(100); // Ждём 100 милисекунд

}

Я не собирал готовое устройство потому что сейчас работаю на новой моделью ПОН-2 с четырёхразрядным семисегментным индикатором.

Немного фото, видео, и картинок:

* Пьезозлучатель с генератором выглядит примерно так:

image

Шаг 1:

Шаг 1

Шаг 2:

Шаг 2

Работа устройства в картинках:

image

image

image

Кусок кода программы и информацию о дальномере HC-SR04 я получил с этого сайта

Комментарии (18)


  1. unwrecker
    30.08.2018 13:10

    Единственное чего ради стоит делать собственный парктроник — это минимальное рабочее расстояние. У 99.9% продающихся это 30см. Минимум что видел у серийных: 16.5см, но требуют муторной калибровки.

    А что у этого с данным параметром? И годится датчик для установки в бампер? С виду неатмосферостойкий какой-то.


    1. AlexanderS
      30.08.2018 13:18

      В даташите заявлено от 2 см до 4 метров. Но у него эффективный угол меньше 15 градусов. Причём какие реальные углы по горизонтали и вертикали — это надо ещё выяснять)


  1. AlexanderS
    30.08.2018 13:14
    +1

    Я с этим сонаром игрался, когда игрушку собирал. Да и потом пару раз ещё применял на других машинках. Но то ж — игрушка, а в вашем случае — это уже серьёзное применение в реальных условиях. А реальные условия это: эксплуатация в агрессивной среде, наличие помех и переотражений и, как следствие, ложные срабатывания.
    Поэтому я бы советовал принять к сведению:
    — защищать электронику — пропаивать китайскую пайку, лачить платы и убирать в нормальные корпуса;
    — усреднять результаты измерений перед выводом пользователю (например, если будет одно неверное измерение, то оно может сгладиться девятью другими);
    — организовать диагностику и парирование системных сбоев (например, если один из четырёх датчиков начал врать или вообще перестал выдавать показания, а у других трёх показания в ±10% интервале, то пользователю надо об этом как-то сообщить, а если все четыре показывают разные расстояния выходя за 20% интервал, то выводить вообще ничего нельзя).


  1. Akon32
    30.08.2018 13:22
    +2

    Вы его на машину ставили и практике испытывали? Если нет — это не парктроник, а настольное ардуино с сонаром.


    В парктрониках обычно от 4х датчиков, и суммарно получается более широкая диаграмма направленности (захватывается немного бокового пространства). За ~1200-1500 рублей в комлекте будет ещё и цифровой экран.


  1. sav13
    30.08.2018 13:52
    +1

    А смысл в парктронике с нулевой влагозащищенностью?
    А сенсоры влагозащищенные делают данную поделку экономически нецелесообразной

    Гораздо интереснее был бы проект — подключение датчиков от парктроника к ардуино. А то бывают такие в хозяйстве при замене бамперов, например


  1. MedicusAmicus
    30.08.2018 14:57

    Гораздо эффективнее было бы лазерный дальномер применить.
    С использованными автором "сонарами" в коридоре сложной формы ничего надежного не вышло (датчик присутствия делал). Даже со сглаживанием ошибочных результатов и попытками сузить сектор локации.


  1. VirtualHunter
    30.08.2018 15:34
    +1

    Который раз вижу статью, как кто-нибудь еще раз делает парктроник из HC-SR04. Не дает покоя два вопроса — почему никто не проверяет, а не написана ли уже такая статья раньше? И второй: кто-нибудь себе представляет датчик HC-SR04 в реальных условиях на заднем бампере машины?

    И кстати, есть защищенная версия — JSN-SR04T, стоит дороже, но ее можно использовать для разных DIY в уличных условиях, заявлено IP66
    image


    1. Centrix2132 Автор
      30.08.2018 15:37

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


    1. Mogwaika
      30.08.2018 17:37

      Ну почему же, очень даже представляю Креосана или Цыгана на драндулете с датчиками на скотче)))


    1. wormball
      31.08.2018 01:13

      А я вот потратил год жизни на изобретение аналогичного девайса. Что характерно, даже искал, в том числе на алиэкспрессе, но упомянутый девайс всякий раз ловко уходил от моего взора.

      Ну ничего, заказал на алиэкспрессе три штуки (там разные модели), посмотрим, что это такое.

      И у меня по меньшей мере одно преимущество — не используется подстроечный трансформатор. Ну и может ловить более чем одно эхо.


  1. Serge78rus
    30.08.2018 16:39
    +1

    для тех кто не знает Arduino программируется на ЯП Wiring, это упрощённый C++
    Сообщите эту новость разработчикам компилятора g++, который используется оболочкой Arduino IDE «под капотом» для компиляции проектов. Они точно не знают, что написали компилятор не для C++, а для какого-то Wiring.


  1. Serge78rus
    30.08.2018 17:30
    +2

    1. На рисунке под надписью «Шаг 1:» Вы неверно указали полярность светодиодов.
    2. Во фрагменте кода программы:

      if (distance > 20) { // Если расстояние > 20 см то
        digitalWrite(bLed, HIGH); // Включаем только синий LED
        digitalWrite(yLed, LOW);
        digitalWrite(rLed, LOW);
        digitalWrite(buzz, LOW);
      }
    
      else if (distance <= 20 && distance > 10) { // Расстояние от 
        // 20 до 10 
        digitalWrite(yLed, HIGH); // Включаем только жёлтый LED
        digitalWrite(bLed, LOW);
        digitalWrite(rLed, LOW);
        digitalWrite(buzz, LOW);
      }
    
      else if (distance < 10) { // Расстояние < 10
        digitalWrite(rLed, HIGH); // Включаем только красный LED
        digitalWrite(yLed, LOW);
        digitalWrite(bLed, LOW);
        digitalWrite(buzz, HIGH); // И пьезоизлучатель
      }
    

    у Вас присутствуют лишние проверки в конструкциях else if.
    3. При значении переменной distance 10 ни одна ветвь if будет выполнена


  1. AlexanderS
    30.08.2018 19:22

    А может у него полярность верная, а накосячено с общим пином — не земля, а питание должно быть.


    1. AlexanderS
      30.08.2018 19:28

      Виноват. Если смотреть по коду, то светики включаются высоким уровнем. Значит с полярностью накосячено. Причем не только на картинке, но и в тексте: «GND (-) светодиодов и пьезоизлучателя соеденяем вместе и подключаем в пин GND через резистор».


  1. MonkeyD
    30.08.2018 21:00

    Если честно, по мне это игрушки на уровне блинк. Модули УЗ из китая крайне плохи в производстве и использовании. У них маленькое расстояние, высокий процент ложного срабатывания и так далее. Для игрушек, роботов, да тьма, даже для квадриков по хате (ином помещении сойдет), но парктроник, вещь из-за ошибки которой можно не кисло попасть на бабки. Я бы не стал. Но это только мое мнение, я бы предложил еще десяток возможных реализаций подобных идей (без ардуины причем).


    1. AlexanderS
      30.08.2018 22:26

      Статья просто проста и не воспринимается серьёзно хотя бы потому, что я с этим несчастным модулем могу найти с сотню статей на других ресурсах. Да на одном хабре слово HC-SR04 упоминается в трёх десятках статей! Причём во многих представляются худо-бедно какие-то конечные продукты, а тут… в макетку понавтыкано) Непонятно что именно нового даёт именно эта статья или где тут препарирование какого-то подвоха в этом датчике. Да, это уровень блинк. Но с чего-то же надо начинать человеку? Какой уровень своих достижений тащить на хабр — это каждый сам решает. Критика же — это очень и очень полезная штука, если к ней правильно относиться. Но порой бывает её получить особо и не откуда, а вот после публикации вполне можно надеяться на обратную связь.


      1. MonkeyD
        31.08.2018 17:16

        Справедливо. Даже более чем.


  1. AntonSazonov
    01.09.2018 20:33

    для тех кто не знает Arduino программируется на ЯП Wiring, это упрощённый C++

    Нет такого ЯП.