ELECTRONICS

Оптопара PC817 и Arduino: гальваническая развязка, схема подключения, распиновка

Транзисторы и ключиСкетч проверен компиляцией

PC817 — светодиод и фототранзистор в одном корпусе на четыре ноги, между которыми только свет. Вывод Arduino зажигает светодиод, свет открывает транзистор на другой стороне — и цепи никак не связаны электрически. Так плата управляет чужим устройством с другой землёй или защищается от помех силовой части.

Именно эта микросхема стоит на модулях реле рядом с перемычкой JD-VCC. Как отдельная деталь она нужна, когда развязку надо сделать самому: управлять чужой кнопкой, читать сигнал с высоковольтной цепи, соединить две платы с разным питанием.

Схема подключения

CT008PC817S
Наведите на провод или нажмите на него — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
1 — анод (A)Плюс внутреннего светодиода, через резистор к выводу платы. Помечен точкой.
2 — катод (K)Минус светодиода, на землю платы.
4 — коллектор (C)Выход, к плюсу чужой цепи через её резистор подтяжки.
3 — эмиттер (E)Выход, к земле чужой цепи. С той стороны своя земля, с платой не соединяется.

Характеристики

Изоляция
5000 В между сторонами
Ток светодиода
5–20 мА, максимум 50
Прямое падение
1,2 В
Ток коллектора
до 50 мА
Напряжение коллектор-эмиттер
до 35 В
Коэффициент передачи
50–600 %
Корпус
DIP-4

Как считать резисторы

Со стороны Arduino: вывод даёт 5 В, на светодиоде падает 1,2, остаток 3,8 В делим на желаемые 10 мА — 380 Ом, ближайший 330 или 390. Со стороны выхода транзистор ведёт себя как ключ на землю чужой цепи: между коллектором и её плюсом ставят резистор 1–10 кОм, а сигнал снимают с коллектора — единица в покое, ноль при включённом светодиоде.

Оптопара медленная по меркам электроники: до 20 килогерц. Для кнопок, реле, сигналов «включи-выключи» — с запасом; для передачи данных на мегабитах — нет.

Обратная задача: читать высокое напряжение

Оптопара работает и в другую сторону. Светодиод питается от чужой цепи — например, 12 или 24 В через резистор 2,2 кОм, а транзистор подключён к выводу Arduino с INPUT_PULLUP. Есть напряжение — вывод читает ноль. Так безопасно узнают, включён ли прибор, не заводя его напряжение на плату.

Библиотека

не нужнаС точки зрения кода это светодиод: digitalWrite на входе, digitalRead на выходе.

Готовый скетч

// Оптопара как развязанный выход: вывод 7 зажигает внутренний светодиод,
// на другой стороне открывается транзистор
const int OPTO_PIN = 7;

void setup() {
  pinMode(OPTO_PIN, OUTPUT);
}

void loop() {
  digitalWrite(OPTO_PIN, HIGH);   // транзистор открыт: коллектор замкнут на эмиттер
  delay(1000);
  digitalWrite(OPTO_PIN, LOW);    // закрыт
  delay(1000);
}

Скетч собирается arduino-cli под Arduino UNO

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

Частые ошибки

Светодиод без резистора

Вывод платы отдаст 40 мА, светодиод оптопары рассчитан на 50 предельных — проживёт недолго и утащит вывод. 220–330 Ом обязательны.

Соединили земли обеих сторон

Развязка исчезла: помехи и разность потенциалов пошли на плату. Смысл оптопары в том, что земли разные. Если земля общая — оптопара не нужна, хватит транзистора.

Выход инвертирован

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

Не тянет нагрузку

Транзистор оптопары — до 50 мА, это сигнал, не сила. Реле или мотор на выходе — только через ещё один транзистор.

Перепутаны 3 и 4

Эмиттер третий, коллектор четвёртый — не по порядку. Точка на корпусе у первой ножки, нумерация против часовой стрелки.

Что понадобится