You are on page 1of 3

Bom dia, galera.

Esse semestre eu fiz meu projeto de conclusão do curso - TCC - e o tema foi construir um
PID para máquinas de espresso.

Eu fiz um PID que possa ser replicado por qualquer pessoa e não só para máquinas de
café, ele serve para qualquer dispositivo que precise de um PID.

Vou colocar aqui o código dele, para, quem quiser, possa instalar nas suas cafeteiras.

As peças usadas foram:

1- Arduino UNO (acho que o arduino nano já funciona);

2 - Relé SSR 20A;

3 - Sensor Termopar Tipo K ( colocar na caldeira);

4 - Nanoshiel termopar max 31855;

5 - Jumpers;

6 - Protoboard

estes 4 acima são obrigatórios.

7- display OLED I2C (pode utilizar qlqr dispay que quiser, esse inclusive é bem pequeno)

Total das peças: R$ 244,00

Código (somente a programação do PID)

float

kp = 50, //valor da constante proporcional ---> esse valor pode ser


alterado pelo usuario

ki = 0.1, //valor da constante integral ---> esse valor pode ser alterado pelo
usuario
kd = 0.1; //valor da constante derivativa ---> esse valor pode ser alterado
pelo usuario

float

p = 0, //controle proporcional

i = 0, //controle integral

d = 0, //controle derivativo

pid = 0, //controle proporcional, integral e derivativo (PID)

erro, //variável de erro

tdecorrido = 0; //variável que irá receber o tempo decorrido para ocorrer o


loop de controle, sendo 0 como inicio

float setpoint = 91; //aqui é definida a temperatura alvo ---> esse


valor pode ser alterado pelo usuário

float temperatura; //variável que vai receber a temperatura medida pelo sensor.

void setup()

pinMode(10,OUTPUT); //porta PWM onde será colocado o relé e definida como


saída.

digitalWrite(10, LOW); //definindo a porta como desligada por defautl

temperatura = thermocouple.getExternal(); //a temperatura a ser guardada para


controle será a temperatura externa.

erro = setpoint - temperatura; //calcula a variação entre a temperatura medida e a


temperatura alvo. Faz parte da realimentação do sistema e no cálculo de cada controlador.

float delta = ((millis() - tdecorrido))/1000.0; //calcula a diferença em segundos entre


um loop

tdecorrido = millis(); //conta quanto tempo levou para dar um loop


//controle proporcional

p = kp*erro;

//controle integral

i += (ki*erro)*delta;

//controle derivativo

d = erro*kd/delta;

//PID

pid = p+i+d;

//aqui começam os controles de fato

if(pid>0){

digitalWrite(10, HIGH);

else{

digitalWrite(10, LOW);

O PID apresentou temperatura máxima de 93,75 e mínima de 88,75, com


setpoint a 91 ºC. Ele foi instalado numa Fiamma Mini Bar (single boiler)

No void setup() e no void loop() só coloquei os comandos do PID. Tem que adicionar a
biblioteca da shield termopar e do display oled

You might also like