В предыдущей статье мы узнали о том что такое аналого- цифровой преобразователь. Микроконтроллер, на базе которого работает наш электронный конструктор, имеет встроенный аналого- цифровой преобразователь. Попробуем им воспользоваться.
На плате конструктора установлен переменный резистор. Переменный резистор состоит из полукруглой пластины, покрытой веществом, имеющим электрическое сопротивление, и скользящего контакта с ручкой. У переменного резистора три вывода — по концам пластины и скользящий контакт. Сопротивление меняется в зависимости от длины отрезка резистивной пластины от ее начала до скользящего контакта. Чем больше этот путь, тем выше сопротивление.
Рисунок 1. Переменный резистор. Внешний вид, устройство и условное обозначение
Переменный резистор можно представить как схему из двух резисторов
С помощью переменного резистора будем получать аналоговый сигнал. Используем широко распространенную схему резисторного делителя напряжения. Резисторный делитель — это два последовательных участка цепи, называемых плечами, сумма напряжений на которых равна напряжению питания. Плечо между минусом питания и средней точкой называют нижним, а другое — верхним.
Резисторный делитель используется для деления напряжения. Например, если верхнее и нижнее плечи имеют одинаковые сопротивления, то напряжение на средней точке делителя равно половине напряжения питания. Такой делитель делит напряжение на 2.
Подключим нижнее плечо с земле, а верхнее к напряжению питания. Тогда при вращении ручки переменного резистора на его средней точки напряжение будет изменяться от 0 до напряжения питания (3,3в в нашем конструкторе). Подключим среднюю точку ко входу аналого- цифрового преобразователя и будем измерять напряжение на ней.
#define ACD_PIN A0 int value = 0; void setup() { } void loop() { }
В строке 1 мы задаем псевдоним ACD_PIN
для номера канала АЦП. В нашем микроконтроллере только один канал и он имеет номер A0.
#define ACD_PIN A0
В строке 3 мы объявляем переменную value
с новым для нас типом int
и присваиваем ей значение 0
. Переменные типа int
могут хранить только целые числа в диапазоне
от -32 768 до 32 767.
int value = 0;
В строке 6 мы с помощью функции begin()
включаем последовательный порт Serial
микроконтроллера для отправки сообщений на компьютер. В качестве параметра функция begin()
принимает число бод (число символов в секунду), определяющее скорость передачи сообщений.
В цикле просим АЦП оцифровать текущее напряжение на его входе cпомощью функции analogRead()
и записать полученное значение в переменную value
. Результатом является число в диапазоне от 0 до 1023.
После чего с помощью функции println()
«печатаем» значение в последовательный порт Serial
.
Чтобы увидеть «напечатанные» значения включите монитор порта, нажав соответствующую кнопку в правом верхнем углу Arduino IDE. Подробнее про монитор порта.
Задержка в строке 13 нужна для того, чтобы сообщения микроконтроллера не «печатались» слишком быстро.
Попробуй изменить значение задержки и посмотреть как изменится скорость вывода сообщений в монитор порта.
В принципе наша программа может обойтись без переменной value
, т.к. она только хранит считаное значение с АЦП, при этом изменения значения не происходит. Мы можем удалить строку 3 с объявлением переменной value
, а в бесконечном цикле сразу передавать полученное значение функции analogRead()
в качестве аргумента в функцию печати Serial.println()
. В итоге тело бесконечной функции loop()
будет выглядеть следующим образом.
Serial.println(analogRead(ACD_PIN)); delay(200)