PICBasic Pro - Servos - Segunda Parte
  
Na segunda parte desta serie iremos projetar um circuito de controle para servos com algumas funções a mais do que o projeto inicial. Neste projeto iremos implementar algumas funções de Hardware e Software.
   As funções de Hardware sera a implementação de controles por botões de pressão, as funções de tais controles sera a seguinte:
 
- Ajuste de Velocidade
- Direção
- Parada
 
   No circuito anterior implementamos um pequeno projeto que ao ser acionado o servo inicia um processo de movimento da direita para a esquenda continuamente. Neste projeto ao iniciarmos o circuito ele posiciona o servo na posição CENTRAL, ao apertamos a tecla de comando para a direita o eixo do servo ira se movimenta cerca de 60 Graus a direita e ira parar, ao apertarmos a tecla de comando para a esquerda o eixo do servo devera sair da posição de todo a direita indo totalmente para a esquerda e parar. Ao apertarmos a tecla de CENTRO, o servo saira da sua posição e ficara na posição central.

  O diagrama do circuito esta na figura 2, e na figura 3 o layout da placa de cirucito impresso.
 
                                   
                                                                                Figura 2

                                                              
                                                                                   Figura 3

 
Os componentes auxiliares são compostos por:

01 PIC 16F84A                      - microcontrolador
01 cristal oscilador de 4 Mhz   - circuito oscilador
02 capacitores de 22pf            -  circuito oscilador
03 capacirores de 100nF         - desacomplamento e filtragem da fonte de alimentação
06 resistores de 10k                - limitador de corrente para o LED e PULUP das chaves de controle
01 regulador 7805                   - regulador de voltagem de 5V
01 diodo 1N4007                   - Para proteção da fonte contra inversão na alimentação
01 diodo LED                         - Indicação de cirucito ligado
03 conectores                         - sendo um para alimentação, outro para o servo e outro para as chaves de controle

03 botões de pressão       - para acionamento dos comandos

 Observer todos que basicamente o cirucito é o mesmo do utilizado no projeto anterior, sendo que acescentou-se mais dos resitores e mais 2 botçoes para o contrle do servo !
 
 RESUMINDO O NOSSO OBJETIVO.

     Um circuito que ao ser acionado posciona o servo na posição central, e fica aguardando outro comando, ao precionar um telca ele se movimenta para a direita cerca de 60 graus, ao apertar a tecla central o servo volta a posição central, caso apertemos a tecla esquerda o servo sai da posição central ou todo a direita e vai ate a posição da esquerda sempre obdecendo um angulo maximo de 60 graus contado a partir do centro !.

O PROGRMA DE CONTROLE.

     O programa de controle pode ser visto logo abaixo, onde podemos observar a simplicidade dos comandos bem como a quantidade reduzida de codigos.
     Vejamos com mais enfase o codigo de controle, o codigo de controle pode ser efetuado o download em nossa seção de 


'****************************************************************
'*  Name    : Servo_automatico.BAS                                                             *
'*  Author  : [Clovis Magoga Rodrigues]                                                        *
'*  Notice  : Copyright (c) 2010[Edukatika Robotica Educacional]                    *
'*          : All Rights Reserved                                                                       *
'*  Date    : 12/2/2010                                                                                  *
'*  Version : 1.0                                                                                           *
'*  Notes   : Sensacional as soluções que podemos dar aos                              *
'*          : problemas quando nos eforçamos para resolvelos !                          *
'****************************************************************

temp var byte                                                                ' inicializa as variaveis
freq var byte
servo var byte
servodir var byte
servoesq var byte


portb.0 = 0                                                ' coloca nivel logico 0 na porta B.0
freq = 13                                               ' define a velocidade de giro do servo
servo = 140                                                         ' Nr. de pulsos para o servo
servodir = 170                   ' 170 angulo de 60 graus -> 185 angulo de 50 graus
servoesq = 110                  ' 110 angulo de 60 graus -> 100 angulo de 50 graus

calibrar:                                                     ' Rotina de centralização do Servo
if porta.1 = 0 then direita  'repete         ' Verifica se o interruptor foi precionado
if porta.0 = 0 then esquerda
   servo = 140
   gosub central                                            ' Desvia para a rotina CENTRAL
 goto calibrar                      ' volta para a rotina CALIBRAR apos o RETURN

central:                                                                           ' Centraliza o servo
   for temp = 1 to 10                    ' efetua um laço de tempo para fixar o servo
   pulsout portb.0,servo     ' envia um pulso para a portb.0 contido em SERVO
   pause freq                         ' efetua atraso no programa - define vel. do servo

   next temp                                                         ' incremente o laço for next
return                                                         ' RETURN da instrução GOSUB

' ------------- Inicio da Rotina de vai e vem
 ' A variação de posição se da alterando os pulsos na linhas
' IF servo < XX then repete da rotina repete: e na linha
' IF servo > XX then volta da rotina volta
' Alterando essas duas linha podemos limitar o angulo
' de rotação do servo

direita:                                     ' Inicio da rotina de repetição dos movimentos
pulsout 0, servodir               ' envia um pulso para a portb.0 contido em Servo
pause freq                                                     ' efetua um atraso no programa
'servo = servo + 1                         ' faz um incremento na contagem de pulsos
'if servo > 250 then volta         ' checa se o incremento de pulsos chegou a 200
if porta.3 = 0 then calibrar          ' Verifica se o botão foi precionado, caso seja
'if porta.1 = 0 then direita
if porta.0 = 0 then esquerda
goto direita                                                             ' vai para a rotina calibra

esquerda:
'servo = servo - 1
pulsout 0, servoesq
pause freq
'if servo < 50 then repete
'if PortA.3 = 0 then parar
if porta.3 = 0 then calibrar
if porta.1 = 0 then direita
goto esquerda
  
   parar:                                                      ' Rotina de parada do moviemto
   pause 300                         ' efetua uma pausa no programa mais demorada
   pulsout 0,0                                                        ' envia pulso 0 na porta 0
   goto calibrar                                                          ' volta a rotina calibrar
   
  Como podemos observar o codigo fonte para executar o nosso propostio possui  44 linhas de comando, a diferença esta somente em 9 linhas com relação ao exemplo anterior,  onde setamos o microcontrolador e suas variaveis e toda a rotina de leitura da tecla de incio do progrma. No quadro 1 temos a definição das variaveis do programa.

  temp var byte                                                    ' inicializa as variaveis
freq var byte
servo var byte
servodir var byte
servoesq var byte


portb.0 = 0                                                ' coloca nivel logico 0 na porta B.0
freq = 13                                               ' define a velocidade de giro do servo
servo = 140                                                         ' Nr. de pulsos para o servo
servodir = 170                   ' 170 angulo de 60 graus -> 185 angulo de 50 graus
servoesq = 110                  ' 110 angulo de 60 graus -> 100 angulo de 50 graus


                    
                   Quadro 1

 Comandos do PICBasic Utilizados:

Var Byte  - utilizado para definir uma variavel tipo  Byte  
 portb.0    - define o estado logico de saida de uma determinada porta do microcontrolador 



  No quadro 1 temos a inicializaçã das variaveis utilizadas no programa, são elas [ temp, freq, servo, servodir, servoesq ], atraves das definições da variaveis podemos continuar o estudo sobre o programa exemplo. Passemos ao quadro 2.


 

calibrar:                                                     ' Rotina de centralização do Servo
if porta.1 = 0 then direita  'repete         ' Verifica se o interruptor foi precionado
if porta.0 = 0 then esquerda
   servo = 140
   gosub central                                            ' Desvia para a rotina CENTRAL
 goto calibrar                      ' volta para a rotina CALIBRAR apos o RETURN

central:                                                                           ' Centraliza o servo
   for temp = 1 to 10                    ' efetua um laço de tempo para fixar o servo
   pulsout portb.0,servo     ' envia um pulso para a portb.0 contido em SERVO
   pause freq                         ' efetua atraso no programa - define vel. do servo

   next temp                                                         ' incremente o laço for next
return                                                         ' RETURN da instrução GOSUB


                    Quadro 2

 Comandos do PICBasic Utilizados:

 If...           - testa uma condição
 gosub       - desvia para uma rotina , executa a rotina e volta
 goto         - desvia para uma rotina, executa e presegue
 for , next   - executa um laço de contagem tipo for next
 pause        - faz uma pausa no programa
 pulsout      - envia um pulso para a saida



  No quadro 2 é mostrado duas rotinas especificas em nosso programa sendo que a rotina "calibra" é responsavel por manter o servo na posição central enaunto que a rotina  "central" posiciona o servo no meio independente da posição que o mesmo estiver parado inicialmente. Para finalizar  no quadro 3 temos a parte final de nosso programa inicial. Perceba que nada muda neste programa em relação ao programa do exemplo da pagina anterior.

 

direita:                                     ' Inicio da rotina de repetição dos movimentos
pulsout 0, servodir               ' envia um pulso para a portb.0 contido em Servo
pause freq                                                     ' efetua um atraso no programa
'servo = servo + 1                         ' faz um incremento na contagem de pulsos
'if servo > 250 then volta         ' checa se o incremento de pulsos chegou a 200
if porta.3 = 0 then calibrar          ' Verifica se o botão foi precionado, caso seja
'if porta.1 = 0 then direita
if porta.0 = 0 then esquerda
goto direita                                                             ' vai para a rotina calibra

esquerda:
'servo = servo - 1
pulsout 0, servoesq
pause freq
'if servo < 50 then repete
'if PortA.3 = 0 then parar
if porta.3 = 0 then calibrar
if porta.1 = 0 then direita
goto esquerda
  
   parar:                                                      ' Rotina de parada do moviemto
   pause 300                         ' efetua uma pausa no programa mais demorada
   pulsout 0,0                                                        ' envia pulso 0 na porta 0
   goto calibrar                                                          ' volta a rotina calibrar



                   
Quadro 3


 No quadro 3 temos a finalização do programa dividido em tres (3) rotinas, sendo elas a rotina [direita], a rotina [esquerda] e rotina [parar].  Observe os comentarios de cada linha para um perfeito entendimento do codigo fonte.
  Na sequencia temos o codigo fonte ja compilado e no formato .HEX, o qual devera ser programado dentro do microcontrolador, figura 3.

  










 



                                                    

                                
 Figura 3 

  Terminamos o nosso segundo projeto com caracteristica puramente educacional, para os iniciantes ter uma pequena amostra de como utilizar as ferramentas disponiveis no mercado. Nosso proximo passo é descrever o projeto de um ROBO de seis patas, o qual batizamos ele de ROBO FORMIGA.

PicBasic PRO-1                                                                                                                             Robo de 6 Patas   

 
 
 
  Site Map