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