Программирование Arduino урок 7 — аналоговый сигнал

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

  • 1 – есть напряжение;
  • 0 – нет напряжения.

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

  • как подключать переменный/подстроечный резистор к Arduino Uno;
  • как считывать значения с аналогового вывода платы;
  • как преобразовывать данные полученные из функции analogRead();
  • как отображать получаемые значения через последовательный порт на монитор компьютера.

Для того, чтобы выполнить практическую часть проекта, нам понадобится:

  • Плата Arduino Uno;
  • Переменный/подстроечный резистор (далее – ПР).

Для начала немного теории. Для того, чтобы вывести через последовательный порт информацию (сообщение) в функцию Serial.println () или Serial.print () необходимо задать входной параметр – в виде переменной. Мы это уже проходили 🙂 Выводимые числа будут с дробной частью. Соответственно тип переменной int нам уже не подходит. Для таких чисел используется тип данных float (числа с плавающей точкой).

Соберём простую схему. Подключим три джампера к резистору и плате:

  • Черный на «землю»;
  • Красный от резистора к выводу питания на плате (5 вольт);
  • Средний от центральной «ноги» резистора к нулевому аналоговому выводу на плате (А0).

Вернёмся в школу и вспомним принцип действия ПР. При вращении вала мы меняем значение сопротивления на центральной «ноге».

Если применить это в условиях нашего проекта — вращение ручки изменяет напряжение на 0 аналоговом выводе платы.

В том случае, когда вал ПР вывернут в крайнее левое положение сопротивление между центральным и боковым выводами (боковой вывод подключенный к выводу питания платы 5 вольт), стремится к 0, напряжение питания на центральной «ноге» резистора приближается к 5 вольтам. В случае, когда вал вывернут в крайнее правое положение, сопротивление на второй паре выводов (центральный и боковой вывод, который подключен на землю) стремится  к 50 кОм (номинал сопротивления моего ПР, у вам может быть другой), и соответственно напряжение питания на центральной «ноге» приближается к 0. Диапазон изменений значения напряжения на центральной ноге ПР и есть аналоговым значением, которое считывается с аналогового вывода платы.

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

В пределах этих границ, функция analogRead() возвращает числовое значение лежащее в диапазоне от 0 до 1023, пропорциональное напряжению, что подаётся на аналоговый вывод платы.

Для начала необходимо инициализировать серийное подключение. Скорость обмена 9600 бит в секунду Serial.begin(9600);

Необходимо объявить локальную переменную, которой будут присваиваться значения данных, которые поступили с ПР (вернее сказать значения, что сгенерировались АЦК диапазон от 0 до 1023)

int analogValueFromResistant = analogRead(А0);

Для изменения значений диапазона от 0 до 1023 (диапазон соответствует напряжению на выходе), необходимо объявить другую переменную типа float и присваивать ей значение полученное в результате выполнения математической операции. Чтобы промасштабировать значения, разделим 5 на 1023 и умножим результат на значение переменной analogValueFromResistant:

float voltageResistant= analogValueFromResistant * (5.0 / 1023.0);

Воспользуемся функцией Serial.println() для отображения информации на мониторе компьютера. Благодаря аббревиатуре DEC в серийном мониторе данные будут выводиться в виде целого числа.

Serial.println(analogValueFromResistant, DEC);

Serial.println(voltageResistant);

При повороте вала ПР на серийном мониторе, вы увидите меняющейся поток значений:

  • Первая строка будет выводить число сгенерированное АЦК (диапазон от 0 до 1023);
  • Вторая строка будет выводить число соответствующие напряжению на 0 аналоговом выводе  (диапазон от 0.00 до 5.00).

Урок 7

Спасибо за внимание) Продолжение следует…

Картотека программирования

ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ!


About alexlevchenko

Ценю в людях честность и открытость. Люблю мастерить разные самоделки. Нравится переводить статьи, ведь кроме того, что узнаешь что-то новое - ещё и даришь другим возможность окунуться в мир самоделок.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

* Copy This Password *

* Type Or Paste Password Here *