Из приведенной статьи вы узнаете как управлять реле через 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
Биполярный транзисторBC5171
Составной транзисторD1, D2
Диод2
R1
Резистор150 Ом1
R2
Резистор100 кОм1
LED
Светодиод1
REL1
РелеG2RE1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- rc4-src.zip (76 Кб)