Подключение датчика давления 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
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 29 |
#include "HX710B.h" // Подключаем библиотеку Барометрический датчик давления 0-40 кПа HX710B const int DOUT = 2; // Указываем вывод OUT const int SCLK = 3; // Указываем вывод CLK HX710B pressure_sensor; // Создаем объект void setup() { Serial.begin(57600); // Открываем последовательную связь, на скорости 57600 pressure_sensor.begin(DOUT, SCLK); // Инициализируем датчик } void loop() { if (pressure_sensor.is_ready()) { Serial.print("Pascal: "); Serial.println(pressure_sensor.pascal()); Serial.print("ATM: "); Serial.println(pressure_sensor.atm()); Serial.print("mmHg: "); Serial.println(pressure_sensor.mmHg()); Serial.print("PSI: "); Serial.println(pressure_sensor.psi()); } else { Serial.println("Pressure sensor not found."); } delay(1000); } } |
При открытие окна «Мониторинг порта» можно увидеть показания.
Ссылки
Библиотека HX710B
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Барометрический датчик давления 0-40 кПа HX710B
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Барометрический датчик давления 0-40 кПа HX710B
Можно ли этим датчиком контролировать неглубокий вакуум?
У меня при малейшем разряжении показывает 0.
Простите за тупой вопрос, а что измеряет этот датчик? Понятно что давление, а какое? В вашем примере 404 с копейками в паскалях, у меня примерно также. Но это не атмосферное давление. Жмём на шприц показания увеличиваются, создаём вакуум — уменьшаются. Тогда от чего берётся точка отсчёта? Что будет значить 0? Не пойму логику измерений
В библиотеке .cpp файл есть в блокноте открой и поменяй в конце строчку на
float HX710B::pascal(){
float value = (read_average()*RES*4000);
return value;
}
В таком случае он покажет давление воздуха в трубке. (4000 если он именно на 40кПа) .
«(4000 если он именно на 40кПа)»
Это откуда такой вывод?
Там криво посчитали, в HX710B.cpp накосячили в 10 раз и со знаком
https://www.teachmemicro.com/arduino-pressure-sensor-tutorial/?unapproved=590936&moderation-hash=c82a65cc3a8c927615e4df218f2a19b9#comment-590936
https://github.com/kurimawxx00/hx710B_pressure_sensor
//float value = (read_average()*RES) *200 + 500;
float value = (read_average()*RES) *20 — 50;
сам датчик по идее от -40 до 40 кпа.
но в этой библиотеке, что тут указана (Библиотека HX710B),
ошибки в выводе формулы по расчету давления
должно быть не 404, а в районе 0
пишут, что в паскалях — на самом деле в килопаскалях
но все другие единицы давления рассчитаны, как будто давление получено в паскалях — итого занижено в 1000 раз.
Добрый день! Два вопроса:
1) при установке задержки меньше секунды данные все равно идут с шагом в секунду
2) как бы не нагнетался воздух через шприц, максимальный выход получается 1000 Па, никак не до 40к Па, в чем может быть проблема? Брак?
«Несколько дней «промучился» с этой проблемой, датчик точно также работал до 10 кПа. Решением было запустить питание на вторую(или пятую, смотря откуда смотреть) ножку датчика MPS20N0040D питание не «чистые» 5 вольт, а через резистор 15 кОм.»
метровая ПВХ труба опущена в емкость с водой, от нее силиконовым шлангом внутренним диаметром 3 мм к датчику. Похоже, что датчик травит воздух. Давление падает на датчике. Уже не важно в каких там попугаях замер производит. Стагивал силикон на входе датчика, всё равно теряет значения. Кто сталкивался? заливали всё это компаундом?
то же долго мучался, и в итоге переделал на операционник LM358 по этой инструкции https://www.youtube.com/watch?v=NAraksgfMpc.
Получил значения близкие к mmHg, Откалибровал их при помощи функции map() . Калибровал как в видео, медицинским тонометром.
// преобразуем аналоговое значения в 8-битное число (от 0 до 255)
val = map(val, 36, 434, 20, 300); Где:36 входящих попугаев равно 20mmHg, а 434 будет 300mmHg.
на Ardublock 2.0 то же такая функция присутствует. называется «карта значений»