Управляемый Arduino блок питания
Обновлено: 21.11.2024
Я построил схему, как показано ниже. Цель состоит в том, чтобы питать Arduino от батареи и максимизировать срок службы батареи, отключая питание, когда она не используется. Нет необходимости, чтобы Arduino периодически просыпался или что-то в этом роде. Единственное «пробуждение» будет, когда переключатель замкнут.
Идея состоит в том, что внешнее действие (нажатие S1) включит питание Arduino. Arduino сделает все, что нужно (например, сообщит о действии), а затем выключится.
Включение питания Arduino при нажатии S1 работает нормально.
Первое, что сделает Arduino, — поднимет D2 на высокий уровень. Это также работает нормально, поскольку загорается светодиод 1.
Однако, когда я отпускаю S1, питание немедленно отключается.
Я ожидаю, что, поскольку D2 высокий, это будет держать транзистор (T2) включенным до тех пор, пока Arduino не «сделает все, что нужно», прежде чем перевести D2 в низкий уровень.
В целях тестирования я быстро мигал встроенным светодиодом в течение 3 секунд, прежде чем перевести D2 в низкий уровень. это позволяет достичь трех целей:
- Я знаю, что Arduino "загрузилась" и что D2 ВЫСОКИЙ (я также вижу это на LED1)
- Быстрое мигание показывает мне, что питание Arduino включено (что полезно для наблюдения за случаем отказа D2, но по какой-то причине это не приводит к отключению питания Arduino).
- Дает мне время удерживать S2 закрытым достаточно долго, чтобы Arduino «загрузилась», и дает мне достаточно времени, чтобы отпустить S2 до завершения 3-секундной операции (быстрое мигание встроенного светодиода).
Однако, как упоминалось выше, как только я отпускаю переключатель S2, питание Arduino немедленно отключается.
Я попытался удалить светодиод 1, чтобы "протолкнуть" все питание от D2 через транзистор, но, похоже, это ничего не меняет.
Ниже приведена принципиальная схема. Диод (D1) предназначен для защиты цифровых контактов Arduino от 9 В, но позволяет сигналу D2 Arduino управлять транзистором. Конденсатор C1 предназначен для подавления дребезга переключателя.
После схемы идет тестовая программа.
Конечно, я понятия не имею, почему это не работает. Итак, мой вопрос: почему это не позволяет Arduino управлять своим источником питания через транзистор и его цифровой выход на контакте 2 (со светодиодом 1 или без него)?
Вот тестовая программа. Комментарии должны разъяснять назначение основных частей программы:
Одна из самых полезных вещей, которые вы можете сделать с помощью Arduino, — это использовать ее для управления электронными устройствами с более высоким напряжением. Любое устройство, которое вы обычно подключаете к настенной розетке, может быть активировано датчиком или управляться другими способами с помощью Arduino. Возможности безграничны, учитывая разнообразие датчиков и модулей, доступных нам сегодня.
В этом уроке мы будем использовать реле на 5 В для включения и выключения тока в розетке. Мы будем использовать Arduino и датчик для управления переключением реле. Чтобы узнать больше о реле 5 В и различных режимах его работы, прочитайте нашу статью «Как настроить реле 5 В на Arduino».
Мы всегда можем подключить реле напрямую к устройству, которым хотим управлять, но практичнее сделать шаг ближе к источнику и включить питание на выходе. Таким образом, вы можете использовать его для нескольких устройств без необходимости переподключения реле или отключения питания устройства. В этом проекте мы подключим блок питания к заземленному удлинителю и установим внутри блока реле на 5 В, чтобы мы могли управлять им с помощью Arduino.
Создание управляемой Arduino розетки
ВНИМАНИЕ!! – ЭТОТ ПРОЕКТ ПРЕДПОЛАГАЕТ РАБОТУ ПОД ВЫСОКИМ НАПРЯЖЕНИЕМ, КОТОРОЕ МОЖЕТ ПРИВЕСТИ К СЕРЬЕЗНЫМ ТРАВМАМ, СМЕРТИ И/ИЛИ ПОДЖАТЬ ВАШЕМУ ДОМУ. ПОЖАЛУЙСТА, ДЕЙСТВУЙТЕ С ОСТОРОЖНОСТЬЮ И ВСЕГДА УБЕДИТЕСЬ, ЧТО ЦЕПИ ОТКЛЮЧЕНЫ ПЕРЕД РАБОТОЙ НА НИХ.
Мы установим реле 5В в линию с плюсовым (горячим) проводом розетки 120-240В в нормально разомкнутой конфигурации. Отрицательный (нейтральный) провод и заземляющий провод подключаются напрямую от шнура питания к розетке. Реле 5 В включает ток в розетку всякий раз, когда получает сигнал 5 В от Arduino.
Вот диаграмма, показывающая связи:
Соберите части
Части, которые я использовал, перечислены ниже, но вы можете использовать и другие типы. Это как раз то, что я нашел в моем местном Home Depot. Я включил ссылки на эти детали на Amazon, чтобы вы могли понять, сколько они стоят, но я получил все (кроме Arduino) менее чем за 22 доллара США.
Конструирование коробки
Перережьте шнур на удлинителе и определите, какой провод соединяется с каждым контактом на вилке с помощью самодельного тестера целостности цепи. У моего шнура три провода. Нейтральный (белый) провод подключается к большему штырьку, горячий (черный) провод подключается к меньшему штырьку, а заземляющий (зеленый) провод подключается к круглому штырьку:
Выньте одну из заглушек из электрической розетки:
Установите коннектор NM/SE:
Снимите примерно 3–4 дюйма внешней пластиковой оболочки с электрического шнура, затем вставьте его в коробку через разъем NM/SE:
Подключение реле
Отрежьте 4-дюймовый кусок горячего провода и снимите около 1/4 дюйма изоляции. Вставьте его в клемму NO реле и затяните винт на клемме реле, чтобы обеспечить надежное соединение. Сейчас самое время зачистить другой конец этого провода, чтобы мы могли подключить его к электрической розетке позже:
Подключите сигнальный, Vcc и заземляющий провода к реле:
Зачистите нейтральный и заземляющий провода на электрическом шнуре, чтобы на них оставалось около 3/4 дюйма оголенной меди. Мы подключим их к розетке позже. Горячему проводу требуется всего около 1/4 дюйма, так как он будет вставлен в клемму C реле:
Вставьте горячий провод от электрического шнура в общий (C) вывод реле. Дважды проверьте, чтобы обе клеммы реле были надежно прикручены:
Подключение горячего, нейтрального и заземляющего проводов к электрической розетке
Правая сторона розетки с меньшим разъемом является горячей стороной розетки. Горячий (черный) провод от клеммы NO реле будет прикручен к горячей клемме одним из золотых винтов:
Левая сторона розетки с большим слотом является нейтральной стороной. Нейтральный (белый) провод шнура питания будет прикручен к нейтральной клемме одним из серебристых винтов:
Гнезда D-образной формы предназначены для контакта заземления. Заземляющий (зеленый) провод шнура питания будет прикручен к клемме заземления зеленым винтом:
Прежде чем подсоединять провода к розетке, поместите реле и все провода внутри коробки, чтобы убедиться, что они хорошо подходят. Самое время обрезать провода и затянуть винты на разъеме NM/SE:
Теперь подключите провод заземления к клемме заземления розетки:
Подключите нейтральный провод к нулевой клемме розетки:
Подключите горячий провод от реле к горячему контакту розетки:
Теперь, когда все электрические соединения выполнены, мы можем привинтить розетку к розетке:
Прикрепите крышку электрической коробки:
На этом все. Теперь у нас есть электрическая розетка на 120 В, которой можно управлять с помощью Arduino. Все выглядит чистым, и провода управления реле готовы к макетной плате:
Тестирование
Давайте протестируем электрическую розетку, управляемую Arduino, запрограммировав осветительную арматуру на выключение, когда влажность превысит определенный уровень. Для создания этой схемы вам понадобится датчик влажности и температуры DHT11.
Подключение Arduino
Следуйте этой схеме, чтобы выполнить соединения:
Программирование Arduino
После выполнения всех подключений мы готовы программировать Arduino. Загрузите эту программу на плату для управления розеткой с помощью DHT11:
Спасибо за чтение! Это, наверное, одна из самых полезных вещей, которые я когда-либо создавал. Вы обязательно должны построить его для себя, особенно если вы заинтересованы в управлении устройствами в вашем доме. Дайте мне знать в комментариях, если у вас есть какие-либо вопросы об этом проекте, и обязательно поделитесь им, если вы знаете кого-то еще, кому он тоже может понравиться!
Может ли кто-нибудь помочь мне сделать блок питания, выходное напряжение которого будет контролироваться Arduino, с автоматическим сохранением последней настройки напряжения в энергонезависимой памяти?
Я прохожу обучение по программе OJT (программа обучения без отрыва от производства). Передо мной была поставлена задача сделать управляемый Arduino источник питания с переменным напряжением, выходы которого можно переключать между несколькими предустановленными значениями с помощью кнопочного управления. Это похоже на переключение между двумя разными выходами при нажатии назначенной кнопки.
Вот что я сделал до сих пор. Я сделал блок питания на основе LM317 с выходным напряжением, регулируемым потенциометром. Я следовал этому уроку на YouTube. Он работает хорошо, но меня попросили обновить его.
Вместо использования потенциометра для регулировки напряжения я хочу использовать кнопки переключения для выбора между двумя или более предустановленными уровнями напряжения. Каждая кнопка переключателя имеет соответствующее напряжение.
Эта ссылка также может быть актуальной.
Код указан под электрической схемой.
ARDUINO КАК ИСТОЧНИК ПИТАНИЯ
Я предлагаю вам убедиться, что ваши слова означают то, что вы имеете в виду. Пример (по ссылке), который вы привели, переключает две батареи. «Альтернатор» — это «Генератор переменного тока», вращающаяся электромеханическая машина, используемая для преобразования механической энергии в электрическую. Регулятор генератора переменного тока — это устройство, которое контролирует выходное напряжение (обычно) генератора переменного тока. Если вы хотите попеременно переключаться между двумя батареями, вам нужен селектор батареи с программным управлением, в котором выбранная батарея хранится в памяти.
AC. Я значительно переписал ваш вопрос, основываясь на оригинале и том, что вы сказали в комментариях. Я сделал это, потому что слова, которые вы использовали, создавали неправильное впечатление о том, чего вы хотите достичь. Если вам не нравятся мои правки, пожалуйста, измените их. Я мог бы легко дать ответ, НО было бы полезно узнать, что говорят другие люди.
@RussellMcMahon Спасибо за редактирование вопроса. Я ценю то, что ты сделал. Это было именно то, что я должен был спросить.
2 ответа 2
Если вы хотите выводить предустановленные уровни напряжения с отдельными шагами, а не в «аналоговом» диапазоне от X до Y вольт, то ответ содержится в техническом описании LM317:
Подключите каждый из ВХОДОВ через базовый резистор 1 кОм к контактам Arduino. Выбор различных значений для всех резисторов, конечно же, позволит вам изменять Vout, включая или выключая каждый транзистор, по отдельности или вместе. Вы можете использовать любой стандартный транзистор: 2N3904, 2N2222, BC548 и т. д., но я мог бы вместо этого использовать (маломощный) MOSFET, такой как BSS138 (и опустить базовый резистор). Конечно, вы можете использовать дополнительные линии резисторов/транзисторов, если хотите больше выходных параметров. Я рекомендую использовать резистор R2, чтобы Vout всегда был ограничен, в противном случае, если Vout достаточно высок, вы можете повредить все, что питается от Vout, из-за некоторых неуправляемых напряжений.
Расчет значений резисторов – это ваша математическая задача. Если вы действительно приложите немного интеллектуальных усилий, вы можете изменить Vout линейными шагами с минимальным использованием контактов Arduino:
Это показывает, что с N контактами Arduino вы можете иметь уровни (N^2)-1. Использование R2 дает ваш окончательный уровень, когда все INPUT отключены.
Если вы хотите снизить напряжение Vout до 1,25 В, добавьте транзистор/МОП-транзистор, который напрямую соединяет R1/ADJ с землей. Включение этого параметра снизит напряжение Vout до 1,25 В, независимо от состояния других ВХОДОВ.
Я хотел бы добавить несколько дополнительных замечаний по поводу этого интересного подхода к цифровому управлению выходным напряжением. То, что описано в оригинальном техническом описании, на самом деле является очень «минималистичной» 4-битной схемой ЦАП. Для некоторого обоснования было бы полезно изучить эти два документа от AnalogDevices: One и Two.
Я опасаюсь давать полный ответ, не зная, что от ВАС ожидается - похоже ли это на задание, где вас проверяют на понимание и то, что вы узнали. Вам будет полезно следующее. Вам нужно предоставить дополнительную информацию, если вам нужна дополнительная помощь с этими схемами.
Вот существующий вопрос по обмену стеками. Я вижу, что ответил на него в 2011 году :-).
Как работает эта схема питания? (MCU + LM317)
Схема и мой предыдущий ответ должны сильно помочь.
В вашем случае вы применяете ШИМ с помощью аналога. Запишите на R1.
Вы ДОЛЖНЫ понимать, как работает схема, а не просто применять ее.
Оригинал здесь с описанием схемы, со схемой здесь
На этой странице журнала EDN есть аналогичная схема. Горшок между контактами 1 и 5 обычно не используется.
В другом вопросе об обмене стеками есть очень полезное предупреждение об ограничениях нагрузки на операционные усилители в аналогичной схеме.
Проблемы управления LM317 с ОУ - 2013
Здесь можно почерпнуть много возможных идей - поиск = источник питания с регулируемым напряжением lm317 - это чрезвычайно мощный способ поиска информации - ЕСЛИ картинка стоит тысячи слов, то она бесценна. Обратите внимание на используемые термины.
Есть несколько неудачных дизайнов, которые могут выглядеть нормально, но вести себя плохо.
Несмотря на подробное описание, эта плохая конструкция использует «управление без обратной связи», а выходное напряжение зависит от нагрузки и лишь «отчасти контролируется».
Меня спросили, почему я думаю, что эта схема "разомкнутая". Я не смог найти полную принципиальную схему на странице, но эта схема была показана для выходного каскада. Если это НЕ используемая схема, было бы «хорошо» иметь легкий доступ ко всей схеме.
ЕСЛИ это действительно используемая схема, то:
Назовите транзисторы Q1 Q2 Q3 Q4 в порядке слева направо.
Назовите предполагаемое выходное напряжение = Vset = Vdac x (R6 + R7)/R7.
Vdac подается на базу Q1 и усиливается Q1 и Q2 для формирования желаемого выходного напряжения, появляющегося на коллекторе Q2. Меньшее напряжение появляется как Vout из-за падения Vbe в Q3 и Q4. По мере увеличения тока нагрузки Vout будет «падать», тем самым увеличивая привод до Q4. Это, в свою очередь, увеличивает нагрузку на транзистор Q3, и напряжение на эмиттере Q3 будет падать, увеличивая возбуждение Q3. Фактические напряжения Vbe будут зависеть от коэффициента бета (коэффициента усиления по току) транзисторов Q3 и Q4, их температуры (которая зависит от теплоотвода, температуры нагрузки и окружающей среды) и производственного отклонения. При отсутствии нагрузки или при очень малых нагрузках Vout будет примерно на 1 В ниже Vset. При больших нагрузках Vbe_Q3 будет в диапазоне 0,6-0,8 В, а Vbe_Q4 будет 0,8 В+. Таким образом, Vout будет примерно на 1,5+ Вольт ниже Vset и будет варьироваться (по крайней мере) с учетом факторов, упомянутых выше.
Это по-прежнему пригодная для использования конструкция, но Vout можно было бы «достаточно легко» сделать гораздо более стабильным с нагрузкой за счет обратной связи от Vout к усилителю Q1-Q2, по сути формируя компаратор, который сравнивает Vset и Vout.
Обновление:
Эта [ссылка предоставлена NilsB] МОЖЕТ быть реальной принципиальной схемой или близкой к ней. Это более ранний дизайн 2005 года, который, по-видимому, очень похож на более позднюю версию.
Похоже, это не открытый цикл в широком смысле. Vout по-прежнему отделен от Vset, а обратная связь программного обеспечения позволяет ему настраивать Vset, чтобы сделать Vout тем, что он хочет, на основе «подтолкнуть и посмотреть». т.е. Vset не является фиксированным соотношением относительно Vout, поэтому он никогда не может установить его и заставить его «просто отслеживать». Таким образом, он не стабилизируется автоматически при изменении нагрузки или температуры, и существует переменный drp между k x Vset и Vout.
Программное обеспечение быстрое, но не такое быстрое, как замкнутый контур в аппаратном обеспечении, что позволяет Vout отслеживать Vset в пределах мВ с временной задержкой настолько короткой, насколько вы предоставляете контур усилителя ошибки.
Это принципиальная схема 2005 года, то есть более ранняя версия, чем изначально упомянутый V3. Можно предположить, что он не «ушел назад» в концепции дизайна. Странно, что он не включает всю принципиальную схему или хорошее обсуждение предоставленной обратной связи по току и напряжению. Возможно, он хотел продать комплекты, а не отдать свой окончательный дизайн. Ссылка на продажу наборов больше не работает, поэтому он не управляет ни тем, ни другим.
Я бы предпочел добавить простой аппаратный усилитель ошибки, чтобы Vout = k x Vset, а ЗАТЕМ измерить Vout и Iout с помощью АЦП (как он это делает). Затем Vout по существу «устанавливается и забывается» с дополнительной возможностью проверки того, что Vout является тем, чем оно должно быть (что позволяет, например, обнаружить большую перегрузку). очень плохо".
Кроме того, Vout включает падение напряжения на резисторах измерения тока - около 0,5 В/А. Измерение с помощью 2 каналов AD C, как он делает, позволяет это компенсировать. Если бы резисторы Isense были в подача «высокой стороны» перед регулятором, это устранит эту вариацию, но несколько усложнит измерение тока.
Как сделать регулируемый источник питания с помощью Arduino UNO?
Источник питания является основным и важным требованием для электронного и электрического оборудования и схем. Существуют различные типы схем и оборудования, поэтому их потребность в источнике питания различна для разных схем электроники. Например, для модулей Wi-Fi, реле, двигателей и т. д. требуется разное напряжение. На рынке у нас нет разных источников питания для каждой электроники, поэтому мы генерируем свой собственный источник питания с помощью различных методов. Простым решением для этого является использование батареек.
Батарейки обычно используются для питания электронной схемы и проектов, поскольку они легко доступны и легко подключаются. Но они быстро разрядились, и тогда нам нужны новые батареи, также эти батареи не могут обеспечить большой ток для питания мощного двигателя. Таким образом, батареи разряжаются, а также делают схему громоздкой.Также батареи нагреваются, когда электроника используется дольше или чрезмерно, и со временем срок службы батарей уменьшается. Чтобы преодолеть эту проблему, мы предлагаем лучшее и эффективное решение, которое можно использовать в любой схеме. В этом проекте мы покажем вам, как мы можем создать переменный источник питания из Arduino UNO.
Используя этот проект, вы сможете получить переменный источник питания в соответствии с вашим электронным оборудованием, не беспокоясь о зарядке, разрядке, проблемах с нагревом и т. д. Существует множество способов создания регулируемого источника питания, но это самый простой способ, поскольку он требует дешевых и легкодоступных компонентов. Итак, давайте рассмотрим компоненты, необходимые для этого проекта.
Оглавление
Необходимые компоненты
- Ардуино УНО
- ЖК-дисплей 16 × 2
- Конденсаторы 100 мкФ
- Резисторы 1 кОм
- Перемычки
- Блок питания 5 В
- Транзистор 2N2222
Схема переменного источника питания
Прежде чем приступить к этим проектам, расскажите нам немного о проекте.
Ардуино УНО
Arduino UNO — это платформа с открытым исходным кодом, используемая для разработки проектов в области электроники. Его можно легко запрограммировать, стереть и перепрограммировать в любой момент времени. На рынке доступно множество плат Arduino, таких как Arduino UNO, Arduino Nano, Arduino Mega, Arduino lily pad и т. д. с различными характеристиками в зависимости от их использования. В этом проекте мы собираемся использовать Arduino UNO для автоматического управления бытовой техникой. Он имеет микросхему микроконтроллера ATmega328, работающую на тактовой частоте 16 МГц. Это мощное устройство, которое может работать с протоколами связи USART, I2C и SPI.
Эта плата обычно программируется с помощью программного обеспечения Arduino IDE с использованием кабеля micro USB. ATmega328 поставляется с предварительно запрограммированным загрузчиком на плате, что упрощает загрузку кода без помощи внешнего оборудования. Он имеет широкое применение в создании проектов или продуктов электроники. Для программирования платы используются языки C и C++, которые очень просты в освоении и использовании. Arduino IDE значительно упрощает программирование. Он разделяет код на две части: void setup() и void loop(). Функция void setup() запускается только один раз и используется в основном для запуска какого-либо процесса, тогда как void loop() состоит из части кода, которая должна выполняться постоянно.
Эта модель состоит из 6 аналоговых входных контактов и 14 цифровых контактов GPIO, которые можно использовать в качестве входных выходов, 6 из которых обеспечивают выход ШИМ и аналоговый сигнал с использованием функций pinMode(), digitalWrite(), digitalRead() и AnalogRead(). 6 аналоговых входных каналов от контактов A0 до A5 обеспечивают 10-битное разрешение. Плата может получать питание от USB-кабеля, работающего от 5 В, или от разъема постоянного тока, работающего от 7 до 20 В.
На борту имеется регулятор напряжения для выработки 3,3 В для работы маломощных устройств. Поскольку ATmega328 работает с протоколами связи USART, SPI и I2C, имеет контакты 0 (Rx) и 1 (Tx) для связи USART, контакты SDA (A4) и SCL (A5) для I2C и SS (10), MOSI (11) , MISO (12) и SCK (13) для протокола связи SPI.
АЦП на Arduino UNO
Arduino UNO имеет на борту 6 каналов АЦП, которые можно использовать для обнаружения или считывания аналоговых сигналов в диапазоне от 0 до 5 вольт. Когда мы соединяем датчики с микроконтроллером, таким как Arduino UNO, датчик генерирует аналоговые выходные значения, а Arduino UNO воспринимает цифровые значения. Поэтому АЦП помогает преобразовывать значения датчиков в аналоговые значения и подает их в микроконтроллер. Существует множество приложений АЦП, таких как измерение температуры, измерение расстояния, измерение скорости и множество датчиков, которые генерируют аналоговые значения.
Arduino UNO имеет 10-битный АЦП, что означает, что его значение изменяется от 0 до 1023 на каждом шаге. Это называется разрешением, которое указывает количество дискретных значений, которые он может произвести в диапазоне аналоговых значений.
Поскольку максимальное напряжение АЦП составляет 5 вольт, каждый шаг АЦП в диапазоне от 0 до 1023 имеет значение, эквивалентное примерно 5 мВ. На плате Arduino UNO есть 6 каналов АЦП, которые от A0 до A5 означают, что одновременно он может управлять или взаимодействовать с 6 устройствами, которые генерируют аналоговые значения.
Arduino IDE предоставляет встроенную функцию для чтения аналоговых значений: AnalogRead(pin).
Просто указывая номер контакта от A0 до A5, к которому подключены устройства, эта функция помогает нам считывать аналоговые значения.
ШИМ на Arduino UNO
Рабочий цикл сигнала:
Доля, в течение которой сигнал включен в течение полного периода, называется рабочим циклом.
Продолжительность рабочего цикла = 100 * тонн / (тонна + грузоподъемность)
Обычно используется для управления мощностью, подаваемой на нагрузку, путем включения и выключения сигнала. Например, его можно использовать для управления интенсивностью света или скоростью какого-либо двигателя. После вызова функции AnalogWrite() вывод будет генерировать устойчивую прямоугольную волну с указанным рабочим циклом до следующего вызова AnalogWrite() или вызова digitalRead() или digitalWrite() на том же выводе.
Частота сигнала:
Частота сигнала означает, насколько быстро сигнал завершает свой цикл, то есть за сколько времени он переключается из состояния ВКЛ в состояние ВЫКЛ или наоборот. Таким образом, при определенном рабочем цикле выход ведет себя как постоянное аналоговое напряжение. Частота ШИМ-сигнала на большинстве выводов составляет примерно 490 Гц. На Uno и подобных платах контакты 5 и 6 имеют частоту примерно 980 Гц. Контакты 3 и 11 на Leonardo также работают на частоте 980 Гц
аналоговая запись (контакт, рабочий цикл)
Pin: принимает вывод на Arduino UNO, используемый для генерации аналогового вывода.
Рабочий цикл: принимает значения в диапазоне от 0 (мин.) до 255 (макс.) в качестве входных данных для изменения рабочего цикла.
ЖК-дисплей 16×2
Описание контактов ЖК-модуля 16×2:
Работа переменного источника питания с использованием Arduino
Правильно подключите провода, как показано на принципиальной схеме. В этом проекте мы получаем напряжение, полученное на выходной клемме, и подаем его на вход одного из каналов АЦП. Далее канал АЦП выдает цифровое значение, которое затем отображается на ЖК-дисплее 16×2. Кнопки, используемые в проекте, предназначены для увеличения и уменьшения напряжения и подключены к контактам 4 и 5 Arduino UNO. Поскольку Arduino UNO имеет 10-битное разрешение, что означает, что оно варьируется от 0 до 1023, а максимальное напряжение АЦП составляет 5 вольт, поэтому один бит равен 5/1024 = 4,9 милливольта (приблизительно). Таким образом, при увеличении и уменьшении мы перемещаем цифровое значение в диапазоне от 0 до 1023.
Теперь мы считываем значение АЦП на канале A0. Arduino IDE предоставляет встроенную функцию AnalogRead(pin) для чтения значений АЦП, здесь вывод A0, так как канал A0 на Arduino UNO. Далее мы используем контакт 3 для Pwm Arduino UNO. Arduino IDE предоставляет функцию AnalogWrite(pin,Duty Cycle) для генерации желаемого выходного напряжения с заданным рабочим циклом на выводе 3.
Теперь, нажав две кнопки, мы изменяем коэффициент заполнения ШИМ-сигнала, в результате чего изменяется выходное напряжение. Одна кнопка предназначена для увеличения рабочего цикла, а другая — для уменьшения рабочего цикла. Значение ШИМ Arduino Uno изменяется от 0 до 255, где 0 как минимум для достижения 0 вольт и 255 как максимум для достижения 5 вольт. Вывод 3 далее подается на NPN-транзистор, который обеспечивает переменное напряжение на своем эмиттере и действует как переключающее устройство.
База транзистора будет иметь переменный коэффициент заполнения pwm, и, следовательно, мы можем получить переменное выходное напряжение на клемме. Поскольку напряжение не является линейным, мы подключаем конденсаторы, чтобы отфильтровать шум в переменном выходном напряжении.
Пояснение кода
Это встроенная библиотека для использования ЖК-дисплея. Он предоставляет функции, которые можно легко использовать для отображения символов на ЖК-дисплее.
Жидкокристаллический ЖК-дисплей принимает номер контакта, к которому подключены контакты данных и контакты RS, RW и E ЖК-дисплея. Поскольку мы устанавливаем опорное напряжение на 2,5 вольта, мы устанавливаем рабочий цикл на 50%, устанавливая ref_volt на 125.
Контакт 3 Arduino UNO настроен как выход ШИМ, контакты 4 и 5 настроены на вход для увеличения и уменьшения напряжения.
Функция lcd.begin устанавливает количество символов на ЖК-дисплее. В начале мы отображаем на экране «Переменное напряжение».
Переменная Value считывает цифровое значение, полученное из канала АЦП A0, и преобразует это цифровое значение в значение напряжения. AnalogWrite обеспечивает ШИМ на выводе 3 Arduino UNO.
Это проверяет, нажата ли кнопка увеличения или нет. Если кто-то нажимает кнопку увеличения, это увеличивает ref_volt.
Это проверяет, нажата ли кнопка уменьшения или нет. Если кто-то нажимает кнопку уменьшения, это уменьшает ref_volt.
Таким образом, вы можете сгенерировать переменный источник питания 5 В с помощью Arduino UNO, не беспокоясь о батареях и не делая схему громоздкой.
Читайте также: