Всем привет. Всё, что мы изучали до этого урока, касалось цифровых сигналов – сигналов, которые могут быть в одном из двух состояний:
- 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
Спасибо за внимание) Продолжение следует...