Páginas

quarta-feira, 8 de junho de 2011

Conclusão

Mesmo enfrentado diversas dificuldades conseguimos construir uma máquina que efetua cortes com distâncias e comprimentos programados, à um baixissímo custo. Os conhecimentos multiciplinares que se adiquire em um projeto como este, são muito importante para a formação profissional de qualquer ramo, porque além dos conhecimentos técnicos das diversas disciplinas aplicadas, temos que trabalhar nosso lado emocional, nossas relações humanas e nossa capacidade de tomar desisões, que na maioria das vezes, tem que ser muito rápida. Os trabalhos interdisciplinares sem sombra de dúvidas, supera nossas espectativas de aprendizado.

Mecânica.

Para a construção mecânica de nossa mesa, usamos madeira MDF e trilhos de gaveta para dar mobilidade à estrutura. A figura abaixo mostra a estrutura já montada.


Escrita do Programa

Segue escrita do programa em C. Obviamente que para enteder o que está escrito, é necessário conhecer a liguagem C.

Todas as definições do programa estão descritas abaixo.




// Descrição

#include <16F628A.h>                     // Inclui a biblioteca do microcontrolador.

#FUSES INTRC_IO                        // Habilita o oscilador interno.
#FUSES NOMCLR                        // Desabilita o uso do Master Clear, pino RA5 disponível para uso como I/O.
#FUSES NOPROTECT                     // Desabilita a proteção contra leitura do código.
#FUSES NOLVP                        // Desabilita a programação em baixa tensão, pino RB4 disponível para uso como I/O.
#FUSES NOBROWNOUT                     // Desabilita o reset por Brownout.
#FUSES NOCPD                        // Desabilita a proteção da EEPROM
#FUSES NOWDT                        // Desabilita o Watch Dog Timer
#FUSES NOPUT                        // Desabilita o Power Up Timer

#use delay(clock=4000000)                  // Seta a fequencia do oscilador em 4MHz

#define Servo1_RA0                      // Definição da porta A0 para conrole do servo
#include <1Servo-MIB.h>                   // Inclusão da biblioteca desenvolvida pela Meca In Brasil.com

int qtd_passo, lib, qtd_corte, lib1, np, npx, nc;
int pen, sent_giro_my, corte = 3;

#define PROG input(PIN_A4)                        // Atribui o nome "MXH" à entrade RA4
#define COMP input(PIN_A3)               // Atribui o nome "NUM_CORTE" à entrad RA5
#define NUM_CORTE input(PIN_A2)
#define START input(PIN_A2)


// Interrupção do Timer0 para utilização de servo-motor.

void STP_Y_AH() // Giro antihorario motor eixo Y
{
   output_high(PIN_B4);
   delay_ms(100);
   output_low(PIN_B4);
   delay_ms(100);
   output_high(PIN_B5);
   delay_ms(100);
   output_low(PIN_B5);
   delay_ms(100);
   output_high(PIN_B6);
   delay_ms(100);
   output_low(PIN_B6);
   delay_ms(100);
   output_high(PIN_B7);
   delay_ms(100);
   output_low(PIN_B7);
   delay_ms(100);
}

void STP_Y_H()  // Giro horario do motor eixo Y
{
   output_high(PIN_B7);
   delay_ms(100);
   output_low(PIN_B7);
   delay_ms(100);
   output_high(PIN_B6);
   delay_ms(100);
   output_low(PIN_B6);
   delay_ms(100);
   output_high(PIN_B5);
   delay_ms(100);
   output_low(PIN_B5);
   delay_ms(100);
   output_high(PIN_B4);
   delay_ms(100);
   output_low(PIN_B4);
   delay_ms(100);
}

void STP_X_AH () // Giro antihorario motor X.
{
   output_high(PIN_B0);
   delay_ms(100);
   output_low(PIN_B0);
   delay_ms(100);
   output_high(PIN_B1);
   delay_ms(100);
   output_low(PIN_B1);
   delay_ms(100);
   output_high(PIN_B2);
   delay_ms(100);
   output_low(PIN_B2);
   delay_ms(100);
   output_high(PIN_B3);
   delay_ms(100);
   output_low(PIN_B3);
   delay_ms(100);
}

 void  STP_X_H() // Giro horario motor X
{
   output_high(PIN_B3);
   delay_ms(100);
   output_low(PIN_B3);
   delay_ms(100);
   output_high(PIN_B2);
   delay_ms(100);
   output_low(PIN_B2);
   delay_ms(100);
   output_high(PIN_B1);
   delay_ms(100);
   output_low(PIN_B1);
   delay_ms(100);
   output_high(PIN_B0);
   delay_ms(100);
   output_low(PIN_B0);
   delay_ms(100);
}

void STATUS_PEN(pen) //Controle da posição da caneta de corte
{
      if (pen==1)     //Caneta Alta
         {
            servo1=9;
         }
      if (pen==0)  // Caneta Baixa
         {
            servo1=0;
         }
}




void main()
{
   init_servo();                       // Inicialização do Servo
   STATUS_PEN(1);

   while(true)                        // Laço infinito para executar as instruções anteriores apenas uma vez
   {
      while (PROG == 1)              // Laço de programação.
      {
         if (COMP == 1 && lib == 0)
         {
            ++qtd_passo;
            lib = 1;
         }
          if (COMP == 0 && lib == 1)
         {
            lib = 0;
         }
          if (NUM_CORTE == 1 && lib1 == 0)
         {
            ++qtd_corte;
            lib1 = 1;
         }
          if (NUM_CORTE == 0 && lib1 == 1)
         {
            lib1 = 0;
         }
      }

      if (START == 1)                        // Início da rotina de comandos.
      {
         for (nc=1;nc<=qtd_corte;++nc)      //Laço que representa a quantidade de cortes.
         {
           if (sent_giro_my == 0)
           {
              STATUS_PEN(0);
              delay_ms(500);

              for (np=0; np <= corte; np++)
              {
                  STP_Y_AH();
              }

              sent_giro_my=1;
              STATUS_PEN(1);
              delay_ms(500);

              for (npx=1;npx<=qtd_passo;++npx)
              {
                 STP_X_H();
              }
           }

           if (sent_giro_my == 1)
           {
              STATUS_PEN(0);
              delay_ms(500);

              for (np=0; np <= corte; np++)
              {
                  STP_Y_H();
              }

              sent_giro_my=0;
              STATUS_PEN(1);
              delay_ms(500);

              for (npx=1;npx<=qtd_passo;++npx)
              {
                 STP_X_H();
              }
           }


         }


        qtd_corte=0;
         qtd_passo=0;


   }
   }
}

Programação.

Após montagem da placa é necessário programar o PIC. O PIC será o controlador de todas as ações dos motores, determinará quantos cortes e o distanciamento entre eles. Este programa irá traduzir o desejo do usuário para o circuito eletrônico através da linguagem C, o programa que usaremos é o C++ Builder.

Soldagem dos componentes.

A figura mostra os componentes soldados na placa.

Montagem da Placa

Para transferência da impressão do circuito para a placa, usamos papel glossy com a imagem impressa a laser. A transferência fooi feita usando um ferro de passar roupa sobre o papel. A imagem mostra o circuito impresso na placa.

Layout da Placa.

 A figura mostra a distribuição dos componetes na placa, em 3D, recurso do Proteus que nos ajudará no momento da montagem física.

Impressão da trilha.

Figura da trilha para imprimir na placa de cobre.

Construção das trilhas em Proteus.

Após simular o funcionamento do circuito, passamos para a construção das trilhas. A figura mostra essas trilhas.

Podemos ver na figura, o posicionamento dos componentes na placa. O próximo passo é imprimir as trilhas na placa de cobre e materializar nosso circuito.

Circuito Simulado no Proteus

O circuito abaixo mostra a simulação da montagem eletrônica da placa.
Podemos indentificar a instalação de dois motores de passo e servo motor, que será usado para  realizar o movimento da caneta ou seja, o movimento do eixo Z.