В отличие от цифровых входов, которые могут быть только включены или выключены, аналоговые входы используются для считывания значений в некотором диапазоне.
На Arduino Uno напряжение на аналоговом входе находится в диапазоне от 0 до 5 В. Соответствующие датчики используются для измерения физических величин, таких, например, как расстояния. Эти датчики отвечают за кодирование этих физических величин в надлежащем диапазоне напряжения, чтобы они могли считываться Arduino.
Для считывания аналогового напряжения Arduino использует аналого-цифровой преобразователь (АЦП), который преобразует входное напряжение в цифровое число с фиксированным числом битов. Это определяет разрешение преобразования. Arduino Uno использует 10-разрядный АЦП и может определять 1024 различных уровня напряжения.
Диапазон напряжения для аналогового входа кодируется числами от 0 до 1023. Когда подается напряжение 0 В, Arduino кодирует его в число 0. Когда подается напряжение 5 В, кодированное число равно 1023. Все значения промежуточного напряжения кодируются пропорционально.
Потенциометр - это переменный резистор, который можно использовать для установки напряжения, подаваемого на аналоговый вход Arduino. Вы подключите его к аналоговому входу для управления частотой мигания светодиода:
В схеме выше светодиод настроен так же, как и раньше. Клеммы потенциометра подключены к заземлению (GND) и контактам 5V. Таким образом, центральный терминал может иметь любое напряжение в диапазоне от 0 до 5 В в зависимости от его положения, которое подключено к Arduino на аналоговом выводе A0.
Используя макет, вы можете собрать эту схему следующим образом:
Перед тем, как управлять светодиодом, вы можете использовать схему для проверки различных значений, которые Arduino считывает в зависимости от положения потенциометра. Для этого запустите на компьютере следующую программу Python:
import pyfirmata import time board = pyfirmata.Arduino('/dev/ttyACM0') it = pyfirmata.util.Iterator(board) it.start() analog_input = board.get_pin('a:0:i') while True: analog_value = analog_input.read() print(analog_value) time.sleep(0.1)
В строке 8 вы устанавливаете analog_input в качестве аналогового входного вывода A0 с аргументом 'a:0:i'. Внутри бесконечного цикла while вы читаете это значение, сохраняете его в analog_value и выводите вывод на консоль с помощью print(). Когда вы изменяете потенциометр во время работы программы, вы должны увидеть примерно следующее:
0.0 0.0293 0.1056 0.1838 0.2717 0.3705 0.4428 0.5064 0.5797 0.6315 0.6764 0.7243 0.7859 0.8446 0.9042 0.9677 1.0 1.0
Полученные значения изменяются в диапазоне от 0, когда потенциометр находится в одном положении, до 1, когда он находится в противоположном состоянии. Обратите внимание, что все значения выводятся с плавающей запятой, что может потребовать преобразования в зависимости от приложения.
Чтобы изменить частоту мигания светодиода, вы можете использовать analog_value для контроля того, как долго светодиод будет гореть или выключаться:
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:13:o') while True: analog_value = analog_input.read() if analog_value is not None: delay = analog_value + 0.01 led.write(1) time.sleep(delay) led.write(0) time.sleep(delay) else: time.sleep(0.1)
Здесь вы вычисляете задержку как analog_value + 0.01, чтобы избежать задержки равной нулю.
В противном случае, в течение первых нескольких итераций обычно получается analog_value как none. Чтобы избежать появления ошибки при запуске программы, вы используете условное выражение в строке 13, чтобы проверить, является ли analog_value значением none. Затем вы контролируете период мигания светодиода.
Попробуйте запустить программу и изменить положение потенциометра. Вы заметите смену частоты мигающего светодиода:
К настоящему моменту вы уже видели, как использовать цифровые входы, цифровые выходы и аналоговые входы в своих цепях. В следующем уроке вы увидите, как использовать аналоговые выходы.