Ардуино плюс Python

Урок 13. Использование аналоговых выходов

В некоторых случаях нам может быть необходим аналоговый выход для управления устройством, для которого требуется аналоговый сигнал.

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)

Есть несколько отличий от программ, которые вы использовали ранее:

  1. В строке 10 вы устанавливаете светодиод в режим ШИМ, передавая аргумент 'd:11:p'.
  2. В строке 15 вы вызываете led.write() с analog_value в качестве аргумента. Это значение от 0 до 1, считанное с аналогового входа.

Ниже вы можете увидеть поведение светодиода при перемещении потенциометра:

Чтобы показать изменения в рабочем цикле, осциллограф подключается к контакту 11. Когда потенциометр находится в нулевом положении, вы можете видеть, что светодиод выключен, так как на выходе 11 у нас 0 В.

Когда вы поворачиваете потенциометр, светодиод становится ярче по мере увеличения рабочего цикла ШИМ. Когда вы полностью поворачиваете потенциометр, рабочий цикл достигает 100%. Светодиод горит постоянно на максимальной яркости.

В этом уроке мы рассмотрели основы использования Arduino и его цифровых и аналоговых входов и выходов. В следующем уроке вы увидите приложение для использования Arduino с Python для управления событиями на ПК.