Найти тему

Эхолот (глубиномер/дальномер) на Arduino и влагозащищенном датчике расстояния JSN-SR04T-V3.0

Оглавление

Внимание!

Прибор находится на стадии тестирования и отладки.

Выявлена следующая проблема: В воздушной среде прибор отображает ожидаемые значения, но при погружении датчика в воду на водоеме постоянно отображает глубину 1.0 метра. Предположительно, проблему может решить изменение значений аргументов функций delayMicroseconds(10) и delayMicroseconds(50) в скетче на 2 и 10 соответственно.

Концепция

Данный прибор не является полноценным эхолотом, он не может распознать, где дно, где подводная растительность, где рыба, какой размер рыбы и т.д. Тем не менее данный прибор позволяет производить многократные измерения расстояния от датчика до ближайшей преграды, позволяет выводить эти измерения в виде графика на дисплей, сигнализирует звуком о том, что значения предыдущего измерения и текущего отличаются более, чем на 10 см.

В основном, данный прибор предназначен для применения на зимней рыбалке. Датчик прибора погружается в лунку и закрепляется. Если под датчиком не оказалось никаких преград, кроме дна, дисплей строит график, на котором отображается ровная горизонтальная линия.

При появлении под датчиком преграды в виде рыбы на график попадает значение глубины, на которой находится рыба, такое значение будет добавляться на график, пока рыба не уйдет из-под датчика или пока не сместится ближе/дальше по отношению к датчику. Если рыба уйдет из под датчика, на графике снова будет отображаться уровень дна.

Максимальное значение глубины, которое отображается на графике, принимается за максимальное значение при масштабировании всех отображаемых на графике значений.

В правой части дисплея отображается вертикальная линейка с пятью значениями, которые сверху вниз составляют 0, 25, 50, 75 и 100 процентов максимальной отображаемой на графике глубины.

В левом верхнем углу дисплея отображается текущая глубина.

Минимальный предел измерений глубины составляет 1.0 м, максимальный - 9.9 м.

Показания выводятся ступенчато с округлением в меньшую сторону, то есть 1.67 м глубины будут выводиться как 1.6 м.

Новое значение на графике появляется справа, остальные сдвигаются на одно значение влево, в целом это выглядит так, что весь график непрерывно смещается влево.

Показания на дисплее
Показания на дисплее

Компоненты

1. Плата Arduino Pro Mini

В моем случае WAVGAT Pro Mini ATmega168 16 Mhz/5V
В моем случае WAVGAT Pro Mini ATmega168 16 Mhz/5V

2. Дисплей 128 на 64 точки

В моем случае WINSTAR WG12864B-YFH-V#N
В моем случае WINSTAR WG12864B-YFH-V#N

3. Датчик расстояния JSN-SR04T-V3.0

Предыдущую версию датчика (2.0) применять не рекомендуется, так как есть негативный опыт получения с него ложных показаний.

-4

4. Зуммер (пищалка)

-5

5. Корпус

-6

6. Болты, гайки, провода

-7

Подключение

Дисплей

Дисплей (Dis) к Arduino (Ard) подключается следующим образом (резистор обозначен "Resistor"):

-8

На момент загрузки скетча на плату контакт 14-RES, возможно, придется отсоединять, иначе плата не будет прошиваться. В моем случае такая проблема возникала при прошивке Arduino UNO, с Arduino Pro Mini проблема не проявлялась.

В качестве резистора можно использовать потенциометр, у которого один крайний контакт подключается к GND, второй крайний к контакту 18 дисплея, а средний к контакту 3 дисплея. С помощью потенциометра можно регулировать контрастность дисплея.

В моем случае в схеме используется обычный резистор 2.2 кОм.

Датчик расстояния JSN-SR04T-V3.0

Подключение (в квадратных скобках контакты датчика, без скобок - контакты Arduino): [5V] - 5V, [Trig] - 3, [Echo] - 2, [GND] - GND.

Зуммер (Пищалка)

Подключение (в квадратных скобках контакты зуммера, без скобок - контакты Arduino): [-] - GND, [Средний] - 5V, [S] - 12.

Подключенные и собранные в корпус компоненты
Подключенные и собранные в корпус компоненты

Программная часть

Для работы с дисплеем, который используется в данном проекте, подходит библиотека U8glib (искать в разделе Управление библиотеками в Arduino IDE). U8glib работает с данным дисплеем "из коробки". Чтобы разобраться, как пользоваться библиотекой, можно открыть поставляемый с библиотекой пример GraphicsTest.

Для того, чтобы пример GraphicsTest заработал с дисплеем, необходимо раскомментировать соответствующую строку в его начале, в моем случае это "U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16);".

По ссылке далее можно скачать готовый скетч для работы с эхолотом:

Sonar.ino

В скетче присутствуют комментарии, поясняющие работу тех или иных блоков кода.

Ссылка на статью про прошивку Arduino Pro Mini:

Дополнительно

1. Питание прибора осуществляется через провод с USB-штекером на конце (удобно использовать power bank в качестве источника питания).

2. На тыльной стороне корпуса был добавлен выключатель для пищалки (разрывает провод GND пищалки).

3. С помощью 3д-принтера было изготовлено крепление для датчика, позволяющее добавить к нему утяжелитель. Без утяжелителя жесткость провода мешает направить датчик строго вертикально.

В моем случае в качестве утяжелителя используется рыболовное грузило-кольцо весом 95 грамм
В моем случае в качестве утяжелителя используется рыболовное грузило-кольцо весом 95 грамм

Итог

В качестве завершения статьи - фото прибора в транспортировочном виде:

-11