Урок 9. Как получить данные с аналоговых датчиков
Продолжаем курс «Ардуино для начинающих». В очередном уроке мы продолжим изучать работу со входами и выходами Ардуино и, в частности, разберём взаимодействие с аналоговыми датчиками.
Аналоговые датчики повсеместно встречаются в самодельных электронных проектах. Фоторезисторы и термисторы относятся к аналоговым датчикам. Потенциометры и джойстики формально датчиками не являются, но функционируют по тому же принципу. Суть проста: все они изменяют своё сопротивление при изменении измеряемой величины.
Однако Arduino не умеет измерять сопротивление напрямую — ей доступно лишь измерение напряжения. Каким же образом Arduino получает информацию от аналоговых датчиков?
Для этого применяется делитель напряжения. Если вы знакомы с понятиями тока, напряжения и сопротивления, приведённая ниже информация будет вам понятна. Для тех, кто пока совсем не разбирается в этих вопросах, скоро мы запускаем курс «Электроника для начинающих», в котором рассмотрим все основы электричества.
Но вернёмся к теме и рассмотрим схему делителя напряжения:
Выходное напряжение можно задать на любое значение в диапазоне от 0 вольт до входного напряжения, варьируя номиналы резисторов R1 и R2.
Точное значение выходного напряжения определяется по следующей формуле:
Если входное напряжение равно 5 вольтам, а сопротивления R1 и R2 одинаковы, выходное напряжение составит половину от входного, то есть 2,5 вольт:
Если R1 обладает значительно большим сопротивлением по сравнению с R2, выходное напряжение будет приближаться к 0 вольт:
Говоря простым языком — если правый резистор на схеме имеет малый номинал, ток предпочитает проходить через него на выход, поскольку через высокое сопротивление слева протекать значительно труднее.
Соответственно, если R2 имеет значительно большее сопротивление по сравнению с R1, выходное напряжение будет приближаться к входным 5 В:
Если вместо R1 или R2 установить аналоговый датчик, выходное напряжение будет расти или падать в зависимости от сопротивления датчика.
К примеру, подключим фоторезистор и делитель напряжения к Arduino следующим образом:
Выход делителя напряжения соединён с выводом Arduino A0.
Теперь напишем код для считывания напряжения на выводе A0 и его отображения в последовательном мониторе.
Сначала объявим переменную для хранения номера контакта — photoresistorPin — и присвоим ей значение A0:
Затем инициализируем последовательный монитор в функции void setup():
В секции void loop() объявим переменную для хранения показаний напряжения (light) и присвоим ей результат вызова analogRead():
Функция analogRead() указывает Arduino считать напряжение с аналогового вывода и преобразовать его в число от 0 до 1023.
Номер пина (или переменная с номером пина) указывается в скобках.
Поскольку значение напряжения сохранено в переменной light, мы можем вывести его в последовательный монитор при помощи Serial.println():
Функция Serial.println() способна выводить текст, переменные и даже результаты вызова функций. Для вывода текста заключите его в кавычки:
Serial.println("Этот текст будет отображаться на последовательном мониторе");
Для вывода переменной просто укажите её имя:
Serial.println(sensorReading);
Для вывода результата функции поместите вызов функции в скобки:
Serial.println(digitalRead (13));
Функция delay() в строке 10 (см. выше) обеспечивает паузу в 100 миллисекунд, замедляя вывод и делая его удобнее для чтения.
После загрузки кода на последовательном мониторе должны отобразиться примерно такие показания:
Эти числа будут меняться в диапазоне от 0 до 1023 в зависимости от сопротивления фоторезистора. При ярком освещении фоторезисторы имеют низкое сопротивление, что повышает напряжение на выводе A0 и увеличивает отображаемые значения.
В темноте фоторезисторы демонстрируют высокое сопротивление, что понижает напряжение на выводе A0 и уменьшает показания в мониторе. Фоторезисторы прекрасно подходят для управления освещением. Например, с их помощью можно включать лампу при наступлении темноты. Для управления лампой через фоторезистор используйте переменную освещения в теле условного оператора if:
Когда значение напряжения, сохранённое в переменной light, опустится ниже 400, оператор if сработает и relayPin перейдёт в состояние ВЫСОКОГО напряжения.
Об аналоговых датчиках предстоит узнать ещё немало, но именно эти сведения являются отправной точкой для знакомства с ними.
В следующем уроке мы обобщим полученные знания и наконец создадим первый проект, в котором полноценно поработаем с Ардуино и светодиодами.