Парктроник на Arduino

В этой публикации пойдёт речь о создании простого парктроника на базе 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 я получил с этого сайта

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 21

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

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

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


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

          0
          Вы его на машину ставили и практике испытывали?


          Судя по фото — это proof of concept на макетке.
          +5
          А смысл в парктронике с нулевой влагозащищенностью?
          А сенсоры влагозащищенные делают данную поделку экономически нецелесообразной

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

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

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

              И кстати, есть защищенная версия — JSN-SR04T, стоит дороже, но ее можно использовать для разных DIY в уличных условиях, заявлено IP66
              image
                0
                Спасибо, мысль о том что надо проверять наличие похожих статей действительно хорошая, я приму к сведению.
                  0
                  Ну почему же, очень даже представляю Креосана или Цыгана на драндулете с датчиками на скотче)))
                    0
                    А я вот потратил год жизни на изобретение аналогичного девайса. Что характерно, даже искал, в том числе на алиэкспрессе, но упомянутый девайс всякий раз ловко уходил от моего взора.

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

                    И у меня по меньшей мере одно преимущество — не используется подстроечный трансформатор. Ну и может ловить более чем одно эхо.
                    +1
                    для тех кто не знает Arduino программируется на ЯП Wiring, это упрощённый C++
                    Сообщите эту новость разработчикам компилятора g++, который используется оболочкой Arduino IDE «под капотом» для компиляции проектов. Они точно не знают, что написали компилятор не для C++, а для какого-то Wiring.
                      +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 будет выполнена
                        0
                        А может у него полярность верная, а накосячено с общим пином — не земля, а питание должно быть.
                          0
                          Виноват. Если смотреть по коду, то светики включаются высоким уровнем. Значит с полярностью накосячено. Причем не только на картинке, но и в тексте: «GND (-) светодиодов и пьезоизлучателя соеденяем вместе и подключаем в пин GND через резистор».
                          0
                          Если честно, по мне это игрушки на уровне блинк. Модули УЗ из китая крайне плохи в производстве и использовании. У них маленькое расстояние, высокий процент ложного срабатывания и так далее. Для игрушек, роботов, да тьма, даже для квадриков по хате (ином помещении сойдет), но парктроник, вещь из-за ошибки которой можно не кисло попасть на бабки. Я бы не стал. Но это только мое мнение, я бы предложил еще десяток возможных реализаций подобных идей (без ардуины причем).
                            0
                            Статья просто проста и не воспринимается серьёзно хотя бы потому, что я с этим несчастным модулем могу найти с сотню статей на других ресурсах. Да на одном хабре слово HC-SR04 упоминается в трёх десятках статей! Причём во многих представляются худо-бедно какие-то конечные продукты, а тут… в макетку понавтыкано) Непонятно что именно нового даёт именно эта статья или где тут препарирование какого-то подвоха в этом датчике. Да, это уровень блинк. Но с чего-то же надо начинать человеку? Какой уровень своих достижений тащить на хабр — это каждый сам решает. Критика же — это очень и очень полезная штука, если к ней правильно относиться. Но порой бывает её получить особо и не откуда, а вот после публикации вполне можно надеяться на обратную связь.
                              0
                              Справедливо. Даже более чем.
                            0
                            для тех кто не знает Arduino программируется на ЯП Wiring, это упрощённый C++

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

                              –1
                              Вещь только для игрушек и поиграться. Наиболее актуальны сейчас 2 вещи —
                              1. Сгорел индикатор — как его заменить на ардуине
                              2. Наложение сигнала с парктроника на видео

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое