Підключення аналогових датчиків до Ардуіно, зчитування показань датчиків

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

Про датчиках

Відповідно датчики ділять на дві групи:

1. Цифрові.

2. Аналогові.

Для зчитування цифрових значень можуть використовуватися як цифрові, так і аналогові входи мікроконтролера, в нашому випадку АВР на платі Arduino. Аналогові ж датчики повинні підключатися через аналогово-цифровий перетворювач (АЦП). ATMEGA328, саме він встановлений в більшості плат Ардуіно (докладніше про це на сайті є стаття), містить у своїй схемі вбудований АЦП. На вибір доступно цілих 6 аналогових входів.

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

Загальна схема аналогових датчиків і їх підключення

Датчиком може бути навіть звичайний потенціометр. По суті – це резистивний датчик положення, на такому принципі реалізують контроль рівня рідин, кута нахилу, відкриття чогось. Його можна підключити до Ардуіно двома способами.

Схема вище дозволить зчитувати значення від 0 до 1023, завдяки тому, що все напруга падає на потенціометрі. Тут працює принцип подільника напруги, в будь-якому положенні движка напруга розподіляється по поверхні резистивного шару лінійно або в логарифмічному масштабі (залежить від потенціометра) на вхід потрапляє та частина напруги, яка залишилася між висновком повзунка (ковзаючого контакту) і землею (gnd). На макетної платі таке з’єднання виглядає так:

Другий варіант підключений за схемою класичного резистивного подільника, тут напруга в точці максимального опору потенціометра залежить від опору верхнього резистора (на малюнку R2).

Взагалі резистивний дільник дуже важливий не тільки в області роботи з мікроконтролерами, але і в електроніці в цілому. Нижче ви бачите загальну схему, а також розрахункові співвідношення для визначення значення напруги на нижньому плечі.

Таке підключення характерно не тільки для потенціометра, а для всіх аналогових датчиків, адже більшість з них працюють за принципом зміни опору (провідності) під дією зовнішніх джерел – температури, світла, випромінювань різного роду тощо.

Нижче наведена найпростіша схема підключення терморезистора, в принципі, на його базі можна зробити термометр. Але точність його показань буде залежати від точності таблиці переведення опору в температуру, стабільності джерела живлення і коефіцієнтів зміни опорів (в т.ч. резистора верхнього плеча) під дією тієї ж температури. Це можна мінімізувати шляхом підбору оптимальних опорів, їх потужності і робочих струмів.

Таким же чином можна підключити фотодіоди, фототранзистори як датчик освітленості. Фотоелектроніка знайшла застосування в датчиках визначають відстань і наявність предмета, один з таких ми розглянемо пізніше.

Малюнок показує підключення фоторезистора до Ардуіно.

програмна частина

Перш ніж розповісти про підключення конкретних датчиків, я вирішив розглянути програмні засоби для їх обробки. Всі аналогові сигнали зчитуються з таких же портів за допомогою команди analogRead (). Варто зазначити, що у Arduino UNO та інших моделей на 168 і 328 атмеге 10-розрядний АЦП. Це означає, що мікроконтролер бачить вхідний сигнал у вигляді числа від 0 до 1023 – разом 1 024 значення. Якщо врахувати, що напруга живлення 5 вольт, то чутливість входу:

5/1024 = 0.0048 В або 4.8 мВ

Тобто при значенні 0 на вході, напруга дорівнює 0, а при значенні 10 на вході – 48 мВ.

В окремих випадках для перетворення значень до потрібного рівня (наприклад для передачі в шим вихід) 1024 ділять на число, а в результаті поділу має повинен вийде необхідний максимум. Більш наочно працює функція map (джерело, нч, вч, ВНЧ, ВВч), де:

  • нч – нижнє число до перетворення функцією;

  • вч – верхнє;

  • ВНЧ – нижнє число після обробки функцією (на виході);

  • ВВч – верхнє.

Практичне застосування для перетворення функцією вхідного значення для передачі в ШІМ (максимальне значення 255, для перетворення даних з АЦП в вихід шим 1024 ділять на 4):

Варіант 1 – розподіл.

int x;

x = analogRead (pot) / 4;

// буде отримано число від 0 до 1023

// ділимо його на 4, вийде ціле число в від 0 до 255 analogWrite (led, x);

Варіант 2 – функція MAP – відкриває більш широкі можливості, але про це пізніше.

void loop ()

{Int val = analogRead (0);

val = map (val, 0, 1023, 0, 255);

analogWrite (led, val); }

Або ще коротше:

analogWrite (led, map (val, 0, +1023, 0, 255))

Далеко не у всіх датчиків на виході присутній 5 Вольт, тобто число тисячі двадцять чотири не завжди зручно ділити для отримання тих же 256 для Шиман (або будь-яких інших). Це може бути і 2 і 2.5 вольта і інші значення, коли максимумом сигналу буде, наприклад 500.

Популярні аналогові датчики

Загальний вигляд датчика для Ардуіно і його підключення зображено нижче:

Зазвичай є три виходи, може бути присутнім четвертий – цифровий, але це особливості.

Розшифровка позначення висновків аналогового датчика:

  • G – мінус харчування, загальна шина, земля. Може позначатися як GND, «-»;

  • V – плюс харчування. Може позначатися як Vcc, Vtg, «+»;

  • S – вихідний сигнал, можливі позначення – Out, SGN, Vout, sign.

Новачки для освоєння зчитування значення датчиків вибирають проекти всіляких термометрів. Такі датчики бувають в цифровому виконанні, наприклад DS18B20, і в аналоговому – це всілякі мікросхеми типу LM35, TMP35, TMP36 і інші. Ось приклад модульного виконання такого датчика на платі.

Похибка датчика від 0.5 до 2 градуси. Побудований на мікросхемі TMP36, як і її багато аналоги його вихідні значення дорівнюють 10 мВ / ° С. При 0 ° вихідний сигнал – 0 В, а далі додається по 10 мВ на 1 градус. Тобто при 25.5 градусах напруга – 0.255 В, можливе відхилення в межах похибки і власного нагріву кристала ІМС (до 0.1 ° С).

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

Однак, для якісного термометра не можна просто вважати значення і вивести їх на LCD індикатор або послідовний порт для зв’язку з ПК, для стабільності вихідного сигналу всієї системи в цілому потрібно усереднювати значення з датчиків, як аналогових, так і цифрових в певних межах, при цьому, не погіршуючи їх швидкодія і точність (всьому є межа). Це пов’язано з наявністю шумів, наведень, нестабільних контактів (для резистивних датчиків на основі потенціометра, см. Несправності датчика рівня води або палива в баку автомобіля).

Коди для роботи з більшістю датчиків досить об’ємні, тому я їх приводити все не буду, їх легко знайти в мережі за запитом «назва датчик + Arduino».

Наступний датчик, який часто використовують ардуінщікі-роботостроітелі – це датчик лінії. Він заснований на фотоелектронних приладах, типу фототранзисторів.

З їх допомогою робот, який рухається по лінії (використовується на автоматизованих виробництвах для судноплавства) визначає наявність білої або чорної смуги. У правій частині малюнка видно два прилади схожих на світлодіоди. Один з них це і є світлодіод, може випромінювати в невидимому спектрі, а другий – фототранзистор.

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

Доповню суміжних датчиком – датчик відстані від фірми Sharp, теж використовується в робототехніці, а також в умовах контролю положення предметів у просторі (з відповідною ТХ похибкою).

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

висновок

Застосування аналогових датчиків дуже просто, а з легким в освоєнні мовою програмування Arduino ви швидко освоїте прості пристрої. У такого підходу є суттєві недоліки в порівнянні з цифровими аналогами. Це пов’язано з великим розкидом параметрів, від цього виникають проблеми при замінах датчика. Можливо, доведеться правити вихідний код програми.

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

Цифрова схемотехніка як така зменшує необхідність відбудови і налагодження схеми після складання. Це дає вам можливість на одному вихідному коді зібрати кілька однакових пристроїв, деталі яких будуть видавати однакові сигнали, з резистивним датчиками таке випадку рідко.

Дивіться також у нас на сайті: Підключення зовнішніх пристроїв до Arduino

Олексій Бартош

Ссылка на основную публикацию