Продвинутый курс Arduino · Незнакомые детали
Урок 4. Конденсатор: копилка тока
Вскрываем первый нетронутый пакетик набора. Три опыта с маленькими бочонками: смотрим на заряд и разряд вживую, превращаем мигание ШИМ в ровное напряжение и лечим дребезг кнопки без единой строчки кода.
Что понадобится
- Контроллер Uno и кабель USB
- Макетная плата
- Конденсаторы 2,2 мкФ и 4,7 мкФ
- Резисторы 10 кОм и 470 Ом
- Кнопка
- Провода
Все детали есть в обучающем наборе, по которому идёт курс.
Начинаем блок «Незнакомые детали». На дне коробки набора всё ещё лежат нетронутые пакетики, и сегодня мы вскроем первый — с маленькими бочонками. Это конденсаторы, и после этого урока вы будете видеть их везде: в блоке питания, в наушниках, на материнской плате компьютера их сотни.
Урок будет непривычным: новых команд в нём нет совсем. Это урок про электричество — три опыта, каждый из которых объясняет одну суперспособность бочонка. Программы нужны только как измерительные приборы: вы уже умеете писать вольтметры и самописцы, самое время пустить их в дело.
Знакомство: копилка тока
Конденсатор — это крошечная перезаряжаемая копилка электричества. Подали напряжение — накопил, сняли — отдал. В отличие от батарейки он наполняется и высыпается за доли секунды, зато и хранит совсем чуть-чуть. Сколько именно — говорит его ёмкость в микрофарадах: в наборе лежат бочонки на 2,2 мкФ и 4,7 мкФ.
Полярность — закон. Наши бочонки — электролитические, у них есть плюс и минус, как у светодиода. Подсказки сразу две: светлая полоса на корпусе показывает минус, длинная ножка — плюс. Перепутаете — конденсатор может вздуться и испортиться. При наших 5 вольтах взрыва не будет, но деталь жалко.
Опыт 1. Заряд не бывает мгновенным
Первый вопрос: как быстро наполняется копилка? Ответ зависит не только от неё самой, но и от «трубки», через которую течёт ток.
Соберём эту картинку из деталей: вывод 5 будет краном, резистор 10 кОм — узкой трубкой, конденсатор 4,7 мкФ — бачком. А вход A0 подключим прямо к бачку: пусть меряет «уровень воды», то есть напряжение.
// Продвинутый курс, урок 4. Шаг 2: смотрим, как дышит конденсатор.
const int SOURCE = 5; // вывод-источник: он и заряжает, и разряжает
const int PROBE = A0; // вход-подглядыватель: меряет напряжение на копилке
void setup() {
Serial.begin(9600);
pinMode(SOURCE, OUTPUT);
}
void loop() {
// Подали 5 вольт — конденсатор начинает наполняться через резистор.
digitalWrite(SOURCE, HIGH);
for (int i = 0; i < 100; i++) {
Serial.println(analogRead(PROBE));
delay(3);
}
// Вывод-источник стал «землёй» — копилка высыпается через тот же резистор.
digitalWrite(SOURCE, LOW);
for (int i = 0; i < 100; i++) {
Serial.println(analogRead(PROBE));
delay(3);
}
}
Загрузите скетч и откройте вкладку «График» — ту самую, из урока про монитор порта. Плата раз за разом заряжает и разряжает конденсатор, а на графике рисуется его «дыхание»:
Обратите внимание на форму горки: напряжение на конденсаторе не умеет прыгать. Оно только перетекает — быстро в начале, медленно в конце. У этой плавности есть точная мера: время τ = R × C. Для наших 10 кОм и 4,7 мкФ это 47 миллисекунд — за это время копилка наполняется на 63 %, а за пять τ — практически доверху. Хотите медленнее — берите резистор побольше или конденсатор пожирнее. Проверьте: замените 4,7 мкФ на 2,2 мкФ — горки на графике станут вдвое круче.
Опыт 2. Конденсатор сглаживает
Вспомните секрет ШИМ из восьмого урока: «половинная яркость» — это на самом деле очень быстрое мигание, полдоли секунды 5 вольт, полдоли — ноль. Глаз это мигание усредняет. А можно ли усреднить его по-настоящему, электрически? Схема уже собрана — просто загрузите другой скетч.
// Продвинутый курс, урок 4. Шаг 3: превращаем мигание в ровное напряжение.
const int SOURCE = 5;
const int PROBE = A0;
void setup() {
Serial.begin(9600);
pinMode(SOURCE, OUTPUT);
// «Половинная яркость» из урока 8. На самом деле вывод просто очень
// быстро мигает: половину времени 5 В, половину — 0 В.
analogWrite(SOURCE, 128);
}
void loop() {
// Что видит вход: мигание или ровную середину? Смотрим в «График».
Serial.println(analogRead(PROBE));
delay(10);
}
На графике — ровная полка около 512, ровно половина от 1023. Конденсатор не успевает ни зарядиться за «вспышку», ни разрядиться за «темноту» — и держит честную середину. Мигание превратилось в постоянное напряжение.
Контрольный фокус: аккуратно выньте конденсатор из макетки, не трогая остального. График тут же превратится в хаос из нулей и максимумов — вход A0 начнёт ловить голое мигание ШИМ. Вставьте бочонок обратно — и снова ровная полка. Вот это и называется фильтром: деталь, которая пропускает среднее и глотает дёрганье.
Теперь вы знаете, почему конденсаторы стоят везде: они сглаживают питание, глотают помехи и превращают «икающие» сигналы в ровные. Попробуйте сменить analogWrite(SOURCE, 128) на 64 или 200 — полка на графике послушно переедет.
Опыт 3. Антидребезг без единой строчки кода
В одиннадцатом уроке мы лечили дребезг кнопки программой: окно тишины на 30 миллисекунд. А в прошлом уроке — прямо в обработчике прерывания. Пришло время третьего способа — железного. Раз конденсатор глотает дёрганье, пусть проглотит и дребезг.
Сначала соберите схему без конденсатора и измерьте врага честной программой:
// Продвинутый курс, урок 4. Шаг 4: измеряем дребезг в штуках.
const int BUTTON = 2;
int lastState = HIGH;
int changes = 0; // сколько раз сигнал дёрнулся
unsigned long lastChange = 0; // когда дёрнулся в последний раз
void setup() {
Serial.begin(9600);
pinMode(BUTTON, INPUT_PULLUP);
Serial.println("Нажимайте кнопку — я считаю каждое дрожание сигнала.");
}
void loop() {
int state = digitalRead(BUTTON);
if (state != lastState) {
lastState = state;
changes = changes + 1;
lastChange = millis();
}
// Полсекунды тишины после последнего дёрганья — отчёт готов.
if (changes > 0 && millis() - lastChange > 500) {
Serial.print("Переходов за нажатие: ");
Serial.println(changes);
changes = 0;
}
}
Скетч считает каждый скачок сигнала и через полсекунды тишины печатает итог. Идеальное нажатие с отпусканием — это ровно 2 перехода: вниз и вверх. Понажимайте: у настоящей кнопки будут «нажатия» по 4, 8, а то и 20 переходов — это пружинка звенит о контакты.
Теперь добавьте конденсатор 2,2 мкФ параллельно кнопке — и понажимайте снова. Переходов станет 2, редко 3. Что произошло: пока кнопка отпущена, бочонок заряжен; удар пружинки на микросекунды замыкает контакты, но крошечная копилка тут же подпитывает вход, и сигнал не успевает дёрнуться. Дребезг тонет в конденсаторе.
Какой способ выбирать? Программный антидребезг бесплатен — но его надо не забыть написать. Железный работает всегда, даже с прерываниями из прошлого урока, — но стоит одну деталь на каждую кнопку. В настоящих устройствах часто делают и то и другое: ремень и подтяжки.
Частые проблемы
- График — ровный ноль. Проверьте полярность бочонка: полоса «−» должна смотреть в сторону земли. И убедитесь, что A0 подключён к плюсовой ноге, а не к минусовой.
- Горки на графике обрезаны сверху. Так и должно быть, если вы уменьшили паузы: конденсатор не успевает дозарядиться. Верните delay(3) — или наслаждайтесь «пилой», она тоже красивая.
- В опыте с кнопкой всегда печатается 1. Вы считаете нажатие и отпускание отдельно? Подержите кнопку дольше полсекунды — тогда нажатие и отпускание дадут по своему отчёту, и это нормально: тишина в полсекунды разрезала их на два.
- Числа скачут даже с конденсатором. Проверьте, что минус бочонка и земля кнопки — в одном узле: конденсатор должен стоять именно параллельно кнопке, а не «где-то рядом».
Задания для тренировки
- РазминкаПоставьте в опыт с зарядом резистор 1 кОм вместо 10 кОм (τ станет в десять раз короче) и посмотрите на график. А теперь — два конденсатора параллельно: ёмкости складываются, горка растянется.
- ПосложнееСделайте «медленный рассвет»: пусть плата заряжает конденсатор совсем большим резистором (два по 10 кОм последовательно), а второй вывод через 470 Ом зажигает светодиод, когда A0 увидит больше 800. Получится таймер на чистой физике.
- Со звёздочкой ⭐Соберите стрелочный вольтметр: сглаженный конденсатором ШИМ подаётся на A0, а сервопривод из прошлого урока показывает напряжение стрелкой. Команда
L 0…255с клавиатуры — и стрелка плывёт к новому уровню. Разбор ниже.
Показать разбор «стрелочный вольтметр»
Схема — из первого опыта, плюс сервопривод, подключённый как в прошлом уроке: оранжевый на вывод 9, красный на «+», коричневый на «−», шину «+» запитайте от 5V платы. Дальше всё собирается из готовых кубиков: команда L из урока про пульт задаёт ШИМ, конденсатор превращает его в ровное напряжение, а map переводит вольты в градусы стрелки.
// Продвинутый курс, урок 4. Разбор задания: стрелочный вольтметр.
// ШИМ → резистор → конденсатор = ровное напряжение. Стрелка его показывает,
// а команда L из урока про пульт задаёт уровень.
#include <Servo.h>
const int SOURCE = 5;
const int PROBE = A0;
const int SERVO_PIN = 9;
Servo strelka;
void setup() {
Serial.begin(9600);
pinMode(SOURCE, OUTPUT);
strelka.attach(SERVO_PIN);
analogWrite(SOURCE, 128); // для начала — половина
Serial.println("Команда: L 0..255. Стрелка покажет напряжение копилки.");
}
void loop() {
if (Serial.available() > 0) {
char c = Serial.read();
if (c == 'L' || c == 'l') {
int value = constrain(Serial.parseInt(), 0, 255);
analogWrite(SOURCE, value);
Serial.print("ШИМ: ");
Serial.println(value);
}
}
int voltage = analogRead(PROBE); // 0…1023 = 0…5 вольт
int angle = map(voltage, 0, 1023, 0, 180); // переводим в угол стрелки
strelka.write(angle);
delay(50);
}
Самое интересное — вынуть конденсатор: стрелка тут же начнёт биться в судорогах, потому что A0 будет ловить то 0, то 1023. Вставьте обратно — стрелка успокоится. Лучшей демонстрации слова «фильтр» не придумать.
Что вы теперь умеете
- узнавать электролитический конденсатор и подключать его правильной стороной;
- объяснять заряд и разряд через τ = R × C — и растягивать их по своему желанию;
- сглаживать ШИМ в настоящее постоянное напряжение;
- лечить дребезг кнопки железом, без единой строчки кода;
- смотреть на графики напряжения как на осциллограммы — глазами инженера.
В следующем уроке достанем из коробки чёрные трёхногие таблетки — транзисторы BC337 и BC327. Вы уже знакомы с их старшим братом-полевиком по уроку о моторе; теперь разберёмся с биполярными — и соберём кнопку, у которой вообще нет подвижных частей: сенсорную, из куска фольги.
Частые вопросы
Почему конденсатор не заменяет батарейку?
Ёмкости несравнимы: наш бочонок 4,7 мкФ хранит энергию, которой светодиоду хватает на сотые доли секунды. Зато конденсатор отдаёт и принимает заряд мгновенно и переживает миллионы циклов — поэтому у него своя работа: сглаживать, фильтровать и помогать в переходные моменты, а не питать устройство.
Что значит надпись «2,2 мкФ 50 В» на корпусе?
Первое число — ёмкость в микрофарадах, размер копилки. Второе — предельное напряжение: больше подавать нельзя. Наши 5 вольт для конденсатора на 50 В — лёгкая прогулка, запас в десять раз.
Есть ли конденсаторы без плюса и минуса?
Да, керамические — маленькие плоские «чечевички», им всё равно, какой стороной стоять. Но большая ёмкость в таком исполнении получается дорогой, поэтому от микрофарада и выше почти всегда используют полярные электролитические, как в нашем наборе.
