Недавно мне пришла идея, как можно немного «прокачать» гараж, а именно сделать проезд через ворота, чуток удобнее. Водитель я не самый профессиональный, а гараж довольно небольшого размера – после всевозможных манипуляций с расширением ворот, оказалось, что размер проема всего-навсего на 15 сантиметров шире автомобиля. С таким зазором, заезжать в гараж, мягко говоря, страшновато. Поэтому, некоторое время, поломав голову, пришла мысль, что можно добавить чуть-чуть современных технологий в деревенский быт. А именно, было решено «присобачить» с трех сторон(слева, справа и спереди от ворот) дальномеры. Зазоры между стенами и автомобилем будут измеряться в режиме онлайн, а данные отобразятся на цифровом табло, которое разместится на стене, внутри гаража и будет висеть всегда перед глазами во время парковки.
Выбор дальномера для подключения к arduino
Для определения расстояния есть несколько способов – инфракрасный датчик приближения, лазерный дальномер и ультразвуковой дальномер. Возможно, есть еще какие-то варианты, но я их сходу не нашел. Поэтому выбирал из трех вариантов. Датчик приближения был сразу забракован, поскольку он не умеет измерять, а только настраивается на определение конкретных расстояний. Лазерный датчик умеет делать измерения и довольно точно, но стоит он не мало, из-за этого выбор был остановлен на ультразвуковом датчике, который стоит в 8-10 раз дешевле лазерного, а точность измерения отличается не на много.
Очевидно, что выбор пал на более дешевый датчик HC-SR04, который стоит 50 руб и способен измерять расстояние от 2 до 400 см с точностью до 3 мм, а эффективный угол наблюдения 15 градусов.
Подключение датчика HC-SR04 к arduino
Ультразвуковой датчик HC-SR04 имеет 4 ножки для подключения:
- VCC – для подключения +5 вольт
- GND – для подключения минусового провода
- Trig – для отправки ультразвукового сигнала
- Echo – для приема отправленного ранее сигнала
Подключаем VCC и GND к питанию arduino без изменений напряжения, поскольку и ардуино и HC-SR04 работают от 5 вольт. Две оставшиеся ножки, нужно подключять к цифровым пинам ардуино, например, к 11 и 12.
Пример работы HC-SR04
Для испытаний HC-SR04 написан небольшой код, который осуществляет измерение расстояния и выводит информацию на 7-сегментный индикатор TM1637, про который я уже писал.
Для измерения расстояния с помощью HC-SR04, необходимо сначала отправить сигнал, а потом получить его обратно и замерить время, за которое сигнал прошел туда и обратно, тем самым легко высчитать расстояние до препятствия. Зная, что скорость звука в воздухе составляет, примерно, 340 м/с, получаем скорость 0.034 м/мкс. Но так как, сигнал должен пройти туда и обратно, скорость будет в два раза медленней, то есть будет равна 0.017 м/мкс. Итого получаем, формулу: расстояние = время умножить на 0.017 и умножить на 10, чтобы перевести в миллиметры. Или можно перевести пропорцию к более читабельному виду: расстояние = время / 5.8
Что использовалось в проекте:
- Arduino (я использовал arduino uno, но можно любую другую). Покупал тут: arduino uno
- Ультразвуковой дальномер HC-SR04. Покупал тут: HC-SR04
- Индикатор TM1637. Покупал тут: 7-сегментный 4-разрядный индикатор TM1637
Скетч ультразвукового дальномера на arduino с помощью HC-SR04 и TM1637
// подключение индикатора TM1637 #include <TM1637.h> #define CLK 3 #define DIO 2 TM1637 tm1637(CLK,DIO); // пины для HC-SR04 int echoPin = 12; int trigPin = 11; void setup() { Serial.begin (9600); // для вывода в мониторе порта pinMode(trigPin, OUTPUT); // пин отправки сигнала pinMode(echoPin, INPUT); // пин приема сигнала // инициализация индикатора tm1637.init(); tm1637.set(BRIGHT_TYPICAL); } void loop() { int duration, mm; // переменные для хранения расстояния // останавливаем отправку сигнала digitalWrite(trigPin, LOW); delayMicroseconds(2); // отправляем ультрозвуковой сигнал digitalWrite(trigPin, HIGH); // ждем 10 микроскунд delayMicroseconds(10); // останавливаем отправку сигнала digitalWrite(trigPin, LOW); // замеряет длину положительного импульса на пине echoPin duration = pulseIn(echoPin, HIGH); // высчитываем расстояние до препядствия mm = duration / 5.8; // вывод данных в монитор порта Serial.print(mm); Serial.println(" mm"); // вывод данных на индикатор tm1637.display( mm ); delay(100); }
Послесловие
Если будет время и возможность, то постараюсь написать еще несколько статей про оборудование гаража дальномерами: нужно еще придумать большое табло, которое будет видно хотя бы метров с 5, а также нужно все собрать в кучу и смонтировать по месту применения.