Бувають такі часи в житті ардуінщіка, коли йому доводиться з глибин аматорських датчиків підніматися в божественні вершини їх промислових побратимів. При цьому ми стикаємося з зовсім іншими стандартами сполучення їх сигналів з контролером.
Промислові аналогові датчики випускають з наступними вихідними сигналами: імпульсний, 0 ... 20 мА, 4 ... 20 мА, 0 ... 5 і 0 ... 10В. А стандартна напруга живлення у них 24В або мережеве 220В.
З мого досвіду, найпопулярніший серед інженерів - струмовий сигнал 4 ... 20мА. Він найменше залежний від довжини кабелю, а так само дозволяє легко діагностувати несправність або обрив ланцюга датчика. Так само цей тип сигналу дозволяє живити малопотужні датчики прямо по сигнальному проводу. При цьому між контролером і датчиком потрібно прокласти тільки двопровідний кабель. Датчик з сигналом 4-20мА поводиться як змінний резистор з опором, прямо пропорційним вимірюваній величині. Це досягається стабілізатором струму всередині датчика. Цей стабілізатор звичайно керований і тримає величину струму, прямо пропорційну значенню вимірюваного фізичного параметра. У трехпроводной і чьотирьох схемах сигнал все той же, але живлення підводиться до датчика додатковими дротами.
Ми можемо міряти струм 4-20 мА аналоговим входом контролера Arduino або інших, зібравши попередньо таку простеньку схемку. Arduino 4-20 mA Напруга на аналоговому вході тут буде пропорційно току через контрольний резистор.
І я для себе її ще трохи ускладнюю для більшої стабільності показань. Тут додана 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 і писати його машинне значення в монітор порту. Завантажуємо програму в контролер.
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 м. Значить формула працює як треба.
Тепер розглянемо сам датчик рівня ближче. У нього два дроти: червоний - плюс, чорний - мінус. Трубочка з'єднує внутрішню частину робочої вимірювальної мембрани з атмосферним повітрям. Вона повинна завжди бути вище рівня води і нічим не замазана. Металева погружная частина датчика досить важка. На ній нанесені основні параметри: діапазон тисків 0 ... 250 мBar, що відповідає 0 ... 2,5 м; живлення 12 ... 30 В; вихід 4 ... 20 мА і серійний код. Знизу наклейка з написом: не чіпайте лицьову частину діафрагми. Нібито можете пошкодити. Вона тут впринципі добре захищена і контактує з рідиною тільки через дрібні отвори з боків.
Тепер підключаємо до контролера Arduino реальний датчик за наступною схемою і поганяємо його.
Датчик підключений і без занурення в воду тримає струм 4 мА. Тепер я просто візьму атмосферну трубку і потягну в ній повітря на себе. І подивимося як буде змінюватися рівень води в моніторі порту. Значення доходить майже до 2,5 м. Ось так цей датчик і працює.
Сподіваюся ця стаття була корисною. І тепер ви легко зможете юзати промислові датчики в зв'язці з аматорськими контролерами. Адже деякі завдання вирішуються тільки з ними. Пишіть в коментах, які теми вас ще цікавлять. З повагою geekmatic.in.ua! Заходьте на наш канал Youtube
Стійка нейлонова М3 12мм + 6мм
Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 12 ммДовжина зовн..
3.46грн.
Цифровий вольтметр + амперметр 100В 10А
Цифровий вольтметр та амперметр постійного струмуДіапазон вимірювання напруги 0 ...100 ВДіапазон вим..
122.27грн.
Кінцевий вимикач або кінцевик
Має одну групу перемикаючих контактів. На кінчику ричага встановлений рухомий ролік.Максимальний стр..
22.63грн.
Ремінь зубчастий 6 мм 300 мм
Зубчастий вкритий гумою ремінь для передачі механічної енергії обертання від одного зубчастого колес..
47.50грн.
Муфта на кроковий двигун 8x6,35x25мм
Ця муфта слугує перехідником між валами 8 мм та 6,35 мм. Тобто містить з обох боків отвір діаметром ..
58.54грн.