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.