Аналоговый вход, аналоговый выход, вывод в последовательный монитор порта

Аналоговый вход, аналоговый выход, вывод в последовательный монитор порта

Этот пример демонстрирует, как считывать значения с аналогового входа, преобразовывать результат в диапазон от 0 до 255, использовать это для управления широтой импульсов модуляции (ШИМ) выходного пина для изменения яркости светодиода, а также выводить значения в последовательный монитор программы Arduino (IDE).

Нам понадобятся:

  • Плата Arduino
  • Потенциометр
  • Красный светодиод
  • Резистор 220 Ом


Подключение:

Схема:

Описание:
В данном примере мы подключаем пин потенциометра к +5V, центральный пин к аналоговому входу A0, а оставшийся пин к земле.
Затем подключаем резистор 220 Ом к цифровому пину 9, а светодиод подключаем последовательно резистору.
Длинная нога (анод) светодиода подключается к выходу от резистора, короткая нога (катод) - к земле.

Скетч:

/* 
  Аналоговый вход, аналоговый выход, вывод в последовательный монитор
  Считывает аналоговый сигнал с пина ввода, отображает результат в диапазон от 0 до 255 
  и использует его для установки ширины импульсов модуляции (ШИМ) на выходном пине.
  Также выводит результаты в монитор последовательного порта.
  Схема:
  - потенциометр подключен к аналоговому пину 0.
    Центральный пин потенциометра подключен к аналоговому пину.
    Боковые пины потенциометра подключены к +5V и GND.
  - светодиод подключен от цифрового пина 9 к GND.
*/

// Эти константы не будут меняться. Они используются для именования используемых пинов:
const int analogInPin = A0;  // Аналоговый пин ввода, к которому подключен потенциометр
const int analogOutPin = 9; // Аналоговый пин вывода, к которому подключен светодиод
int sensorValue = 0;        // Значение, считанное с потенциометра
int outputValue = 0;        // Значение, выводимое в ШИМ (аналоговый выход)

void setup() {
  // Инициализация последовательной связи со скоростью 9600 бит/с:
  Serial.begin(9600);
}

void loop() {
  // Считывание значения аналогового входа:
  sensorValue = analogRead(analogInPin);
  // Преобразование значения в диапазон аналогового выхода:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // Изменение значения аналогового выхода:
  analogWrite(analogOutPin, outputValue);
  // Вывод результатов в монитор последовательного порта:
  Serial.print("sensor = ");
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);
  // Ожидание 2 миллисекунды перед следующей итерацией для устранения эффекта осцилляции
  // аналого-цифрового преобразования после последнего считывания:

  delay(2);
}


В данном скетче после объявления двух пинов (аналогового А0 для потенциометра и цифрового 9 для светодиода) и двух переменных sensorValue и outputValue, в функции setup() выполняется только инициализация последовательной связи.

Затем в основном цикле переменной sensorValue присваивается значение аналогового сигнала от потенциометра.
Поскольку Arduino имеет диапазон аналогового чтения от 0 до 1023, а диапазон аналоговой записи только от 0 до 255, данные от потенциометра нужно преобразовать для соответствия меньшему диапазону перед использованием их для изменения яркости светодиода.

Для преобразования значения используется функция map():

outputValue = map(sensorValue, 0, 1023, 0, 255);

outputValue присваивается масштабированное значение от потенциометра.
Функция map() принимает пять аргументов:
значение для отображения,
нижний предел входных данных,
верхний предел входных данных,
нижний и верхний пределы данных, которые нужно преобразовать.
В данном случае данные сенсора преображаются с изначального диапазона от 0 до 1023 на диапазон от 0 до 255.
Более подробно про функцию map() смотрите в соответствующих темах.
Новые значения сенсора затем выводятся на аналоговый выходной пин, что приводит к затемнению или подсветке светодиода при вращении потенциометра.
Наконец, начальные и масштабированные значения сенсора отправляются в последовательное окно монитора программы Arduino (IDE) в виде стабильного потока данных.

5 примеров использования:

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

Звуковой индикатор: Подключите звуковой генератор вместо светодиода, чтобы создать звуковой индикатор с изменяемой громкостью.

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

Цветовой сенсор: Подключите цветовой сенсор и используйте аналоговый вход для определения цвета окружающей среды.

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

Дополнительные материалы по теме
Музыкальная клавиатура на Ардуино
Динамики ардуино. Подключение динамиков к Arduino
Аналоговый вход, аналоговый выход, вывод в последовательный монитор порта
"Подключение фоторезистора к плате Ардуино" Урок № 2
Фоторезистор 5506
Подключение пищалки (BUZZER) к плате Ардуино
Звуки Ардуино из разных динамиков.
Музыкальная шкатулка. Ардуино
VU METR Музыка в цвете
Мелодии для Ардуино на пищалке. Пример и код.