Датчик температуры LM35 в настоящее время находит достаточно широкое применение в различных электронных проектах, но иногда он может вести себя достаточно «капризно». И если его подключение к плате Arduino поначалу может показаться очень легкой задачей, то на самом деле это может превратиться в сплошные мучения.
Первоначально мы предполагали, что датчик неисправен, но после тестирования около 15 датчиков мы снова и снова сталкивались с одной и той же проблемой; все эти датчики были взяты из одной и той же партии из 85 датчиков, которые были у нас в лаборатории. Мы пытались не только протестировать многочисленные датчики с помощью Arduino, но и измерить выходной сигнал датчика с помощью мультиметра, однако каждый протестированный нами датчик давал странные результаты. После этого мы были уверены, что проблема в датчике. Мы попробовали кучу разных вещей, просмотрели множество обсуждений на форуме и обнаружили, что мы не единственные, у кого возникла эта проблема, и, в конце концов, мы не смогли найти решение. Поэтому в данной статье мы рассмотрим возможные причины неисправности датчика температуры LM35 и способы их устранения, обобщив в ней весь опыт наших мучений с этим датчиком.
На нашем сайте вы можете посмотреть следующие электронные проекты с применением датчика LM35:
- цифровой термометр на микроконтроллере PIC и датчике LM35;
- измерение температуры в комнате с помощью Raspberry Pi и датчика LM35;
- система удаленного мониторинга здоровья пациента на Arduino;
- цифровой термометр на Arduino и датчике температуры LM35;
- измерение температуры с помощью микроконтроллера AVR и датчика LM35.
Проблема 1. Выходное напряжение LM35 возвращается к нулю
Итак, как и любой другой проект, мы начали с Arduino и датчика температуры LM35 и подключили его в соответствии со схемой, показанной ниже.
Собранная конструкция этого проекта показана на следующем рисунке.
После того, как аппаратные подключения были выполнены, мы загрузили базовый скетч в Arduino UNO (рассмотрен ниже) и наблюдали в окне последовательного монитора ситуацию что выходной сигнал колеблется от 0 ° C до 35 ° C. Это было первое необычное поведение, с которым мы столкнулись.
Поскольку значения быстро прокручивались в окне последовательного монитора, мы решили открыть окно последовательного плоттера и были потрясены, увидев синусоидальную волну, выдаваемую датчиком.
Ниже представлен скриншот окна последовательного плоттера, где датчик LM35 был подключен к Arduino. Согласно схеме, Arduino питалась напряжением 5В от ноутбука.
Решение проблемы нестабильности значений LM35
Результаты нас очень шокировали, поэтому мы сделали то, что сделал бы любой другой инженер на данный момент: мы начали читать даташит на датчик. Почитав некоторое время техническое описание, мы обнаружили кое-что интересное.
В техническом описании датчика температуры LM35 рекомендуется использовать демпферную цепь RC и развязывающий конденсатор. И на следующем рисунке представлена наша схема с учетом этих доработок.
Фактическое изображение аппаратного обеспечения, где мы подключили RC-демпфер и развязывающий конденсатор, показано на рисунке ниже.
Для развязывающего конденсатора мы использовали конденсатор емкостью 104 пФ, а для RC-демпфера мы использовали конденсатор емкостью 224 пФ и резистор сопротивлением 100 Ом. Как только мы это сделали, выходной сигнал в окне последовательного монитора стал выглядел так, как показано ниже.
Как видите, это ничего не изменило, поскольку выходной ток, выходящий из датчика температуры LM35, очень мал, а выходной конденсатор заряжается очень медленно, поэтому мы получили результат, аналогичный показанному выше.
Код Arduino для измерения данных датчика температуры LM35
Теперь, когда мы увидели проблемы, связанные с датчиком, давайте посмотрим на код, который использовался для измерения данных о температуре. Чтобы прочитать данные датчика температуры LM35, нам нужно использовать аналоговый вывод Arduino, поскольку выходной сигнал датчика является аналоговым.
Начнем с определения аналогового контакта для Arduino.
1 |
#define sensorPin A0 |
Далее у нас есть функция setup, в которой мы инициализируем последовательный порт для отладки со скоростью 9600 бод.
1 2 3 4 |
void setup() { // Begin serial communication at 9600 baud rate Serial.begin(9600); } |
В функции loop мы считываем необработанные данные, поступающие от датчика, и сохраняем их в переменной raw_adc_data .
1 2 |
// Get the raw Voltage Reading from LM35 Sensor int raw_adc_data = analogRead(sensorPin); |
Далее мы вычисляем истинное значение напряжение по считанному с выхода АЦП значению.
1 2 |
// Convert the ADC data to Voltage float voltage = raw_adc_data * (5.0 / 1024.0); |
Затем мы преобразуем данные о напряжении в данные о температуре и печатаем выходные данные в окне последовательного монитора.
1 2 3 4 5 |
// Convert the ADC data to Voltage float voltage = raw_adc_data * (5.0 / 1024.0); // Print the temperature in Celsius Serial.print("Temperature = "); Serial.println(temC); |
Наконец, мы добавляем небольшую задержку для стабильности проводимых измерений.
1 2 |
// wait half a second between readings delay(500); |
Проверка датчика LM35 вручную с помощью мультиметра
После всех неудачных попыток с Arduino мы попробовали кучу разных идей. В этом разделе статьи мы обсудим эти идеи.
Для нашей первой попытки мы только что подключили 5 В и GND к контактам датчика и подключили выход датчика к выходу мультиметра UNI-T. Также мы добавили мультиметр от HTC Instruments для вывода значений температуры.
Как вы можете видеть, мы получаем отрицательное напряжение от датчика LM35. Это справедливо для всех 15 различных датчиков температуры LM35, которые мы протестировали.
Следующее, что мы сделали, это добавили развязывающий конденсатор и RC-демпферную цепь, согласно таблице данных. Мы также попытались измерить выходной сигнал, как показано на схеме выше.
Как вы можете видеть на изображении выше, выходное напряжение датчика составляет -159,1 мВ, но это неверно, поскольку температура в помещении во время тестирования составляла 30°C. Согласно даташиту, выходное напряжение датчика должно составлять около 300мВ.
LM35: проблемы с нагревом
Мы обнаружили серьезные проблемы с нагревом датчика поскольку в технических характеристиках указано, что этот датчик может работать при напряжении от 4 до 30 В, а потребление тока должно быть менее 60 мкА при нормальной работе. Но в нашем случае мы наблюдали экстремальное потребление тока в 220 мА или даже больше; изображение ниже показывает именно это.
Как вы, наверное, можете себе представить, после этого датчик сильно нагрелся и выпустил волшебный дым.
Проблема 2. Выходное напряжение LM35 снижается при повышении температуры
После добавления демпферной цепи и развязывающего конденсатора выходное напряжение датчика температуры LM35 стало стабильным, поэтому мы решили немного прогреть его с помощью нашей термофеновой станции, но нас снова встретило разочарование. Выходное напряжение датчика начало уменьшаться, а выходное значение в окне последовательного монитора начало уменьшаться. Помимо всех вышеперечисленных проблем, мы также столкнулись с этой проблемой.
В итоге мы не смогли разгадать загадку нашего загадочного датчика LM35, и нам пришлось выбросить все 85 наших датчиков. Мы до сих пор не знаем, в чем заключалась проблема: был ли это производственный дефект или все 85 датчиков были поддельными? Остался вопрос, на который должна ответить остальная часть сообщества.
2 ответа к “Датчик температуры LM35 не работает — что делать”
Вы не одни такие. Из 10 датчиков ни один не работает. Звонится как транзистор.
Да, что то крупно вам не повезло с датчиками