Працюємо з 09:00 до 19:00 Пн-Пт

Бувають такі часи в житті ардуінщіка, коли йому доводиться з глибин аматорських датчиків підніматися в божественні вершини їх промислових побратимів. При цьому ми стикаємося з зовсім іншими стандартами сполучення їх сигналів з контролером.

Подключение промышленного датчика уровня к Arduino

Промислові аналогові датчики випускають з наступними вихідними сигналами: імпульсний, 0 ... 20 мА, 4 ... 20 мА, 0 ... 5 і 0 ... 10В. А стандартна напруга живлення у них 24В або мережеве 220В.

З мого досвіду, найпопулярніший серед інженерів - струмовий сигнал 4 ... 20мА. Він найменше залежний від довжини кабелю, а так само дозволяє легко діагностувати несправність або обрив ланцюга датчика. Так само цей тип сигналу дозволяє живити малопотужні датчики прямо по сигнальному проводу. При цьому між контролером і датчиком потрібно прокласти тільки двопровідний кабель. Датчик з сигналом 4-20мА поводиться як змінний резистор з опором, прямо пропорційним вимірюваній величині. Це досягається стабілізатором струму всередині датчика. Цей стабілізатор звичайно керований і тримає величину струму, прямо пропорційну значенню вимірюваного фізичного параметра. У трехпроводной і чьотирьох схемах сигнал все той же, але живлення підводиться до датчика додатковими дротами.Arduino 4-20mA

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

Arduino 4-20 mA

І я для себе її ще трохи ускладнюю для більшої стабільності показань. Тут додана RC-ланцюжок з резистора 10К і конденсатора 100nF.

Arduino 4-20мА

Номінал резистора 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 4-20mA тест

Накидаємо програму в Arduino IDE. Вона буде просто читати аналоговий вхід А0 і писати його машинне значення в монітор порту. Завантажуємо програму в контролер.

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 в метрах. В монітор порту писатимемо як машинні значення так і рівень в метрах. Завантажимо програму в контролер і перевіримо нашу формулу в справі.

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 м. Значить формула працює як треба.

Arduino 4-20mA гидростатический датчик уровня

Тепер розглянемо сам датчик рівня ближче. У нього два дроти: червоний - плюс, чорний - мінус. Трубочка з'єднує внутрішню частину робочої вимірювальної мембрани з атмосферним повітрям. Вона повинна завжди бути вище рівня води і нічим не замазана. Металева погружная частина датчика досить важка. На ній нанесені основні параметри: діапазон тисків 0 ... 250 мBar, що відповідає 0 ... 2,5 м; живлення 12 ... 30 В; вихід 4 ... 20 мА і серійний код. Знизу наклейка з написом: не чіпайте лицьову частину діафрагми. Нібито можете пошкодити. Вона тут впринципі добре захищена і контактує з рідиною тільки через дрібні отвори з боків.

Тепер підключаємо до контролера Arduino реальний датчик за наступною схемою і поганяємо його.

Датчик підключений і без занурення в воду тримає струм 4 мА. Тепер я просто візьму атмосферну трубку і потягну в ній повітря на себе. І подивимося як буде змінюватися рівень води в моніторі порту. Значення доходить майже до 2,5 м. Ось так цей датчик і працює.

Сподіваюся ця стаття була корисною. І тепер ви легко зможете юзати промислові датчики в зв'язці з аматорськими контролерами. Адже деякі завдання вирішуються тільки з ними. Пишіть в коментах, які теми вас ще цікавлять. З повагою geekmatic.in.ua! Заходьте на наш канал Youtube

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Блок живлення 5 В 2 А з роз'ємом 5,5мм x 2,5мм

Блок живлення 5 В 2 А з роз'ємом 5,5мм x 2,5мм

Вхідна напруга змінного струму 100...240 В 50/60 ГцВихідна стабілізована напруга 5 ВМаксимальний стр..

149.54грн.

Модуль термопари К-типу MAX6675 0...+1024°C

Модуль термопари К-типу MAX6675 0...+1024°C

Модуль термопари на основі спеціалізованої мікросхеми MAX6675Діапазон вимірюваної температури 0..

102.01грн.

Інфрачервоний датчик руху HC-SR505

Інфрачервоний датчик руху HC-SR505

Мініатюрний економічний датчик руху.Напруга живлення 4,5 ... 20 ВСтрум спокою < 60 мкАВихідні лог..

52.46грн.

Джойстик дискретний 4NO 4NC

Джойстик дискретний 4NO 4NC

Джойстик двохосьовий дискретний з чотирма кінцевикамиМоже бути змінений на одноосьовий - в комплекті..

373.24грн.

Світлодіодна стрічка адресна WS2812B 1м 30led

Світлодіодна стрічка адресна WS2812B 1м 30led

Трьохкольорова світлодіодна стрічка на основі адресних світлодіодів WS2812B 30 світлодіодів ..

85.83грн.