como fazer uma carrinho de controle remoto
Autor: gabrielrobo | Publicado: 2011-08-22T11:12:00-07:00



 				O protótipo consiste em uma  				carcaça de um carrinho equipada com dois motores CC, um módulo  				de comunicação por rádio freqüência e um sensor óptico capaz de  				obter informações para o cálculo da velocidade instantânea do  				veículo. O controle desses dispositivos é feito por um  				microcontrolador PIC16F877, o qual controla o movimento dos  				motores bem como a transmissão dos dados entre a base  				controladora e o carrinho. 				 				 				 				 				 				&nbsp;&nbsp;O projeto foi divido em cinco etapas:  				 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Utilização do  				kit RF; 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Sensor de Velocidade; 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Controle dos Motores; 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Desenvolvimento do Hardware ; 				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Desenvolvimento do Software.  			
 	
 		 		|DIAGRAMA DE BLOCOS| 	
 		 		 		 		                           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No veículo, existem dois módulos         básicos; um deles é o de aquisição dos sinais pulsados (desenvolvido         com fotodiodos e fototransistores)e cálculo da velocidade para         transmitir à base controladora. Outro módulo é o de controle dos         motores, o qual consiste em dois sinais PWM, providos pelo PIC, e uma         ponte H para cada um dos dois motores, circuito que fornece a corrente         suficiente para os motores e permite a inversão do sentido do         giro.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         Os dados são transmitidos de forma assíncrona entre o controle e o         protótipo, utilizando a interface serial do PIC e Kits de RF. No         controle, ocorre a aquisição dos sinais de controle do carrinho, vindo         de quatro chaves normalmente abertas, e é feito também o registro da         velocidade em displays de sete segmentos. 	
 		 		|CONTROLE REMOTO| 	
 		 		
 		Para a utilização do kit RF foi projetado  		um controle remoto. O controle é  		formado por duas placas fenolite, a primeira contém: 2 displays de 7  		segmentos, 2 CI`s e resistores de 330 ohm, esta placa é responsável por  		mostrar a velocidade do carrinho.  		Esta placa é mostrada abaixo.&nbsp;  		A Segunda placa contém: 1 PIC16F876, 1 radio receptor , 1 radio  		transmissor, 1 oscilador de 20MHz , 1 capacitor de 22pF e quatro botões. 		O controle funciona da seguinte forma: &nbsp;O  		PIC16F876 é responsável pelo comando das ações sobre o carrinho através  		dos 4 botões: acelerar para frente, acelerar para trás, virar para  		esquerda e virar para direita. Estas ações são representadas por palavra  		binárias que são &nbsp;enviadas para o carrinho através do radio transmissor. 		O radio transmissor situado no controle é  		responsável por receber a informação da velocidade do carrinho ,  		transmitir tal informação para o PIC16F876 que por sua vez transmite a  		informação para o CI 4511 que faz a codificação de BCD para 7 segmentos,  		sendo assim possível visualizar a velocidade do carrinho no display. 		 					
 				 				 				 				 				 				 				 				 			
 		 		 		 	
 		 		|MOTORES CC| 	
 		 		 		O hardware desenvolvido para os motores  		tem a função de direcionar a rotação dos motores CC ligados ao carrinho.  		Ele é constituído de duas pontes-H, como as da figura abaixo, cada qual  		ligada a um motor.&nbsp;No entanto, alguns problemas foram encontrados  		durante o desenrolar do projeto e soluções foram adotadas. Alimentação  		utilizada para um perfeito funcionamento dos motores CC era de 9 V. Já a  		alimentação requerida para o CI 7408 era de 5 V. Para isto foi  		adicionado ao circuito um regulador de tensão de 5 V.Problemas  		relacionados à polarização dos transistores também foram vistos. Para  		isto, foram ligados ao circuito uma combinação de resistores e  		transistores para conseguir polarizar corretamente os transistores BC516  		e BC517. Abaixo segue a listagem dos componentes utilizados para a  		montagem do driver. 			 			&nbsp;R11=R13=150Ω; 			
 			 			&nbsp;R15=R16=10KΩ; 			
 			 			&nbsp;R12=R17=330Ω 			
 			 			&nbsp;DIODOS 1N4007; 			
 			 			&nbsp;TRANSISTORES NPN&nbsp; BC517; 			
 			 			&nbsp;TRANSISTORES PNP BC516; 			
 			 			&nbsp;TRANSISTORES BC548; 			
 			 			&nbsp;CIRCUITO INTEGRADO 7408. 		
 		
 			 		 	
 		 		 		&nbsp;|SENSOR DE  		VELOCIDADE| 	
 		 		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  		O sensor de Velocidade foi implementado com dois pares de fotodiodo  		(TIL32) e fototransistor (TIL78), os quais capturam sinais pulsados das  		rodas traseiras. Estes sinais são utilizados para fornecer a freqüência  		angular a partir da qual é calculada a velocidade de cada roda,  		fornecendo um valor intermediário como instantânea do veículo  	
 		 		 		&nbsp;|SOFTWARE| 	
 		 		/* Prototipo.c */ 		
#include&lt;pic.h&gt;
#include "usart.h"
typedef struct{
char dir1,dir2,dc2,dc1;
}dado;

#define M1T RA0
#define M1F RA1
#define M2T RA2
#define M2F RA3
void Protocolo(char sData,dado *Data);
void FormataDados(char sData,dado *Data);
void iniciaPWM(void);
void setDir(char dir1, char dir2);
void setDuty(int dutyc01,int dutyc02);

void main(void)
{
unsigned char sData;
dado cData;
init_comms();
INTCON=0; 
PORTA=0;
ADCON1=ADCON1|0x06;
TRISA=0;
TRISC=0xF0; 
TRISB=0x00;
CCP1CON=0;
CCP2CON=0;
iniciaPWM();
while(1){
sData=getch(); 
if(sData==0xAA)
RC0=1;
else
RC0=0;
PORTB=sData;
FormataDados(sData,&amp;cData);
setDir(cData.dir1,cData.dir2);
setDuty(cData.dc1,cData.dc2);
CCP1CON=12;
CCP2CON=12;
T2CON=T2CON|7; 
while(!PIR1);
PIR1=0;
}}
void setDuty(int dutyc01,int dutyc02){
if(dutyc01==0)
CCPR1L=0x00;
else if(dutyc01==1)
CCPR1L=0xFA;
else if(dutyc01==2)
CCPR1L=0x80;
else if(dutyc01==3)
CCPR1L=0xFF;
if(dutyc02==0)
CCPR2L=0x00;
else if(dutyc02==1)
CCPR2L=0xFA;
else if(dutyc02==2)
CCPR2L=0x80;
else if(dutyc02==3)
CCPR2L=0xFF;
} 		
void iniciaPWM(void){ 
T2CON=2; 
TMR2=0; 
PR2=0xFF;
CCPR1L=0x00;
CCPR2L=0x00; 
INTCON=0;
PIE1=0;
CCP1CON=12;
CCP2CON=12;
T2CON=7; 
while(!PIR1);
PIR1=0; 
}
void setDir(char dir1, char dir2)
{
if(dir1==0x00){ 
M1F=0;
M1T=1;
M2F=1;
M2T=1;
}else if(dir1==0x01){
M2F=0;
M2T=1;
M1F=1;
M1T=1;
}else if(dir1==0x02){
M1F=0;
M1T=1;
M2F=0;
M2T=1;
}else if(dir2==0x00){
M1F=1;
M1T=0;
M2F=1;
M2T=1;
}else if(dir2==0x01){
M2F=1;
M2T=0;
M1F=1;
M1T=1;
}else if(dir2==0x02){
M1F=1;
M1T=0;
M2F=1;
M2T=0;
} 
}&nbsp; 		&nbsp; 		 		 		void FormataDados(char sData, dado *Data)
{ 
Data-&gt;dir1=sData&amp;3;
Data-&gt;dir2=(sData&gt;&gt;2)&amp;3;
Data-&gt;dc2=(sData&gt;&gt;4)&amp;3; 
Data-&gt;dc1=(sData&gt;&gt;6)&amp;3; 
}

void putch(unsigned char byte) 
{
&nbsp;&nbsp; while(!TXIF);
&nbsp;&nbsp; TXREG = byte;
}

unsigned char getch() {
&nbsp;&nbsp; while(!RCIF);
&nbsp;&nbsp; return RCREG; 
}
                   		/*usart.h*/
#ifndef _SERIAL_H_
#define _SERIAL_H_

#define BAUD 9600 
#define FOSC 20000000L

#define AUX ((int)(FOSC/(16UL * BAUD) -1))

#define RX_PIN TRISC7
#define TX_PIN TRISC6

#define init_comms()
RX_PIN = 1; 
TX_PIN = 1; 
SPBRG = AUX; 
RCSTA = (0x90); 
TXSTA = (0x20)

void putch(unsigned char);
unsigned char getch(void);

#endif

 		/*Controle.c*/
#include &lt;pic.h&gt;
#include "usart.h"

void main(void){
unsigned char frt,trs,tData;
PORTA=0;
ADCON1=ADCON1|0x06;
TRISA=0;
TRISB=0xFF; 
INTCON=0; 
init_comms(); 
frt=0;
trs=0;

while(1){
tData=0;
if(RB7==1){
frt++;
if(frt==1)
tData=tData|0x40; 
else if(frt==2)
tData=tData|0x80; 
else if(frt==3)
tData=tData|0xC0; 

}else if(RB6==1){
trs++;
if(trs==1)
tData=tData|0x10; 
else if(trs==2)
tData=tData|0x20; 
else if(trs==3)
tData=tData|0x30; 
}
if(RB5==1){
if(RB7==1)
tData=tData|0x00; 
else if(RB6==1)
tData=tData|0x03;&nbsp; 
else 
tData=tData|0x02;&nbsp; 
}
if(RB4==1){
if(RB7==1)
tData=tData|0x01; 
else if(RB6==1)
tData=tData|0x07;&nbsp; 
else 
tData=tData|0x0B; 
} 
putch(tData); 
if(trs==3)
trs=0;
if(frt==3)
frt=0;
}
}
&nbsp; 
       	 
 		 		 		&nbsp;|DIFICULDADES| 	
 		 		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  		A maior dificuldade encontrada no projeto foi o desenvolvimento do  hardware, principalmente da placa do driver, formada basicamente por  duas pontes H ( uma para  cada motor DC) e um CI 7408. Inicialmente os  valores dos resistores da ponte H foram calculados para uma alimentação  de +5V, mas com essa alimentação os motores não possuíam torque  suficiente para movimentar o carrinho. Então foi necessário aumentar a  alimentação da placa, regulando a tensão em 5V para o CI 7408 e o PIC e  colocando amplificadores nas saídas digitais.	Outro ponto importante foi  a utilização de um cristal oscilador de 20Mhz, com o qual o PIC não  funcionava. O problema foi identificado na gravação do microcontrolador,  que apesar de estar sendo utilizado um cristal, a configuração do  endereço 2007h para não é a XT, para cristais, mas sim HS, pois com  20MHz o PIC opera em modo de alta velocidade. 	
 		 		 		&nbsp;|RESULTADO FINAL| 	
 		 		 		 		&nbsp; 		 		 		 	
 		 		&nbsp;|LISTA de MATERIAIS| 		 		| 		 		&nbsp;|FONTES de CONSULTA| 	
 		 		 			 			Motores CC 			
 			 			Carrinho  			
 			 			Microcontrolador PIC  			
 			 			Display de 7 segmentos 			
 			 			KIT RF  		
 			 			TIL 32 e TIL 78  			
 			 			Transistores BC516, BC517, BC548 			
 			 			Placas de Fenolite 			
 			 			Resistores  			
 			 			Capacitores  			
 			 			Software de programação gratuito (PICCLITE) 			
 			 			Software de Cad gratuito (Eagle)