СОДЕРЖАНИЕ ►
Парктроник для гаража на Ардуино сделать довольно просто, при этом можно использовать световую и звуковую индикацию для предупреждения о минимальном расстоянии. Использовать данный проект на ультразвуковых датчиках в автомобиле не рекомендуется, так как они обладают большой погрешностью и не защищены от влаги. Рассмотрим сразу несколько вариантов реализации проекта на Ардуино.
Парктроник на Ардуино своими руками

Первым делом необходимо решить проблему с ложными срабатываниями датчика, сделав в программе функцию с несколькими измерениями расстояния и расчета средне арифметического значения. Для этого в цикле for выполняем 10 измерений подряд, складывая полученный результат в общую сумму, а по окончании цикла полученную сумму делим на количество проведенных измерений, то есть на 10.
Скетч для вычисления среднего значения датчика HC-SR04
#include <Ultrasonic.h> // импортируем библиотеку Ultrasonic ultrasonic (11, 12); // указываем пины для уз датчика void setup() { Serial.begin(9600); } void loop() { // выполняем 10 измерений и складываем результат int distance, sum, total; for (byte i = 0; i <= 10; i++) { distance = ultrasonic.Ranging(CM); sum = sum + distance; } total = sum / 10; // вычисляем среднее значение Serial.println("Distance - " + String(total)); }
Пояснения к коду:
- перед выполнением цикла for, необходимо обнулять переменные sum и total, поэтому мы их задаем в цикле, при этом они становятся равными нулю;
- алгоритм программы можно применять на любом датчике.
Ультразвуковой парктроник с дисплеем 1602
Для этого проекта потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- ультразвуковой дальномер HC-SR04;
- дисплей LCD 1602 I2C;
- светодиоды и резисторы;
- RGB светодиоды Ардуино;
- пьезодинамик;
- провода папа-мама, папа-папа.

Для сборки парктроника с экраном следует подключить к плате ультразвуковой дальномер, пьезодинамик и LCD экран, как на картинке выше. В представленную выше программу остается лишь добавить функцию вывода расстояния на дисплей и условие для срабатывания зуммера. Время между измерениями и расстояние при котором будет включен предупредительный звуковой сигнал можно поменять в скетче.
Скетч. Парктроник на Ардуино с экраном жк
#include <Ultrasonic.h> // импортируем библиотеку Ultrasonic ultrasonic (11, 12); // указываем пины для уз датчика #include <Wire.h> #include <LiquidCrystal_I2C.h> // импортируем библиотеку для дисплея LiquidCrystal_I2C LCD(0x27,20,4); int del = 5; // задержка между измерениями в мкс int cm = 10; // расстояние в см при котором сработает зуммер void setup() { Serial.begin(9600); LCD.init(); LCD.backlight(); pinMode(7, OUTPUT); // пин для подключения зуммера } void loop() { // выполняем 10 измерений и складываем результат int distance, sum, total; for (byte i = 0; i <= 10; i++) { distance = ultrasonic.Ranging(CM); sum = sum + distance; delay(del); } total = sum / 10; // вычисляем среднее значение Serial.println("Distance - " + String(total)); LCD.clear(); // очищаем экран дисплея и выводим расстояние LCD.setCursor(0,0); LCD.print("Distance - "); LCD.print(total); if (total > cm) { noTone(7); } if (total <= cm) { tone(7,100); } }
Пояснения к коду:
- время задержки между измерениями и расстояние при срабатывании пьезодинамика можно поменять в начале кода, изменив значения
delиcm; - количество измерений можно увеличивать, но это увеличит время выполнения программы, не изменив принципиально качество измерения расстояния.
Ультразвуковой парктроник со светодиодами

Так как устройство не рекомендуется ставить на автомобиль из-за отсутствия влагостойкости у датчиков HC-SR04, то и дисплей не имеет смысла подключать к парктронику на Arduino Uno. Лучше всего использовать световую индикацию. В следующем варианте проекта используются красные, желтые и зеленые светодиоды для индикации расстояния от устройства до автомобиля, заезжающего в гараж.
Скетч. Парктроник на Ардуино со светодиодами
#include <Ultrasonic.h> // импортируем библиотеку Ultrasonic ultrasonic (11, 12); // указываем пины для уз датчика int del = 5; // задержка между измерениями в мкс int cm1 = 30; // расстояние при котором включится зеленый светодиод int cm2 = 20; // расстояние при котором включится синий светодиод int cm3 = 10; // расстояние при котором включится красный светодиод int cm4 = 5; // расстояние при котором включится зуммер void setup() { Serial.begin(9600); pinMode(7, OUTPUT); // пин для подключения зуммера pinMode(2, OUTPUT); // пин для зеленого светодиода pinMode(3, OUTPUT); // пин для синего светодиода pinMode(4, OUTPUT); // пин для красного светодиода } void loop() { // выполняем 10 измерений и складываем результат int distance, sum, total; for (byte i = 0; i <= 10; i++) { distance = ultrasonic.Ranging(CM); sum = sum + distance; delay(del); } total = sum / 10; // вычисляем среднее значение Serial.println("Distance - " + String(total)); if (total >= cm1) { digitalWrite(4, LOW); digitalWrite(3, LOW); digitalWrite(2, LOW); } if (total < cm1 && total >= cm2) { digitalWrite(4,LOW); digitalWrite(3,LOW); digitalWrite(2,HIGH); } if (total < cm2 && total > cm3) { digitalWrite(4,LOW); digitalWrite(3,HIGH); digitalWrite(2,LOW); } if (total <= cm3) { digitalWrite(4,HIGH); digitalWrite(3,LOW); digitalWrite(2,LOW); } if (total > cm4) { noTone(7); } if (total <= cm4) { tone(7,100); } }
Пояснения к коду:
- в начале программы задаются переменные, которые можно поменять, настроив подходящий режим работы автомобильного парктроника на Ардуино;
- светодиоды одного цвета можно подключать к одному пину.
Гаражный ультразвуковой парктроник Arduino

В следующей программе реализована функция выключения звуковой сигнализации через 10 секунд (можно изменить в программе), т.е. когда машина уже остановилась. В схеме использованы RGB светодиоды 5 В, чтобы для питания использовать обычную зарядку от телефона. Схема сборки проекта на Ардуино остается прежней, а скачать скетч и файлы с макетом корпуса в Corel Draw для парктроника можно здесь.
Скетч для гаражного парктроника на Ардуино
#include <Ultrasonic.h> // импортируем библиотеку Ultrasonic ultrasonic (11, 12); // указываем пины для уз датчика int del = 5; // задержка между измерениями в мкс int cm1 = 30; // расстояние при котором включится зеленый светодиод int cm2 = 20; // расстояние при котором включится синий светодиод int cm3 = 10; // расстояние при котором включится красный светодиод int cm4 = 5; // расстояние при котором включится зуммер unsigned long currentTime; // переменная для отсчета времени int Time = 5000; // через сколько мкс нужно отключить зуммер byte t = 0; // переменная для запоминания состояния зуммера void setup() { Serial.begin(9600); pinMode(7, OUTPUT); // пин для подключения зуммера pinMode(2, OUTPUT); // пин для зеленого светодиода pinMode(3, OUTPUT); // пин для синего светодиода pinMode(4, OUTPUT); // пин для красного светодиода } void loop() { // выполняем 10 измерений и складываем результат int distance, sum, total; for (byte i = 0; i <= 10; i++) { distance = ultrasonic.Ranging(CM); sum = sum + distance; delay(del); } total = sum / 10; // вычисляем среднее значение Serial.println("Distance - " + String(total)); if (total >= cm1) { digitalWrite(4, LOW); digitalWrite(3, LOW); digitalWrite(2, LOW); } if (total < cm1 && total >= cm2) { digitalWrite(4,LOW); digitalWrite(3,LOW); digitalWrite(2,HIGH); } if (total < cm2 && total > cm3) { digitalWrite(4,LOW); digitalWrite(3,HIGH); digitalWrite(2,LOW); } if (total <= cm3) { digitalWrite(4,HIGH); digitalWrite(3,LOW); digitalWrite(2,LOW); } // зуммер выключится через заданный промежуток времени if (total > cm4) { t = 0; noTone(7); } if (t == 0 && total <= cm4) { t = 1; tone(7, 100); currentTime = millis(); } if (t == 1 && total <= cm4 && millis() - currentTime > Time) { t = 1; noTone(7); } }
Пояснения к коду:
- зуммер выключится через заданный промежуток времени, благодаря изменению переменной
t = 1;при включении пьезодинамика командой tone(); - при расстоянии больше
cm4переменнаяtснова становится равной нулю и пьезодинамик снова включится.










Я разбираюсь в этом вопросе. Готов помочь.
Да, действительно. Всё выше сказанное правда.
Такой парктроник водой и грязью зальет сразу
Ви перепутали провода на ультра звуковом дальномере вы подключили VCC на GND а GND на VCC
Спасибо, что заметили ошибку в схеме. Исправим
все еще не исправлено)))
В программе для дисплея 1602 ошибка.
В строке «Ultrasonic ultrasonic (11, 12);» 11 и 12 нужно поменять местами. Правильно будет:
Ultrasonic ultrasonic (12, 11);
Значение переменной «sum» нужно обнулять перед циклом иначе идёт непрерывное суммирование до переполнения и повторное суммирование.
При проверке кода выдает вот такую ошибку:
error: expected primary-expression before ‘.’ token
distance = Ultrasonic.Ranging(CM);
^
exit status 1
expected primary-expression before ‘.’ token
Что не так?
вместо ranging надо read
Обязательно нужно с маленькими буквами?
Во втором коде void loop() {
// выполняем 10 измерений и складываем результат
int distance, sum, total;
for (byte i = 0; i <= 10; i++) {
distance = ultrasonic.Ranging(CM); <- тут ошибка
sum = sum + distance;
delay(del);
надо вместо ranging написать read, проверял лично сам на arduino uno иде последней версии