segunda-feira, 3 de outubro de 2016

Integração via Porta Paralela - parte 2

Acionando  outros componentes pela porta paralela

Dando sequência à integração de componentes via porta paralela, depois de ver que os acionamentos dos Leds é possível, e que, até mesmo de forma sequencial existe um funcionamento lógico para ser seguido, só depende do usuário/programador, decidir o que fazer com a tensão que sai de um dos pinos da porta paralela.
Por meio dessa tensão, e utilizando recursos de eletrônica de potência é possível o ligar e desligar equipamentos eletro/eletrônicos como motores, lâmpadas, fechaduras elétricas e até mesmo controlar braços robóticos, temporizadores e muito mais.
Em uma variação do código utilizado para o acionamento dos Leds que esta postado em Integração via Porta Paralela - parte 1, pode-se conseguir um acionamento de um relé 5V onde faz-se uma lâmpada ligar e desligar.
Para elaboração do projeto é necessário um módulo relé arduino, uma lâmpada, um cabo paralelo, um computador com porta paralela e uma fonte externa para alimentar o relé, devido falta de uma saída com essa tensão  na porta utilizada.


fonte: próprio autor


Código fonte utilizado compilado no DevC++

#include <stdio.h>   // Biblioteca Standard Input/Output
#include <stdlib.h>
#include <conio.h>   // Biblioteca necessária para o uso da função getch();
#include <windows.h> // Biblioteca necessária para o carregamento da inpout32.dll
#include <time.h>

#define LPT1 0x378

/*Inpout32*/
//Declaração dos ponteiros para função.
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);


int main()

{
            //system ("color 18");
            printf("\n\t\tDATA : %s HORA: %s\n\n",__DATE__,__TIME__);
            
HINSTANCE hLib; //Instância para a DLL inpout32.dll.
inpfuncPtr inportb;     //Instância para a função Imp32().
oupfuncPtr outportb;  //Instância para a função Out32().
/*Inpout32*/
   //Carrega a DLL na memória.
   hLib = LoadLibrary("inpout32.dll");
   if(hLib == NULL)
   {
      printf("\n\aErro. O arquivo inpout32.DLL nao foi encontrado.\nO programa vai terminar apos digitar qualquer tecla.");
      return-1;
   }

   inportb = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
   if(inportb == NULL)
   {
      printf("\n\aErro. Erro ao endereçar a função Inp32.");
   }
   //Obtém o endereço da função Out32 contida na DLL.
   outportb = (oupfuncPtr) GetProcAddress(hLib, "Out32");
   if(outportb == NULL)
   {
      printf("\n\aErro. Erro ao endereçar a função Out32.");
        return-1;
   }
/*Inpout32*/
//Interface//
                
        

    
        {
            
            printf("=============================================================\n");
                


        

        
//Programa de Controle//

                            char teclado=' ';
                            puts("\n\tAcionamento de controle de equipamentos externos.");
                            printf("\n=============================================================\n");
                            puts("Ligar ou desligar equipamentos acoplados na porta paralela.\nAperte as teclas referentes a eles:\n");
                            puts("L - LIGA LAMPADA ");
                            puts("D - DESLIGA LAMPADA ");
                            puts("\n\n\n(**Quando quiser SAIR o programa digite S.**)");
                            puts("(***==========================================mecatronizar.blogspot.com.br***)");
                            teclado=getch();
                            while(teclado!='p')
                        {
                         switch(teclado)
                              { 
                                  case 'L':
                               outportb(0x378,1);  /* A função que manda um byte para a porta paralela no caso o número 1 ou 0000 0001 em binário*/
                               //system ("colorc8");
                                  break;
                               case 'D':
                               outportb(0x378,0X00); /* Novamente a função que manda um dado a porta paralela*/
                               //system ("color e8");
                                  break;
                               case 'S':
                               exit(0);         
                              }
                              teclado=getch();
                        }
                                        
                          outportb(0x378,0);
                        FreeLibrary (hLib);
                
                    
        }
                                                            
                        return 0;
                
        }
//fim do else pertencente ao if que testa se carregou a dll
//fim da função main e do programa

Esquema de ligação 

Logo abaixo tem uma sugestão de esquema de ligação da lâmpada para o funcionamento do chaveamento da rede com o relé.


fonte: próprio autor


E finalizando um vídeo demostrativo do funcionamento.
Vale lembrar que com esses procedimentos e as potências dimensionadas de maneira correta é possível a ligação e acionamento de qualquer dispositivo.
Caso seja necessário o projeto completo encontra-se nesse LINK.





Bons estudos!

2 comentários:

  1. Hola probé el programa en varios computadores y el programa se cierra sin activar el puerto paralelo, las pruebas la hice en Windows XP. VC sebe si falta algún detalle? Gracias

    ResponderExcluir
    Respostas
    1. Hola mi amigo, gracias por seguir mi sitio web, toda la crítica o el elogio son bienvenidos. Al final del artículo está disponible todos los archivos que se utilizan en el proyecto, es muy importante que el UserPort y INPOUT.dll están en carpetas system32 de Windows XP, los sistemas operativos más nuevos tienden a incompatibilidad. Si no funciona enviarme mas detalles para que pueda ayudar. ¡Buena suerte!

      Excluir