Я пытаюсь построить термостат с Arduino. Я хочу подключить его к аккумулятору / зарядному устройству мобильного телефона, что делает напряжение системы достаточно переменным. Прямо сейчас я использую Arduino Uno, но как только он будет завершен, я перенесу его на Lilypad.
Сначала я попытался использовать датчик температуры TMP36 . Пока что это был полный провал. Хотя сам датчик выглядит очень стабильным, я не могу точно измерить его напряжение.
Использование встроенной справки 5v для аналоговых датчиков не работает на всех - даже на питание от USB Arduino в + 5V на самом деле + 4.8V (что сдвиги измеренной температуры на несколько градусов). Когда на плату подается питание от батареи, напряжение падает примерно до 4 В и измеряется температура небесно-реактивного двигателя. Я также пытался использовать + 3.3 В от платы в качестве эталона. Кажется, что он более стабилен, когда на плату подается питание от USB, но ее напряжение падает при работе от батареи.
Есть ли другой способ надежного измерения выходного напряжения датчика?
Для второго этапа я планирую использовать термисторы. Только что заказал пару этих 20К термисторов .
Насколько я понимаю, это должно быть легче измерить точно, если я построить делитель напряжения и использовать V_in в качестве опорного напряжения для АЦП.
Пара вопросов о них:
- Имеет ли смысл использовать несколько делителей напряжения с разными фиксированными резисторами для повышения точности?
- Я могу использовать программируемый вывод как V_in, и измерять температуру, используя несколько разных уровней напряжения. Хотя мне не ясно, увеличит ли это точность.
источник
Ответы:
Кажется, что вы знаете о проблеме с изменением опорного напряжением, и если вы используете устройство как TMP36 (фиксированные 10 / DEGC) нет ничего, что вы можете сделать, кроме использования опорного напряжения от чипа, чтобы стабилизировать вещи.
Однако, если вы используете RTD или термистор, то проблема не возникнет. Вы АЦП делает радиометрический измерение - он сравнивает вход АЦП для опорного напряжения, НО, если вы питания RTD или термистор (через подходящий резистор) из того же реф напряжения он не будет влиять на показания. Если значение увеличивается на 10%, то увеличивается и напряжение на АЦП.
источник
Я думаю, вам следует рассмотреть возможность использования цифрового датчика температуры, такого как DS18B20 / DS18S20, потому что он не зависит от точности вашего АЦП ATmega для измерения сигнала ана лога, он использует однопроводный цифровой протокол для сообщения о температуре.
Обратитесь к следующим учебникам
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino
источник
Ваше измерение будет таким же хорошим, как и эталонное напряжение для АЦП. Arduino по умолчанию использует напряжение питания в качестве эталонного напряжения, но в вашем случае правильным способом было бы использовать контакт Aref Arduino. Вы должны получить специальный чип под названием «Источник опорного напряжения» и подключите его к Арефа штифтом, а затем установить АЦП использовать внешнюю ссылку на Arduino код (
analogReference(EXTERNAL)
)Напряжение ссылки должно быть выбрано так, чтобы полный размах вашего датчика температуры будет вписываться в Referece напряжение. TMP36 будет выводить ~ 1.5В @ 100C, так что вы должны использовать ссылки выше 1.5V для измерения температуры до 100 ° С. Вы хотите, чтобы ваш эталон был как можно ближе к максимальному измеренному напряжению, чтобы получить максимально возможное разрешение.
Atmega328p имеет две внутренние ссылки, которые можно использовать без каких-либо внешних компонентов. Один 1,1 В, другой 2,56 В. Они, как правило, немного хуже, чем если бы вы использовали внешний выделенный компонент. Проверьте Arduino документацию для analogReference и ATmega328P спецификации для внутренней точности отсчета.
Если вы действительно хотите получить гайки с разными диапазонами, вы можете использовать несколько внешних ссылок и переключать их с помощью аналогового переключателя, например 74hc4051. Или вы можете переключаться между двумя внутренними ссылками.
С термисторами вы получите лучшие результаты, если вместо источника постоянного тока будете использовать источник постоянного тока. С другой стороны - немой резистор питается от стабильного опорного напряжения будет работать нормально.
При выборе внешнего эталона убедитесь, что у вас достаточно напряжения, чтобы выдержать его падение напряжения при питании от батарей, а батареи разряжены. Vref + Vdropout <Vbat-min.
источник
Отсутствие стабильного задания АЦП на самом деле является признаком другой проблемы в вашей цепи: вы не подаете на плату достаточно высокое напряжение. На это указывает падение напряжения 5 В до 4 В, а также падение напряжения 3,3 В.
Регулятор напряжения (MC33269D-5.0 IIRC) на плате Arduino имеет выходное напряжение ~ 1,0 В, поэтому для обеспечения стабильного выхода 5 В необходимо подать на него напряжение не менее 6 В. Батареи АА начинают работать при напряжении 1,5-1,6 В и почти разряжаются при напряжении 1,1 В, поэтому вы должны питать плату как минимум от 6 батареек АА для стабильной работы в течение всего срока службы батареи.
Работает правильно, вы можете использовать либо внутренний источник опорного напряжения АЦП или либо на 5V или 3.3V линии. Поскольку датчик температуры изменяется примерно на 10 мВ на градус Цельсия, можно использовать делитель напряжения, чтобы установить эквивалент опорного напряжения для максимального ожидаемого выходного сигнала датчика напряжения (например, 50 градусов C). Это даст более точное измерение.
Если вы хотите использовать менее 6 батарей типа АА, попробуйте повышающий преобразователь постоянного тока, например, https://www.sparkfun.com/products/10968 . Связанный пример берет 1V - 4V и составляет 5V. Выход будет подаваться непосредственно на вывод 5 В Arduino, минуя его регулятор.
Чтобы заставить плату работать дольше на батареях, переведите MCU в спящий режим между показаниями датчика. Rocketscream низкой библиотека питания отлично подходит для этой цели. Но это действительно полезно только при использовании эффективного регулятора / преобразователя постоянного тока, поскольку стандартный регулятор Arduino сам по себе потребляет 10 мА!
источник
Ответ на вопрос Есть ли другой способ надежного измерения выходного напряжения датчика?
АЦП использует опорное напряжение для перехода от аналогового к цифровому. Таким образом, если происходит изменение в опорном напряжении, преобразованные значения (то есть цифровое значение) будут изменяться. Цифровое значение будет отличаться для того же аналогового входа, если изменяется опорное напряжение.
Одним из простых вариантов является использование внутреннего эталонного напряжения внутри Arduino (т.е. контроллера Atmega).
См. Ссылку ниже, где приведен пример кода для использования внутреннего АЦП (имя функции Arduino - analogReference (DEFAULT))
http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
Я думаю, что это решит вашу проблему и нет необходимости переключаться на термисторы.
источник