Заявка выглядела безобидно: повесить на Uno датчик открытия гаражных ворот, где концевик живёт в 12-вольтовой сигнализационной линии. Я уже почти воткнул провод в пин, когда прикинул, что двадцать четыре вольта из звонковой линии или выброс автомобильной бортсети, который в пусковом режиме доходит до 40 вольт, придут прямиком в порт контроллера. Оптопара ставит между чужой цепью и платой стену из света: слева светодиод, справа фототранзистор, электрического контакта нет вовсе.
Внутри PC817 — пара в четырёхногом DIP-корпусе: инфракрасный светодиод на входе и фототранзистор на выходе, смотрящие друг в друга через внутренний зазор. Изоляция рассчитана на киловольты: паспорт даёт 5 киловольт переменки для испытаний, рабочая развязка — порядка 2,5. Пока на входе ничего не горит, выход мёртв; зажгли светодиод — фототранзистор открылся. Сигнал переходит границу фотонами, а не проводом, поэтому ни выбросы, ни переполюсовка, ни 12-вольтовая логика не добираются до пинов.
Развязка — это про минусы, и в этом её отличие от обычного делителя: у входной и выходной стороны оптопары земли разные, их можно вообще не соединять. Сигнальная линия ворот живёт со своим минусом, плата — со своим, и между ними только луч света. Если вся электроника уже питается от одного источника на 5 вольт, оптопара не нужна — хватит обычного резистора на входе. Она нужна там, где напряжения разные или чужая цепь ненадёжна: сигнализации, звонки, автомобили, уличные датчики и длинные линии на улице.
Ровно на этой паре построен вход почти всех реле-модулей: активный LOW, о котором я рассказывал в уроке про оптопару и активный LOW — там оптопара уже стояла на плате модуля. Здесь собираем её руками и делаем из чужого опасного напряжения безопасный INPUT_PULLUP-вход. Про самого модуля-потребителя подробности в уроке про подключение реле-модуля.
Вход: считаем резистор от 12 и 24 вольт
Светодиод оптопары живёт на токе, а не на напряжении — это главное правило входной стороны. Прямое падение около 1,2 вольта, комфортный рабочий ток 5-10 миллиампер, паспортный максимум — 50. Дальше арифметика: для линии 12 вольт резистор 2 кОм даёт (12 − 1,2) / 2000 ≈ 5,4 миллиампера, 1 кОм — вдвое больше, около 11. Для звонковой линии 24 вольта тот же ток даёт 4,7 кОм: (24 − 1,2) / 4700 ≈ 4,8 миллиампера. Я предпочитаю целиться в 5-7 миллиампер: запас по яркости есть, входная сторона не греется, и оптопара живёт свой полный ресурс.
В паспорте PC817 есть коэффициент передачи тока CTR, и он гуляет по рангам: от 50 процентов у ранга A до 600 у ранга D. Практически это значит, что пять миллиампер на входе дают от двух с половиной до тридцати миллиампер способности прижать выход. Для INPUT_PULLUP с внутренней подтяжкой 20-50 кОм хватает и ранга A с запасом, но если хотите внешнюю подтяжку 10 кОм и уверенную реакцию, берите ранг B и выше — на ленте маркетплейса он помечен буквой после номера. Мой выбор — PC817B: золотая середина по цене и запасу.
Цоколевка DIP-4 держится точки-ключа: от неё по кругу анод, катод, эмиттер, коллектор — нога 1 анод, нога 2 катод, нога 3 эмиттер, нога 4 коллектор. Входная пара включается как обычный светодиод с резистором, выходная — как ключ: эмиттер на GND платы, коллектор на цифровой пин. Пин конфигурируем INPUT_PULLUP: внутренняя подтяжка AVR в 20-50 кОм держит его у плюса, а открытый фототранзистор прижимает к земле. Итог — логика наизнанку, как у реле-модулей: сигнал пришёл, пин читает LOW. На длинных линиях от ворот до щитка я добавляю внешнюю подтяжку 10 кОм — внутренняя на метре провода собирает наводки, о которых писал в уроке про наводки и шум датчиков.
Ловушка, на которую я потратил вечер своей первой оптопары: перепутаны коллектор и эмиттер. Схема выглядит правильно, светодиод горит, и даже мультиметр на пине показывает какую-то жизнь — но сигнал вялый, срабатывание ловится только при ярком входе, а то и вовсе держится в полувключённом состоянии. Фототранзистор в обратном включении теряет усиление в десятки раз: вместо сотен единиц передачи — единицы, и выход физически не может прижать пин к земле. Лечение копеечное: сверьте ногу 3 и ногу 4 с точкой на корпусе до втыкания, а после сборки проверьте падение на пине — при сработавшей оптопаре там обязаны быть доли вольта.
Про скорость честно: PC817 переключается за единицы-десятки микросекунд — время нарастания в паспорте около 4 микросекунд при лёгкой нагрузке и до 18 при тяжёлой. Для кнопок, концевиков и реле это неважно, для входа 50-герцовой звонковой полуволны — с горкой запаса, но на сотни килогерц такой оптрон не ставят: там нужны быстрые 6N137 или цифровые изоляторы. Если хотите мерить ШИМ чужого контроллера через PC817, помните про задержки: сигнал дойдёт, но фронты скруглятся. Для входов «сработало/не сработало» с горкой хватает.
Отдельный случай — переменное напряжение дверного звонка: типовые линии дают 8-16 вольт AC, а входной светодиод PC817 держит в обратном направлении всего 6 вольт. Решение — обычный диод 1N4148 или 1N4007 параллельно входной паре встречно: он принимает на себя отрицательную полуволну, и оптопара видит только положительные импульсы с частотой сети. Бортсеть автомобиля лечится иначе: резистор 2,2 кОм плюс конденсатор 10 микрофарад на входе сглаживают пусковые выбросы, и оптопара видит ровный ток вместо всплесков до 40 вольт. Обе темы — прямое продолжение урока про диоды на макетке, где выбросы разобраны со всех сторон.
| Сценарий | Входная цепь | Резистор | Что читает пин |
|---|---|---|---|
| концевик ворот, 12 В | 12-вольтовая линия через резистор на анод | 1-2,2 кОм, ток 5-11 мА | LOW, пока ворота двигаются |
| дверной звонок, 8-16 В AC | встречный диод 1N4148 параллельно входу | 1-2 кОм | импульсы LOW с частотой сети 50 Гц |
| бортсеть авто, 12 В | резистор плюс конденсатор 10 мкФ | 2,2 кОм | LOW без выбросов при пуске |
| логика 5 В другой платы | прямой вход через резистор | 470 Ом, около 8 мА | LOW при активном сигнале |
Выход: INPUT_PULLUP и счёт срабатываний
// Вход с оптопары: коллектор PC817 на D2 (INPUT_PULLUP), эмиттер на// GND. Сигнал пришёл - фототранзистор открылся и прижал пин к земле,// то есть активный уровень здесь LOW. D12 горит, пока сигнал жив.const int PIN_VHOD = 2;const int PIN_LED = 12; unsigned long tProverka = 0;int schet = 0;bool signalByl = false; void setup() { Serial.begin(9600); pinMode(PIN_VHOD, INPUT_PULLUP); pinMode(PIN_LED, OUTPUT); Serial.println("PC817: LOW = signal est, HIGH = tishina");} void loop() { if (millis() - tProverka >= 20) { // лёгкий антидребезг опросом tProverka = millis(); bool signalEst = digitalRead(PIN_VHOD) == LOW; digitalWrite(PIN_LED, signalEst ? HIGH : LOW); if (signalEst && !signalByl) { signalByl = true; schet++; Serial.print("srobotki: "); Serial.println(schet); } if (!signalEst && signalByl) { signalByl = false; Serial.println("signal ushel - vorota stoyat"); } }}Обратите внимание на зеркальность: и вход оптопары, и кнопка в этом же скетче жили бы по одному правилу — активный уровень здесь LOW. Пин с подтяжкой покоится у плюса, а внешняя цепь доказывает своё присутствие, прижимая его к земле. Как только вы смотрите на вход через эту призму, оптопара перестаёт быть магией: это просто выключатель света для светодиода на другом конце зазора. Тот же LOW-активный вход у реле-модуля я разбирал в уроке кластера про активный LOW, и логика читается идентично.
Где это нужно на практике, кроме гаража: звонковые линии на 8-16 вольт переменки, уличные датчики дворового освещения на 12 вольтах, промышленные входы контроллеров, где на клемме честные 24 вольта. Везде формула одна: посчитать резистор под ток 5-7 миллиампер, принять меры против обратной полуволны или выбросов, а дальше плата живёт в своих безопасных 5 вольтах. Проводку между чужой цепью и оптопарой я веду по правилам из урока про клеммники и разъёмы — так, чтобы выдёргивался именно разъём, а не тонкий пин.
В самом скетче две привычки из репертуара надёжных входов. Первая — опрос по времени: строка с millis() пропускает чтение пина, пока не прошло 20 миллисекунд с прошлой проверки, и дребезг контактов чужого концевика почти не доходит до счётчика. Вторая — маяк на D12: светодиод горит ровно тогда, когда на пине LOW, и спор «скетч или оптопара» решается взглядом: маяк молчит — сигнал не дошёл, маяк горит, а счётчик стоит — проблема в коде.
Для звонковой линии скетч выше превращается в счётчик полуволн: за секунду прилетает пятьдесят импульсов LOW, и по числу попаданий за окно в 200 миллисекунд вы отличаете настоящий звонок от наводки. Тот же счёт работает для гаражного концевика: сколько раз дёрнулись ворота за день. С Serial-отчётом удобно ловить и дребезг: если после одного срабатывания сыпется пачка строк, окно опроса стоит расширить с 20 до 50 миллисекунд.
- 1. Чем задаётся режим входной стороны PC817?
- 2. Какой резистор поставить в линию 12 В, чтобы получить около 5-10 мА на входе?
- 3. Что читает пин с INPUT_PULLUP, когда внешний сигнал пришёл?
- 4. Светодиод входа горит, но сигнал на пине вялый и нестабильный. Что проверите первым?
- 5. Дверной звонок выдаёт 8-16 вольт переменного тока. Что добавить на вход оптопары?
- PC817 — ИК-светодиод и фототранзистор в одном DIP-4: между сторонами только свет, изоляция 2,5-5 кВ.
- Вход считается в миллиамперах: (U − 1,2) / R; для 12 В берите 1-2,2 кОм, для 24 В — около 4,7 кОм, комфорт 5-7 мА.
- Выход: эмиттер на GND, коллектор на пин с INPUT_PULLUP; сигнал пришёл — пин читает LOW.
- Перепутанные коллектор и эмиттер работают наизнанку: усиление падает в десятки раз, пин не прижимается — сверяйте ногу 3 и 4 с точкой на корпусе.
- Переменка звонка требует встречного диода на входе, бортсеть авто — конденсатора 10 мкФ; обе меры дешевле нового пина.
Частые вопросы по теме урока
- Чем задаётся режим входной стороны PC817?
- Вход оптопары — светодиод: для него важно ограничить ток резистором. Комфорт 5-10 мА, максимум 50; напряжение — лишь слагаемое в расчёте резистора. током через светодиод, а не напряжением
- Какой резистор поставить в линию 12 В, чтобы получить около 5-10 мА на входе?
- (12 − 1,2) / 2000 ≈ 5,4 мА, с 1 кОм — около 11 мА. Оба диапазона 1-2,2 кОм рабочие; 47 Ом дал бы более 200 мА и сожгли бы светодиод. 1-2,2 кОм
- Что читает пин с INPUT_PULLUP, когда внешний сигнал пришёл?
- Открытый фототранзистор замыкает пин на землю, поэтому активный уровень LOW — та же наизнанка, что и у входа реле-модулей с оптопарой. LOW — транзистор прижал пин к земле
- Светодиод входа горит, но сигнал на пине вялый и нестабильный. Что проверите первым?
- В обратном включении фототранзистор теряет усиление в десятки раз и не может прижать пин. Сверьте цоколевку: от точки-ключа идут анод, катод, эмиттер, коллектор. не перепутаны ли коллектор и эмиттер
- Дверной звонок выдаёт 8-16 вольт переменного тока. Что добавить на вход оптопары?
- Входной светодиод PC817 держит лишь 6 В в обратном направлении. Встречный диод принимает на себя отрицательную полуволну, и оптопара видит положительные импульсы сети. встречный диод 1N4148 параллельно входу