Добрый день любители самоделок! Сегодня мы соберём простой дальномер на Arduino Pro Mini. Прибор способен измерять расстояние от 2 до 400 см. Погрешность данного устройства доходит всего до +/- 1-5 см, в зависимости от измеряемого расстояния.
Инструменты и материалы
-Arduino Pro mini
-Датчик hc-04
-Индикатор на tm1637
-Провода ( у меня - МГТФ 0,12 )
-Программатор
-Пластмассовый корпус
-Li-on аккумулятор
-Маленький выключатель
-Плата зарядки на TP4056
-Суперклей
-Паяльник
-Припой
-Канифоль
-Дрель, свёрла и т.д.
Шаг первый.Схема:
По схеме всё просто, без дополнений.
Шаг второй.Подготовка корпуса:
Сначала примеряем датчик и сверлом на 15 мм высверливаем два отверстия.
Далее сверлом на 3-3,5 мм делаем отверстие для micro-usb разъёма.
Подбираем сверло под диаметр выключателя и сверлим.
На крышке делаем "окошко" для семисегментного индикатора(на фото без обработки), и все неровности дорабатываем напильником.
Шаг третий.Прошивка:
В скетче выделены переменные которые можно подстроить для себя. Весь код закоментирован.
#include <Arduino.h> // библиотеки для работы
#include <GyverTM1637.h>
//-------------Для настройки-----------------------------------------------------------------
bool Long = 0; // 0 - измеряем длину от датчика
// 1 - измеряем длину от стенки корпуса, которая противоположна датчику
unsigned int corpus = 10; // растояние от датчика до противоположной стенки корпуса (в сантиметрах)
#define CLK 2 //пины для подключения
#define DIO 3
#define TRIG 4
#define ECHO 5
//----------------------------------------------------------------------------------------------
unsigned int impulse=0; // переменные для расчёта
unsigned int sm=0;
GyverTM1637 disp(CLK, DIO);
void setup() {
pinMode(TRIG, OUTPUT); //задаём как выход
pinMode(ECHO, INPUT); //задаём как вход
disp.brightness(7); // яркость 0-7
disp.point(0); //выключаем двоеточие
disp.clear(); //очищаем индикатор
}
void loop() {
digitalWrite(TRIG, HIGH); //подаём 5 вольт
delayMicroseconds(10); // задержка 10 микросекунд
digitalWrite(TRIG, LOW); // подаём 0
impulse=pulseIn(ECHO, HIGH); // замеряем длину импульса
sm=impulse/58; // переводим в сантиметры
if(Long == 1){ // проверка настроек
sm = sm+corpus;
}
if(sm <= 2){ // обнуляем ложные значения
sm=1;
}
if(sm >= 405){
sm=1;
}
int integer = sm / 10;
int decimal = sm % 10;
decimal = decimal*10;
disp.displayClock(integer,decimal); // вывод на индикатор
delay(300); // задержка 0,3 сек. между выводом значений
}
Далее подключаем программатор и прошиваем МК.
Шаг четвёртый.Сборка:
Так как устройство работает от аккумулятора,то лишние расходы заряда нам не нужны. Поэтому на плате Arduino выпаиваем светодиоды и кнопочку reset (для уменьшения размеров).
Приклеиваем на суперклей аккумулятор к корпусу. На АКБ приклеиваем плату зарядки, устанавливаем выключатель и спаиваем всё по схеме.
Приклеиваем датчик к корпусу и спаиваем всё по схеме.Сначала была идея приклеить плату на двухсторонний скотч, но потом было решено приклеить на суперклей.Индикатор можно прикрутить на винты или приклеить.
Шаг пятый.Тест:
Примечание: четвёртый сегмент всегда будет отображать 0. Это сделано для того, чтобы последний сегмент не был пустым. Получается если показание равно 270, то это означает, что расстояние равно 27 см.
Для уверенности, показания можно сверить с линейкой.
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.