Powered By Blogger
Mostrando postagens com marcador Arduino PID. Mostrar todas as postagens
Mostrando postagens com marcador Arduino PID. Mostrar todas as postagens

domingo, 19 de maio de 2013

Arduino PID - Controlando a velocidade de um ventilador




Arduino PID - FAN Control

Este post é um complemento do post anterior "Controle de velocidade com Arduino PID".

Desse modo não é necessário nenhum tipo de explicação teórica sobre o projeto a não ser nosso objetivo.


OBJETIVOS:

Queremos agora controlar a velocidade de uma unidade FAN (ventilador) de acordo com um sensor de posicionamento (que mede a distância relativa a  um anteparo).

Quanto maior a velocidade da FAN (maior a ventilação, quantidade de vento), mais longe estará o anteparo; quanto menor a velocidade da FAN (menor ventilação, quantidade de vento), mais perto estará o anteparo.

Para isto utilizei um pêndulo formado por um anteparo superior que coleta o vento da FAN e um anteparo inferior que se moverá em relação ao sensor de distância. Assim, é possível controlar a unidade FAN com a técnica PID e usando o Arduino como controlador e o  FrontEnd_PID como interface gráfica.



Abaixo os detalhes do circuito e os detalhes construtivos.

O sketch utilizado no Arduino é o mesmo do post anterior (http://arduinobymyself.blogspot.com.br/2013/04/controle-de-luminosidade-com-arduino-pid.html)... visite este post para poder ver todos os detalhes.

Este é o link para download do sketch:
http://www.4shared.com/file/Y5BIbUdR/LED_PIDcontroller_2.html

Vejam os vídeos para maiores detalhes.



Interconexão do Arduino com os outros componentes

Esquema do Driver do motor DC (FAN)
Para o driver foi usado um MOSFET IRF-250.
O diodo em paralelo com o motor é um BY-127.
O capacitor é de 100 nF.
Cuidado com o sentido de rotação do motor (para o sistema ser ventilador  e não exaustor).

Esquema do sensor de distância com o TCRT5000, este sensor deve ser analógico!


FOTOS REAIS:

O material utilizado para construir a estrutura metálica é uma tira de metálica perfurada, que pode sem encontrada em casa de materiais de construção em pequenos rolos.
É só dobrar para formar a estrutura.
Use sua imaginação para construir conforme sua necessidade.

A fonte é de 5/12 V e 10A

O motor DC deve ser de alta rotação e ter um bom torque.
Usei um de máquina de cortar cabelos (das de qualidade).

Fonte externa de 5V e 12V/10A

Estrutura metálica e pendulo com os anteparos

Arduino, Driver do motor DC e potenciômetro de ajuste do "Setpoint"

Estrutura metálica e sensor de distância

Driver do motor DC com o MOSFET IRFP-250

Detalhe do driver

Estrutura metálica

Detalhe do pêndulo em ação e da torre do FAN

Sensores: são 3 mas foi utilizado somente o central (esse éra de um seguidor de linha)

Detalhe da torre e do motor DC do FAN
Notar que foi utilizado material de garrafa PET para confeccionar o anteparo superior e a hélice do FAN.
Para construir a hélice, marque dois circulos (unidos), utilize uma moeda de 1 real, recorte e então dobre pelas pontas para dar este formato:       \___ 
                                                                                                     \
e do outro lado faça no modo contrário... pronto feito a hélice.
                                                                 

Detalhe da Hélice

Vista geral do conjunto

Vista geral do conjunto (frente)

Vista geral do conjunto (superior)

Vista geral do conjunto (parte de trás)

Vista geral do conjunto (lateralmente)



VÍDEOS:

Atenção!
Agora o Blog está mudando para a língua Inglesa, tentando alcançar outros continentes.
Desculpe pelo transtorno.
Qualquer dificuldade entre em contato.

Visite meu novo site em:
http://www.instructables.com/id/ArduinoPID-FAN-Controller/

Dúvidas e sugestões para: arduinobymyself@gmail.com
http://youtu.be/stxiWXFUf2Y

http://youtu.be/IqzPXTjiRvQ

http://youtu.be/CVNB4Wrq82g

http://youtu.be/lS7MZwqZ2k4







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!