HOME     VOLTAR

Robótica

  Foto1    Foto2   

A Robótica está em evidência na atualidade, as grandes empresas utilizam-se dos robos na execução de várias tarefas tais como soldagem, pintura, etc. Esta  tecnologia é utilizada principalmente em ambientes insalubres aos seres humanos, para resgates de pessoas, desativação de bombas e outras aplicações.

A seguir veremos um projeto de um robô, que na realidade é um carrinho, cuja finalidade é desviar de obstáculos em seu caminho. Para isso ele possui duas chaves sensoras em seu painel frontal, quando ativada faz com que o robô mude de direção. O componente principal do robô é um microcontrolador PIC 16F628, que fará o papel do cérebro do robô.

Os motores utilizados, são servo motores de aeromodelo com 3 fios, um positivo, um negativo e um de sinal que será controlado por PWM (modulação por largura de pulso). O modelo utilizado foi o CS-61 da Hobbico. Estes motores funcionam da seguinte forma: Com 2uS ele gira em um sentido e com 3uS ele gira no sentido contrário e com 1,5us ele fica parado no centro. Para que gire continuamente em um sentido ou em outro deve ser feita uma modificação mecânica em seu interior, retirando-se a trava de fim de curso.

 

Lista de Montagem:

3 - resistores de 10K x 1/8W

2 - servo motores

1 - microcontrolador PIC 16F628

2 - micro chaves

1 - ressonador cerâmico de 4Mhz

1- botão de resset

1 - capacitor eletrolítico de 100uF

A seguir veremos um exemplo do programa de controle do robô:

;*******************************************************************
;* Robo2 
;* DESENVOLVIDO POR MARCELO J. ADORNO 
;* VERSÃO: 1.0 DATA: 03/03/02 
;*******************************************************************

;******************************************************************* 
; ARQUIVOS DE DEFINIÇÕES 
;******************************************************************* 

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;******************************************************************* 
; PAGINAÇÃO DE MEMÓRIA 
;*******************************************************************

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANCO 0 DE MEMÓRIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANCO 1 DE MEMÓRIA

;******************************************************************* 
; VARIÁVEIS 
;******************************************************************* 

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO
TEMP
TEMPO2
TEMPO1 
ENDC ;FIM DO BLOCO DE MEMÓRIA 

;******************************************************************* 
; ENTRADAS E SAIDAS 
;*******************************************************************


#DEFINE MOTORE PORTA,0 ;MOTOR ESQUERDO
; 0 -> DESLIGA
; 1 -> LIGA

#DEFINE MOTORD PORTA,1 ;MOTOR DIREITO
; O -> DESLIGA
; 1 -> LIGA

#DEFINE BOTAO1 PORTB,0 ;PORTA DO BOTÃO DIREITO
; 0 -> PRESSIONADO
; 1 -> LIBERADO

#DEFINE BOTAO2 PORTB,1 ;PORTA DO BOTÃO ESQUERDO
; 0 -> PRESSIONADO
; 1 -> LIBERADO

;*******************************************************************
; VETOR DE RESET 
;*******************************************************************

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO
GOTO INICIO

;*******************************************************************
; INICIO DO PROGRAMA 
;*******************************************************************

INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111'
MOVWF CMCON ;DESLIGA O COMPARADOR ANALÓGICO

BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000000'
MOVWF TRISA ;DEFINE TODO PORT COMO SAIDA

MOVLW B'00000011'
MOVWF TRISB ;DEFINE RB0 E RB1 COMO ENTRADA

MOVLW B'10000000'
MOVWF OPTION_REG ;PRESCALER 1:2 NO TMR0
;PULL-UPS DESABILITADOS
;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW B'10000000'
MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS
BANK0 ;RETORNA PARA O BANCO 0

;*******************************************************************
; INICIALIZAÇÃO DAS VARIÁVEIS 
;*******************************************************************

CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB

;*******************************************************************
; PROGRAMA PRINCIPAL 
;*******************************************************************

MAIN
MOVLW .20 ;aguarda 20ms e espera o botao1 ser acionado
CALL DELAY ;para começar a funcionar
BTFSS BOTAO1
GOTO MAIN
MOVLW .255 ;aguarda 500ms
CALL DELAY
MOVLW .255
CALL DELAY
CALL ACENDE


MAIN2 CALL FRENTED ;aciona motor direito para frente
CALL FRENTEE ;aciona motor esquerdo para frente
BTFSC BOTAO1 ;se botao direito for acionado
GOTO TRATAD ;vai para a rotina que o trata
BTFSC BOTAO2 ;se botao esquerdo for acionado
GOTO TRATAE ;vai para a rotina que o trata
GOTO MAIN2

TRATAD MOVLW .50 ;rotina que trata o botao direito
MOVWF TEMP ;guarda o tempo que o motor fica acionado
VOLTA1
CALL TRASD 
CALL TRASE
DECFSZ TEMP,F
GOTO VOLTA1
MOVLW .50
MOVWF TEMP
VOLTA2
CALL FRENTED 
DECFSZ TEMP,F
GOTO VOLTA2
GOTO MAIN2

TRATAE MOVLW .50 ;rotina que trata o botao esquerdo
MOVWF TEMP ;guarda o tempo que o motor fica acionado
VOLTA3
CALL TRASD
CALL TRASE
DECFSZ TEMP,F
GOTO VOLTA3
MOVLW .50
MOVWF TEMP
VOLTA4
CALL FRENTEE 
DECFSZ TEMP,F
GOTO VOLTA4
GOTO MAIN2

;***************************************
; SUBROTINAS
;***************************************

FRENTED ;rotina que aciona o motor direito para frente
BSF MOTORD ;ACIONA MOTOR
MOVLW .3 ;PULSO DE 3mS
CALL DELAY
BCF MOTORD
MOVLW .10 ;AGUARDA 10mS
CALL DELAY
RETURN

FRENTEE ;rotina que aciona o motor esquerdo para frente
BSF MOTORE ;ACIONA MOTOR
MOVLW .2 ;PULSO DE 2mS
CALL DELAY
BCF MOTORE
MOVLW .10 ;AGUARDA 10mS
CALL DELAY
RETURN 

TRASD ;rotina que aciona o motor direito para tras
BSF MOTORD ;ACIONA MOTOR
MOVLW .2 ;PULSO DE 2mS
CALL DELAY
BCF MOTORD
MOVLW .10 ;AGUARDA 10mS
CALL DELAY
RETURN

TRASE ;rotina aciona o motor esquerdo para tras
BSF MOTORE ;ACIONA MOTOR
MOVLW .3 ;PULSO DE 3mS
CALL DELAY
BCF MOTORE
MOVLW .10 ;AGUARDA 10mS
CALL DELAY
RETURN



;**********************************************************************
; SUBROTINA DE DELAY - VALOR BASE 1ms X TEMPO2
;
; W = AGUARDA UM TEMPO EM mS (clock = 4MHz) 
;**********************************************************************

DELAY

MOVWF TEMPO2 ;O VALOR QUE COLOCO EM W FICA AQUI

DL1
MOVLW .250 ;DELAY DE 1mS (4x250)
MOVWF TEMPO1 ;1KHz

DL2
NOP
DECFSZ TEMPO1,F 
GOTO DL2
DECFSZ TEMPO2,F
GOTO DL1
RETURN

;*********************************************************************
; FIM DO PROGRAMA 
;*********************************************************************

END

Links

www.lynxmotion.com      (site norte americano com diversos robôs)

www.edacom.com.br      (site de robótica da lego)

http://www.rogercom.com/     (informações sobre a porta paralela do micro)

 HOME     VOLTAR