Собственный регулируемый источник питания на Arduino UNO: схема и код
Как сделать регулируемый блок питания на Arduino UNO (0–5 В)
Разные электронные модули (Wi-Fi, реле, моторы) требуют разные напряжения. Батареи быстро сажаются, не выдают большой ток, греются. Решение — регулируемый источник питания на Arduino с ШИМ (PWM) и транзисторным ключом.
Компоненты
- Arduino Uno
- LCD 16×2 (JHD162A, драйвер HD44780)
- Конденсаторы 100 мкФ (сглаживание)
- Резисторы 1 кОм
- Транзистор 2N2222 (NPN)
- Перемычки, источник 5 В
- Две кнопки (инкремент/декремент напряжения)
Принцип работы
- Arduino генерирует ШИМ на пине 3 (D3, ~490 Гц, 8 бит: 0–255).
- ШИМ через резистор на базу 2N2222 → транзистор работает как ключ/усилитель.
- На эмиттере получается усредненное напряжение, пропорциональное скважности (duty cycle).
- Конденсаторы 100 мкФ сглаживают пульсации.
- Выходное напряжение снимается с эмиттера и через делитель (или прямо, если <5В) подается на АЦП A0 для обратной связи.
- Arduino измеряет АЦП (10 бит, 0–1023 ≡ 0–5 В, шаг ~4,9 мВ), показывает на LCD.
- Кнопки на D4/D5 меняют duty cycle (ref_volt 0–255) → меняется выходное напряжение.
Важные нюансы
- Выходное напряжение нелинейно зависит от duty cycle из-за Vbe транзистора (~0,7 В) и нагрузки. Нужен калибровочный расчет или опорный источник.
- Максимальный ток ограничен коллектором 2N2222 (~600 мА пик, ~200–300 мА постоянно). Для больших токов — мощный MOSFET/биполярный транзистор с радиатором.
- Напряжение питания Arduino (5 В) — верхний предел. Для более высоких напряжений — нужен внешний источник и DC-DC преобразователь.
- АЦП измеряет после сглаживающего конденсатора — это реализует простой замкнутый контур (feedback).
Ключевые фрагменты кода
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,10,11,12,13);
int ref_volt = 125; // 50% duty = ~2.5V старт
float flag = 0;
void setup() {
pinMode(3, OUTPUT); // PWM
pinMode(4, INPUT); // кнопка +
pinMode(5, INPUT); // кнопка -
lcd.begin(16,2);
lcd.print("Variable Voltage");
delay(1000);
lcd.clear();
}
void loop() {
float value = analogRead(A0);
value = (value * 5.0) / 1024.0; // Вольты
analogWrite(3, ref_volt); // PWM на D3
// Кнопка увеличения (активный LOW с подтяжкой)
if (digitalRead(4) == LOW) {
if (ref_volt < 250) { ref_volt++; delay(100); }
}
// Кнопка уменьшения
if (digitalRead(5) == LOW) {
if (ref_volt > 0) { ref_volt--; delay(100); }
}
lcd.setCursor(0,0);
lcd.print("Vout: ");
lcd.print(value);
lcd.print(" V ");
delay(100);
}
ADC и PWM на Arduino Uno — справочно
- ADC: 6 каналов (A0–A5), 10 бит (0–1023), опорное 5 В → шаг 4,88 мВ. Функция
analogRead(pin). - PWM: 6 каналов (D3,5,6,9,10,11), 8 бит (0–255). Частота ~490 Гц (D5,D6 ~980 Гц). Функция
analogWrite(pin, duty). Duty cycle = Ton/(Ton+Toff) × 100%.
LCD 16×2 (4-битный режим)
Подключение: RS, EN, D4–D7 → цифровые пины Arduino. Библиотека LiquidCrystal упрощает работу: lcd.begin(16,2), lcd.print(), lcd.setCursor().
Применение и развитие
- Питание маломощных схем, тестирование датчиков, заряд малых АКБ.
- Улучшения: добавить кнопку «Enter» для установки точного напряжения, использовать DAC (MCP4725) вместо PWM+транзистор для линейности, добавить ограничение тока, охлаждение, корпус.
Простой, дешевый и наглядный способ получить 0–5 В переменного напряжения без батареек. Идеален для обучения ШИМ, ADC, транзисторным ключам и обратной связи.
Промышленные технологии
- ИИ обнаруживает торговлю людьми и дикой природой в глобальных цепях поставок
- Создание DTMF-декодера на Arduino без внешних микросхем
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Веб-сервер на Arduino Uno WiFi: управление LED через браузер
- Управление Arduino Uno из Python 3: команды через последовательный порт и демонстрация с LED
- Сборка компактного FM-радио на Arduino Nano и RDA5807M
- Робот-машина под управлением G-сенсора смартфона через Bluetooth и Arduino
- Освоение тока, мощности и момента в приводах переменной скорости
- Двухполярный источник питания ±12 ВDC от 230 ВAC — схема и руководство
- Бе스트рансформаторные блоки питания: проверенное решение для снижения стоимости и размера