Аналоговое входное напряжение повышается при работе двигателя

Я делаю автоматическую систему водяного завода. Я использую:

Arduino Uno

водяной насос 3,3-6В-https://www.amazon.com/Vipe-Micro-Submersible-Motor-Water/dp/B01N0X3CW4

Емкостный датчик влажности почвы - https://www.amazon.com/Gikfun-Capacitive-Corrosion-Resistant-Detection/dp/B07H3P1NRM

Я заметил, что при включении двигателя показания датчиков намного выше. Сначала я подумал, что проблема в датчике, но когда я измерил выход датчика в обоих случаях (когда двигатель включен и когда двигатель выключен), разницы не было, напряжение было одинаковым. Затем я измерил напряжение на аналоговом выводе А0, который я использовал, и увидел, что при включенном насосе происходит увеличение напряжения (+0,4 В), так что я предполагаю, что это напряжение добавляется к выходному напряжению датчика, которое дает мне более высокие значения на последовательном мониторе.

Для питания моего насоса я использую ту же схему что и в этом примере: https://www.devacron.com/arduino-tip120-control-dc-motor/

Просто кроме потенциометра есть мой датчик, питающийся через вывод Arduino 3,3 В (его GND подключен к Arduino GND). Я также попытался соединить все основания вместе в одной точке, но это не помогло. Я питал Arduino от USB и от источника питания 9 В, и в обоих случаях проблема была одна и та же. Попробовал включить насос и Arduino с одинаковыми и разными источниками питания, но тоже безуспешно.

Я должен также добавить, что нет никаких изменений в выводе AREF и 5V, когда насос работает. 4,97 В в обоих случаях.

Есть ли у кого-нибудь идеи, в чем может быть проблема и как ее решить?

Вот как я все подключил: https://imgur.com/a/I70lRVZ

Я также попробовал использовать керамические конденсаторы 0,1 мкФ и электролитические конденсаторы 10 Нф. как и было предложено, проводка его выглядит следующим образом: https://imgur.com/a/jWfkbJG Это не имело большого значения, проблема все еще существует.

, 👍2

Обсуждение

Ничего не приходит на ум сразу, по крайней мере, у меня нет веских оснований думать, что это действительно проблема. Даже с эталонной схемой и пониманием того, как вы эффективно заменили потенциометр датчиком, было бы неплохо иметь представление о реальной проводке. Иногда он просто раскрывает то, о чем ты и не думал упоминать., @timemage

Моя первая мысль заключается в том, что у вас есть проблема с шумом, либо сам датчик улавливает шум и неправильно интерпретирует его как вход, либо шум улавливается аналоговым выводом и мешает вашим показаниям. Вы можете попробовать сделать это без подключения двигателя насоса, чтобы изолировать проблему., @jwh20

@jwh20 без двигателя показания датчика стабильны при подключении к аналоговому контакту. Может ли быть проблема с Arduino? У меня нет другого только этого, но я не знаю, каковы шансы, что что-то не так...Я купил его только для этого проекта, и я должен также добавить, что в этом проекте у меня было подключено гораздо больше компонентов (я удалил все, кроме насоса и датчика, чтобы попытаться изолировать проблему, как вы сказали), и все остальное работает отлично, даже датчик bme280 и oled-дисплей, которые подключены к выводам A4 и A5. Может быть, это шум от насоса...Но я не могу удалить его полностью..., @marejosef

Почему бы тебе не показать, как у тебя все устроено? Я подозреваю, что у вас либо проблема с питанием, либо проблема с шумом, вызванная двигателем. Вам либо нужно увеличить подачу на ваш двигатель и/или фильтровать шум, производимый им., @jwh20

@timemage Я нарисую то, что сделал, без проблем и отредактирую свой основной пост, @marejosef

Это может помочь. Но четкие фактические фотографии реальной проводки не повредят., @timemage

@timemage jwh20 Я добавил ссылку в свой первый пост надеюсь, что это достаточно ясно, @marejosef

Попробуйте добавить несколько байпасных конденсаторов по выводам двигателя, а также от Vcc до GND на датчике влажности., @jwh20

У меня есть только одна мысль помимо того, что сказал jwh20, но это зависит от того, что ваш резистор 2,2 к на самом деле не является 2,2 к., @timemage

@timemage Да, это на самом деле резистор 2k на картинке, а не 2.2 вы правы, я ошибся. Я почти уверен, что это не текущая проблема. Я также попробовал с резисторами более высокого значения, даже попробовал просто включить двигатель все время непосредственно от источника питания, без этой транзисторной схемы и сигнала от Arduino, просто двигатель, диод, датчик и Uno, только с землей, соединенной вместе, и то же самое произошло. Поэтому я надеюсь, что конденсаторы решат мою проблему., @marejosef

Диод на вашем схематическом чертеже находится в неправильной конфигурации. Он должен был соединяться поперек двигателя с катодом на 5 В, а анод-с соединением двигателя и коллекторного штифта TIP120. См. Раздел [что такое защитный диод]. (http://learningaboutelectronics.com/Articles/What-is-a-protection-diode) для объяснения. Вы ошибаетесь, потому что предоставленная вами ссылка тоже имеет неправильную связь., @hcheung

@hcheung, сравните с изображением реальной проводки. Вероятно, они просто перевели его назад, пытаясь быстро составить диаграмму., @timemage


1 ответ


1

Попробуйте добавить несколько байпасных конденсаторов в двух точках, к которым я добавил стрелки:

Bypass Caps

Я предлагаю два в каждом месте, один из 0,1 мкФ (или аналогичный) керамический погружной или диск, а другой 1 или 10 мкФ электролитический. Имейте в виду полярность для электролитического.

О, и еще кое-что. Убедитесь, что ваш двигатель не снижает напряжение питания. Возможно, зарядного устройства вашего телефона недостаточно для питания двигателя. Используйте вольтметр на входе Arduino и проверяйте напряжение при работе двигателя. Если он падает намного ниже 5 В, вам нужен лучший источник питания. Что ж, теперь я вижу, что вы питаете двигатель только от этого источника питания 5 В. Так что, вероятно, это не так.

,

Большое вам спасибо за предложение. К сожалению, у меня дома их нет, но я мог бы получить их завтра, когда магазины будут открыты, поэтому я опубликую результаты тогда :), @marejosef

хорошо, я попробовал использовать конденсаторы, один керамический емкостью 0,1 мкФ и один электролитический емкостью 10 мкФ, где я вставил более длинный провод в сторону + и более короткий в сторону -. Я могу сфотографировать свою схему, если это необходимо, если вы думаете, что я, возможно, плохо ее подключил. Это не помогло. Значение датчика в воде составляет 250, а при включенном двигателе через несколько секунд значение возрастает до 450, затем примерно через 30 секунд снижается до 400, и все..., @marejosef

Пожалуйста, обновите свой вопрос фотографией того, что вы пробовали., @jwh20

хорошо, я добавил и поместил фотографию, надеюсь, она достаточно четкая, @marejosef

Ясно, что есть какие-то помехи, вызванные двигателем или вашей схемой управления двигателем, которые приводят к показаниям того, что, как я подозреваю, является очень чувствительным датчиком влажности "антенны", и колпачков просто недостаточно. Как насчет другого подхода? Вы можете попробовать откачать воду в течение нескольких секунд, а затем остановить насос и снять ряд показаний в течение нескольких минут, пока значения не стабилизируются. Затем повторяйте по мере необходимости, пока не доберетесь до нужной вам влажности., @jwh20

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

Я сомневаюсь, что Arduino неисправен. Такого рода проблемы может быть трудно отследить, но это также усугубляется тем, как вы это сделали до сих пор, в частности, из-за того, что провода, проходящие повсюду, довольно длинные, без экранирования и т. Д. Поскольку мы, по крайней мере в некоторой степени, рассмотрели мощность, следующим шагом является шум, вводимый в аналоговую входную линию от вашего датчика. Не расстраивайтесь по этому поводу, вы находитесь на стыке теории и реальных проблем. Проблемы с шумом не дают инженерам спать по ночам!, @jwh20

Этот конкретный датчик только что сгенерировал аналоговый сигнал, и АЦП в Arduino просто считывает это напряжение. Вы также можете попробовать подключить конденсатор, попробуйте меньший, например, ваш 0,1 мкФ, от этой сигнальной линии к GND. Это поможет "замедлить" сигналы на этой линии. Вам действительно не нужно быстро снимать показания в этом приложении, так как вы действительно никогда быстро не меняете содержание влаги., @jwh20

Спасибо за предложения :)), @marejosef