Наш телефон: +7-495-790-41-12

Аналоговые входы/выхода Arduino


На этом уроке мы закончим знакомиться с возможностями получения и передачи сигналов с помощью Arduino. Рассмотрим аналоговые входы и выходы. Для этого урока нам понадобится: Arduino, макетная платафоторезистор, резистор на 200 Ом, резистор на 10 кОм, светодиод и соединительные провода.


Если раньше все было просто – есть сигнал или нет, то теперь все будет гораздо хитрее. Аналоговым сигналом является, например, звук. Если встать у дороги, где постоянно едут машины, уровень шума постоянно меняется. Однако современные компьютеры цифровые и работать могут только с цифровыми сигналами. Как же тут быть? Для решения этой проблемы используется Аналого-Цифровые Преобразователи (АЦП).

Эти устройства преобразуют, как не трудно догадаться из названия, аналоговый сигнал в цифровой. Что было понятнее, разберем на примере. Arduino имеет 10 битный АЦП, т.е. подаваемый на вход сигнал может быть преобразован в цифровые значения от 0 до 1023. Если подключить микрофон к аналоговому входу Arduino и попасть в место с идеальной тишиной, то будет значение 0, на улице днем -200-300, а если встать рядом с взлетающим самолетом – 1023. Цифры абстрактные, но теперь должно быть понятно, как это работает. Мы можем любой плавный сигнал (звук, свет, напряжение) преобразовать в число от 0 до 1023.

На этом уроке мы соорудим прототип адаптивного светильника – т.е. чем вокруг будет темнее, тем ярче будет гореть светодиод.

Для этого мы используем фоторезистор. Его свойство в том, что он меняет свое сопротивление в зависимости от яркости освещения. Что бы использовать фоторезистор, мы соберем простой делитель напряжения. Эта штука используется постоянно, так что изучить ее действительно очень важно.



По сути это последовательное соединение двух резисторов. Только один из них не простой, а фоторезистор. 

Для тех, кто не знаком с этим и не понимает, что тут нарисовано, есть специальный дополнительный урок по основам электротехники.

Получается, что напряжение на участке будет меняться вслед за сопротивлением. 

Вот так это выглядит в собранном виде на Arduino:


Таким образом, мы сможем определить освещенность – чем больше света падает на фоторезистор, тем больше напряжения пойдет на вход. Под «входом» сейчас мы понимаем аналоговые входы:


В данном случаи мы используем первый.

Рассмотрим код:

int a=0;

void setup()
{  
  Serial.begin(9600);
}
void loop()
{ 
  a=analogRead(1);
  Serial.println(a);  
  delay(100);
}

Тут мы видим кое-что новое. Во-первых, аналоговые входы не нужно инициировать в блоке Setup(). Во-вторых, мы видим новую команду - Serial.begin(9600); С помощью нее мы сообщаем плате, что будем обмениваться данными с компьютером – нам же нужно как-то увидеть, что у нас приходит на аналоговый вход? В основном цикле программы мы считываем сигнал с входа в переменную и отправляем ее на последовательный порт. Теперь получим эти данные на компьютере. Отправим программу на Ардуино. После того, как она успешно запишется и начнет работать, необходимо вызвать монитор последовательного порта. Это маленький значек в правом верхнем углу:


Откроется новое окно, в котором мы увидим бегущие числа:


Это и есть сигнал с нашего датчика. Попробуйте накрывать фоторезистор руками и убедитесь, что значения меняются. 

Гораздо интереснее наблюдать  эти изменения не на экране, а в реальном мире, поэтому мы соберем «адаптивный ночник»

Для этого просто добавим светодиод (как обычно через резистор на 200 Ом). 


Подключим его к 3 выходу. На ардуино нет отдельных аналоговых выходов, просто некоторые цифровые могут работать как аналоговые. На плате они помечены знаком «тильда». Третий выход как раз такой. 

Для начала давайте определим, какие минимальные и максимальные значения мы получаем. У меня получилось от 300 до 800. Помним, что АЦП Ардуино может выдавать от 0 до 1024. Обрежем крайние значения:

int a=0;
void setup()
{  
  Serial.begin(9600);
  pinMode(3, OUTPUT);
}
void loop()
{ 
  a=analogRead(1);
  if(a<300)
    a=0;
  if (a>850)
    a=1024;  
  Serial.println(a);  
  analogWrite(3, 256- (a / 4));
  delay(100);
}

Теперь, если значения на входе падают ниже 300, светодиод гаснет, а если выше 800, горит на полную. Обратите внимание, что значения аналогового выхода лежат в диапазоне 0-256, поэтому мы делим приходящие с входа значения на 4. 

Если вспомнить предыдущий урок, то можно без труда сделать что бы светодиод включался и выключался при определенном уровне освещения. Сделайте это самостоятельно. Этот принцип можно использовать для автоматического освещения или сигнализации. В дальнейшим мы рассмотрим такие проекты.


Написать отзыв

Внимание: HTML не поддерживается! Используйте обычный текст.
    Плохо           Хорошо

Популярные Статьи

Урок 2 - Цифровой вход, работа с кнопкой

Урок 2 - Цифровой вход, работа с кнопкой

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

Урок 3 - аналоговые входы-выходы, фоторезистор, последовательный порт

Урок 3 - аналоговые входы-выходы, фоторезистор, последовательный порт

На этом уроке мы закончим знакомиться с возможностями получения и передачи сигналов с помощью Arduino. Рассмотрим аналоговые входы и выходы. Для этого урока нам понадобится: Arduino, макетная пла..

Урок 1: Цифровой выход

Урок 1: Цифровой выход

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

Основы программирования Arduino

Основы программирования Arduino

Это первая статья из цикла, в которой мы рассмотрим самые базовые понятия. Она позволит без труда разобраться тем, кто совершенно не знаком с программированием и поможет понимать уроки из нашего базов..