Robótica
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)