Могу ли я запустить 3 устройства на Arduino Uno с разными источниками питания?
Я новичок в подобных проектах. Я хотел бы поработать над проектом теплицы с помощью Arduino Uno. Цель состоит в том, чтобы иметь возможность измерять температуру и управлять лампой обогрева, определять влажность и управлять увлажнителем, а также подключать датчик гидратации почвы и подключать небольшой водяной насос для орошения. Может ли Uno поддерживать всю эту мощность, которая теоретически может работать одновременно? Как будет выглядеть управление тремя изолированными функциями в Sketch?
@Hale Tussing, 👍1
2 ответа
Ваш вопрос состоит из двух частей:
Требования к питанию: Фактическое требование к электропитанию зависит от устройств, но Arduino, безусловно, не сможет обеспечить питание для нагревательной лампы. Он просто не может обеспечить такой большой ток (вы бы сожгли Arduino). Но Arduino тоже питается только снаружи. Я думаю, у вас есть источник питания, который может обеспечить достаточную мощность для всех устройств. Затем можно подключить эти устройства параллельно к источнику питания (т.е. + и - от питания лампы обогрева идет напрямую к блоку питания). Таким образом, ток для устройств не протекает через Arduino. Arduino будет использовать только управляющие сигналы, которые не имеют большого тока. Датчики обычно представляют собой либо аналоговые датчики (которые подключаются к аналоговым контактам только с незначительными токами), либо используют интерфейсы связи, что также нормально. Текущие устройства вывода (увлажнитель и тепловая лампа) либо имеют цифровой контакт управления, интерфейс связи, либо они должны управляться через реле (в зависимости от конкретных устройств).
Управление всеми устройствами: Arduino может выполнять только одно действие за раз. Но это не проблема, так как вы можете выполнять действия последовательно очень быстро. Например, напишите по одной функции для каждого устройства, которым вы хотите управлять. В этой функции вы общаетесь/управляете устройством в соответствии с некоторыми переменными (например, измеренной температурой). Тогда функция
loop()
может выглядеть так же просто, как:void loop(){ measure_temperature(); measure_humidity(); measure_soil_hydration(); control_humidifier(); control_headlamp(); }
Если вы хотите делать это только периодически (не все время), вы можете добавить
delay()
или, что еще лучше, использоватьmillis()
, как в примерBlinkWithoutDelay
( в Интернете также есть много руководств поmillis()
). Убедитесь, что отдельные функции не блокируются. Они должны сделать то, что им нужно сделать, и быстро уйти. Не нужно долго оставаться в петле или ждать там события.
Да, вы можете запустить все это из UNO, но вам, вероятно, будет лучше использовать ESP32, чтобы вы могли добавить веб-портал в свой проект за относительно ту же цену.
Вы сможете запускать HDT или аналогичный датчик и датчик температуры, а также датчик гидратации непосредственно с MCU. Для других компонентов потребуется что-то еще, например, переключатель питания NPN MOSFET с низкой стороны (например, FDS3890), которым можно было бы управлять с помощью MCU. Вам нужно будет просмотреть таблицы данных для каждого компонента, который вы покупаете, найти номинальную мощность и убедиться, что у вас есть компоненты, рассчитанные на поддержку напряжения и тока ваших устройств (хорошее эмпирическое правило — вдвое больше ожидаемого использования, поэтому, если Если у вас есть 12-вольтовый насос, который может поглотить 3 А тока, вы должны получить полевой МОП-транзистор, который может работать с 24 + вольтами и 6 + амперами.
У каждого датчика, скорее всего, есть библиотека, которую вы будете использовать, и образцы. Поиск в Google каждой из них и работа над одной отдельной функцией за раз — отличный способ изучить и продвинуть свой проект.
Некоторые микроконтроллеры имеют только одно ядро, и все они объединены в цикл. Другие (например, ESP32) имеют несколько ядер и могут использовать RTOS для планирования задач.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату