Магазин у відпустці до 07.08.2021

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

Подключение промышленного датчика уровня к 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Аудіо штекер 3,5мм папа

Аудіо штекер 3,5мм папа

Аудіоштекер 3,5 мм використовується для подовжувачів аудіосигналу, для передачі сигналу з аудіороз'є..

13.89грн.

Контроллер ESP32-WROOM-32

Контроллер ESP32-WROOM-32

ESP32-WROOM-32 - це потужний універсальний модуль Wi-Fi + BT + BLE MCU, призначений для широкого спе..

131.05грн.

Діод випрямляючий 1N4007 SMD

Діод випрямляючий 1N4007 SMD

Мініатюрний діод в корпусі для поверхневого монтажу SMDРозміри наведені на картинціМаксимальна зворо..

1.58грн.

Датчик відкриття вікна, дверей, шафи

Датчик відкриття вікна, дверей, шафи

Датчик відкриття вікна або двері на основі герконаВикористовується для сигналізації або автоматичног..

44.02грн.

Шестерня для зубчатого ременю на 36 зубців під вісь 5 мм

Шестерня для зубчатого ременю на 36 зубців під вісь 5 мм

Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 5 ммКількість зубц..

52.74грн.