Сегодня мы поговорим об аналоговых входах Arduino. На разных платах ардуино имеется разное количество аналоговых входов. Так например, у Arduino Uno их 6, а у Arduino Nano их 8. Узнать сколько аналоговых входов на конкретной плате Ардуино вы можете, посмотрев описание плат в разделе «Платы».
Как мы уже знаем, цифровые пины могут быть как входом так и выходом и принимать/отдавать только 2 значения: HIGH и LOW. Аналоговые пины могут только принимать сигнал. И в отличии от цифровых входов аналоговые измеряют напряжение поступающего сигнала. В большинстве плат ардуино стоит 10 битный аналогово-цифровой преобразователь. Это значит что 0 считывается как 0 а 5 В считываются как значение 1023. То есть аналоговые входы измеряют, подаваемое на них напряжение, с точностью до 0,005 вольт. Благодаря этому мы можем подключать разнообразные датчики и резисторы (термо резисторы, фоторезисторы,).
В этом уроке используется:
Большая макетная плата на 1600 точек с 4 шинами питания: | Купить |
Arduino Uno: | Купить |
Arduino Nano: | Купить |
Фоторезисторы 20 штук: | Купить |
Инфракрасный дальномер: | Купить |
Высокоточный инфракрасный дальномер с I2C: | Купить |
Набор резисторов из 100 штук на все случаи: | Купить |
Соединительные провода 120 штук: | Купить |
Потенциометры с колпачками 5 штук: | Купить |
Подключение фоторезистора к Arduino
Как видите, схема очень проста. Обратите на стягивающий резистор на 10 кОм. Зачем он нужен и какой номинал лучше выбрать мы говорили на прошлом уроке. Теперь давайте напишем простой скетч, который будет выводить в COM порт значения с аналогово входа.
int sensePin = 0; // Пин к которому подключен фоторезистор
void setup() {
analogReferense(DEFAULT); // Задаем опорное значение напряжения. Эта строка не обязательна.
Serial.begin(9600); // Открываем порт на скорости 9600 бод.
}
void loop() {
Serial.println(analogRead(sensePin)); // Считываем значение и выводим в порт
delay(500); // задержка для того что бы значений было не слишком много
}
Как видите в скетче нет ничего сложного. Команда analogReferense() не обязательна. Я добавил ее просто для демонстрации.
Давайте сделаем что то более интересное. Например ночник с автоматическим включением, если яркость освещения падает ниже определенного уровня. Для этого нам необходимо добавить в нашу схему светодиод через резистор на 150 Ом. Его мы подключаем к контакту 9 на Ардуино. Теперь наша схема выглядит так:
Так же немного доработаем наш скетч.
int sensePin = 0; // Пин к которому подключен фоторезистор
int ledPin = 9; // Пин к которому подключен светодиод
void setup() {
pinMode(ledPin, OUTPUT); // назначаем пин ledPin выходом
}
void loop() {
int val = analogRead(sensePin); // Считываем значение с фоторезистора
if(val < 800) digitalWrite(ledPin, HIGH); //включаем светодиод если значение меньше 800
else digitalWrite(ledPin, LOW); // если нет то выключаем светодиод
}
Я убрал из скетча все лишнее. По комментариям в коде вы легко разберетесь что к чему. Если какая то конструкция вам не понятно вы можете посмотреть справочник языка программирования ардуино.
Теперь мы можем использовать ШИМ, что бы яркость свечения светодиода изменялась в зависимости от освещения. Для этого нем не надо менять схему. Мы внесем небольшие изменения в код и все будет работать.
int sensePin = 0; // Пин к которому подключен фоторезистор
int ledPin = 9; // Пин к которому подключен светодиод
void setup() {
pinMode(ledPin, OUTPUT); // назначаем пин ledPin выходом
}
void loop() {
int val = analogRead(sensePin); // Считываем значение с фоторезистора
val = constrain(val, 750, 900); // эта функция обрезает все значения вне заданного диапазона
int ledLevel = map(val, 750, 900, 255, 0); // отражаем значения с фоторезистора на значения от 255 до 0
analogWrite(ledPin, ledLevel);
}
Обратите внимание на значения 750 и 900. Эти значения в вашем случае могут быть другими. Это зависит от номинала стягивающего резистора, от сопротивления вашего фоторезистора и уровня освещения в помещении. Загрузите первый скетч из этого урока и посмотрите какие крайние значения выводятся на экране.
По такому же принципу вы можете подключать множество других элементов и датчиков. Чаще всего продаются уже готовые датчики, и вам не придется самостоятельно фильтровать и отсеивать значения, подключать резисторы и т.д. В видео уроке наверху есть пример с подключением инфракрасного датчика расстояния. Там все очень просто.