Подключение датчика давления HX710B к Arduino

На сайте уже есть несколько статьей про датчики давления, BME280 и BMP180. В этой статье расскажу, еще об одном датчик давления для Arduino, собранном на датчике MPS20N0040D и аналого-цифровом преобразователе HX710B. Модуль способен измерять давление воздуха от 0 до 40 кПа.
Технические параметры:
► Напряжение питания: 3.3 В — 5 В;
► Основные функции интегральных: MPS20N0040D-D и HX710B;
► Выход тип: цифровой;
► Диапазон измерения: 0 — 40 кпа;
► Размеры: 19 x 19 x 12 мм;
► Вес: 3 грамма.
Общие сведенья
Основан модуль на небольшом датчке давления MPS20N0040D имеющим всего 6 вводов. Датчик собран на основе тензодатчика, который прикреплен к диафрагме и при любом изменении давлении происходит изменение электрического сопротивления.

По схеме выше можно понять, что датчик MPS20N0040D собран по мосту Уитстона.
Чуть ниже, установлена микросхема HX710B, которая представляет собой 24-битный аналого-цифровой преобразователь (АЦП). По сути, данный модуль представляет собой тензодатчик и усилитель, о котором рассказывал раньше, в этой статье.

Назначение контактов:
► VIN, GND — Вывод источник питания;
► SCK — Тактовый вывод;
► OUT — Цифровой вывод.
Подключение датчика давления HX710B к Arduino
Необходимые детали:
► Контроллер Arduino UNO R3 x 1 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.
► Барометрический датчик давления 0-40 кПа HX710B x 1 шт.
Описание:
В примере покажу как подключить датчика давления HX710B к Arduino, все показания будем передавать в последовательный порт.
Подключение:
Из приведенной ниже принципиальной схемы можно увидеть, что мы используем всего четыре провода. Сначала подключаем вывода SCK и OUT к выводам D3 и D2, затем подключаем к VCC и GND к 5 В и GND.

Установка библиотеки:
Для работы датчиком HX710B необходимо установить библиотеку, для этого заходим на сайт скачиваем библиотеку и устанавливаем в среду разработки IDE (так же можно скачать в конце статьи)
Программа:
Схема и библиотека установлена, можно приступить к программой части. Открываем среду разработки Arduino IDE и копируем скетч ниже и загружаем его в Arduino UNO
Датчик давления воды для ардуино

Среди множества датчиков для ардуино нашлось место датчику давления воды. Как понятно из названия, датчик давления воды для ардуино измеряет давление создаваемое водой. Это полезно знать, например в квартире на верхних этажах, или в частном доме.
Модель датчика давления воды для ардуино представлен на алиэкспрессе моделью USP-G41-1.2. Внешний вид датчика представлен на рисунке ниже:

Датчик давления воды USP-G41-1.2 преобразует давление воды в напряжение в виде линейной зависимости.
Характеристики датчика

Программный код Arduino IDE для работы с датчиком давления
#define SENSOR A0 // Пин на который подключен датчик void setup() < Serial.begin(9600); >void loop() < int raw = analogRead(SENSOR); float voltage = (float) raw * 5.0 / 1024.0; // напряжение на измерительном контакте ардуино Serial.println("Pressure is"); float pressure_kPa = (voltage - 0.5) / 4.0 * 1200.0; // перевод напряжения в давление Serial.print(pressure_kPa); Serial.println(" kPa"); float pressure_psi = pressure_kPa * 0.14503773773020923; // перевод кПа в psi Serial.print(pressure_psi); Serial.println(" psi"); delay(500); >
- Выход датчика (OUT) подключается к аналоговому контакту А0 Ардуино.
- В строчке float pressure_kPa = (voltage — 0.5) / 4.0 * 1200.0; вычисляется значение давления датчика учитывая измеряемый диапазон.
- Строчка float pressure_psi = pressure_kPa * 0.14503773773020923; переводит давление из КилоПаскалей в единицы psi.
Также учитывайте, что данный датчик имеет температурную погрешность. Ее, при необходимости, нужно учитывать.
Как подключить датчик давления к ардуино
Віримо в перемогу ЗСУ!
Працюємо з 09:00 до 18:00 Пн-Сб Працюємо з 09:00 до 19:00 Пн-Пт —> Магазин у відпустці до 19.08.2023 —>
- Ваша корзина пуста!
- Главная
- Статьи
- Arduino 4-20 мА подключение датчика уровня
Бывают такие времена в жизни ардуинщика, когда ему приходится из глубин любительских датчиков подыматься в божественные выси их промышленных собратьев. При этом мы сталкиваемся с совсем другими стандартами сопряжения их сигналов с контроллером.

Промышленные аналоговые датчики выпускают со следующими выходными сигналами: импульсный, 0…20 мА, 4…20 мА, 0…5В и 0…10В. А стандартное напряжение питания у них 24В или сетевое 220В.
По моему опыту, самый популярный среди инженеров – токовый сигнал 4…20мА. Он меньше всего зависим от длины кабеля, а так же позволяет легко диагностировать неисправность или обрыв цепи датчика. Так же этот тип сигнала позволяет питать маломощные датчики прямо по сигнальному проводу. При этом между контроллером и датчиком нужно проложить только двухпроводный кабель. Такое подключение называют двухпроводной схемой. Датчик с сигналом 4-20мА ведет себя как переменный резистор с сопротивлением, прямо пропорциональным измеряемой величине. Это достигается стабилизатором тока внутри датчика. Этот стабилизатор конечно управляемый и держит величину тока, прямо пропорциональную значению измеряемого физического параметра. В трехпроводной и четырехпроводной схемах сигнал все тот же, но питание подводится к датчику дополнительными проводами.

Arduino 4-20mA
Мы можем мерять ток 4-20 мА аналоговым входом контроллера Arduino или других, собрав предварительно следующую простенькую схемку. Напряжение на аналоговом входе здесь будет пропорционально току через контрольный резистор.

И я для себя её еще немного усложняю для большей стабильности показаний. Здесь добавлена RC-цепочка из резистора 10К и конденсатора 100nF.

Номинал резистора Rx можно посчитать по простой формуле Rx=Uplc/0,02A, где 0,02А – это ток 20мА, а Uplc – это максимальный уровень аналогового входа контроллера в вольтах. Для Arduino Nano например, это напряжение составляет 5В. Для ESP32 – это примерно 3В. И таким образом получаем для Arduino Nano сопротивление 5В/0,02А = 250 Ом, а для ESP32 3В/0,02А = 150 Ом. Для напряжения 3,3В – это будет 165 Ом (или что более доступно 160 Ом). Сам резистор Rx нужно выбрать самый точный из всех, вам доступных, чтобы показания как можно меньше зависели от температуры воздуха.
Дальше можно собирать схему и мерять напряжение на резисторе через аналоговый вход контроллера. Для опыта я возьму Arduino Nano и промышленный гидростатический датчик уровня с двухпроводной схемой питания и токовым сигналом 4-20 мА.
Но для начала перестрахуемся и проэмулируем сигнал датчика при помощи лабораторного блока питания. По расчетам для Arduino у нас получилось сопротивление резистора 250 Ом, но из-за не точности резистора у нас может получаться небольшой выход за предел измерения аналогового входа. Поэтому я возьму резистор 220 Ом. Собираем все по схеме.

Набрасываем программу в Arduino IDE. Она будет просто читать аналоговый вход А0 и писать его машинное значение в монитор порта. Загружаем программу в контроллер.
//Arduino 4-20 mA const byte sensorPin = A0; int sensorValue = 0; void setup() < Serial.begin(9600); >void loop() < sensorValue = analogRead(sensorPin); Serial.println(sensorValue); delay(500); >
Теперь выкрутим резистор, задающий напряжение на выходе блока питания, на минимум и начнем плавно увеличивать это напряжение до достижения тока 4 мА на амперметре. При этом запишем машинное значение напряжения на аналоговом входе, которое отображено в мониторе порта — 185. Это число будет соответствовать минимуму шкалы датчика. Дальше подымаем ток через измерительный резистор до 20 мА и снова записываем теперь уже число, соответствующее максимуму шкалы датчика — 928. И напоследок докрутим ток до максимума шкалы аналогового входа – то есть до 1023 и определим ток, при этом через резистор – 22 мА. Не старайтесь приравнять максимум датчика максимуму машинного значения аналогового входа. Желательно оставить небольшой запас значений аналогового входа для диагностики выхода измеряемой величины за границу допустимых значений. В нашем случае для этого мы изначально взяли резистор на 220 Ом вместо 250 Ом, чтобы уменьшить масштаб входной шкалы. Так же само можно играться величиной резистора и в обратную сторону. К примеру у вас есть датчик уровня на 3м, а вам надо точно мерять в диапазоне 0…2 м, то вам наоборот лучше увеличить сопротивление и при уровне 2м получать максимум шкалы аналогового входа.
Теперь можно преобразовать машинные значения измеряемого параметра в понятные нам физические единицы измерения, то есть в метры водяного столба. Хотя для отображения уровня в сборнике воды еще пользуются такими единицами как процентами наполнения сборника или даже объемом жидкости в нем. Все эти три параметра можно получить от одного аналогового датчика уровня. Для преобразования воспользуемся формулой масштабирования, но стандартная функция map() нам не подойдет, ибо она работает только с целыми числами int, а нам нужна высота водяного столба в формате float с плавающей запятой. Следующая формула порешает нам все вопросы масштабирования. В переменную L1 типа float будет сохраняться окончательный уровень в метрах. sensorValue – это значение аналогового входа. 185 – это машинное значение при 4мА. 2,5 – это максимум шкалы датчика в метрах. 0,0 – это минимум шкалы датчика в метрах. Дальше 928 – это машинное значение при 20 мА. И последний 0,0 – это смещение шкалы в метрах. Например, если датчик установлен на высоте 20 см от дна сборника воды, то сюда нужно вписать число 0,2 в метрах. В монитор порта будем писать как машинные значения так и уровень в метрах. Загрузим программу в контроллер и проверим нашу формулу в деле.
//Arduino 4-20 mA const byte sensorPin = A0; int sensorValue = 0; float L1=0.0; void setup() < Serial.begin(9600); >void loop() < sensorValue = analogRead(sensorPin); L1 = (sensorValue - 185.0) * (2.5 - 0.0) / (928.0 - 185.0) + 0.0; Serial.print(sensorValue); Serial.print(" "); Serial.println(L1); delay(500); >
В Arduino IDE клацаю Загрузить. Запускаю монитор порта и при 4мА получаем уровень 0,0 м. Теперь подымаю ток до максимальных 20 мА и получаем искомые 2,5 м. Значит формула работает как надо.

Теперь рассмотрим сам датчик уровня поближе. У него два провода: красный – плюс, черный – минус. Трубочка соединяет внутреннюю часть рабочей измерительной мембраны с атмосферным воздухом. Она должна всегда быть выше уровня воды и ничем не замазана. Металлическая погружная часть датчика довольно тяжелая. На ней нанесены основные параметры: диапазон давлений 0…250 мBar, что соответствует 0…2,5 м; питание 12…30 В; выход 4…20 мА и серийный код. Снизу наклейка с надписью: не трогайте лицевую часть диафрагмы. Типо можете повредить. Она тут впринципе хорошо защищена и контактирует с жидкостью только через мелкие отверстия по бокам.
Теперь подключаем к контроллеру Arduino реальный датчик по следующей схеме и поганяем его.
Датчик подключен и без погружения в воду держит ток 4 мА. Теперь я просто возьму атмосферную трубку и потяну в ней воздух на себя. И понаблюдаем как будет изменяться уровень воды в мониторе порта. Значение доходит почти до 2,5м. Вот так этот датчик и работает.
Надеюсь эта статья была полезной. И теперь вы легко сможете юзать промышленные датчики в связке с любительскими контроллерами. Ведь некоторые задачи решаются только с ними. Пишите в коментах, какие темы вас еще интересуют. С уважением geekmatic.in.ua! Заходите на наш канал Youtube
Arduino.ru
На аналоговый выход через делитель. А нету ссылочки на схему делителя? Спасибо!
- Войдите на сайт для отправки комментариев
Ср, 24/10/2012 — 17:11
Зарегистрирован: 12.02.2012
Два резистора номналом от 5 до 50 кОм, подклучаете так: GND->резистор->вход дуины->резистор->выход датчика и соедените землю (GND) дуины с землей (-) датчика.
- Войдите на сайт для отправки комментариев
Ср, 24/10/2012 — 17:17
ramon_sobaka
Зарегистрирован: 24.10.2012
Но рабочее напряжение датчика [V] 20. 30 DC. А на аналоговом выходе датчика от 4 до 20 мА смотря какое давление будет! Выход дуины не спалю.
- Войдите на сайт для отправки комментариев
Ср, 24/10/2012 — 17:28
Зарегистрирован: 12.02.2012
На выходе датчика 0 — 10 вольт, причем тут 4 — 20 мА?
- Войдите на сайт для отправки комментариев
Ср, 24/10/2012 — 18:32
Зарегистрирован: 12.02.2012

- Войдите на сайт для отправки комментариев
Ср, 24/10/2012 — 22:05
AlexFisher

Зарегистрирован: 20.12.2011
Можно вход думны зашунтировать 250 Ом и подвть 20 мА — как раз выйдет 5 вольт при 20 мА
- Войдите на сайт для отправки комментариев
Втр, 04/12/2012 — 22:49
Зарегистрирован: 14.11.2012
а надо ли при такой схеме подключения выставлять AREF в external и подключать к нему внешнее напряжение?
- Войдите на сайт для отправки комментариев
Ср, 05/12/2012 — 11:13
Andrey_Y_Ostanovsky
Зарегистрирован: 03.12.2012
rembo пишет:
а надо ли при такой схеме подключения выставлять AREF в external и подключать к нему внешнее напряжение?
Смотря что Вы планируете при этом получить.
Внешнее напряжение на AREF все равно больше 5 вольт не подать, а стабилизировать — лучше питание контроллера целиком, тем более, что там не такая уж большая нагрузка.
- Войдите на сайт для отправки комментариев
Пнд, 14/01/2013 — 14:57
Зарегистрирован: 14.01.2013
И так начнем с того что я программист, и у меня нормально работает только ЦИФРА, как доходит дело до аналогов я вынужден побираться, искать чужой опыт и прочее .
Задача . делается приспособление, которое будет работать на меге и отчитываться по MODBUS, при его разработке возникла жудкая проблема . я не как не могу прикрутить датчики к ATMEGA’e . причем датчики разношерстные:
один датчик (температура) это тип Pt1000 с ним всё понятно это термо резистор, если получить его сопротивление с перещётом проблем не будет
второй (давление) выдаёт сигнал 4-20 ма .
Прочитал тонну но видимо мне совсем не везёт, даже мысли в proteus выложил всё равно не прёт с измерениями .
был бы оченеь при очень благодарен если бы кто то подсказал обвязку ног атмеги , с условием что питание всех датчиков идёт от 24 вольт, а атмега питается от них же но через 7805 стабилизатор . особое качество не требуется , но хотя бы чтобы начать .
За рание спасибо
p.s. Читал про делители токовые петли . ну не моё это программер я . и по цифре .
- Войдите на сайт для отправки комментариев
Пнд, 14/01/2013 — 15:31
Andrey_Y_Ostanovsky
Зарегистрирован: 03.12.2012
Faster пишет:
один датчик (температура) это тип Pt1000 с ним всё понятно это термо резистор, если получить его сопротивление с перещётом проблем не будет
второй (давление) выдаёт сигнал 4-20 ма .
Как бы Вам этого ни хотелось, придется разобраться что такое делитель напряжения и измерение тока с помощью шунта, и делать эти делители из дополнительных резисторов. А дальше сигнал 0-5 вольт подается на аналоговый вход ардуины, после чего остается привязать данные с датчика к значениям, выдаваемым АЦП.
- Войдите на сайт для отправки комментариев
Пнд, 14/01/2013 — 16:31
Зарегистрирован: 14.01.2013
Для меня аналоговые расчеты просто жесть 3 дня мараю об это руки , а MODBUS протокол реализовал за 2 часа .
Вот читаю . но это жесть , был бызнающий человек чтобы помочь . ух был бы благодарен
- Войдите на сайт для отправки комментариев
Пнд, 14/01/2013 — 16:38
Andrey_Y_Ostanovsky
Зарегистрирован: 03.12.2012
Ну, считайте аналог неким массивом плавно изменяющихся данных. 🙂 А рассчеты делителя — есть прямо в интернете. Вбиваете туда значения и смотрите — что получается.
- Войдите на сайт для отправки комментариев
Пнд, 14/01/2013 — 16:45
Зарегистрирован: 14.01.2013
Но задачи то две сначалао укатать до 0-5в а потом уже ток мерять
- Войдите на сайт для отправки комментариев
Пнд, 14/01/2013 — 18:27
Andrey_Y_Ostanovsky
Зарегистрирован: 03.12.2012
Faster пишет:
Ссылку бы ? Но задачи то две сначалао укатать до 0-5в а потом уже ток мерять
- Войдите на сайт для отправки комментариев
Втр, 15/01/2013 — 16:27
Зарегистрирован: 14.01.2013
Обидно видить серчь гугла ..но спасибо калькулятор нашёл уже раньше тем же методом . я думал может есть удобный софт или ещё что .
Счас решаю . задачи по силекции между двумя типами датчиков на одной ножке .
- Войдите на сайт для отправки комментариев
Пнд, 08/04/2013 — 21:48
Зарегистрирован: 12.09.2011
Faster, свяжитесь со мной по почте [email protected] , решим вашу проблему. Или ответьте здесь.
- Войдите на сайт для отправки комментариев
Сб, 23/09/2017 — 23:19
Зарегистрирован: 04.04.2016
Доброго времени суток, коллеги
Я так понимаю тоже через делитель ?
Цель сделать управляемое реле на насосе
когда давление достигло определенной отметки чтоб реле разомкнулось
В интернете не нашел достточно информации
Как правильно вычислять давление на нем ?
Всем спасибо за уделенное время
- Войдите на сайт для отправки комментариев
Сб, 23/09/2017 — 23:29
Зарегистрирован: 04.04.2016
Использую вот такой код для измерений, скопировал на одном из сайтов, но пока не понимаю почему порт выводит не свзанные показания /* Pressure Sensor test Code */ const int analogInPin = A0; // Sensor connected to A0 int sensorValue = 0; // value read from the pressure sensor via the amplifier stage float outputValue = 0; // value output to the Serial port void setup() < // initialize serial communications at 9600 bps: Serial.begin(9600); >void loop() < // read the analog in value: sensorValue = analogRead(analogInPin); // print the results to the serial monitor: Serial.print("sensor = " ); Serial.print(sensorValue); outputValue = map(sensorValue, 60, 1006, 0, 32); // convert the raw bit value Serial.print("sensor forum-post-footer clear-block">
- Войдите на сайт для отправки комментариев

