Si alguna vez has pensado en controlar algún dispositivo desde tu PC puede que este truco pueda servirte. En este caso se activa o desactiva un rele, que a su vez actúa como un interruptor que permite encender o apagar "cualquier cosa" (una luz, una puerta automática, etc.).
Para realizar esto vamos a usar el puerto serie del PC, mas concretamente el pin RTS que en un conector de 9 pines es el numero 7. El circuito se ha reducido para que resulte sencillo y no utilice demasiados componentes, su funcionamiento es muy básico cuando activamos RTS tendremos una tensión positiva que activara el rele, si desactivamos RTS tendremos una tensión negativa y el rele volverá a su estado de reposo. (Siento no entrar en más detalles, intento no utilizar palabras técnicas para que todos puedan entenderlo, pero resulta difícil)
El circuito sería el siguiente (no es fácil dibujar con letras):
Código:
V+
|
+------+
| |
_ -------
D2 ^ | / | RELE
| -------
| |
+------+
|
|
| /
D1 R1 |/
RTS >--->|-+--/\/\/\/\----------| T1
| R2 |\
+--/\/\/\/\--+ | \
| |
GND >-------------------+---------+-----< GND
R1,R2 10K
D1,D2 1N4007
T1 BC517
V+ 6V..12V
En cuanto al software, tenemos esta función que, pasándole como parámetros el puerto y el tiempo de espera en milisegundos, activa RTS y la mantiene activa durante el tiempo de espera para después volver a desactivarla.
Código Delphi
[-]
function Activar_RTS(Puerto: String; Espera: Cardinal): String;
var
hPort: THandle;
DCB: TDCB;
begin
Result:= '';
Puerto:= Uppercase(Puerto);
if (Puerto<>'COM1') and (Puerto<>'COM2') then
exit;
hPort:= CreateFile(PChar('\\.\'+Puerto), GENERIC_READ or GENERIC_WRITE,0, nil,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if hPort<>INVALID_HANDLE_VALUE then
begin
DCB.DCBlength:= sizeof(DCB);
if GetCommState(hPort,DCB) then
begin
with DCB do
begin
BaudRate := CBR_9600;
ByteSize := 8;
Parity := NOPARITY;
StopBits := ONESTOPBIT;
Flags := $01;
end;
if SetCommState(hPort, DCB) then
begin
EscapeCommFunction(hPort,SETRTS);
Sleep(Espera);
EscapeCommFunction(hPort,CLRRTS);
end;
end;
CloseHandle(hPort);
end;
end;
Ejemplo de uso:
Código Delphi
[-]
Activar_RTS('COM1',5000);