Ver Mensaje Individual
  #1  
Antiguo 18-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Controlar dispositivos por el puerto serie

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);
  // Cambiar esto si es necesario un puerto diferente
  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);
Responder Con Cita