Компоненты · 16 мин чтения

Таймер 555: распиновка, астабильная и моностабильная схемы

Как работает таймер 555? Распиновка, астабильное и моностабильное включение, формулы f = 1,44/((R1+2R2)C) и t = 1,1RC, мигалка на светодиодах и код для Arduino.

Таймер 555 — дешёвая 8-выводная микросхема-таймер, которая с помощью всего одного резистора и одного конденсатора задаёт интервалы времени от микросекунд до часов. Мигать светодиодом с заданной частотой, держать лампу включённой минуту после нажатия кнопки, извлекать звук из зуммера или управлять мотором через PWM — всё это она делает без микроконтроллера и без единой строчки кода. Микросхему разработал Ханс Камензинд (Hans Camenzind) для Signetics в 1971 году, в продажу она вышла в 1972-м и стала одной из самых массовых микросхем в мире: по оценкам, в 2003 году её выпускали около миллиарда штук в год.

В этом руководстве ты узнаешь распиновку 555, как внутри работают компараторы и триггер, две базовые схемы (астабильную мигалку и моностабильный одновибратор), откуда берутся формулы частоты и длительности, как опустить коэффициент заполнения ниже 50% и как использовать 555 вместе с Arduino, ESP32 и Raspberry Pi Pico. Если не хочется считать вручную, калькулятор таймера 555 мгновенно покажет частоту, коэффициент заполнения и форму сигнала.

Что такое таймер 555 и как он работает?

Внутри 555 четыре основные части. Первая — делитель напряжения из трёх одинаковых резисторов, включённых последовательно между VCC и GND (в классическом NE555 по 5 kΩ каждый); он формирует два опорных напряжения: 2/3 и 1/3 VCC. Вторая — пара компараторов, подключённых к этим опорным напряжениям: пороговый компаратор сравнивает пин THRES с 2/3 VCC, а компаратор запуска сравнивает пин TRIG с 1/3 VCC. Третья — RS-триггер, который эти два компаратора устанавливают и сбрасывают, а четвёртая — выходной каскад, управляемый триггером, вместе с разрядным транзистором, который разряжает конденсатор.

Правило на самом деле очень простое: когда напряжение на TRIG падает ниже 1/3 VCC, выход переходит в HIGH, а разрядный транзистор закрывается. Когда напряжение на THRES поднимается выше 2/3 VCC, выход переходит в LOW, а разрядный транзистор открывается и притягивает пин 7 к GND. Если не происходит ни того ни другого, выход сохраняет прежнее состояние. Время задаёт то, сколько внешний конденсатор заряжается и разряжается через резистор между этими двумя порогами. При питании 5 V пороги равны 3,33 V и 1,67 V, при 9 V — 6 V и 3 V. Часто говорят, что название микросхемы происходит от трёх резисторов по 5 kΩ внутри, но Камензинд рассказывал, что Signetics выбрала это число произвольно.

ХарактеристикаNE555 (биполярный)TLC555 (КМОП)
Напряжение питания4,5–16 V (SE555: до 18 V)2–15 V (LMC555: от 1,5 V)
Ток покоя (5 V)2–6 mAОколо 0,2 mA
Выходной токОтдаёт и принимает до 200 mAОтдаёт около 10 mA, принимает 100 mA
Уровень HIGH на выходеПримерно на 1,5–1,7 V ниже VCCДо VCC (rail-to-rail)
Рекомендуемая максимальная частота100 kHzОколо 2 MHz
Работа от 3,3 VНетДа
Сдвоенная версияNE556 (14 выводов)TLC556 (14 выводов)

Распиновка таймера 555

Полукруглая выемка (ключ) или маленькая точка на корпусе отмечает вывод 1. Если смотреть сверху так, чтобы выемка была слева, выводы 1–4 идут слева направо по нижнему ряду, а выводы 5–8 — справа налево по верхнему; иначе говоря, номера растут против часовой стрелки, и вывод 8 (VCC) находится прямо напротив вывода 1. Корпус DIP-8 идеально встаёт поперёк канавки посередине макетной платы: по одному ряду ножек должно оказаться с каждой стороны канавки.

ВыводНазваниеНазначениеТипичное подключение
1GNDЗемля (0 V)Минус питания
2TRIG (запуск)Когда напряжение падает ниже 1/3 VCC, переводит выход в HIGH и запускает отсчёт времениАстабильный режим: к выводу 6; моностабильный: подтяжка (pull-up) + кнопка
3OUT (выход)Выход; у NE555 отдаёт или принимает до 200 mAСветодиод через резистор, зуммер, транзистор
4RESETПринудительно переводит выход в LOW, если напряжение на нём ниже примерно 0,7 VЕсли не используется — прямо на VCC
5CONT (управление)Прямой доступ к опорному напряжению 2/3 VCC; сдвигает порогиКонденсатор 10 nF на GND
6THRES (порог)Выше 2/3 VCC переводит выход в LOW и завершает отсчёт времениК времязадающему конденсатору
7DISCH (разряд)Вывод с открытым коллектором, замкнутый на GND, пока выход в LOWАстабильный режим: между R1 и R2; моностабильный: к выводу 6
8VCCПлюс питания (NE555: 4,5–16 V)Плюс питания + развязывающий конденсатор 100 nF
Самая частая ошибка новичков — оставить вывод RESET (4) висящим в воздухе. Неподключённый вывод ловит помехи, и микросхема сбрасывается случайным образом: светодиод то мигает, то вообще не реагирует. Если RESET не нужен, соедини вывод 4 прямо с VCC. Кроме того, биполярный 555 при каждом переключении выхода берёт из питания короткие, но большие броски тока; без керамического конденсатора 100 nF и электролитического 10 µF прямо у выводов 8 и 1 схема может запускаться сама по себе.

Три режима работы: астабильный, моностабильный и бистабильный

РежимДругое названиеЧто делаетТипичное применение
АстабильныйАвтоколебательный мультивибраторСам по себе непрерывно выдаёт прямоугольный сигналМигалка на светодиодах, звук зуммера, тактовый сигнал, PWM
МоностабильныйОдновибраторПри запуске на заданное время переходит в HIGH, затем возвращается в LOWЛампа с задержкой, лестничный таймер, расширение импульса
БистабильныйТриггерПереходит в HIGH по TRIG и в LOW по RESET и сохраняет состояние; отсчёта времени нетВыключатель с двумя кнопками «вкл/выкл»

Астабильная схема: мигалка на светодиодах с 555

В астабильной схеме выводы TRIG (2) и THRES (6) соединены вместе и подключены к времязадающему конденсатору. Конденсатор заряжается от VCC через R1 и R2; когда напряжение на нём достигает 2/3 VCC, выход переходит в LOW, разрядный транзистор открывается, и теперь конденсатор разряжается в вывод 7 только через R2. Когда напряжение падает до 1/3 VCC, выход снова переходит в HIGH, и цикл повторяется сам. Конденсатор никогда не разряжается полностью, а колеблется между 1/3 и 2/3 VCC; только при включении питания он начинает с нуля, поэтому первый период HIGH чуть длиннее. Схема ниже работает от батарейки на 9 V и поочерёдно зажигает два светодиода раз в секунду — это самая простая полицейская мигалка.

  1. Установи 555 поперёк канавки посередине макетной платы выемкой влево. Если не знаешь, как макетная плата соединена внутри, сначала прочитай Что такое макетная плата?.
  2. Подключи выводы 8 (VCC) и 4 (RESET) к шине +9 V, а вывод 1 (GND) — к минусовой шине. Поставь керамический конденсатор 100 nF между выводами 8 и 1 как можно ближе к микросхеме.
  3. Подключи R1 = 10 kΩ между выводами 8 и 7 и R2 = 68 kΩ между выводами 7 и 6.
  4. Соедини выводы 6 и 2 проводом. От этой точки подключи электролитический конденсатор C = 10 µF к GND; его короткая (минусовая) ножка должна идти к GND.
  5. Поставь конденсатор 10 nF (с маркировкой 103) от вывода 5 (CONT) на GND.
  6. От выходного вывода 3 через резистор 470 Ω подключи анод первого светодиода, а его катод — к GND; этот светодиод горит, пока на выходе HIGH. Анод второго светодиода подключи к +9 V через 470 Ω, а катод — к выходу; этот светодиод горит, пока на выходе LOW.
  7. Подключи батарейку: два светодиода должны загораться по очереди примерно на 0,54 с и 0,47 с. Если не горит ни один, первым делом проверь, что вывод 4 подключён к VCC.

При 9 V уровень HIGH на выходе NE555 составляет около 7,5 V, поэтому через первый светодиод течёт около 12 mA, а через второй — около 15 mA. Если питать схему от 5 V, уменьши резисторы до 220–330 Ω; значение поможет рассчитать калькулятор резистора для светодиода, а о самом светодиоде читай в статье Что такое светодиод?. Поскольку частота не зависит от напряжения питания, те же R1, R2 и C и при 5 V дают одну вспышку в секунду.

Формулы частоты и длительности для таймера 555

Когда конденсатор заряжается через резистор R, напряжение на нём растёт по экспоненте; τ = R·C — постоянная времени, подробно о ней в статье Что такое конденсатор?. Путь от 1/3 VCC до 2/3 VCC занимает ровно ln 2 · R · C ≈ 0,693 · R · C, потому что за это время оставшийся до цели разрыв уменьшается вдвое. Так как заряд идёт через R1 + R2, а разряд только через R2, время HIGH и время LOW различаются. Если сложить эти два времени и взять обратную величину, получается коэффициент 1 / 0,693 ≈ 1,44 и знаменитая формула: f = 1,44 / ((R1 + 2·R2) · C).

ВеличинаФормулаПример: R1 = 10 kΩ, R2 = 68 kΩ, C = 10 µF
Время HIGH (tH)0,693 · (R1 + R2) · C0,54 с
Время LOW (tL)0,693 · R2 · C0,47 с
Период (T)0,693 · (R1 + 2·R2) · C1,01 с
Частота (f)1,44 / ((R1 + 2·R2) · C)0,99 Hz
Коэффициент заполнения(R1 + R2) / (R1 + 2·R2)53,4%
Длительность импульса в моностабильном режиме (t)1,1 · R · C1,1 с при R = 100 kΩ, C = 10 µF
Конденсаторы для времязадающей цепи таймера 555
В 555 время задаёт конденсатор вместе с резистором: для секунд используй электролитические конденсаторы (µF), а для частот в диапазоне килогерц — керамические или плёночные (nF).

При выборе номиналов помни о нескольких ограничениях. R1 должен быть не меньше 1 kΩ: иначе, когда разрядный транзистор открывается, он соединяет VCC почти напрямую с GND. Согласно даташиту Texas Instruments, из-за небольшого тока, который потребляет пороговый вход, сумма R1 + R2 не должна превышать примерно 3,4 MΩ при 5 V или 10 MΩ при 15 V; на практике надёжнее всего оставаться в пределах от 1 kΩ до 1 MΩ. Не бери конденсатор меньше 1 nF, потому что собственная ёмкость макетной платы и проводов собьёт расчёт. Используй NE555 на частотах ниже 100 kHz; для более быстрых сигналов выбирай КМОП-версию. Расшифровать цифры на конденсаторе поможет утилита код конденсатора, а увидеть кривую заряда — утилита постоянная времени RC.

R1R2CЧастотаЗаполнениеПрименение
10 kΩ100 kΩ10 µF0,69 Hz52%Медленный предупреждающий огонь
10 kΩ68 kΩ10 µF0,99 Hz53%Мигалка на светодиодах, раз в секунду
4,7 kΩ47 kΩ1 µF14,6 Hz52%Быстрый стробоскоп
1 kΩ10 kΩ100 nF686 Hz52%Звук зуммера
1 kΩ6,8 kΩ100 nF986 Hz53%Тестовый сигнал около 1 kHz
1 kΩ10 kΩ10 nF6,86 kHz52%Высокий тон, PWM
1 kΩ18 kΩ1 nF38,9 kHz51%Несущая для ИК-пульта (подстрой до 38 kHz подстроечным резистором)

Настройка коэффициента заполнения: ниже 50%

В базовой астабильной схеме конденсатор заряжается через R1 + R2, а разряжается только через R2, поэтому время HIGH всегда больше времени LOW, и коэффициент заполнения не может опуститься ниже 50%; если сделать R2 намного больше R1, можно приблизиться к 50%, но не уйти ниже. Решение — диод 1N4148 параллельно R2, анодом к выводу 7 и катодом к выводу 6. При заряде ток идёт через диод в обход R2; при разряде диод смещён в обратном направлении, и ток течёт через R2. Получаем tH ≈ 0,693 · R1 · C и tL ≈ 0,693 · R2 · C, а коэффициент заполнения падает до R1 / (R1 + R2). Например, при R1 = 10 kΩ, R2 = 47 kΩ и C = 10 µF светодиод горит 69 мс и не горит 326 мс: короткая, заметная вспышка с заполнением 17,5%. Прямое падение напряжения на диоде около 0,6 V делает время HIGH чуть длиннее расчётного, особенно при 5 V. Как ведут себя диоды в целом, читай в статье Что такое диод?.

Если нужно сохранить частоту неизменной и регулировать только коэффициент заполнения, используй потенциометр и два диода. Подключи движок потенциометра к выводу 7; один конец потенциометра соедини с конденсатором через диод (анодом к потенциометру), а другой — с конденсатором через второй диод, включённый в обратную сторону (катодом к потенциометру). При R1 = 1 kΩ, потенциометре на 100 kΩ и C = 10 nF частота остаётся около 1,4 kHz, а коэффициент заполнения меняется примерно от 1% до 99%, потому что при вращении ручки сумма сопротивлений заряда и разряда не меняется. С MOSFET на выходе это классический способ регулировать скорость DC-мотора или яркость светодиодной ленты на 12 V; подробности — в статьях Что такое PWM? и MOSFET и Arduino.

Моностабильная схема: одиночный импульс и лампа с задержкой

В моностабильной схеме выводы 6 (THRES) и 7 (DISCH) соединены вместе; от этой точки резистор R идёт к VCC, а конденсатор C — к GND. Вывод TRIG (2) удерживается в HIGH подтягивающим резистором. В режиме ожидания выход в LOW, и разрядный транзистор держит конденсатор разряженным. Когда на TRIG приходит короткий импульс LOW, выход переходит в HIGH, разрядный транзистор закрывается, и конденсатор начинает заряжаться через R. Когда напряжение на нём достигает 2/3 VCC, выход возвращается в LOW, а конденсатор мгновенно разряжается. На этот раз конденсатор заряжается с самого нуля до 2/3 VCC, поэтому импульс длится ln 3 · R · C ≈ 1,1 · R · C и снова не зависит от напряжения питания.

  1. Подключи выводы 8 и 4 к +5 V, а вывод 1 — к GND; поставь конденсатор 100 nF между выводами 8 и 1 и конденсатор 10 nF между выводом 5 и GND.
  2. Соедини выводы 6 и 7. От этой точки подключи R = 470 kΩ к +5 V и электролитический конденсатор C = 100 µF к GND (минусовой ножкой к GND).
  3. Подтяни TRIG (вывод 2) к +5 V резистором 10 kΩ и подключи кнопку между выводом 2 и GND. Подробнее о подключении кнопок — в статье Как подключить кнопку к Arduino.
  4. Для первой проверки подключи светодиод к выходному выводу 3 через резистор 330 Ω.
  5. Коротко нажми кнопку: светодиод горит примерно 1,1 × 470 kΩ × 100 µF ≈ 52 секунды и затем гаснет. Из-за допуска электролитического конденсатора ±20% нормальным считается любой результат от 42 до 62 секунд.
  6. Для настоящей лампы вместо светодиода управляй реле: от выхода через 1 kΩ подключи базу транзистора BC547, эмиттер — к GND, а коллектор — к одному концу катушки реле; другой конец катушки идёт к +5 V. Не забудь диод 1N4007 параллельно катушке (катодом к +5 V); о роли транзистора читай в статье Что такое транзистор?.
Если удерживать кнопку дольше задержки, выход останется в HIGH и после истечения времени; согласно даташиту, чтобы отсчёт завершился, TRIG должен вернуться в HIGH не позднее чем за 10 µs до конца интервала. Для длинных задержек увеличивай C, а не R: если ток утечки электролитического конденсатора приближается к небольшому зарядному току через R, конденсатор так и не дойдёт до 2/3 VCC, и лампа не погаснет, поэтому держи R ниже 1 MΩ. Если реле коммутирует сетевую лампу, никогда не подавай питание на схему, пока сетевая сторона не изолирована, и соблюдай правила безопасности из статьи Что такое модуль реле?.
RCВремя (1,1 · R · C)Применение
10 kΩ1 µF11 мсПодавление дребезга кнопки, расширение коротких импульсов
100 kΩ10 µF1,1 сКороткий сигнал, дверной звонок
220 kΩ47 µF11,4 сКратковременное освещение
470 kΩ100 µF52 сЛестничный таймер, лампа с задержкой
10 kΩ + потенциометр 1 MΩ100 µF1,1–111 сТаймер с регулируемым временем

Чтобы прервать задержку досрочно, можно добавить вторую кнопку на вывод RESET (4): подтяни вывод к VCC резистором 10 kΩ и подключи кнопку между RESET и GND; в момент нажатия выход переходит в LOW, а конденсатор разряжается. Моностабильная схема иногда один раз запускается сама при первой подаче питания. Чтобы этого не было, подключи вывод RESET к VCC через 10 kΩ и к GND через 10 µF: при включении микросхема удерживается в сбросе то короткое время, пока заряжается этот конденсатор, и начинает нормально работать, когда питание установится.

Как использовать таймер 555 с Arduino?

555 и Arduino — не соперники, а хорошая команда. Простую мигалку можно сделать и на Arduino с помощью millis(), но 555 не нужен код, он работает от питания до 16 V, отдаёт с выхода 200 mA и продолжает работать, даже если Arduino зависнет. Поэтому 555 обычно дополняет Arduino в одной из трёх ролей: как источник сигнала, который измеряет Arduino, как аппаратный таймер, который запускает Arduino (измеритель ёмкости, расширитель импульсов), и как генератор, который Arduino включает и выключает через вывод RESET (сирена или звук зуммера). В последнем случае достаточно подключить вывод 4 таймера 555 к выходу Arduino: пока пин в HIGH, генератор работает, а пока в LOW — молчит.

Вывод 555Arduino UnoESP32Raspberry Pi Pico
8 VCC5V3V3 (только КМОП 555)3V3(OUT) (КМОП 555) или VBUS (NE555)
1 GNDGNDGNDGND
3 OUTD2GPIO 27GP15 (с NE555 через делитель 10 kΩ + 20 kΩ)
2 TRIG (пример с запуском)D7GPIO 26GP14 (только с КМОП 555 с питанием от 3V3)
4 RESET5V или цифровой пин3V33V3(OUT)
Подключая 555 к Arduino, питай оба от одних и тех же 5 V и соедини их земли. Выход 555, работающего от 9 или 12 V, поднимается до 7–10 V и повредит вход Arduino; в таком случае выход нужно понизить делителем напряжения. Уровень HIGH у NE555 при 5 V около 3,5 V — лишь немного выше порога Uno в 3 V; для более надёжного HIGH можно добавить подтягивающий резистор 10 kΩ от выхода к 5 V.

В первом примере Arduino измеряет частоту и коэффициент заполнения мигалки и сравнивает их со значениями по формулам. Схема та же астабильная, что и выше (R1 = 10 kΩ, R2 = 68 kΩ, C = 10 µF), только питается от пина 5V на Arduino вместо 9 V, а выходной вывод 3 идёт на D2. Функция pulseIn() возвращает в микросекундах, сколько времени пин остаётся в HIGH или LOW.

C++ (Arduino IDE)
1// 555 flaşörünün frekansını ve duty cycle'ını ölçer / Measures the frequency and duty cycle of a 555 flasher
2const int SIGNAL_PIN = 2;                    // 555 çıkışı (pin 3) / 555 output (pin 3)
3const float R1_OHM = 10000.0;                // R1 = 10 kΩ
4const float R2_OHM = 68000.0;                // R2 = 68 kΩ
5const float C_FARAD = 10e-6;                 // C = 10 µF
6const unsigned long TIMEOUT_US = 3000000UL;  // 3 s: ~1 Hz sinyal için / for a ~1 Hz signal
7
8void setup() {
9  Serial.begin(9600);
10  pinMode(SIGNAL_PIN, INPUT);
11
12  // Formüllerle hesaplanan değerler / Values from the formulas
13  float fCalc = 1.44 / ((R1_OHM + 2 * R2_OHM) * C_FARAD);
14  float dutyCalc = 100.0 * (R1_OHM + R2_OHM) / (R1_OHM + 2 * R2_OHM);
15  Serial.print(F("Hesaplanan / Calculated: f = "));
16  Serial.print(fCalc, 3);
17  Serial.print(F(" Hz, duty = "));
18  Serial.print(dutyCalc, 1);
19  Serial.println(F(" %"));
20}
21
22void loop() {
23  unsigned long highUs = pulseIn(SIGNAL_PIN, HIGH, TIMEOUT_US);  // HIGH süresi / HIGH time
24  unsigned long lowUs = pulseIn(SIGNAL_PIN, LOW, TIMEOUT_US);    // LOW süresi / LOW time
25
26  if (highUs == 0 || lowUs == 0) {           // zaman aşımı / timeout
27    Serial.println(F("Sinyal yok / No signal"));
28    return;
29  }
30
31  unsigned long periodUs = highUs + lowUs;
32  float f = 1000000.0 / periodUs;            // f = 1 / T
33  float duty = 100.0 * highUs / periodUs;    // duty = tH / T
34
35  Serial.print(F("Olculen / Measured: f = "));
36  Serial.print(f, 3);
37  Serial.print(F(" Hz, duty = "));
38  Serial.print(duty, 1);
39  Serial.print(F(" %, tH = "));
40  Serial.print(highUs / 1000);
41  Serial.print(F(" ms, tL = "));
42  Serial.print(lowUs / 1000);
43  Serial.println(F(" ms"));
44}

По умолчанию pulseIn() ждёт не больше 1 секунды; при сигнале около 1 Hz она сначала ждёт окончания текущего импульса, а потом начала нового, поэтому мы увеличили таймаут до 3 секунд. Нормально, если измеренная частота в мониторе порта отличается от расчётной на 5–20%; большая часть разницы возникает из-за допуска электролитического конденсатора. Эта разница заодно позволяет узнать реальную ёмкость конденсатора: подставь измеренную частоту в f = 1,44 / ((R1 + 2·R2) · C) и вырази C. Для более быстрых сигналов точнее считать фронты с помощью прерывания, а не pulseIn().

Запуск 555 от Arduino: измеритель ёмкости

Поскольку длительность импульса в моностабильном режиме t = 1,1 · R · C, зная R и измерив t, можно найти ёмкость конденсатора по формуле C = t / (1,1 · R). Схема такая: выводы 6 и 7 соединены, от этой точки 100 kΩ к 5 V и проверяемый конденсатор к GND; выводы 4 и 8 на 5 V, вывод 5 через 10 nF на GND. TRIG (вывод 2) подтянут к 5 V резистором 10 kΩ и подключён к D7, а выходной вывод 3 идёт на D2. Arduino посылает с D7 импульс LOW длиной 10 µs и с помощью micros() измеряет, сколько выход остаётся в HIGH.

C++ (Arduino IDE)
1// 555 monostable ile kondansatör ölçer / Capacitance meter with a 555 monostable
2const int TRIG_PIN = 7;                      // 555 pin 2 (TRIG)
3const int OUT_PIN = 2;                       // 555 pin 3 (OUT)
4const float R_OHM = 100000.0;                // 6-7 ile 5V arasındaki direnç / resistor between pins 6-7 and 5V
5const float CAL = 1.0;                       // kalibrasyon: gerçek / ölçülen / calibration: real / measured
6const unsigned long TIMEOUT_US = 6000000UL;  // 6 s: ~47 µF'a kadar / up to ~47 µF
7
8void setup() {
9  Serial.begin(9600);
10  pinMode(OUT_PIN, INPUT);
11  pinMode(TRIG_PIN, OUTPUT);
12  digitalWrite(TRIG_PIN, HIGH);              // TRIG beklemede HIGH / TRIG idles HIGH
13}
14
15void loop() {
16  while (digitalRead(OUT_PIN) == HIGH) {}    // önceki darbenin bitmesini bekle / wait for any previous pulse to end
17
18  digitalWrite(TRIG_PIN, LOW);               // 10 µs'lik LOW darbesiyle tetikle / trigger with a 10 µs LOW pulse
19  delayMicroseconds(10);
20  digitalWrite(TRIG_PIN, HIGH);
21
22  unsigned long t0 = micros();
23  while (digitalRead(OUT_PIN) == LOW) {      // çıkışın HIGH olmasını bekle / wait for OUT to go HIGH
24    if (micros() - t0 > 1000) {
25      Serial.println(F("555 yanit vermiyor / 555 not responding"));
26      delay(1000);
27      return;
28    }
29  }
30
31  t0 = micros();
32  while (digitalRead(OUT_PIN) == HIGH) {     // darbe süresini ölç / time the pulse
33    if (micros() - t0 > TIMEOUT_US) {
34      Serial.println(F("Kondansator cok buyuk / Capacitor too large"));
35      delay(1000);
36      return;
37    }
38  }
39  unsigned long widthUs = micros() - t0;
40
41  // t = 1,1 · R · C  ->  C = t / (1,1 · R)
42  float capNf = CAL * (widthUs * 1e-6) / (1.1 * R_OHM) * 1e9;
43
44  Serial.print(F("t = "));
45  Serial.print(widthUs);
46  Serial.print(F(" us, C = "));
47  if (capNf >= 1000.0) {
48    Serial.print(capNf / 1000.0, 2);
49    Serial.println(F(" uF"));
50  } else {
51    Serial.print(capNf, 1);
52    Serial.println(F(" nF"));
53  }
54  delay(1000);
55}

Здесь мы измеряем вручную с micros(), а не с pulseIn(), потому что сразу после запуска выход уже в HIGH, и pulseIn() сочла бы этот импульс «предыдущим» и пропустила бы его. На Uno разрешение micros() — 4 µs; со 100 kΩ конденсатор 1 nF даёт импульс 110 µs, так что диапазон измерения — примерно от 1 nF до 47 µF. Измерь конденсатор с известной ёмкостью и запиши отношение его реального значения к измеренному в коэффициент CAL, чтобы откалибровать свой измеритель. Перед подключением электролитического конденсатора разряди его, замкнув ножки, и подключай его плюсовой ножкой к стороне выводов 6–7.

Таймер 555 с ESP32 и Raspberry Pi Pico

ESP32 и Raspberry Pi Pico работают от 3,3 V, и их пины не выдерживают 5 V. Классическому NE555 же нужно не меньше 4,5 V, так что от 3,3 V он работать не может. Самое аккуратное решение — КМОП-версия 555, например TLC555, LMC555 или ICM7555: у неё та же распиновка, она питается от пина 3V3, а её выход меняется от 0 до 3,3 V, поэтому подключается прямо к GPIO. Если под рукой только NE555, питай его от 5 V и подели выход резисторами 10 kΩ (последовательно) и 20 kΩ (на GND). Поскольку уровень HIGH у NE555 около 3,5 V, на выходе делителя будет примерно 2,3 V: этого хватает для порога Pico в 2 V, но для порога ESP32 около 2,5 V это на грани. Поэтому с ESP32 лучше использовать КМОП-версию 555.

В примере для ESP32 КМОП-555 с R1 = 1 kΩ, R2 = 6,8 kΩ и C = 100 nF выдаёт сигнал около 986 Hz: соотношения те же, что у мигалки, только в тысячу раз быстрее. ESP32 запускает обработчик прерывания на каждом нарастающем фронте и выводит, сколько фронтов насчитано за секунду; это число и есть частота в Hz. Коэффициент заполнения рассчитывается по одному времени HIGH, измеренному с помощью pulseIn().

C++ (Arduino IDE)
1// ESP32 + CMOS 555 (TLC555) frekans ve duty ölçer / ESP32 + CMOS 555 (TLC555) frequency and duty meter
2const int SIGNAL_PIN = 27;                   // 555 çıkışı (pin 3) / 555 output (pin 3)
3
4volatile uint32_t edgeCount = 0;
5portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
6
7void IRAM_ATTR onRise() {
8  portENTER_CRITICAL_ISR(&mux);
9  edgeCount++;                               // her yükselen kenarı say / count every rising edge
10  portEXIT_CRITICAL_ISR(&mux);
11}
12
13void setup() {
14  Serial.begin(115200);
15  pinMode(SIGNAL_PIN, INPUT);
16  attachInterrupt(digitalPinToInterrupt(SIGNAL_PIN), onRise, RISING);
17}
18
19void loop() {
20  static uint32_t lastMs = millis();
21  if (millis() - lastMs < 1000) return;      // 1 saniyelik ölçüm penceresi / 1-second gate
22  lastMs += 1000;
23
24  portENTER_CRITICAL(&mux);
25  uint32_t edges = edgeCount;                // sayacı oku ve sıfırla / read and reset the counter
26  edgeCount = 0;
27  portEXIT_CRITICAL(&mux);
28
29  unsigned long highUs = pulseIn(SIGNAL_PIN, HIGH, 100000UL);  // tek bir HIGH süresi / one HIGH time
30  float duty = highUs * (float)edges / 10000.0;                // duty % = tH(µs) · f(Hz) / 10000
31
32  Serial.printf("f = %u Hz, tH = %lu us, duty = %.1f %%\n", (unsigned)edges, highUs, duty);
33}

На Pico функция machine.time_pulse_us() в MicroPython — аналог pulseIn() из Arduino, но с одним важным отличием: если пин уже на нужном уровне, она сразу начинает отсчёт. Поэтому первый вызов используется, чтобы пропустить неполный импульс и синхронизироваться с фронтом сигнала; следующие за ним измерения LOW и HIGH — уже полные импульсы. Пример измеряет мигалку с частотой раз в секунду и при каждом измерении переключает встроенный светодиод.

MicroPython
1# Pico ile 555 flaşörünü ölçmek / Measuring a 555 flasher with the Pico
2from machine import Pin, time_pulse_us
3import time
4
5sig = Pin(15, Pin.IN)       # 555 çıkışı: CMOS 555 doğrudan, NE555 bölücüyle / 555 output: CMOS 555 direct, NE555 via a divider
6led = Pin(25, Pin.OUT)      # dahili LED (Pico W'de Pin("LED")) / onboard LED (Pin("LED") on a Pico W)
7TIMEOUT = 2_000_000         # 2 s zaman aşımı / 2 s timeout
8
9while True:
10    # İlk ölçüm yarım darbeyi atlar ve kenara senkronlar / The first call skips a partial pulse and syncs to an edge
11    if time_pulse_us(sig, 1, TIMEOUT) < 0:
12        print("Sinyal yok / No signal")
13        continue
14    low_us = time_pulse_us(sig, 0, TIMEOUT)    # tam LOW süresi / full LOW time
15    high_us = time_pulse_us(sig, 1, TIMEOUT)   # tam HIGH süresi / full HIGH time
16    if low_us < 0 or high_us < 0:
17        continue
18    period = low_us + high_us
19    print("f = {:.3f} Hz, duty = {:.1f} %, tH = {} ms, tL = {} ms".format(
20        1_000_000 / period, 100 * high_us / period, high_us // 1000, low_us // 1000))
21    led.toggle()            # her ölçümde LED'i değiştir / toggle the LED on every reading
22    time.sleep_ms(200)

Идеи проектов с таймером 555

  • Полицейская мигалка: поочерёдно мигай красным и синим светодиодами, один из которых подключён от выхода к GND, а другой — от VCC к выходу; 4,7 kΩ, 47 kΩ и 1 µF дают быстрый стробоскопический эффект.
  • Двухтональная сирена: подай выход первого, медленного 555 через резистор на вывод 5 (CONT) второго 555; при смещении порогов тон второй микросхемы то повышается, то понижается. Для звука используй пассивный зуммер или небольшой динамик.
  • Лестничный таймер: собери на моностабильном 555, реле и кнопках таймер, который держит лампу включённой одну минуту, а кнопки на разных этажах подключены параллельно.
  • Измеритель ёмкости: с помощью кода для Arduino из этой статьи измеряй конденсаторы со стёршейся маркировкой и выводи результат на I2C LCD-дисплей.
  • ИК-передатчик: управляй ИК-светодиодом от астабильного 555, настроенного на 38 kHz, и принимай сигнал ИК-приёмником — получится простая сигнализация на пересечение луча. Приёмники для пультов вроде TSOP или VS1838B могут счесть непрерывную несущую помехой и через некоторое время подавить её, поэтому включай и выключай этот 555 через его вывод RESET вторым, медленным 555, чтобы передавать пачками.
  • Регулятор скорости мотора: подключи схему PWM с фиксированной частотой и потенциометром к MOSFET, чтобы регулировать мощность DC-мотора на 12 V или светодиодной ленты.
  • Детектор пропущенного импульса: поставь PNP-транзистор (например, BC557) параллельно времязадающему конденсатору, соединив его базу с TRIG; каждый импульс LOW, который Arduino посылает через равные промежутки, и запускает 555, и разряжает конденсатор, начиная отсчёт заново. Если Arduino зависнет и импульсы прекратятся, время истечёт, и 555 подаст сигнал тревоги или перезапустит систему.

Частые ошибки и как их исправить

СимптомВероятная причинаРешение
Светодиод не мигает, всё время горит или не горитRESET (4) висит в воздухе или на GND; в астабильном режиме выводы 2 и 6 не соединеныПодключи RESET к VCC и соедини выводы 2 и 6 проводом
Частота сильно отличается от расчётнойДопуск электролитического конденсатора ±20%, неверно прочитанный номинал (nF вместо µF), слишком маленькая CИзмерь конденсатор, проверь его код, для точных задач используй плёночный конденсатор
Схема работает нестабильно или запускается самаНет развязки по питанию, вывод CONT или TRIG висит в воздухе100 nF + 10 µF между выводами 8 и 1, 10 nF на выводе 5, подтяжка 10 kΩ на TRIG
Микросхема греетсяВыход замкнут на светодиод без резистора или на GND; слишком маленький R1Поставь последовательный резистор к светодиоду, сделай R1 не меньше 1 kΩ
Задержка в моностабильном режиме не заканчиваетсяКнопка удерживается или TRIG застрял в LOWНажимай кнопку коротко или посылай короткий импульс LOW с Arduino
Микросхема сбрасывается или выходит из строя при отпускании релеНет диода, гасящего обратное напряжение катушкиПодключи 1N4007 параллельно катушке реле
Arduino читает неверные значения или пин повреждён555 питается от 9–12 VПитай 555 от 5 V или понизь выход делителем напряжения
Коэффициент заполнения не опускается ниже 50%Естественный предел базовой астабильной схемыДобавь диод 1N4148 параллельно R2
Если схема не работает, сначала измерь мультиметром: на выводах 8 и 4 должно быть напряжение питания, а на выводе 5 — около 2/3 VCC (6 V при 9 V). Если напряжение на конденсаторе в астабильной схеме медленно колеблется между 1/3 и 2/3 VCC, микросхема работает, и проблема на стороне выхода. О технике измерений читай в статье Как пользоваться мультиметром.

Таймер 555 — одна из лучших деталей для обучения, потому что в одной дешёвой микросхеме он показывает ключевые идеи отсчёта времени в электронике (заряд RC-цепи, пороги, компараторы, триггеры). Начни с мигалки раз в секунду, поменяй номиналы, чтобы получить звук зуммера, затем попробуй моностабильную лампу с задержкой и измеритель ёмкости на Arduino. В приложении BlueGrays есть пошаговые проекты «Полицейская мигалка», «Освещение лестницы» и проекты с зуммером со схемами подключения и кодом, так что версии своих схем на 555 для Arduino и Pico можно попробовать бок о бок.

Частые вопросы

Для чего нужен таймер 555?

555 — универсальная микросхема-таймер, которая задаёт интервалы времени с помощью резистора и конденсатора. В астабильном режиме она выдаёт непрерывный прямоугольный сигнал для мигалок на светодиодах, звука зуммера или тактовых сигналов; в моностабильном режиме — выход, который после запуска остаётся включённым заданное время, для ламп с задержкой или таймеров. Ей не нужны ни микроконтроллер, ни код.

Какое напряжение нужно таймеру 555?

Классический NE555 работает от 4,5 до 16 V (SE555 — до 18 V); чаще всего используют питание 5, 9 и 12 V. Для более низких напряжений, например 3,3 V, бери КМОП-версии вроде TLC555 (2–15 V), ICM7555 или LMC555, который работает от 1,5 V. Пока питание остаётся стабильным, частота и длительность от напряжения не зависят.

Какие номиналы нужны для мигалки на 555 с частотой 1 Hz?

При R1 = 10 kΩ, R2 = 68 kΩ и C = 10 µF получается f = 1,44 / ((10 kΩ + 2 · 68 kΩ) · 10 µF) ≈ 0,99 Hz; светодиод горит около 0,54 с и не горит 0,47 с. Из-за допуска электролитического конденсатора ±20% реальное значение будет немного другим. Для точной подстройки замени R2 подстроечным резистором.

Как опустить коэффициент заполнения 555 ниже 50%?

В базовой астабильной схеме конденсатор заряжается через R1 + R2, а разряжается только через R2, поэтому время HIGH всегда больше времени LOW. Если добавить диод 1N4148 параллельно R2 анодом к выводу 7, конденсатор будет заряжаться только через R1. Тогда tH ≈ 0,693 · R1 · C и tL ≈ 0,693 · R2 · C, и если выбрать R1 меньше R2, заполнение опустится ниже 50%.

Чем NE555 отличается от TLC555?

NE555 построен на биполярных транзисторах, требует не меньше 4,5 V и может отдавать с выхода до 200 mA, но в покое потребляет 2–6 mA и с трудом работает выше 100 kHz. TLC555 — КМОП-версия: работает от 2 V, потребляет около 0,2 mA, достигает примерно 2 MHz, а его выход поднимается до самого напряжения питания; зато отдавать он может лишь около 10 mA. Распиновка у обоих одинаковая.

Можно ли не подключать выводы 4 и 5 таймера 555?

Вывод RESET (4) никогда нельзя оставлять висящим в воздухе; если он не нужен, соедини его прямо с VCC, иначе помехи могут случайным образом сбрасывать микросхему. Вывод CONT (5) технически можно оставить свободным, но подключать его к GND через конденсатор 10 nF — хорошая привычка, чтобы помехи не сдвигали пороги. Если подать на этот вывод внешнее напряжение, изменятся пороги, а значит, и частота.

Все проекты
Полицейская мигалка на светодиодах
#4Новичок

Полицейская мигалка на светодиодах

Как огни на полицейской машине: красный светодиод три раза быстро вспыхивает, затем три раза вспыхивает синий, и узор повторяется без перерыва. Нужны всего два светодиода и два резистора, подключённые

4.7(103)
258
Работа с зуммером
#13Новичок

Работа с зуммером

Интересно, как дверной звонок или сигнализация издают звук? Arduino заставляет маленький зуммер пищать через короткие промежутки: пик, пауза, пик, пауза. Ты видишь, как электричество превращается в зв

4.7(89)
161
Настройка частоты зуммера
#14Средний

Настройка частоты зуммера

Ты управляешь звуком зуммера четырьмя кнопками: одна включает звук, другая выключает, а две оставшиеся делают его выше или ниже. Удерживай кнопку вверх или вниз, и высота звука меняется шаг за шагом,

4.6(69)
118
Полицейский стробоскоп на Pico (красный + синий)
#151Новичок

Полицейский стробоскоп на Pico (красный + синий)

Имитируем мигалку полицейской машины на Raspberry Pi Pico в самом простом виде! Красный и синий светодиоды работают по очереди (мигалка): пока горит красный, синий погашен, и они меняются каждые 0,3 секунды бесконечно. Код записывает два шага прямо в одном цикле while True; скорость задаёт константа WAIT_MS.

4.7(3)
10
Умное освещение лестницы и коридора
#82Средний
Premium

Умное освещение лестницы и коридора

Ступи на лестницу или в коридор, и свет загорается ступенька за ступенькой в ту сторону, куда ты идёшь. На каждом конце стоит датчик расстояния; мимо какого ни пройдёшь, восемь светодиодов загораются

5.0(35)
51
Включение лампы 220V кнопкой (удержание)
#19Продвинутый
Premium

Включение лампы 220V кнопкой (удержание)

Пока ты держишь кнопку, горит настоящая лампа на 220 вольт, а как только отпустишь — гаснет. Слабый сигнал Arduino не может зажечь лампу напрямую, поэтому между ними стоит реле — выключатель с электри

4.4(30)
38
Полицейский стробоскоп на ESP32
#109Новичок
Premium

Полицейский стробоскоп на ESP32

Имитация стробоскопа полицейской машины быстрыми вспышками групп красных и синих светодиодов. По 2 светодиода в каждой группе делают эффект эффектнее. Классический пример быстрого переключения и группового управления.

4.6(21)
36