Электротехнический интернет-журнал Electrik.info

"Электрик Инфо" - онлайн журнал про электричество. Теория и практика. Обучающие статьи, примеры, технические решения, схемы, обзоры интересных электротехнических новинок. Уроки, книги, видео. Профессиональное обучение и развитие. Сайт для электриков и домашних мастеров, а также для всех, кто интересуется электротехникой, электроникой и автоматикой.
 


Схемы подключения | Принципиальные схемы | Электроснабжение
Розетки и выключатели | Автоматы защиты | Кабель и провод | Монтаж электропроводки Ремонт электротехники | Молодому электрику

Электрик Инфо » Схемы на микроконтроллерах » Подключение аналоговых датчиков к Ардуино, считывание показаний датчиков
Количество просмотров: 48799
Комментарии к статье: 3


Подключение аналоговых датчиков к Ардуино, считывание показаний датчиков


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

О датчиках

Соответственно датчики делят на две группы:

1. Цифровые.

2. Аналоговые.

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

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

Подключение аналоговых датчиков к Arduino, считывание показаний датчиков

Общая схема аналоговых датчиков и их подключения

Датчиком может быть даже обычный потенциометр. По сути – это резистивный датчик положения, на таком принципе реализуют контроль уровня жидкостей, угла наклона, открытия чего-либо. Его можно подключить к ардуино двумя способами.

Общая схема аналоговых датчиков и их подключения

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

Схема подключения аналоговых датчиков

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

Классический резистивный делитель

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

Схема и расчётные соотношения для определения значения напряжения на нижнем плече

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

Ниже приведена простейшая схема подключения терморезистора, в принципе, на его базе можно сделать термометр. Но точность его показаний будет зависеть от точности таблицы перевода сопротивления в температуру, стабильности источника питания и коэффициентов изменения сопротивлений (в т.ч. резистора верхнего плеча) под действием той же температуры. Это можно минимизировать путем подбора оптимальных сопротивлений, их мощности и рабочих токов.

Простейшая схема подключения терморезистора

Таким же образом можно подключить фотодиоды, фототранзисторы как датчик освещенности. Фотоэлектроника нашла применения в датчиках определяющих расстояние и наличие предмета, один из таких мы рассмотрим позже.

Фоторезистор

Рисунок показывает подключение фоторезистора к ардуино.

Схема подключения фоторезистора к ардуино

Программная часть

Прежде чем рассказать о подключении конкретных датчиков, я решил рассмотреть программные средства для их обработки. Все аналоговые сигналы считываются с таких же портов с помощью команды analogRead(). Стоит отметить, что у Arduino UNO и других моделей на 168 и 328 атмеге 10-разрядный АЦП. Это значит, что микроконтроллер видит входной сигнал в виде числа от 0 до 1023 – итого 1024 значения. Если учесть, что напряжение питания 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 Вольт, т.е. число 1024 не всегда удобно делить для получения тех же 256 для ШИМа (или любых других). Это может быть и 2 и 2.5 вольта и другие значения, когда максимумом сигнала будет, например 500.

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

Общий вид датчика для ардуино и его подключение изображено ниже:

Как подключить аналоговый датчик

Обычно есть три выхода, может присутствовать четвертый – цифровой, но это особенности.

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

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

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

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

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

Аналоговый датчик на TMP36

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

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

Диапазоны изменения температуры и выходные напряжения датчиков

Однако, для качественного термометра нельзя просто считать значения и вывести их на LCD индикатор или последовательный порт для связи с ПК, для стабильности выходного сигнала всей системы в целом нужно усреднять значения с датчиков, как аналоговых, так и цифровых в определенных пределах, при этом, не ухудшая их быстродействие и точность (всему есть предел). Это связано с наличием шумов, наводок, нестабильных контактов (для резистивных датчиков на основе потенциометра, см. неисправности датчика уровня воды или топлива в баке автомобиля).

Коды для работы с большинством датчиков довольно объёмны, поэтому я их приводить все не буду, их легко найти в сети по запросу «название датчик + Arduino».

Следующий датчик, который часто используют ардуинщики-роботостроители – это датчик линии. Он основан на фотоэлектронных приборах, типа фототранзисторов.

Датчик линии

С их помощью робот, который двигается по линии (используется на автоматизированных производствах для доставки деталей) определяет наличие белой или черной полосы. В правой части рисунка видно два прибора похожих на светодиоды. Один из них это и есть светодиод, может излучать в невидимом спектре, а второй – фототранзистор.

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

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

Датчик расстояния Sharp

Работает на том же принципе. Библиотеки и примеры скетчей и проектов с ними в большом количестве есть на сайтах посвященных Arduino.

Пошаговое обучение программированию и созданию устройств на микроконтроллерах AVR: Программирование микроконтроллеров для начинающих

Заключение

Применение аналоговых датчиков очень просто, а с легким в освоении языком программирования Arduino вы быстро освоите простые устройства. У такого подхода есть существенные недостатки в сравнении с цифровыми аналогами. Это связано с большим разбросом параметров, от этого возникают проблемы при заменах датчика. Возможно, придется править исходный код программы.

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

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

Алексей Бартош

Популярные публикации:

Надеюсь, что эта статья была для вас полезной. Смотрите также другие статьи в категории Схемы на микроконтроллерах

Подписывайтесь на канал в Telegram про электронику для профессионалов и любителей: Практическая электроника на каждый день



Поделитесь этой статьей с друзьями:


Другие статьи с сайта Электрик Инфо:

  • Чем отличаются аналоговые и цифровые датчики
  • Измерение температуры и влажности на Arduino – подборка способов
  • Самые популярные датчики для Ардуино
  • Как устроен и работает датчик линии
  • Введение в аналоговую электронику
  • Как происходит преобразование аналогового сигнала в цифровой
  • Тензометрические датчики в системах автоматизации
  • Особенности подключения устройств к Arduino
  • Подключение и программирование Ардуино для начинающих
  • Аналоговые датчики: применение, способы подключения к контроллеру
  • Категория: Схемы на микроконтроллерах

    Датчики, Аналоговая электроника, Измерительные мосты, Программирование Ардуино, Arduino для начинающих, Ардуино

      Комментарии:

    #1 написал: Олег | [цитировать]

    Arduino Uno содержит встроенный аналого-цифровой (АЦП) преобразователь с шестью каналами, который дает нам шесть аналоговых входных контактов. АЦП преобразует аналоговый сигнал в цифровое значение. В то время как цифровые выводы имеют два значения или выводы аналогового входа имеют значения от 0 до 1023 относительно эталонного значения Arduino. Arduino Uno имеет эталонное значение 5 В.

      Комментарии:

    #2 написал: Михаил | [цитировать]

    Для подключения аналоговых датчиков к Ардуино необходимо выполнить несколько шагов.

    1. Подключите датчик к Ардуино с помощью провода.

    • Провод к пину GND на Ардуино и к ножке "-" на датчике.
    • Провод к пину +5V на Ардуино и к ножке "+" на датчике.
    • Провод к аналоговому пину на Ардуино и к ножке "S" (или "OUT") на датчике.

    2. Настройте Ардуино для чтения аналогового входа.

    • Используйте функцию analogRead() для чтения значения с аналогового пина на Ардуино.
    • Значение, считываемое с аналогового пина, будет в диапазоне от 0 до 1023. Это соответствует напряжению от 0 до 5 В, которое подается на аналоговый вход Ардуино.
    • Преобразуйте это значение в соответствующую физическую величину, используя формулу, указанную в документации к датчику.

    Например, для подключения датчика температуры LM35 к Ардуино:

    1. Подключите датчик к Ардуино следующим образом:

    • Ножка 1 (GND) датчика к GND на Ардуино.
    • Ножка 2 (Vcc) датчика к +5V на Ардуино.
    • Ножка 3 (OUT) датчика к аналоговому пину A0 на Ардуино.

    2. Используйте функцию analogRead() для считывания значения с аналогового пина A0 на Ардуино.

    • Значение, считываемое с аналогового пина, будет в диапазоне от 0 до 1023.
    • Преобразуйте это значение в температуру по формуле: температура = значение * (5.0 / 1023.0) * 100.

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

      Комментарии:

    #3 написал: Алексей | [цитировать]

    Аналоговые датчики, такие как потенциометры, терморезисторы или фоторезисторы, подключаются к аналоговым входам контроллера. Например, для подключения потенциометра один вывод подключается к земле (GND), другой к питанию (5V или 3.3V), а средний вывод — к аналоговому входу Arduino (например, A0). Сигнал с датчика считывается с помощью функции analogRead(), которая возвращает значение от 0 до 1023, соответствующее напряжению от 0 до 5 В (или 3.3 В в зависимости от модели Arduino). Если данные с аналоговых датчиков не соответствуют ожиданиям, это может быть вызвано несколькими причинами. Во-первых, проверьте правильность подключения датчиков к Arduino, убедитесь, что все провода надежно закреплены и подключены к правильным пинам. Во-вторых, убедитесь, что датчики получают правильное питание, соответствующее их спецификациям. Также проверьте код программы, чтобы убедиться, что функция analogRead() используется правильно и данные считываются корректно. Возможно, потребуется калибровка датчиков для точных измерений. Если датчики загрязнены или повреждены, это также может влиять на их работу. Наконец, убедитесь, что нет внешних помех, которые могут искажать сигналы датчиков.    

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Введите код: *

    Присоединяйтесь к нам в социальных сетях:

    ВКонтакте | Facebook | Одноклассники | Электрик Инфо на Яндекс Дзен

     

    Популярные разделы сайта:

    Электрика дома  Электрообзоры  Энергосбережение
    Секреты электрика Источники света Делимся опытом
    Домашняя автоматика Электрика для начинающих
    Практическая электроника Электротехнические новинки
    Андрей Повный - все статьи автора



    Copyright © 2009-2025 Электрик Инфо - Electrik.info, Андрей Повный
    Вся информация на сайте предоставлена в ознакомительных и познавательных целях.
    За применение этой информации администрация сайта ответственности не несет.
    Перепечатка материалов сайта запрещена.