Проблемы с чтением LM35 при длинном (?) Ethernet-соединении.

У меня есть небольшой вопрос. У меня есть Arduino Uno, считывающий 4 датчика температуры (LM35) в 4 разных комнатах. Происходит следующее: две ближайшие комнаты дают стабильные значения, а две дальнейшие дают очень нестабильные значения (температура продолжает колебаться на +-30C относительно реальных значений).

Я соединил все датчики с помощью кабелей Ethernet, самый длинный из которых составляет около 8–10 м.

Происходит ли эта проблема из-за шума, улавливаемого в линии? На этом пути нет сильных электромагнитных источников. Я также измерил значения напряжения на конце Arduino с помощью мультиметра: все значения стабильны (и правильны) и не отражают поведение, обнаруженное Arduino.

Кроме того, я попытался заменить LM35 в самой дальней комнате фоторезистором (тот, что есть в стартовом комплекте), и на этот раз значения, считываемые Arduino, совершенно стабильны. Я знаю, что LM35 работает, потому что протестировал его на макетной плате.

Может ли кто-нибудь мне помочь? Любая идея приветствуется.

Изменить: я добавляю скетч, хотя это очень простая настройка: Единственное отличие от реальной планировки состоит в том, что здесь также имеется экран Ethernet.

схемы

, 👍2

Обсуждение

Можете ли вы показать схему, желательно с явно обозначенной проводкой Ethernet. Возможно, вам будет полезно добавить схему линейного драйвера на любой конец или переключиться на цифровой датчик температуры, такой как DS18S20. В качестве альтернативы вы можете приобрести несколько чудесно дешевых модулей NRF24 и сделать все беспроводным; это сработало для меня., @CharlieHanson

Спасибо, NRF24 действительно хорош, но боюсь, что мне не хватит места для его библиотеки на Arduino. Но если я переключусь на цифровой датчик температуры, не столкнусь ли я с той же проблемой и мне все равно понадобится линейный драйвер?, @gabelach

Я не знаю; это зависит от того, как вы его подключите. Когда я сказал «Проводка Ethernet с явной маркировкой», я имел в виду, что вы должны показать цвета используемых вами проводников. Это не воображаемая версия Фрицинга: *что ВЫ на самом деле используете*., @CharlieHanson

30C — это довольно сильное изменение... вы видите отклонение аналоговых сигналов ±300 мВ. Проверьте надежность соединений в проводке. Также проверьте, какое напряжение получает LM35 на контакте питания после длительного кабеля Ethernet., @Majenko

Извините, я неправильно понял ваш пост. Я использую зеленый, оранжевый и бело-оранжевый проводники для 5 В, земли и сигнала соответственно. Напряжение, получаемое LM35, составляет около 4,2 В, и с помощью мультиметра я не вижу такой разницы. Проблема также останется, если я поменяю аналоговые входы на Arduino., @gabelach

По крайней мере, вы используете витую пару для сигнала/земли. Интересно, увидите ли вы улучшение, если соедините бело-зеленый провод с землей?, @CharlieHanson


2 ответа


0

Краткий ответ

Добавьте задержку между каждым чтением, 100 мс должно быть достаточно.

Длинный ответ

LM35 — аналоговое устройство, и для считывания напряжения на сигнальном выводе используется внутренний АЦП ATmega328. Принцип работы АЦП Arduino — это процесс выборки и хранения:

  1. разомкнуть цепь внутреннего конденсатора
  2. зарядить конденсатор
  3. отключить цепь
  4. сравнить конденсатор с опорным напряжением

Поскольку между всеми 6 аналоговыми контактами используется только одна такая цепь, вам необходимо дать конденсатору зарядиться, что происходит намного медленнее на длинных линиях, имеющих немалое сопротивление, а также немаловажную емкость.

На ваши показания могут повлиять и другие провода и линии электропередачи рядом с вашим кабелем Ethernet, но в этом случае вам поможет экранирование кабеля Ethernet, при правильном использовании.

,

Спасибо большое, попробую, как только вернусь к настройке., @gabelach


1

У LM35 возникают проблемы с управлением любой емкостной нагрузкой, поэтому длинные кабели, как правило, не являются хорошей идеей, если вы полагаетесь на сигнал напряжения. В таблице данных для него (которая у меня есть с веб-сайта Texas Instruments) есть несколько стратегий, позволяющих несколько уменьшить эту проблему.

Подход, который я успешно применил, заключается в использовании сигнала тока, а не сигнала напряжения. Преимущество этого метода заключается в том, что вам понадобится только двухпроводная витая пара (я сделал витую пару самостоятельно — ее легко использовать для относительно коротких участков).

Идея состоит в том, что вы подключаете выход LM35 к контакту заземления с известным номиналом резистора (в примере из таблицы данных указан резистор сопротивлением 200 Ом). Поскольку напряжение составляет 10 мВ на градус, ток будет 10/R мА на градус. Будет дополнительный небольшой ток от самого устройства LM35, но он небольшой и практически постоянный. Затем подключите питание и землю к одному концу витой пары.

С другой стороны, необходимо преобразовать текущий сигнал обратно в напряжение, чтобы ваш Arduino мог его прочитать. Просто поместите резистор (опять же, 200 Ом, который используется в примере из таблицы данных) между низким выводом витой пары и OV, высоким выводом, подключенным к 5 В, и измерьте напряжение на этом резисторе.

Следует следовать рисунку 17 в таблице данных TI.

Другие вещи, которые помогают получить более стабильные и точные показания;

Выберите время для снятия показаний, когда у вас не работает что-либо еще, что может помешать (беспроводная связь, ультразвуковые датчики, двигатели, соленоиды и т. д.).

Прочитайте несколько раз. Не обращайте внимания на первые два.

Возьмите среднее значение оставшихся показаний (например, возьмите 5 показаний, проигнорируйте первые два и отсортируйте остальные по порядку. Затем возьмите среднее значение).

Надеюсь, это поможет.

,