Ультразвуковые датчики, также известные как сонары (SONAR), представляют собой электронные устройства, используемые для измерения расстояния до объекта при помощи излучения ультразвуковых волн. Кроме измерения расстояния они также используются в задачах обнаружения объектов и роботах, объезжающих препятствия. Ранее для измерения расстояния мы использовали ультразвуковой датчик HC-SR04 и на нашем сайте уже достаточно много проектов с использованием этого датчика. HC-SR04 – достаточно простой и дешевый датчик для измерения расстояний, но его недостаток заключается в том, что его нельзя применять в «жестких» условиях эксплуатации, в частности, его нельзя подвергать воздействию воды.
Поэтому в данной статье мы рассмотрим подключение к плате Arduino Nano ультразвукового водонепроницаемого датчика (Waterproof ultrasonic sensor) JSN SR-04T и измерение с его помощью уровня воды. Также кратко будут рассмотрены основные особенности и технические характеристики датчика JSN SR-04T. Дополнительно на нашем сайте вы можете посмотреть проект индикатора уровня воды на Arduino Uno и датчике HC-SR04.
Также теперь на нашем сайте есть значительно более подробная статья про принципы работы ультразвукового водонепроницаемого датчика SR-04T и его подключение к плате Arduino.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- JSN SR-04T Waterproof Ultrasonic Sensor (ультразвуковой водонепроницаемый датчик) (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Водонепроницаемый ультразвуковой датчик JSN SR-04T
JSN SR-04T представляет собой модуль водонепроницаемого ультразвукового датчика, который способен измерять расстояние на дистанциях 25-450 см с точностью 2 мм. Модуль датчика состоит из двух раздельных частей. Одна часть – это датчик, который непосредственно производит передачу и прием ультразвуковых волн, а вторая часть – это плата управления. По принципу действия JSN SR-04T очень похож на датчики парковки, которые устанавливаются в бамперах автомобилей.
Модуль датчика JSN SR-04T имеет водозащищенное исполнение датчика, отличается устойчивым функционированием в сложных условиях эксплуатации и высокой точностью измерения расстояния. Он может использоваться в системах дальнометрии, предотвращения столкновения с препятствиями, автоматизированного контроля, мониторинга движения объектов, контроля трафика, системах безопасности и искусственного интеллекта и многих других применениях.
Назначение контактов (распиновка) датчика JSN SR-04T представлены на следующих рисунке и таблице.
№ контакта | Название контакта | Назначение контакта |
1 | 5V | Напряжение питания |
2 | Trig | Входной контакт датчика. На него необходимо подать импульс длительностью 10 мкс чтобы запустить датчик в работу (чтобы он начал излучение ультразвуковой волны). |
3 | Echo | Выходной контакт датчика. После приема отраженной от препятствия ультразвуковой волны на этом контакте формируется импульс высокого уровня (high), длительность которого равна времени распространения ультразвуковой волны до препятствия и обратно. |
4 | Gnd | Общий провод (земля) |
Модуль датчика JSN SR-04T во многом похож на модуль ультразвукового датчика, но по сравнению с ним у него есть ряд преимуществ:
- в отличие от HC-SR04 у модуля JSN SR-04T непосредственно датчик не распаян на печатной плате модуля, вместо этого он закреплен на конце достаточно длинного кабеля (2,5 метра), поэтому чувствительный элемент датчика может быть удален на значительное расстояние от платы управления;
- чувствительный элемент датчика заключен в защищённый водонепроницаемый корпус, поэтому его можно размещать в жестких условиях эксплуатации и агрессивных средах.
Но несмотря на эти преимущества имеются и некоторые недостатки. К примеру, минимальное расстояние измерения у датчика JSN SR-04T составляет 20 см, в то время как у датчика HC-SR04 оно равно 2 см. Причина этого заключается в том, что JSN SR-04T имеет только один чувствительный элемент в то время как у датчика HC-SR04 их два – один используется для передачи ультразвуковых волн, а другой для приема. В результате этого чувствительному элементу датчика JSN SR-04T приходится переключаться двумя режимами (прием/передача), а на это требуется дополнительное время. Поэтому и минимальное расстояние измерения для датчика JSN SR-04T равно 20 см, а датчик HC-SR04 может измерять значительно меньшие расстояния благодаря наличию у него отдельных передатчика и приемника.
Основные технические характеристики и особенности датчика JSN SR-04T:
- рабочее напряжение: DC 5V (постоянного тока);
- ток в состоянии покоя (ожидания): 5mA;
- ток в рабочем состоянии: 30mA;
- частота ультразвуковой волны: 40 кГц;
- диапазон измерения расстояний: от 25 см до 4,5 м;
- длина кабеля: 2,5 метра.
Схема проекта
Схема подключения водонепроницаемого ультразвукового датчика JSN SR-40T к плате Arduino представлена на следующем рисунке.
ЖК дисплей | Плата Arduino |
VSS | GND |
VDD | 5V |
VO | к потенциометру для регулировки уровня контрастности |
RS | D12 |
RW | GND |
E | D11 |
D4 | D4 |
D5 | D5 |
D6 | D6 |
D7 | D7 |
A | 5V |
K | GND |
Внешний вид собранной на макетной плате конструкции проекта показан на следующем рисунке.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Принцип работы платы Arduino с датчиком JSN SR-40T во многом похож на принцип ее работы с датчиком HC-SR04, подключение которого к плате Arduino мы рассматривали в этой статье.
Первым делом в программе необходимо подключить все используемые библиотеки, в нашем случае это библиотека LiquidCrystal.h для работы с ЖК дисплеем. Данную библиотеку можно использовать как в случае 4-битного подключения ЖК дисплея, так и в случае 8-битного его подключения.
1 |
#include<LiquidCrystal.h> |
Далее в следующей команде укажем плате Arduino к каким ее контактам подключен ЖК дисплей.
1 |
LiquidCrystal lcd(12, 11, 5, 6, 7, 8); |
Затем дадим осмысленные имена контактам платы, к которым подключены контакты trigger и echo ультразвукового датчика.
1 2 |
#define ECHOPIN 3 #define TRIGPIN 2 |
Внутри функции setup() зададим режимы работы используемых контактов платы Arduino: контакт trigger на вывод данных, а контакт echo – на ввод данных. Также инициализируем последовательную связь со скоростью 9600 бод для целей отладки и инициализируем ЖК дисплей.
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600); lcd.begin(16, 2); pinMode(ECHOPIN,INPUT_PULLUP); pinMode(TRIGPIN, OUTPUT); digitalWrite(ECHOPIN, HIGH); } |
В функции loop сначала установим на контакте TRIGPIN напряжение низкого уровня (LOW) на 2 мкс чтобы «очистить» его. Затем мы установим на нем на 15 мкс напряжение высокого уровня (high) чтобы датчик излучил в пространство ультразвуковую волну. После этого с помощью функции pulseIn() мы будем считывать длительность импульса на контакте ECHOPIN, которое равно времени распространения ультразвуковой волны до препятствия и обратно. Далее на основе этого времени мы рассчитываем расстояние до препятствия и выводим его в окно монитора последовательной связи и на экран ЖК дисплея.
1 2 3 4 5 6 7 8 9 |
void loop() { digitalWrite(TRIGPIN, LOW); delayMicroseconds(2); digitalWrite(TRIGPIN, HIGH); delayMicroseconds(15); digitalWrite(TRIGPIN, LOW); int distance = pulseIn(ECHOPIN, HIGH, 26000); distance=distance/58; Serial.print(distance); |
Тестирование работы проекта
После того как аппаратная часть проекта будет готова подключите плату Arduino к компьютеру (ноутбуку) и загрузите код программы в плату Arduino. Откройте окно монитора последовательной связи на скорости 9600 бод. Расположите какой-нибудь предмет напротив ультразвукового датчика, рассчитанное расстояние до него будет отображаться в окне монитора последовательной связи и на экране ЖК дисплея.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include<LiquidCrystal.h> LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // контакты, к которым подключен ЖК дисплей #define ECHOPIN 3 #define TRIGPIN 2 void setup() { Serial.begin(9600); lcd.begin(16, 2); // инициализируем ЖК дисплей для работы в режиме 16x2 pinMode(ECHOPIN,INPUT_PULLUP); pinMode(TRIGPIN, OUTPUT); digitalWrite(ECHOPIN, HIGH); } void loop() { lcd.clear(); digitalWrite(TRIGPIN, LOW); delayMicroseconds(2); digitalWrite(TRIGPIN, HIGH); delayMicroseconds(15); digitalWrite(TRIGPIN, LOW); int distance1 = pulseIn(ECHOPIN, HIGH, 26000); int distance=distance1/58; Serial.print(distance); Serial.println(" cm"); lcd.setCursor(0,0); //устанавливаем курсор в 1-й столбец 1-й строки lcd.print("Water Level"); // выводим сообщение "Water Level" lcd.setCursor(0,1); lcd.print(distance); delay(500); } |