Немного теории. Парктроник или Парковочный радар это устройство предназначенное для отслеживания расстояния между автомобилем и каким — то объектом, как правило парктроники устанавливают с задней части машины.
Даже несмотря на цену ~1936 рублей я решил смастерить свой вариант этого устройства. Начать я решил с малого, и создал наверное самый простой парктроник из всех возможных.
И так от теории к практике, для сборки устройства нам понадобится, 3 светодиода (я взял разных цветов, так проще и нагляднее); Пьезоизлучатель с генератором*; Ультразвуковой дальномер HC-SR04; Резистор на 220 ом и мощностью 0.25 ватта (хотя уместны и другие, большая мощность тут не к чему) и Arduino любой модели.
Сборка.
- GND (-) светодиодов и пьезоизлучателя соеденяем вместе и подключаем в пин GND через резистор.
- 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](https://habrastorage.org/webt/ox/nz/fz/oxnzfzpxoxmmchsxrh75-w7nee0.jpeg)
Шаг 1:
![Шаг 1](https://habrastorage.org/webt/d1/sl/qy/d1slqyfpapuhupk_8dtdz7uh5z0.png)
Шаг 2:
![Шаг 2](https://habrastorage.org/webt/rs/px/n5/rspxn5s9bga27wsamdk9hwbc7ci.png)
Работа устройства в картинках:
![image](https://habrastorage.org/webt/zq/l3/xu/zql3xueeu1w84raj6p25icdmjb0.jpeg)
![image](https://habrastorage.org/webt/92/zb/to/92zbtoea7lexgkzn99efs7t88uo.jpeg)
![image](https://habrastorage.org/webt/5b/vn/0k/5bvn0kwrhii9zvckcn0vexzoidy.jpeg)
Кусок кода программы и информацию о дальномере HC-SR04 я получил с этого сайта
Комментарии (18)
AlexanderS
30.08.2018 13:14+1Я с этим сонаром игрался, когда игрушку собирал. Да и потом пару раз ещё применял на других машинках. Но то ж — игрушка, а в вашем случае — это уже серьёзное применение в реальных условиях. А реальные условия это: эксплуатация в агрессивной среде, наличие помех и переотражений и, как следствие, ложные срабатывания.
Поэтому я бы советовал принять к сведению:
— защищать электронику — пропаивать китайскую пайку, лачить платы и убирать в нормальные корпуса;
— усреднять результаты измерений перед выводом пользователю (например, если будет одно неверное измерение, то оно может сгладиться девятью другими);
— организовать диагностику и парирование системных сбоев (например, если один из четырёх датчиков начал врать или вообще перестал выдавать показания, а у других трёх показания в ±10% интервале, то пользователю надо об этом как-то сообщить, а если все четыре показывают разные расстояния выходя за 20% интервал, то выводить вообще ничего нельзя).
Akon32
30.08.2018 13:22+2Вы его на машину ставили и практике испытывали? Если нет — это не парктроник, а настольное ардуино с сонаром.
В парктрониках обычно от 4х датчиков, и суммарно получается более широкая диаграмма направленности (захватывается немного бокового пространства). За ~1200-1500 рублей в комлекте будет ещё и цифровой экран.
sav13
30.08.2018 13:52+1А смысл в парктронике с нулевой влагозащищенностью?
А сенсоры влагозащищенные делают данную поделку экономически нецелесообразной
Гораздо интереснее был бы проект — подключение датчиков от парктроника к ардуино. А то бывают такие в хозяйстве при замене бамперов, например
MedicusAmicus
30.08.2018 14:57Гораздо эффективнее было бы лазерный дальномер применить.
С использованными автором "сонарами" в коридоре сложной формы ничего надежного не вышло (датчик присутствия делал). Даже со сглаживанием ошибочных результатов и попытками сузить сектор локации.
VirtualHunter
30.08.2018 15:34+1Который раз вижу статью, как кто-нибудь еще раз делает парктроник из HC-SR04. Не дает покоя два вопроса — почему никто не проверяет, а не написана ли уже такая статья раньше? И второй: кто-нибудь себе представляет датчик HC-SR04 в реальных условиях на заднем бампере машины?
И кстати, есть защищенная версия — JSN-SR04T, стоит дороже, но ее можно использовать для разных DIY в уличных условиях, заявлено IP66
Centrix2132 Автор
30.08.2018 15:37Спасибо, мысль о том что надо проверять наличие похожих статей действительно хорошая, я приму к сведению.
Mogwaika
30.08.2018 17:37Ну почему же, очень даже представляю Креосана или Цыгана на драндулете с датчиками на скотче)))
wormball
31.08.2018 01:13А я вот потратил год жизни на изобретение аналогичного девайса. Что характерно, даже искал, в том числе на алиэкспрессе, но упомянутый девайс всякий раз ловко уходил от моего взора.
Ну ничего, заказал на алиэкспрессе три штуки (там разные модели), посмотрим, что это такое.
И у меня по меньшей мере одно преимущество — не используется подстроечный трансформатор. Ну и может ловить более чем одно эхо.
Serge78rus
30.08.2018 16:39+1для тех кто не знает Arduino программируется на ЯП Wiring, это упрощённый C++
Сообщите эту новость разработчикам компилятора g++, который используется оболочкой Arduino IDE «под капотом» для компиляции проектов. Они точно не знают, что написали компилятор не для C++, а для какого-то Wiring.
Serge78rus
30.08.2018 17:30+21. На рисунке под надписью «Шаг 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 будет выполнена
AlexanderS
30.08.2018 19:22А может у него полярность верная, а накосячено с общим пином — не земля, а питание должно быть.
AlexanderS
30.08.2018 19:28Виноват. Если смотреть по коду, то светики включаются высоким уровнем. Значит с полярностью накосячено. Причем не только на картинке, но и в тексте: «GND (-) светодиодов и пьезоизлучателя соеденяем вместе и подключаем в пин GND через резистор».
MonkeyD
30.08.2018 21:00Если честно, по мне это игрушки на уровне блинк. Модули УЗ из китая крайне плохи в производстве и использовании. У них маленькое расстояние, высокий процент ложного срабатывания и так далее. Для игрушек, роботов, да тьма, даже для квадриков по хате (ином помещении сойдет), но парктроник, вещь из-за ошибки которой можно не кисло попасть на бабки. Я бы не стал. Но это только мое мнение, я бы предложил еще десяток возможных реализаций подобных идей (без ардуины причем).
AlexanderS
30.08.2018 22:26Статья просто проста и не воспринимается серьёзно хотя бы потому, что я с этим несчастным модулем могу найти с сотню статей на других ресурсах. Да на одном хабре слово HC-SR04 упоминается в трёх десятках статей! Причём во многих представляются худо-бедно какие-то конечные продукты, а тут… в макетку понавтыкано) Непонятно что именно нового даёт именно эта статья или где тут препарирование какого-то подвоха в этом датчике. Да, это уровень блинк. Но с чего-то же надо начинать человеку? Какой уровень своих достижений тащить на хабр — это каждый сам решает. Критика же — это очень и очень полезная штука, если к ней правильно относиться. Но порой бывает её получить особо и не откуда, а вот после публикации вполне можно надеяться на обратную связь.
AntonSazonov
01.09.2018 20:33для тех кто не знает Arduino программируется на ЯП Wiring, это упрощённый C++
Нет такого ЯП.
unwrecker
Единственное чего ради стоит делать собственный парктроник — это минимальное рабочее расстояние. У 99.9% продающихся это 30см. Минимум что видел у серийных: 16.5см, но требуют муторной калибровки.
А что у этого с данным параметром? И годится датчик для установки в бампер? С виду неатмосферостойкий какой-то.
AlexanderS
В даташите заявлено от 2 см до 4 метров. Но у него эффективный угол меньше 15 градусов. Причём какие реальные углы по горизонтали и вертикали — это надо ещё выяснять)