Из приведенной статьи вы узнаете как управлять реле через COM-порт компьютера. Для переключения реле используется DTR-сигнал, находящийся на 4 ножке 9-ти контактного разъема D-SUB 9.
Как видно из вышеприведенной схемы, реле подключен не напрямую к последовательному интерфейсу, а через составной (дарлингтоновский) транзистор. Для лучшей защиты 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 | |||