Отсюда мы извлекаем первый урок аналого- цифрового преобразования: при измерении величин сигналов, поступающих из окружающего мира, предусматривайте неожиданные, предельные значения.
Преобразование диапазона
Самый простой способ преобразовать сопротивление терморезистора в значение напряжения — подобрать резистор, номинал которого приблизительно равен среднему сопротивлению терморезистора в интересующем нас температурном диапазоне. Соедините такой резистор и терморезистор последовательно, чтобы создать делитель напряжения, подайте 5 В на один конец и О В на другой, а затем измерьте напряжение в средней точке между компонентами, как показано на рис. 5.88.
Обычно, чтобы настроить такую схему, вам понадобилось бы подключить стабилизатор, обеспечивающий напряжение 5 В. Однако на плате Arduino есть встроенный стабилизатор напряжения и он выдает на выходе ровно 5 В (см. рис. 5.79). Вы можете сделать отвод от этого выхода и подключить его к макетной плате с помощью перемычки. Вам понадобится также сделать отвод от одного из заземляющих выходов платы Arduino и таким же образом подключить его к макетной плате.
Когда я пробовал это сделать и изменял температуру терморезистора с 25 до 37 °С, мультиметр показывал напряжение от 2,1 до 2,5 В. Вам предстоит самостоятельно проделать аналогичный эксперимент, чтобы проверить мои значения.
Очевидно, что с таким напряжением нашему микроконтроллеру не грозит опасность. Но теперь я вижу другую проблему: этот диапазон слишком мал и не обеспечивает оптимальной точности.
На рис. 5.89 проиллюстрировано преобразование входного напряжения в цифровой эквивалент. Диапазон от 2,1 до 2,5 В обозначен темной вертикальной полосой. Его можно преобразовать в число от 430 до 512, при этом разница составит 82 — это всего лишь небольшая часть полного диапазона от 0 до 1023.
Ограничиться узким диапазоном — все равно что использовать небольшое количество пикселов на фотографии с высоким разрешением.
Мы неизбежно ухудшим детализацию. Было бы неплохо, если бы мы каким-либо образом смогли преобразовать наше напряжение в цифровой диапазон из 500 значений, а не из 82.
Одним из способов добиться этого могло бы стать усиление напряжения, но для этого потребуется дополнительный компонент, например, операционный усилитель. Еще понадобятся резисторы в цепи обратной связи, и вся схема станет сложнее. Сама идея микроконтроллера сохранить простоту!
Есть еще одно решение — воспользоваться функцией платы Arduino, задающей нижнее максимальное напряжение для диапазона. Но для этого нужно подать эталонное значение нового максимального напряжения на один из контактов. Чтобы создать это напряжение, мне понадобился бы еще один делитель напряжения, а затем пришлось бы рассчитать новое преобразование входного напряжения в значения АЦП. В общем, я решил сначала написать простую программу, добиться ее правильного функционирования, а потом уже заняться улучшениями.
Поразмыслив немного, я понял, что диапазон из 82 значений будет пригоден для представления температур в пределах от 25 до 37 °С. При этом точность каждого шага АЦП составит примерно 0,15 градуса. Этого недостаточно для медицинского термометра, но вполне хватит для измерения комнатной температуры.
Сборка макета
Что ж, давайте попробуем. Но сначала определимся, как мы будем собирать макет устройства и подсоединять плату Arduino Uno, на которой установлен микроконтроллер.
Есть три способа соединить все компоненты:
• Приобрести устройство под названием protoshield, похожее на миниатюрную макетную плату, которая устанавливается поверх платы Arduino Uno и подключается к ее разъемам. Мне такой способ не нравится, потому что я предпочитаю собирать прототип на обычной макетной плате.
• Вынуть микроконтроллер из платы Arduino Uno и вставить в макетную плату, где размещены остальные компоненты вашей схемы. Но если вы сделаете это, то пропадет возможность загрузки программы в микроконтроллер. Понадобится также генератор колебаний, чтобы микроконтроллер работал на той же частоте, какая была у него на плате Arduino.