Powered By Blogger
Mostrando postagens com marcador LDR. Mostrar todas as postagens
Mostrando postagens com marcador LDR. Mostrar todas as postagens

sexta-feira, 26 de abril de 2013

Controle de Luminosidade com Arduino PID





Controle de luminosidade utilizando controlador PID (proporcional Integral Derivativo).


Controlador proporcional integral derivativo, controlador PID ou simplesmente PID, é uma técnica de controle de processos que une as ações derivativa, integral e proporcional, fazendo assim com que o sinal de erro seja minimizado pela ação proporcional, zerado pela ação integral e obtido com uma velocidade antecipativa pela ação derivativa.
É baseado na resposta da modelagem matemática de uma malha de processo a ser controlada.
Na prática os PID são encontrados no interior de controladores eletrônicos chamados "single-loop", muitas vezes com microprocessadores, e também através de software em Controladores programáveis e outros equipamentos de controle.

Neste projeto, vamos simular um controle de luminosidade com Arduino, rodando a biblioteca PID que pode ser encontrada no site:


Para isso necessitamos baixar além da biblioteca PID para o Arduino, também o PID Front-End para processing, que é uma interface gráfica para podermos configurar os parâmetros: P, I, D, Set Point, modos de trabalho, etc...; fazendo a interface com o Arduino.
Você pode baixar o Front-End no link acima.

Como vamos trabalhar com Arduino e Processing, necessitamos ter a IDE 1.0.1 do arduino e o Processing 2.0b8 instalados no computador.
Para o Processing, precisamos da biblioteca ContorlP5 para processing instalada. Baixe a biblioteca no site:


Para mairoes detalhes sobre controle PID de processos, aconselho a visitarem o site do criador da Biblioteca PID_V1.


E o site do Control Guru para maiores detalhes sobre automação e controle.

Vamos agora aos aspectos construtivos do nosso projeto:

Faremos dois testes; um com o ambiente simulado por um tubo escuro, que não admite interferência externa, e o outro aonde poderemos interferir externamente e verificar a resposta do sistema.

Teste - 1
O ambiente será simulado por um tubo negro, com um LED Branco brilhante em uma das pontas (para iluminar o "ambiente") e um LDR na outra ponta (para podermos gerenciar a quantidade de luminosidade no "ambiente").
A ligação com o arduino é muito simples:
Pino D3 (como output) ligado ao LED que tem um resistor de R220 para controlar a corrente.
Pino A0 ligado ao LDR que tem um resistor de pull-down de 10K.

Abaixo o circuito desenhado com o fritzing e fotos reais do sistema.

Entre o LED e o LDR existe um tubo preto vedado, simulando ambiente totalmente escuro


Detalhe do tubo preto (foi utilizado um carretel de linha, vedado por dois passadores de fios de borracha

Detalhe do lado LED

Detalhe do lado LDR


Teste - 2

Agora o ambiente pode sofrer ações externas,chamados de distúrbios do nosso sistema, tais como: sombras e ou luz excessiva no ambiente.
Os distúrbios serão automaticamente controlados pelo Arduino PID.

Outro detalhe é que o valor do Setpoint, é controlado por um potenciômetro, não sendo mais necessário usar o Setpoint do PID_FrontEnd.

Abaixo o circuito desenho em fritizing e as fotos reais do sistema.


Controle do SetPoint feito pelo potenciômetro



Controle via Software:

1 - Descarregar e descompactar as bibliotecas;
PID_V1 no diretório de bibliotecas da IDE do Arduino
Front-End PID, em uma pasta no seu micro
ControlP5, no diretório de bibliotecas do Processing

2 - Iniciar a IDE do Arduino e abrir o arquivo "PID_FrontEnd_ArduinoSampleCode" da pasta PID_FrontEnd.
Enviar este scketch para o arduino.

3 - Iniciar o Processing e abrir o arquivo "PID_FrontEnd_v03" da pasta PID_FrontEnd.
Executar a aplicação.

Abaixo algumas figuras:


Pastas pertencentes ao PID_FrontEnd.

O arquivo PID-FrontEnd_v03, deve ser aberto no Processing e executado

O arquivo PID_FrontEnd_ArduinoSampleCode, deve ser aberto na IDE do Arduino e enviado

IDE Arduino e Processing, é só enviar e executar.


Ao executar a aplicação no Processing, a janela PID_FrontEnd irá abrir.

SetPoint = 950, Kp=0,01, Ki=0,28 e Kd=0


Nesta janela, podemos notar:
TOGGLE_AM - muda o modo para automático PID ou manual;
SETPOINT - valor desejado de luminosidade no ambiente;
INPUT - valor real de luminosidade do ambiente (medido pelo LDR e retornado como feedback medido no pino A0);
OUTPUT - valor de controle retornado pelo Arduino como controlador PID (controle de luminosidade do LED no pino D3);
KP - constante de controle proporcional;
KI - constante de controle Integral;
KD - Constante de controle Derivativo;
TOOGLE_DR - muda a direção (se a saída cresce conforme cresce a entrada ou o inverso);
SEND_TO_ARDUINO - enviar os dados para o arduino;

PID Input/Setpoint - Janela gráfica das curvas setpoint (valor desejado de luminosidade) e entrada (medida de luminosidade do LDR)
PID Output - Janela gráfica da curva de saída de controle do LED

Linha verde = Set Point SP; Linha Vermelha = Variável Controlada PV; Linha Azul = Variável Manipulada MV

Nesta figura, podemos notar o setpoint configurado para 950 (linha verde), a variável de entrada (linha vermelha) sofrendo o controle PID e a variável de saída (linha azul) para controle da luminosidade.


Podemos entender também as informações descritas acimas através de um diagrama de blocos (figura abaixo).
Onde podemos notar o que o Error = SP - PV e o erro é aplicado ao controlador PID que gera a MV para o controle do processo.

Cada controlador P, I, e D pode ser utilizado independentemente, ou de forma conjunta, tal como:
Controlador P (muito utilizado)
Controlador PI (muito utilizado)
Controlador PD (raramente utilizado)
Controlador PID (o mais usado)



Exemplo de Controlador PI com realimentação direta








Aqui nesta figura, observamos uma variação no valor do setpoint (de 950 para 700 e para 950) e a atuação do controle PID em cima da variável de entrada.
Vejam que houve um pouco de oscilação no controle (característica de cada sistema controlado, de primeira ou segunda ordem).



Para o segundo teste, vamos enviar para o Arduino, o sketch abaixo:
(este será usado em lugar do arquivo "PID_FrontEnd_ArduinoSampleCode")

http://www.4shared.com/file/Y5BIbUdR/LED_PIDcontroller_2.html

Lembrando que o controle do Setpoint é feito pelo potenciômetro.
Como fonte de distúrbio, podemos usar uma lanterna para incidir mais luz ou um anteparo para fazer sombra no LDR.
Ao temos um distúrbio no processo (por exemplo sombra), o controlador irá aumentar/diminuir a luminosidade do LED para tentar manter a saída sob controle e no nível estabelecido pelo SetPoint (no caso de fazer uma "sombra no LDR, o controlador irá aumentar a intensidade de luz do LED), poderemos ver estas variações no PID_FrontEnd de forma gráfica.

Abaixo algumas figuras relacionadas.

Kp=0, Ki=10, Kd=0 -- aplicação de disturbio e variações no SP

Kp=0, Ki=10, Kd=0 -- aplicação de disturbio (com bloqueio e sem bloqueio)


A seta indica a mudança de parametros Kp=0,01; Ki=0,28; Kd=0 (notar que a atuação ficou mais lenta e com menos overshoot)
 Ao testar os parametros, foi verificado um comportamento semelhante para os dois testes.



Vídeos explicativos:

Dúvidas e sugestões para: arduinobymyself@gmail.com



http://youtu.be/Y267-qba12M





No Próximo Projeto, irei apresentar mais um exemplo de controle PID
Aguardem!






domingo, 14 de outubro de 2012

BUGBot - Robot Seguidor de Luz - Parte-4



Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);




Vamos agora a construção da placa de circuito impresso, montagem e prova final do BUGBot.

Circuito Impresso:

Como já mostrado anteriormente, abaixo temos o layout da placa de circuito impresso.
Esta placa é responsável pela parte de driver de potência para os motores, sinalização do motor que está sendo acionoado, acondicionar os sensores de  luz (LDRs) e os Trim-Pots de ajuste de sensibilidade, conexão com o Arduino.  Referir-se a parte 2 para maiores detalhes.




Fotos reais do projeto:

Placa furada e componentes

Placa corroída e componentes

Componentes utilizados

Placa pronta - Lado dos componentes

Placa pronta - Lado cobreado/solda

À frente os sensores LDR

Posicionamento da placa no chassi



Motagem final:


Na montagem final, não é necessário apertar muitos os parafusos, devido a sensibilidade do acrílico. Pode ser utilizado arruelas de pressão para manter os parafusos sempre bem presos, sem necessidade de muito torque (aperto).
Como podem notar, houve uma rachadura na base do apoio da roda 360, devido a pressão exercida nos parafusos e o centro do conjunto da roda.


Arduino e bateria de 9V posicionados


Como os tubos espaçadores são de mangueira plastica, elas mesmas funcionam como uma borracha dando elasticidade ao material e pressão nos parafusos/porcas.


Detalhe do Pack de bateria de alimentação dos motores

Na parte de baixo do chassis, pode se perfeitamente comportar os pack de baterias.

Para fixar as placas, o pack de baterias e a bateria de 9V; aconselho o uso de velcro (pequenos quadrados de 1 x 1 fixados com cola ou fita dupla face.

Outros furos podem ser necessários no chassis superior para comportar mais componentes, tais como: sensores, servo-motores, outras placas.... Para isto podem ser feitos acessórios e ou extensões no chassi. Aqui vale sua criatividade no projeto.



TESTE FINAL, VÍDEO:

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com

Durante os testes finais, tive um pequeno problema:

Devido a rotação do motor e da relação da caixa de redução 58:1, o conjunto motriz ficou com muita força, de tal forma que o BUGBot girava muito rápido e com muita força, dando guinadas para a esquerda e para direita.... perdendo um pouco da orientação de luz.

Para resolver este problema, foi necessário uma modificação no programa principal do Arduino.
Ao invés de utilizar saída digital (0V e 5V) para comandar o acionamento do motor, passei a utilizar saída PWM.
Assim foi possível controlar a velocidade de acionamento do motor, ajustando dessa forma o giro e portanto a força do conjunto motriz.

Abaixo o Link para o progrma do  BUGBot versão 2.


http://www.4shared.com/file/k7Z_bvYS/Bug_Bot_R2.html



Ficarei devendo um vídeo com uma fonte de luz melhor (foco e intensidade) para mostrar o perfeito funcionamento do BUGBot.
Abaixo um vídeo preliminar para demonstração.
Assista no youtube: http://www.youtube.com/watch?v=91X0y2dKauE
Assista no screencast.com: http://www.screencast.com/t/oslQ9TTFHlMc





Isto é tudo pessoal. Até o próximo projeto...





sábado, 6 de outubro de 2012

BUGBot - Robot Seguidor de Luz - Parte-3





Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);


O chassi do Robot, certamente é a parte mais difícil de fazer, quando se fala da confecção da estrutura mecânica do mesmo.

Projeto do Chassi:

Este é o projeto do Chassi com todas as dimensões.
Furação fica a seu critério, pois depende também do Kit motriz utilizado e da aparencia que você quer dar ao seu Robot.

Dimensões em milímetros (mm).

Chassi inferior


A altura entre o chassis inferior e o superior fica a critério do seu projeto e estética do robot.

Abaixo temos um passo para a construção de um chassi em acrílico (mais ou menos umas 4 horas de trabalho).

Material necessário:

Kit Motriz Tamiya (não vem montado);
2 x Rodas emborrachadas para Kit Tamiya;
Roda 360 pequena (como as de malas);
Chapa de acrílico de 300 x 300 x 3 mm (vai sobrar, mas é melhor ter sobra pra eventuais imprevistos);
4 x parafusos 5mm x 50mm + porca + arruela;
6 x parafusos 3mm x 15mm;
15cm de tubo transparente (5mm) para trabalhar como espaçador;

Ferramentas:

Serra Stanley;
Lima - meia cana, redonda, plana;
Riscador/estilete para corte de acrílico;
Caneta marcador;
Micro Retifica;
Chaves de fenda/philips e de boca;


Detalhes da construção:

Kit Motriz Tamiya montado
Seguir corretamente as instruções de montagem do Kit.

Acrílico fumê usado como base do chassi
Este acrílico foi retirado de uma prancheta de baixo custo (no máximo R$ 10,00).
Cada chapa tinha 21x25.

Roda 360 graus
Como as rodas de mala 360 graus -  R$ 5,00

Acrílico senso cortado

Base do chassi, segundo o projeto
Detalhe da parte de corte do acrílico no estilete

Chassi pronto para furação e centralização do conjunto motriz

Apoio da roda 360 em acrílico

Chassi já furado

Posicionamento do conjunto motriz

Conjunto motriz posicionado

Preparação dos espaçadores do chassi inferior e do superior

Espaçadores e conjunto de parafusos, porca e arruela preparados

posicionamento dos parafusos

Notar que na parte de baixo do chassi, foi feito um aprofundamento oval no chassi, para que a roda 360 possa girar livremente (isso não estava no projeto).

Colocação dos espaçadores

posicionamento do chassi superior (já montado a roda 360 no suporte)

Detalhe do espaçador + parafuso

Detalhe do conjunto da roda 360

Detalhe da montagem antes da colocação da roda 360

Foi notado a necessidade de fazer um recuo no chassi inferior para a roda 360

Detalhe do espçador de tubo transparente

Produto finalizado

Visto de cima
 É isso,..... depois de quase 4 horas de trabalho (o acrílico exige muito cuidado, use sempre a ferramenta certa para cada etapa) o produto final ficou muito bom, com aparência profissional.
Comprimento total = 210mm
Largura total = 110mm
Altura total = 48mm

Com as sobras de acrílico, é possível fazer alguns acessórios para colocar sensores no nosso chassi e assim podemos fazer diversos tipos de Robots com ele.


Até o próximo Post, onde será mostrado o funcionamento do Robot em ação.

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com