Ардуино для начинающих. Урок 8. Аналоговые входы

Сегодня мы поговорим об аналоговых входах 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

Подключение фоторезистора к Arduino
Подключение фоторезистора к 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. Эти значения в вашем случае могут быть другими. Это зависит от номинала стягивающего резистора, от сопротивления вашего фоторезистора и уровня освещения в помещении. Загрузите первый скетч из этого урока и посмотрите какие крайние значения выводятся на экране.

По такому же принципу вы можете подключать множество других элементов и датчиков. Чаще всего продаются уже готовые датчики, и вам не придется самостоятельно фильтровать и отсеивать значения, подключать резисторы и т.д. В видео уроке наверху есть пример с подключением инфракрасного датчика расстояния. Там все очень просто.

Ардуино