Motion Control – PID

PID control significa utilizar uma função para calcular a velocidade a aplicar aos motores de modo a minimizar o efeito “zig-zag” e obter um efeito mais suave. PID significa Proportional, Integral, Derivative estes são os parâmetros a passar para a função de forma a calcular a velocidade a aplicar aos motores.

  • (P) Proportional: valor que representa o desvio do robot em relação ao alvo. Por exemplo um valor de 0 significa que se encontra em cima do alvo, um valor negativo significa que se encontra a esquerda e positivo a direita.
  • (I) Integral: valor que guarda o acumulado de todos os valores Proportional desde o inicio do funcionamento.
  • (D) Derivative: valor que representa a diferença entre os dois valores Proportional anteriores.

Secção do Manual do 3PI onde é descrito este algoritmo.
Projecto Beta onde este algoritmo é utilizado, inclui anexo no final com código.

Alguns artigos interessantes:

http://www.barello.net/Papers/Motion_Control/index.htm
http://www.linuxpcrobot.org/?q=node/4

Anúncios

Projecto Beta

Aqui esta o meu primeiro projecto concluído, decidi dar-lhe o nome de “Beta”.
A ideia era construir uma plataforma onde fosse possível testar vários tipos de componentes e executar diferentes tarefas.

O robot deveria transportar uma breadboard de 830 pinos para poder testar varias ligações sem ter nada definitivo.
Para a construção do chassis decidi utilizar acrílico por ser forte, fácil de cortar e agradável para a vista. Os espaçadores foram feitos com um tubo de alumínio.

Aqui esta a comparação entre a ideia original desenhada no Google SketchUp e o resultado final.

Lista de Componentes

……: Placa de acrílico
……: Tubo de alumínio (Separadores)
……: Porcas, Parafusos e Anilhas M2 e M3
……: 6 Pilhas recarregáveis AA NiMH 1,2V 1700mAh
……: Suporte de Pilhas 6xAA

……: Arduino Duemilanove
……: Breadboard 830 Pinos
……: Resistências, condensadores e fios para ligações.

……: Buzzer – (Emite um som sempre que um programa é iniciado ou parado.)
……: Push Button – (Iniciar/Parar a execução do programa seleccionado)
……: Led RGB – (Identifica que programa se encontra seleccionado ou a correr)

……: Ponte-H (SN754410)
……: Motores (Dual Gearbox From Tamiya)
……: Rodas (Tamiya 70096 Off-Road Tires)
……: Pololu Ball Caster

……: Sensor QTR-8RC
……: Sensor IR Sharp

Para um principiante que tem necessidade de comprar todos os componentes da lista, como foi o meu caso, estamos a falar de um custo aproximado de cerca de 100€. Basta substituir alguns elementos e retirar alguns sensores que facilmente conseguimos valores bem mais baixos, foi uma opção e considero um investimento para futuras criações.

Na breadboard podemos ver as ligações de muitos dos componentes utilizados.

Uma das características importantes do Beta é que deve poder ser montado e desmontado facilmente por isso aqui está um video com todo o processo de montagem, o video esta em HD por isso se não conseguirem ver os textos ou quiserem ver mais detalhes podem colocar em 720p e full screen.

 

Algumas Actualizações Efectuadas

Caster Ball: Com o passar do tempo a Caster Ball começou a ganhar ferrugem e a criar muito atrito por isso foi substituída por uma versão bem mais barata encontrada no AKI

Contador Binário: Inicialmente a breadboard foi montada com um Led RGB, para cada opção do menu era associada uma cor. Este método torna-se complicado, principalmente quando existem várias opções no menu. A solução foi criar um contador binário substituindo o Led RGB por três Led’s normais, cada Led representa um bit permitindo contar até sete.

 

Montagem e Ligações da Breadboard

Na breadboard estão montados os seguintes componentes: Um botão de menu, a ponte-h, tres leds para contador binário e um buzzer.  Pode também consultar este Album Picasa Para ver com mais detalhe os componentes e as ligações.

1. Ligar Breadboard: Ligar 5v do arduino a barra vermelha da breadboard e GND do arduino a barra azul.

2. Botao de Menu: Ligar do I9 para Analog 5.

3. Buzzer: Ligar do I52 para Analog 0.

4. Contador Binario: Ligar G39 para Analog 2, Ligar G41 para Analog 3, Ligar G43 para Analog 4

5. Sensor Sharp: Fio vermelho do sensor para A33, fio preto do sensor para A34, fio amarelo do sensor para A35. Ligar E35 para Analog 1

6. Sensor QTR: GND do sensor para barra azul da breadboard e Vcc para barra vermelha da breadboard.
Pino 1 Sensor -> DIGITAL 1 Pino 2 Sensor -> DIGITAL 2
Pino 3 Sensor -> DIGITAL 3 Pino 4 Sensor -> DIGITAL 4
Pino 5 Sensor -> DIGITAL 7 Pino 6 Sensor -> DIGITAL 8
Pino 7 Sensor -> DIGITAL 9 Pino 8 Sensor -> DIGITAL 12

7. Ponte-H: Ligar A22 a Vin do Arduino
Motor Direito: Fios Motor Ligar a F27 e F29 depois ligar G16 a DIGITAL 6 e G21 a DIGITAL 5
Motor Esquerdo: Fios Motor Ligar a E27 e E29 depois ligar D16 a DIGITAL 11 e D21 a DIGITAL 10

Programação

O código está bastante organizado e comentado de forma a mais tarde o poder reutilizar noutros projectos. Foram criadas classes separadas para a gestão do buzzer, do contador binário e dos motores. No ficheiro principal existe a função de menu, que permite escolher que função executar, e uma função para cada uma das tarefas diferentes.

Neste momento a função seguelinhas está bastante boa e foi testada no circuito do estoril  anexado em baixo. A tarefa de evitar obstáculos ainda esta muito básica.

Apos fazer upload do código basta carregar no botão para iniciar o programa 1, durante a execução de um programa carregar continuamente ira fazer com que termine a execução, caso não esteja a correr nenhum programa carregar continuamente no botão permite mudar de opção o contador binário indica que opção esta seleccionada.

Anexos/Documentos

Circuito Estoril (PDF)
Código para Arduino (RAR)
Google SketchUp File (RAR)

Ligações Ponte-H

Esquema de ligações  para controlar dois motores DC utilizando uma Ponte-H L293D ou SN754410.

Em baixo está a implementação básica do circuito, de notar que foi introduzido um regulador de 5v para alimentar os pinos 1,9 e 16. O pino 8 não é afectado pelo regulador e deve ser alimentado mediante as necessidades dos motores, por exemplo se os motores necessitam de 6v as baterias devem fornecer esses 6v ao pino 8 e os restantes não devem receber mais do que 5v.

O esquema em cima deve funcionar correctamente mas para uma correcta implementação deverão ser utilizados acumuladores para estabilizar o circuito e evitar ruidos.

Exemplo do circuito montado numa breadboard.

A solução apresentada pode e deve ser ajustada para cada projecto, para isso são muito importantes a escolha das baterias e como regular a corrente.

A versão original (em ingles), deste artigo pode ser consultada aqui, todos os créditos devem ser dados ao autor do mesmo.