Реле на COM-порт

Из приведенной статьи вы узнаете как управлять реле через COM-порт компьютера. Для переключения реле используется DTR-сигнал, находящийся на 4 ножке 9-ти контактного разъема D-SUB 9.

Схема управления реле через COM-порт

Как видно из вышеприведенной схемы, реле подключен не напрямую к последовательному интерфейсу, а через составной (дарлингтоновский) транзистор. Для лучшей защиты COM-порта, рекомендуется заменить транзисторы оптопарой (IC ≥ 100 mA). Разумеется, тогда резистор R2 нужно будет подобрать к оптопаре.

Транзистор BC517 можно заменить отечественным КТ645А.

Причиной присутствия в схеме транзистор (оптопары) является то, что выходная мощность COM-порта недостаточна для переключения катушки реле и требуется дополнительно питание. Напряжения питания 5В здесь будет достаточно, плюс его можно взять с блока питания компьютера. Только не рекомендую брать питание от USB! Это может привести к выходу из строя USB-порта или контроллера.

В Windows системах есть небольшой недостаток: во время загрузки винды реле будет щелкать несколько раз. Количество переключений зависит от версии Windows, к примеру в XP щелкает около 7 раз.

После того, как вы собрали конструкцию, возникает резонный вопрос: а как же управлять реле?

В операционных системах Windows прямой доступ к регистрам запрещен, поэтому для управления последовательным портом, мы пойдем другим путем. В C++ можно использовать функции Windows API. Для примера приведу несколько строчек кода:

 // Объявление переменных  HANDLE hcom;  DCB dcb; //  "DCB" - структура, в которой содержится статус порта  char *portname;  portname="COM1";   // Открываем дескриптор порта  hcom=CreateFile(portname, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);   // Считываем статус порта  GetCommState(hcom, &dcb);   // Устанавливаем DTR в "HIGH"  dcb.fDtrControl=DTR_CONTROL_ENABLE;   // Записываем новый статус  SetCommState(hcom, &dcb);   // Закрываем дескриптор (Это установит DTR в "LOW"!)  CloseHandle(hcom); 

В Linux системах можно использовать функции модема:

  #include   #include   #include    // Открываем порт (в моем случае это порт ttyS0)  int fd = open("/dev/ttyS0", O_RDWR);   // Устанавливаем DTR в "HIGH"  int state = TIOCM_DTR; ioctl(fd, TIOCMSET, &state);   // Устанавливаем DTR в "LOW"  state = ~TIOCM_DTR; ioctl(fd, TIOCMSET, &state);   // Закрываем порт  close(fd); 

Исходники и программы можно скачать здесь

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
T1 Биполярный транзистор BC517 1 Составной транзистор
D1, D2 Диод 2
R1 Резистор 150 Ом 1
R2 Резистор 100 кОм 1
LED Светодиод 1
REL1 Реле G2RE 1