В некоторых случаях нам может быть необходим аналоговый выход для управления устройством, для которого требуется аналоговый сигнал.
Arduino не имеет реального аналогового выхода, в котором напряжение может быть установлено на любое значение в определенном диапазоне. Тем не менее, Arduino имеет несколько выходов с широтно-импульсной модуляцией (ШИМ).
ШИМ - это метод модуляции, при котором цифровой выход используется для генерации сигнала с переменной мощностью. Для этого используется цифровой сигнал постоянной частоты, в котором коэффициент заполнения изменяется в соответствии с желаемой мощностью. Рабочий цикл представляет собой долю периода, в течение которого сигнал установлен на высокий уровень.
Не все цифровые выводы Arduino могут использоваться в качестве выходов ШИМ. Те, которые могут быть обозначены тильдой (~):
Несколько устройств предназначены для управления сигналами ШИМ, включая некоторые двигатели. Можно даже получить реальный аналоговый сигнал из сигнала ШИМ, если вы используете аналоговые фильтры.
В предыдущем уроке вы использовали цифровой выход для включения или выключения светодиодной подсветки. В этом уроке вы будете использовать ШИМ для управления яркостью светодиода в соответствии со значением аналогового входа, заданного потенциометром.
Когда на светодиод подается сигнал ШИМ его яркость изменяется в соответствии с рабочим циклом сигнала ШИМ. Вы собираетесь использовать следующую схему:
Эта схема идентична той, которая использовалась в предыдущем уроке для проверки аналогового входа, за исключением одного отличия. Поскольку невозможно использовать ШИМ с выводом 13, вывод цифрового выхода, используемый для светодиода, - это вывод 11.
Вы можете использовать макет для сборки схемы следующим образом:
Собрав схему, вы можете управлять светодиодом с помощью ШИМ с помощью следующей программы:
import pyfirmata import time board = pyfirmata.Arduino('/dev/ttyACM0') it = pyfirmata.util.Iterator(board) it.start() analog_input = board.get_pin('a:0:i') led = board.get_pin('d:11:p') while True: analog_value = analog_input.read() if analog_value is not None: led.write(analog_value) time.sleep(0.1)
Есть несколько отличий от программ, которые вы использовали ранее:
- В строке 10 вы устанавливаете светодиод в режим ШИМ, передавая аргумент 'd:11:p'.
- В строке 15 вы вызываете led.write() с analog_value в качестве аргумента. Это значение от 0 до 1, считанное с аналогового входа.
Ниже вы можете увидеть поведение светодиода при перемещении потенциометра:
Чтобы показать изменения в рабочем цикле, осциллограф подключается к контакту 11. Когда потенциометр находится в нулевом положении, вы можете видеть, что светодиод выключен, так как на выходе 11 у нас 0 В.
Когда вы поворачиваете потенциометр, светодиод становится ярче по мере увеличения рабочего цикла ШИМ. Когда вы полностью поворачиваете потенциометр, рабочий цикл достигает 100%. Светодиод горит постоянно на максимальной яркости.
В этом уроке мы рассмотрели основы использования Arduino и его цифровых и аналоговых входов и выходов. В следующем уроке вы увидите приложение для использования Arduino с Python для управления событиями на ПК.