Цели урока:
- Познакомиться с понятием аналоговых сигналов.
- Научить использовать функции
analogRead()иanalogWrite(). - Объяснить, как работает АЦП (аналого-цифровой преобразователь).
- Закрепить знания на практике, создав проект с управлением яркостью светодиода с помощью потенциометра.
Теоретическая часть
Что такое аналоговые сигналы?
Аналоговые сигналы — это сигналы, которые могут
принимать любое значение в пределах определенного диапазона.
В отличие от цифровых сигналов, которые имеют только два
состояния (HIGH и LOW), аналоговые сигналы могут плавно изменяться.
Примеры аналоговых сигналов:
- Напряжение на потенциометре (от 0 до 5 В).
- Данные с датчиков температуры, освещенности или влажности.
Почему это важно?
Аналоговые сигналы позволяют измерять и управлять параметрами, которые изменяются плавно, например, яркостью света, температурой или скоростью вращения мотора.
АЦП (аналого-цифровой преобразователь)
Что такое АЦП?
АЦП (аналого-цифровой преобразователь) — это устройство, которое преобразует аналоговый сигнал (например, напряжение) в цифровой код, который может быть обработан микроконтроллером.
Как это работает в Arduino?
- Arduino Uno имеет встроенный 10-битный АЦП. Это означает, что он может преобразовать аналоговый сигнал в одно из 1024 значений (от 0 до 1023).
- Диапазон входного напряжения: от 0 до 5 В.
- 0 соответствует 0 В.
- 1023 соответствует 5 В.
Пример:
Если на аналоговый пин подано напряжение 2.5 В, АЦП вернет значение примерно 512.
Зачем это нужно?
АЦП позволяет Arduino "понимать" аналоговые сигналы, такие как напряжение на потенциометре или данные с датчиков.
Функции для работы с аналоговыми сигналами
Функция analogRead()
Назначение:
Функция analogRead() используется для чтения аналогового значения с пина.
Синтаксис:
analogRead(pin);
pin: Номер аналогового пина (например, A0, A1, A2 и т.д.).
Как это работает:
- Arduino Uno имеет 6 аналоговых входов (A0-A5).
- Функция возвращает значение от 0 до 1023, где:
- 0 соответствует 0 В.
- 1023 соответствует 5 В.
Пример использования:
int sensorValue = analogRead(A0); // Чтение значения с аналогового пина A0
Объяснение:
- Когда вы подключаете потенциометр к аналоговому пину, Arduino измеряет напряжение на среднем контакте потенциометра.
- Например, если потенциометр повернут наполовину, напряжение будет около 2.5 В, и
analogRead()вернет значение около 512.
Функция analogWrite()
Назначение:
Функция analogWrite() используется для управления аналоговыми устройствами с помощью ШИМ (широтно-импульсной модуляции).
Широтно-импульсная модуляция (ШИМ, или PWM — Pulse Width Modulation) — это цифровой способ имитации аналогового сигнала с помощью быстрого включения/выключения напряжения. Представьте, что вы включаете и выключаете свет очень быстро. Если он горит дольше, чем выключен, — кажется ярче. Если меньше — тусклее. Так работает ШИМ.
Синтаксис:
analogWrite(pin, value);
pin: Номер пина, поддерживающего ШИМ (например, 3, 5, 6, 9, 10, 11 на Arduino Uno). Помечается знаком ~.value: Значение от 0 до 255, где:- 0 — 0% скважности (полностью выключено).
- 255 — 100% скважности (полностью включено).
Скважность (Duty Cycle) - это отношение времени высокого уровня к периоду сигнала, выраженное в процентах:
Скважность = (Время "вкл"/Период) * 100%
- 0% — всегда 0 В (полностью выключено).
- 50% — половину времени 5 В, половину 0 В (среднее ~2.5 В).
- 100% — всегда 5 В (полностью включено).
Как это работает:
- ШИМ быстро переключает сигнал между
HIGHиLOW, изменяя длительность импульсов. - Например, если
value = 128, сигнал будет находиться в состоянииHIGH50% времени, а в состоянииLOW— 50% времени. - Это позволяет управлять яркостью светодиода или скоростью мотора.
Пример использования:
analogWrite(9, 128); // Установить яркость светодиода на 50%
Объяснение:
- Если вы хотите, чтобы светодиод светился на половину своей максимальной яркости, используйте значение 128.
- Для полной яркости используйте 255, а для выключения — 0.
Потенциометр
Что такое потенциометр?
Потенциометр — это переменный резистор, который позволяет плавно изменять сопротивление. Он часто используется для регулировки напряжения в аналоговых схемах.
Как это работает:
- Потенциометр имеет три контакта: два крайних и один средний.
- При повороте ручки средний контакт изменяет свое положение, что приводит к изменению сопротивления и, соответственно, напряжения.
Пример использования:
- Потенциометр можно использовать для управления яркостью светодиода или скоростью мотора.
Как подключить потенциометр:
- Подключите один крайний контакт к 5V.
- Подключите другой крайний контакт к GND.
- Подключите средний контакт к аналоговому пину (например, A0).
Практическая часть
Задание: Управление яркостью светодиода с помощью потенциометра
Цель задания:
Создать проект, в котором яркость светодиода регулируется с помощью потенциометра.
Необходимые компоненты:
- Светодиод.
- Резистор 220 Ом.
- Потенциометр.
- Провода.
- Макетная плата (можно и без нее).
Схема подключения (рисунок ниже):
- Подключите анод светодиода к пину 9 через резистор 220 Ом.
- Подключите катод светодиода к GND.
- Подключите крайние контакты потенциометра к 5V и GND.
- Подключите средний контакт потенциометра к аналоговому пину A0.
Код программы:
void setup() {
pinMode(9, OUTPUT); // Настройка пина 9 как выхода (ШИМ)
}
void loop() {
int potValue = analogRead(A0); // Чтение значения с потенциометра (0-1023)
int brightness = map(potValue, 0, 1023, 0, 255); // Преобразование в диапазон 0-255
analogWrite(9, brightness); // Установка яркости светодиода
}
Вот готовый проект на Wokwi, нажмите кнопку "Start the simulation" и покрутите потенциометр.
Объяснение кода:
- В
setup()настраиваем пин 9 как выход (ШИМ). - В
loop()читаем значение с потенциометра (от 0 до 1023) (код АЦП). - Преобразуем это значение в диапазон 0-255 с помощью функции
map(). - Устанавливаем яркость светодиода с помощью
analogWrite().
Как работает функция map():
- Функция
map()преобразует (интерполирует) значение из одного диапазона в другой. - В данном случае она преобразует значение от 0-1023 (потенциометр) в диапазон 0-255 (ШИМ).
Вопросы для закрепления:
- Что такое аналоговый сигнал?
- Как работает АЦП в Arduino?
- Какие функции используются для работы с аналоговыми сигналами?
- Как работает потенциометр?
- Как преобразовать значение с аналогового пина в диапазон 0-255?
Домашнее задание:
- Создайте проект, где скорость мигания светодиода регулируется с помощью потенциометра.
- Подключите два светодиода и заставьте их менять яркость в противоположных направлениях (когда один становится ярче, другой тускнеет).
Советы по работе в Wokwi:
- Используйте встроенные компоненты в Wokwi для сборки схемы.
- Экспериментируйте с разными значениями в функции
map(), чтобы лучше понять, как она работает. - Не бойтесь ошибаться — симулятор позволяет легко исправлять ошибки и пробовать новые идеи.
Итог:
Теперь вы знаете, как работать с аналоговыми сигналами в Arduino! Вы научились использовать функции
analogRead() и analogWrite(), а также создали проект с управлением яркостью
светодиода с помощью потенциометра.
Следующий урок: Работа с кнопками