Você está na página 1de 11

Tacômetro ( conta-giros )

O Tacômetro é um instrumento que tem como função básica medir o número de


voltas que um eixo irá realizar em determinado tempo. O tacômetro pode ser
chamado também de conta-rotações, conta-voltas ou conta-giros. Em aplicações
industriais ou mesmo no projeto de determinados tipos de equipamentos
eletrônicos de medida é necessário saber a velocidade com que gira um eixo, uma
engrenagem ou qualquer outra peça.

A unidade RPM (Rotações Por Minuto), é utilizada de modo geral, para máquinas
rotativas de qualquer natureza e ainda pra máquinas geradoras ou motoras. Trata-
se de uma unidade prática. De fato, a unidade SI equivalente é o radiano por
segundo.

O projeto consiste em um microcontrolador PIC16f628A fabricado pela Microchip


Technology, que verifica quantos pulsos são gerados pelo sensor. Para isso é
utilizado o modulo CPP, configurado para fazer a captura a cada borda de subida
durante 1 (um) segundo. Para definir este 1 segundo com precisão, utilizamos o
modulo TIMER1, configurado no modo temporizador. Assim temos o numero de
pulsos ocorridos em um segundo, que multiplicados por 60 (sessenta), obtemos o
numero de eventos ocorridos durante um minuto. De posse deste valor utilizamos
um simples Display LCD 16x2, no qual exibimos a cada 1 (um) segundo, o numero
de rotações por minuto.

O Display LCD 16x2 torna o projeto muito mais amigável ao usuário, além de
aumentar a gama de funções e operações com um custo relativamente baixo. Por
ultimo temos os sensores que neste caso foi desenvolvido de duas maneiras:
detecção por reflexão e detecção por interrupção de feixe. Para maiores
informações acesse: Sensor Infravermelho
 

Dados técnicos
Designação Tacômetro Digital
Mostrador Display LCD 16x2 
Modo óptico: 60 a 60.000 rpm
Faixa de velocidades de rotação
(ou equivalente mecânico)
Fonte de alimentação 6 a 30 Volts (possui regulador interno)
Sensor Reflexão e Interrupção

A lista de componentes necessários:

Componentes somente para Tacômetro


Quantidade Componente Código
1 Capacitor 100 uF / 50v
1 Conector Jack J4 (2,1 x 5,5 mm)
1 Placa 6 x 10 cm
1 Regulador LM 7805
1 Trimpot 10 K ohms
2 Capacitor 0.1 uF
2 Led 5 mm
1 Diodo 1N4004
1 Microcontrolador PIC16f628A
1 Cristal 4 MHz
2 Capacitor 22 pF
2 Resistor 470 ohms
1 Resistor 150 ohms
2 Resistor 10 K ohms
2 Push-button 5 mm
1 Soquete de Barra 180 Graus 2,54mm
1 Barra de Pinos 11,2mm 180 graus
1 Conector KK 3 Vias Macho
1 Display Display LCD 16x2
Componentes somente para sensor ( reflexão )
Quantidade Componente Código
1 Resistor 470 ohms
1 Resistor 47 K ohms
1 Receptor infra-red TIL78 ( 5mm )
1 Emissor infra-red TIL32 ( 5mm )
1 Capacitor 1 nF
Componentes somente para sensor ( interrupção )
Quantidade Componente Código
1 Resistor 470 ohms
1 Resistor 47 K ohms
1 Capacitor 1 nF
1 Sensor Phct203 ou Itr8102

E por fim o esquemático, para isso foi utilizado o 


EAGLE Software Design PCB disponivel para download no site:
 www.cadsoftusa.com 
Ferramenta fácil de usar, e muito poderosa para projetar placas de circuito
impresso.

 Este é o Schematic do Tacômetro ( conta-giros ) elaborado no 


EAGLE Version 5.10.0 ou superior. 
 

 
E assim ficou o Tacômetro ( conta-giros ) 
 
Com as seguintes dimensões: 
Altura: 28 mm 
Largura: 59 mm 
Comprimento: 98 mm 
Se desejar, veja o vídeo abaixo com o Tacômetro ( conta-giros ) em
funcionamento.

Para este projeto é recomendado a utilização do seguinte display: Powertip PC


1602-F ou similar desde que possua a mesma sequencia de conexão.
Segue abaixo as configurações da conexão do display

Sensor - 01 (Detecção por Interrupção )

Com as seguintes dimensões:


Altura: 10 mm
Largura: 20 mm
Comprimento: 40 mm 

Este é o Schematic do Sensor - 01 (Detecção por Interrupção ) elaborado no 


EAGLE Version 5.10.0 ou superior 
Sensor – 02 (Detecção por Reflexão) 

Com as seguintes dimensões:


Altura: 10 mm
Largura: 17 mm
Comprimento: 35 mm 

Este é o Schematic do Sensor – 02 (Detecção por Reflexão) elaborado no 


EAGLE Version 5.10.0 ou superior
 
Se quiser ter acesso ao arquivo basta clicar em download:
Código-fonte. Compilador: mikroC PRO for PIC ver
5.60 ou superior.
Downloa
d
Se quiser ter acesso ao arquivo basta clicar em download:
CONTEÚDO COMPLETO elaborado no EAGLE -
Version 5.10.0 ou superior. 
Downloa
d

Segue abaixo o código-fonte. Compilador utilizado: mikroC PRO for PIC ver
5.60 ou superior.
/////////////////////////////////////////////////////////////////////////
///////
//          Programa Projeto Tacômetro ( Conta-giros )                    
    //
//          Microcontrolador PIC16f628A                                   
    //
//          Compilador mikroC PRO for PIC ver 5.60                        
    //
//          Autor: Jeferson Alves Oliveira                                
    //
//          Site: http://eletricamentefalando.blogspot.com.br/            
    //
/////////////////////////////////////////////////////////////////////////
///////

// Declara as Variáveis Globais *****************************************
*******
sbit LCD_RS at RB1_bit;         // Determina o bit de instruções ou dado
sbit LCD_EN at RB2_bit;         // Determina o bit de "enable" do LCD
sbit LCD_D4 at RB7_bit;         // Determina pino de dados do LCD
sbit LCD_D5 at RB6_bit;         // Determina pino de dados do LCD
sbit LCD_D6 at RB5_bit;         // Determina pino de dados do LCD
sbit LCD_D7 at RB4_bit;         // Determina pino de dados do LCD

sbit LCD_RS_Direction at TRISB1_bit; // Direção dos pinos do LCD
sbit LCD_EN_Direction at TRISB2_bit; // Direção dos pinos do LCD
sbit LCD_D4_Direction at TRISB7_bit; // Direção dos pinos do LCD
sbit LCD_D5_Direction at TRISB6_bit; // Direção dos pinos do LCD
sbit LCD_D6_Direction at TRISB5_bit; // Direção dos pinos do LCD
sbit LCD_D7_Direction at TRISB4_bit; // Direção dos pinos do LCD

// Declara as variáveis  ************************************************
*******
const char character[] = {4,10,14,17,17,17,14,0};
unsigned char txt[10];
unsigned int pulsos = 0;
unsigned int total = 0;
int timer = 0;

// Protótipos de funções ************************************************
*******
void CustomChar(char pos_row, char pos_char);
void interrupt();
void RPM();

// Inicio  **************************************************************
*******
void main()
{
// Configura as Portas **************************************************
*******
   TRISA = 0b00100000;          // define PORTA como ssesssss
   TRISB = 0b00001000;          // define PORTB como ssssesss
   INTCON.GIE = 1;              // Habilita chave geral das interrupções
   INTCON.PEIE = 1;             // Habilita Interrupção dos periféricos
   PIE1.TMR1IE = 1;             // Habilita interrpções de TMR1
   PIE1.CCP1IE = 1;             // Habilita Interrupção do módulo CCP
   T1CON = 0b00110001;          // Liga TIMER1, prescaler 1:8, Clock inte
rno
   CCP1CON = 0b00000101;        // CCP1 em modulo CAPTURA e borda de SUBI
DA
   //CCP1CON = 0b00000100;      // CCP1 em modulo CAPTURA e borda de DESC
IDA
   PIR1.CCP1IF  = 0;            // Limpa a flag para nova captura
   PIR1.TMR1IF = 0;             // Limpa a flag do TIMER1 para uma nova c
ontagem

// Atribuição ***********************************************************
*******
   TMR1H = 0b00001011;          // Inicializa os registradores do TMR1
   TMR1L = 0b11011011;          // (65535 - 3035) x (1 (Fosc / 4)) x Pres
caler
   
// Configura LCD ********************************************************
*******
   Lcd_Init();                  // Inicializa o LCD
   Lcd_Cmd(_LCD_CLEAR);         // Limpa o display
   Lcd_Cmd(_LCD_CURSOR_OFF);    // Desliga o Cursor

   Lcd_Cmd(_LCD_CLEAR);         // Limpa o display
   Lcd_Out(1,5,"Jeferson");     // Escreve o texto na primeira linha
   Lcd_Out(2,5,"Projetos");     // Escreve o texto na segunda linha
   Delay_ms(2000);

   Lcd_Cmd(_LCD_CLEAR);         // Limpa o display
   Lcd_Out(1,4,"Tacômetro");    // Escreve o texto na primeira linha
   CustomChar(1,7);             // Escreve o Caractere ô
   Lcd_Out(2,3,"Conta-giros");  // Escreve o texto na segunda linha
   Delay_ms(2000);
   
   Lcd_Cmd(_LCD_CLEAR);         // Limpa o display
   Lcd_Out(1,4,"Tacômetro");    // Escreve o texto na primeira linha
   CustomChar(1,7);             // Escreve o Caractere ô
   Lcd_Out(2,3,"RPM = ");       // Escreve o texto na segunda linha

// Loop *****************************************************************
*******
do {
   if (timer == 2)
      {
      timer = 0;
      RPM();
      }
      else if (timer > 2)
           {
           timer = 0;
           PORTB.F0 = 1;        // Em caso de erro de leitura liga o led(
pino 6)
           Delay_ms(20);
           PORTB.F0 = 0;
           }
   } while(1);
}

// Funções **************************************************************
*******
void CustomChar(char pos_row, char pos_char){
  char i;
    Lcd_Cmd(64);
    for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
    Lcd_Cmd(_LCD_RETURN_HOME);
    Lcd_Chr(pos_row, pos_char, 0);
}

void interrupt()
{
if(PIR1.CCP1IF)
{
  PIR1.CCP1IF = 0;              // Limpa a flag para nova captura
  pulsos ++;
}
else if(PIR1.TMR1IF)
     {
     PIE1.TMR1IE = 0;           // Desabilita interrpções de TMR1
     PIE1.CCP1IE = 0;           // Desabilita interrupção - periféricos C
CP1
     TMR1H = 0b00001011;        // Inicializa os registradores do TMR1
     TMR1L = 0b11011011;
     timer ++;
     PIR1.TMR1IF = 0;           // Limpa a flag do TIMER1
     PIE1.CCP1IE = 1;           // Habilita interrupção - periféricos CCP
1
     PIE1.TMR1IE = 1;           // Habilita interrpções de TMR1
     }
}

void RPM()
{
  total = pulsos * 60;
  WordToStr(total, txt);        // Converte em texto para impressão
  Lcd_Out(2,9,"        ");      // Limpa a segunda linha
  Lcd_Out(2,9,txt);             // Imprime valores no display
  pulsos = 0;
}
26 de agosto de 2013

Você também pode gostar