Ir para conteúdo

Postagens recomendadas

Já encomendei Fabio

 

http://www.ebay.com/ulk/itm/201428669851

Já está a caminho, rsss

Se quiser, quando eu for mandar fazer a plaquinha em inox, mando fazer duas

Na realidade pretendo deixar o lcd embutido na placa de madeira mesmo. Más fiquei curioso de como ficará essa plaquinha de inox.

Uma ideia que tenho Guilherme é a seguinte:

O LCD é interligado na placa eletrônica via um cabo Flat. O lcd em si é colado na placa.

Minha intenção seria fazer um corte na vertical do painel e atravessar somente o LCD para a frente da fiamma, deixando o circuito atrás do inóx.

Assim consigo fazer o acabamento de madeira faceando com o lcd e com o mínimo de cortes.

Pensa na ideia. acho que madeira fica um acabamento melhor e é mais fácil de trabalhar do que o inóx.

Link para o comentário
Compartilhar em outros sites

Pra raspberry pi acho que tem, más nesse caso é matar formiga com bazuca.

Vou aguardar o kit do Guilherme para esse projeto com LCD.

Pena que o dolar tá caro, vou esperar um pouquinho pra ver se abaixa. :P

Link para o comentário
Compartilhar em outros sites

Na realidade pretendo deixar o lcd embutido na placa de madeira mesmo. Más fiquei curioso de como ficará essa plaquinha de inox.

Uma ideia que tenho Guilherme é a seguinte:

O LCD é interligado na placa eletrônica via um cabo Flat. O lcd em si é colado na placa.

Minha intenção seria fazer um corte na vertical do painel e atravessar somente o LCD para a frente da fiamma, deixando o circuito atrás do inóx.

Assim consigo fazer o acabamento de madeira faceando com o lcd e com o mínimo de cortes.

Pensa na ideia. acho que madeira fica um acabamento melhor e é mais fácil de trabalhar do que o inóx.

Fábio,

Minha idéia é essencialmente a mesma da sua. Exceto que o corte será onde hoje ficam os botões da máquina. Se a área traseira do lcd (onde ficam os chips, transistores, resistores e o slot do micro sd) fosse do mesmo tamanho daquela hoje preenchida pelos botões, não teria que fazer qualquer alteração na área frontal da máquina (nenhum corte). No entanto, estimo que o espaço a ser ocupado não seja o mesmo. Como a placa não é da espessura de uma chapa de aço 1 a 2mm (que acho que é a espessura do aço inox da fiamma), simplesmente colocá-la em frente ao painel hoje existente é inviável, a não ser que se parta para uso de madeira esculpida que seja, ao menos, um pouco mais grossa (profundidade maior) do que a espessura da tela tft touch. Mas, nesse caso, a placa de madeira ficará bem mais aparente do que uma simples textura embaixo de um painel de controle (que era o que eu pensava que você pretendia fazer Fábio), saltando para fora da superfície da máquina.

 

Pode vir até a ficar ainda mais bonita assim. Realmente não sei dizer ao certo, enquanto não ver a idéia implementada (como um painel de madeira saltando de uma superfície, como se vê em carros mais luxuosos).

 

No entanto, vou me ater ao que pretendi inicialmente, um painel mais moderno (e mais belo do que o anterior), na mesma linha da máquina (mesmo material e acabamento). Obviamente, terei que cortar a laser para que seja nível industrial de acabamento. Como, no futuro, pretendo fazer mais unidades do torrador, aproveito a leva numa próxima encomenda e mando fazer a plaquinha. O corte aqui eu faço bem fácil, uma vez que não terei que me preocupar muito com o acabamento do corte, que ficará por baixo da placa nova. Basta uma dremel e o meu fiel kit de steel thin cut (que custa os olhos da cara, mas vale cada centavo).

Link para o comentário
Compartilhar em outros sites

Acrescento que se for fazer um painel de madeira na frente do anterior, sequer será necessário fazer qualquer corte. Vc aproveita o corte que já existe para o painel de botões. Que é o que vou fazer na versão atual.

Link para o comentário
Compartilhar em outros sites

Na realidade vou aproveitar sim o furo dos botões, 2 no caso. Em relação a madeira ela vai ficar sim em torno de 2mm passando da face da fiamma, uma vez que tem aquela parte funda ( desnível) onde fica a etiqueta cinza. Pretendo fazer as bordas com 45º para não ficar aparente. Mandei cortar a madeira fora, pois não consegui aqui, uma vez que era muito dura. Devo pegar essa semana e aguardar a chegada dos botões que estão em atraso devido a greve dos correios.

Qual o modelo de torrador que está implementando atualmente Guilherme? Tem algum tópico dele?

Link para o comentário
Compartilhar em outros sites

Comecei a brincar com a programação do visor tft nextion.

Ainda tenho muito o que aprender, em relação à interface que ele vai fazer com o arduino. Então, será um longo e arduoso processo.

Bom, fiz uma tela com alguns botões, apenas para ver como seria o comportamento. É bem tosca. Devo melhorar bastante os botões e o comportamento (terei que melhorar bastante, usando transparências etc, se é que é possível).

 

Mas, feito às pressas é o que se tem por ora:

 

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Desmontei a máquina ontem e fiquei de 22:40 às 3:00 instalando o controlador. 3:00 fui dormir com a máquina travando (alguma coisa interferindo no Arduino).

A boa notícia é que meu sistema de controle funcionou muito bem, acionando cada peça na hora certa.

A má notícia é que o shield termopar não é o mais adequado para essa máquina uma vez que há vazamento de energia das resistências para a água e da água para o boiler de cobre (que é excelente condutor). Usando uma pasta cerâmica fixei um caninho cerâmico ao topo do boiler para agasalhar e isolar eletricamente o sensor. Com isso, meu tempo de resposta vai ficar bem precário e vai demandar código de compensação da diferença de temperatura medida.

 

Não sei, talvez seja o caso de usar um sensor encapsulado, como o LM35. Vou ver se acho um bem fininho.

 

O mini painel ficou estiloso. Depois posto fotos.

Link para o comentário
Compartilhar em outros sites

Valeu pela dica Sérgio. Comprei uns termistors para fazer testes.

Quanto ao LM35, encontrei uma barreira que obsta seu uso (a não ser que alguém tenha uma sugestão viável). É que (enquanto não atualizo a placa para suportar o nextion (que usará pinos digitais 5 e 6 como rx e tx para se comunicar com o arduino), a leitura de quais botões (interruptores) estão ligados (entre eles há resistores 10k, em série) é feita pela porta A0 (analog). Por sua vez, tive que usar o código INPUT_PULLUP para que o arduino detecte que o circuito está aberto enquanto não ligo um desses interruptores (com pinMode INPUT o comportamento fica totalmente errático) (código em seguida). O problema é que não é viável fazer dois analogReads ao mesmo tempo (com o pinMode INPUT, atrapalha os botões, com o pinMode INPUT_PULLUP atrapalha o sensor LM35).

 

CÓDIGO:

COM O LM

int val;

int medetemperatura;
int prepara = 0; // vai definir se algo esta sendo preparado
int verificabotao = 0; // verifica se o interruptor do cafe esta pressionado
int travamaquina = 0; // se ativado nao deixa preparar nada
 

void setup () {

 pinMode(A0, INPUT_PULLUP );

}

 

 

void temperatura()

{

 val = analogRead(1);
  float mv = ( val/1024.0)*5000;
  float cel = mv/10;
  temp1 = cel;

}

 

void controlabotao()

{      // inicio do void controlabotao
verificabotao = analogRead(0);

if (verificabotao <500) {
prepara=1; // diz para o programa que o botao de extracao esta pressionado
}

if (verificabotao <400) {
prepara=2; // diz para o programa que o botao de agua esta pressionado
}


if (verificabotao <300) {
prepara = 3; // diz para o programa que o botao do vapor esta ativado
}

if (verificabotao < 200) {
prepara = 4; // diz para o programa que o botao do backflush esta ativado  
}

if (verificabotao > 500) {
prepara = 0; //(não deixa preparar nada)
segundos = 0;
}

} // fim do void controlabotao
 


SEM O LM uso a biblioteca do max 31855.

Link para o comentário
Compartilhar em outros sites

É provável que sim. Teria que calcular o ruído que é maior pois as resistências são mais altas, mas imagino que não seja significante quando se mede em torno de 1 C.

Link para o comentário
Compartilhar em outros sites

Tinha até chegado a comprar de 100k, mas depois, pedi para o vendedor cancelar a venda (mercadolivre). Estou em dúvida sobre o valor máximo que ela poderá medir com 10k. Você sabe?

A propósito: coloquei o código alternando a leitura entre uma e outra porta. Pus um intervalo de 10ms para tanto. Veja o código (integral até agora):

 

 


// BIBLIOTECAS


// EEPROM - SALVA E LE DADOS NA MEMORIA
#include

// OLED
#include
#include
#include
#include
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


// DEFINICAO PID

#include // a magica da maquina acontece por meio do SISTEMA DE CALCULOS PID
double Setpoint, Input, Output; // temperatura
double Setpoint1, Input1, Output1; // pressao normal

// DEFINICAO PRESSAO

int voltsensorpressao = 0;
int inputpressure = 0;


/*
// SENSOR TERMOPAR
#include "Adafruit_MAX31855.h"


#include
const int CS1 = 8; // CS (chip 1 select) pin
const int SO = 12; // SO pin
const int SCKa = 13; // SCK pin
MAX31855 readt1(SCK, CS1, MISO);
*/

int val;
int tempPin = A3;

// definicao portas de saida resistencia e bomba de agua

const int POWER1 = 3; // DEFININDO PIN D3 COMO SAIDA PARA RELE SSR
const int POWERAGUA = 2; // DEFININDO PIN D2 COMO SAIDA PARA O RELE DA BOMBA D'AGUA (RELE COMUM - ON/OFF)
const int SOLENOIDE = 4; // DEFININDO PIN D4 PARA RELE DA SOLENOIDE (RELE COMUM ON/OFF)


// VARIAVEIS DE TEMPO

long previousMillis = 0;
long interval = 1000;
long previousMillis2 = 0;
long interval2 = 1000;
long contpreparation = 1000;
long previouspreparation = 0;
long previousMillis3 = 0;
long interval3 = 1000;
int horas;
int minutos;
int segundos = 0;
int segundos2; // definir contagem, em segundos, de uma preparacao
int segundos3; // contagem em segundos - verifica aquecimento
int segundos4; // contagem em segundos - para funcionar o flush aquecimento
int segundos5; // contagem em segundos - para preinfusao

const int tcTimePeriod = 250;
float calibrate1 = 0.0;
float temp1 = 0.0;
float t1 = 0.0;
float tCumulative1 = 0.0;
int noGoodReadings1 = 0;
unsigned long lastTCTimerLoop;
int tcLoopCount = 0;
int power = 0;

// variaveis globais

unsigned long CurTime = 0;
unsigned long My_PRESSAO;
unsigned long My_TEMP;
unsigned long My_P;
unsigned long My_I;
unsigned long My_D;
int medetemperatura;
int prepara = 0; // vai definir se algo esta sendo preparado
int verificabotao = 0; // verifica se o interruptor do cafe esta pressionado
int travamaquina = 0; // se ativado nao deixa preparar nada



void setup() {
pinMode (POWER1, OUTPUT);


// CONFIGURA PID
My_P = 10;
My_I = 5;
My_D = 150;

// CONFIGURA DISPLAY

display.begin( 0x3C);
// display.display();
// delay(2000);

// Clear the buffer.
display.clearDisplay();
display.fillRect(0,0,128,19,WHITE);
display.drawRect(0,20,128,44,WHITE);
display.drawRect(0,32,128,44,WHITE);
display.fillRect(0,22,128,10,WHITE);
display.fillRect(0,36,128,10,WHITE);
display.fillRect(0,49,128,18,WHITE);
display.drawRect(65,48,128,44,BLACK);
display.drawRect(65,35,128,14,BLACK);
display.display();
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(0,6);
display.println(" FIAMMA ESPRESSO ");
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(8,24);
display.println ("TEMPERATURA:");
display.setCursor(8,38);
display.println ("PRESSAO:");
display.setTextSize(1);
display.setCursor(8,53);
display.println ("SET:");
display.setCursor (73, 53);
display.println ("TIMER:");
display.setCursor (73, 37);
display.println ("Out:" );
display.display();



// le valores da memoria

My_TEMP = EEPROM.read(1);


// DEFINE OS PINS
pinMode(A0, INPUT_PULLUP );
pinMode(POWER1, OUTPUT);
pinMode(POWERAGUA, OUTPUT);
pinMode(SOLENOIDE, OUTPUT);



}// fim do void setup

// INICIO DOS VOIDS
// CONTROLE DA MAQUINA


void controlabotao()

{ // inicio do void controlabotao


if (verificabotao <500) {
prepara=1; // diz para o programa que o botao de extracao esta pressionado
}

if (verificabotao <400) {
prepara=2; // diz para o programa que o botao de agua esta pressionado
}


if (verificabotao <300) {
prepara = 3; // diz para o programa que o botao do vapor esta ativado
}

if (verificabotao < 200) {
prepara = 4; // diz para o programa que o botao do backflush esta ativado
}

if (verificabotao > 500) {
prepara = 0; //(não deixa preparar nada)
segundos = 0;
}

} // fim do void controlabotao


void controlaprepara() {

if (prepara == 4) { // inicio do prepara = 4 - rotina backflush
Setpoint = 98;
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);

if (segundos2 == 1) { // avisa do inicio da rotina do backflush
display.setCursor(0,6);
display.println(" INICIAR RETROLAVAGEM");
}

if (segundos2 == 3) {// avisa das instrucoes
display.setCursor(0,6);
display.println(" FLUSH 1 ");
digitalWrite (SOLENOIDE, HIGH);
digitalWrite (POWERAGUA, HIGH);
}

if (segundos2 == 13) {// fim do primeiro flush
display.setCursor(0,6);
display.println(" EXPURGO 1 ");
digitalWrite (SOLENOIDE, LOW);
digitalWrite (POWERAGUA, LOW);
}

if (segundos2 == 15) {// inicio do flush 2
display.setCursor(0,6);
display.println(" FLUSH 2 ");
digitalWrite (SOLENOIDE, HIGH);
digitalWrite (POWERAGUA, HIGH);
}

if (segundos2 == 25) {// fim do segundo flush
display.setCursor(0,6);
display.println(" EXPURGO 2 ");
digitalWrite (SOLENOIDE, LOW);
digitalWrite (POWERAGUA, LOW);
}

if (segundos2 == 28) {// inicio do flush 3
display.setCursor(0,6);
display.println(" FLUSH 3 ");
digitalWrite (SOLENOIDE, HIGH);
digitalWrite (POWERAGUA, HIGH);
}

if (segundos2 == 38) {// fim do terceiro flush
display.setCursor(0,6);
display.println(" EXPURGO 3 ");
digitalWrite (SOLENOIDE, LOW);
digitalWrite (POWERAGUA, LOW);
}

if (segundos2 == 40) {// inicio do flush 4
display.setCursor(0,6);
display.println(" FLUSH 4 ");
digitalWrite (SOLENOIDE, HIGH);
digitalWrite (POWERAGUA, HIGH);
}

if (segundos2 == 50) {// fim do segundo flush
display.setCursor(0,6);
display.println(" EXPURGO 4 ");
digitalWrite (SOLENOIDE, LOW);
digitalWrite (POWERAGUA, LOW);
}

if (segundos2 == 52) {// termina a rotina
display.setCursor(0,6);
display.println(" ROTINA ENCERRADA ");

}

if (segundos2 == 55) {
display.setCursor(0,6);
display.println(" DESLIGUE INTERRUPTOR");
Setpoint = 80;
}

} // fim do prepara = 4



if (prepara == 3) {
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);

if (segundos2 == 8) {
display.setCursor(0,6);
display.println(" ESPRESSO EM PREPARO");
segundos = 0;
}
display.setCursor(110,53);
display.println(segundos);
Setpoint = 105;
display.setCursor (32,53);
display.println(" ");
display.setCursor (32,53);
display.print (Setpoint, 0);
if (segundos < 51) {
digitalWrite (SOLENOIDE, HIGH);
}

// DEFINE AQUI O QUE FICA LIGADO E O QUE FICA DESLIGADO (AGUA E SOLENOIDE)

if (segundos2 == 1) {
digitalWrite (POWERAGUA, HIGH); // DA UM PULSO NA BOMBA D AGUA PARA PREINFUSAO POR UM SEGUNDO
display.setCursor(0,6);
display.println(" PREINFUSAO ");
}
if (segundos2 == 2) {
digitalWrite (POWERAGUA, LOW); // DESLIGA A BOMBA D AGUA APOS O PULSO
display.setCursor(0,6);
display.println(" PREINFUSAO ");
}

if (segundos2 == 4) {
digitalWrite (POWERAGUA, HIGH); // DA UM PULSO NA BOMBA D AGUA PARA PREINFUSAO POR UM SEGUNDO
display.setCursor(0,6);
display.println(" PREINFUSAO ");
}
if (segundos2 == 5) {
digitalWrite (POWERAGUA, LOW); // DESLIGA A BOMBA D AGUA APOS O PULSO

}
if (segundos2 > 8) {
if (segundos2 < 59) {
digitalWrite (POWERAGUA, HIGH);
}
}

if (segundos2 == 58) { // se alterar o numero de segundos da rotina de seguranca tem que equivaler aqui tambem
digitalWrite (POWERAGUA, LOW);
digitalWrite (SOLENOIDE, LOW);
}




// ROTINA DE SEGURANCA PARA EVITAR QUE A MAQUINA SEJA ACIONADA ACIDENTALMENTE

if (segundos > 50) {
travamaquina = 1; // estabelece rotina para travar a maquina
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(0,6);
display.println(" TEMPO EXCEDIDO ");
display.setCursor(110,53);
display.println(" E");
segundos = 51;
Setpoint = 80; // transcorrido o tempo maximo reduz o Setpoint
display.setCursor (32,53);
display.print (" ");
display.setCursor (32,53);
display.print (Setpoint, 0);
}
display.display(); // AS ALTERACOES QUE OCORREM DURANTE A EXTRACAO APARECEM POR CAUSA DESSA LINHA
} // fim do prepara = 3


if (prepara == 2) { // inicio do prepara = 2
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(0,6);
display.println(" AGUA EM PREPARO");
display.setCursor(110,53);
display.println(segundos);
if (segundos < 60) {
digitalWrite (POWERAGUA, HIGH); // ACIONA A BOMBA
}
if (segundos == 60) {
digitalWrite (POWERAGUA, LOW); // DESLIGA A BOMBA POR SEGURANCA
}
Setpoint = 105;
display.setCursor (32,53);
display.println(" ");
display.setCursor (32,53);
display.print (Setpoint, 0);

if (segundos> 60) {
travamaquina = 1; // estabelece rotina para travar a maquina
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(0,6);
display.println(" TEMPO EXCEDIDO ");
display.setCursor(110,53);
display.println(" E");
segundos = 61;
Setpoint = 80; // transcorrido o tempo maximo reduz o Setpoint
display.setCursor (32,53);
display.print (" ");
display.setCursor (32,53);
display.print (Setpoint, 0);
}
display.display();


}// fim do prepara = 2

if (prepara == 1) { // inicio do vapor
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(0,6);
display.println(" VAPOR ACIONADO");

// a partir daqui rotina para prevenir que o boiler tenha agua quando eu apertei o botao vapor

if (segundos2 <10) {// inicio da rotina
if (segundos2 == 0) {// abre a solenoide e liga a bomba daqua (para encher o boiler)
digitalWrite (SOLENOIDE, HIGH);
digitalWrite (POWERAGUA, HIGH);
}
if (segundos2 == 3) { // verificar o tempo necessario para nao desperdicar agua demais
digitalWrite (SOLENOIDE, LOW); // DESLIGA A SOLENOIDE
digitalWrite (POWERAGUA, LOW); // DESLIGA A AGUA
}
} // FIM DA ROTINA

display.setCursor(110,53);
display.println(segundos);
Setpoint = 140;
display.setCursor (32,53);
display.print (" ");
display.setCursor (32,53);
display.print (Setpoint, 0);


if (segundos > 240) {
travamaquina = 1; // estabelece rotina para travar a maquina
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(0,6);
display.println(" TEMPO EXCEDIDO ");
display.setCursor(110,53);
display.println(" E");
segundos = 241;
Setpoint = 80; // transcorrido o tempo maximo reduz o Setpoint
display.setCursor (32,53);
display.print (" ");
display.setCursor (32,53);
display.print (Setpoint, 0);
}
display.display(); // AS ALTERACOES NO VISOR DURANTE O PREPARO DO VAPOR ACONTECEM POR CAUSA DESSA LINHA

} // fim do vapor

if (prepara == 0) {
segundos = 0;
segundos2 = 0;
digitalWrite (SOLENOIDE, LOW); // MANTEM A SOLENOIDE FECHADA PARA SAIDA DE AGUA DO BOILER VIA GRUPO - ABRE A SAIDA DE PRESSAO DO GRUPO PARA O CANINHO DE EXPURGO DA AGUA QUE RESTOU NO GRUPO APOS A EXTRACAO
digitalWrite (POWERAGUA, LOW); // MANTEM DESLIGADO O FLUXO DE AGUA
display.setTextSize(1);
display.setTextColor(BLACK, WHITE);
display.setCursor(0,6);
display.println(" FIAMMA ESPRESSO ");
display.setCursor(110,52);
display.println(" ");
display.setCursor(110,53);
display.println(" ");
Setpoint = 98;
display.setCursor (32,53);
display.println(" ");
display.setCursor (32,53);
display.print (Setpoint, 0);
display.display();

} // fim do prepara = 0
} // fim do void controlaprepara


void contatempo()
{ // inicio do void mede tempo
unsigned long currentMillis = millis();


if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
segundos = segundos + 1;
segundos2 = segundos2 + 1;

}

}// fim do void mede tempo



void temperatura()

{ /* inicio do void temperatura
temp1 = readt1.readCelsius();;
if (temp1 < 2000) {
tCumulative1 = tCumulative1 + temp1;
noGoodReadings1 ++;
}*/

val = analogRead(1);
float mv = ( val/1024.0)*5000;
float cel = mv/10;
temp1 = cel;


}// fim do void temperatura


void do250msLoop()
{ // INICIO DO VOID DO250MSLOOP

temperatura();

val = analogRead(1);
if (tcLoopCount == 1)
{
val = analogRead(1);
float mv = ( val/1024.0)*5000;
float cel = mv/10;
temp1 = cel;
delay(10);

t1 = temp1;
display.setCursor(80,24);
display.println (" ");
display.setCursor(80,24);
display.println (t1, 0);
display.display();

}
if (tcLoopCount == 2)
{
verificabotao = analogRead(0);
tcLoopCount = 0;
}

tcLoopCount++;
/* if (noGoodReadings1 > 0) t1 = tCumulative1 / noGoodReadings1; else t1 = -1.0;
noGoodReadings1 = 0;
tCumulative1 = 0.0;
display.setCursor(80,24);
display.println (t1, 0);
display.display();
}
tcLoopCount++;

*/

} // FIM DO VOID DO250MSLOOP


void controlamaquina()

{// inicio do void controlamaquina

PID TEMPERATURA (&Input, &Output, &Setpoint,My_P,My_I,My_D, DIRECT);
TEMPERATURA.SetMode(AUTOMATIC); // CALCULANDO A SAIDA DE POTENCIA COM BASE NA TEMPERATURA MEDIDA
Input = t1;
TEMPERATURA.Compute();

}// fim do void controlamaquina






void controlacalor() { // inicio do void que manda potencia para as resistencias

/*
if (t1 == -1) { // linha que existia para o caso de erro de leitura do shield termopar - agora não presta mais para nada
analogWrite (POWER1, 0);
Output = 0;
}
else {

analogWrite (POWER1, Output);
}

*/

analogWrite (POWER1, Output);


if (Output>10) {
display.setCursor (100, 37);
display.println (Output,0);
display.display();
}
else {
display.setCursor (100, 37);
display.println (" " );
display.display();
}

} // FIM DO VOID CONTROLACALOR








// void medepressao (usa o sensor para medir pressao)

void medepressao() { // inicio do void mede pressao (verifica pressao na tubulacao)

pinMode (A2, INPUT); // define o PIN A2 como leitor da voltagem de saida do sensor de pressao
voltsensorpressao = (analogRead, A2); // le a voltagem do sensor de pressao
inputpressure = map(voltsensorpressao, 0, 1023, 0, 10); // faz a correspondencia entre a leitura da voltagem e o numero de bars resultante

display.setCursor (54,38);
display.println (" ");
display.setCursor(54,38);
display.println (inputpressure);
display.display();

}// fim do void medepressao










void loop() {

if (millis() - lastTCTimerLoop >= 10)
{
lastTCTimerLoop = millis();
do250msLoop();
}




controlabotao();// checa botao

controlaprepara(); // checa prepara

contatempo();

medepressao();

controlamaquina();

controlacalor();


}

 

Editado por Igor
Inseri o código no botão spoiler, a mensagem estava muito grande dificultando a leitura
Link para o comentário
Compartilhar em outros sites

Tem que ver a especificação do termistor. Para usá-lo tem que montar no mínimo um divisor de voltagem com outro resistor, sabe né?

 

E a relação para transformar resistência em temperatura não é linear. A fórmula, usando o beta do termistor, tem na wikipedia.

Link para o comentário
Compartilhar em outros sites

Não, totalmente leigo, rss. Mas já estou estudando por aqui. Achei, inclusive, um tuto no labgaragem que eles disponibilizaram até uma biblioteca para fazer o cálculo.

 

http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-o-termistor-ntc-com-arduino

Link para o comentário
Compartilhar em outros sites

Vamos às atualizações.

Ontem, dei uma mexida na Fiamma. Reorganizei a fiação e troquei o sensor termopar por um LM35.

Ainda não testei o funcionamento com uma extração com o novo sensor. O termopar definitivamente demandaria uma boa linha de código para recalcular a temperatura, uma vez que, como estava, estava acusando temperatura bem inferior à real.

 

Fiz uma extração ontem quando ainda estava com o termopar. O café saiu fervendo e prejudicou um pouco o resultado. Mas a preinfusão funcionou adequadamente.

 

Seguem fotos da máquina, ressaltando que ainda tenho que prender melhor os fios, deixando-os mais organizados.

 

Na foto dá para ver o LM35, bem como o caninho cerâmico que tinha afixado para isolar o termopar (o que evitou erros de leitura, mas prejudicou sobremaneira a medição).

O LM está em contato direto com o tipo da caldeira, então vai medir temperatura um pouco abaixo da real.

 

aed737d67ceb4784c8bf0ae50a0696f2.jpgc49d97a793d3114be92169a453c74926.jpg

Observem da última foto que deixei o termostato de vapor, como medida de segurança para evitar que a máquina passe de 145° caso alguma coisa de errado na execução da rotina.

Link para o comentário
Compartilhar em outros sites

Depois vc poderia colocar mais um pelote dessa cola (imagino que seja fita isolante líquida) em cima do LM para isolá-lo um pouco mais do ar, que o esfria.

Link para o comentário
Compartilhar em outros sites

Boa Guilherme. Você tentou aterrar a caldeira pra ver se diminui a interferência no sensor? Pelo que vi vc manteve os 3 relés de temperatura.

Meu projeto aqui vai começar a andar, os botões chegaram ontem e a madeira tive que madar cortar fora pq era muito dura e não consegui cortar aqui. Devo dar uma adiantada esse fim de semana. Posto fotos assim que possível.

Link para o comentário
Compartilhar em outros sites

Uma solução possa ser usar pasta térmica para processador de pc, alguns são não condutores de energia, só de calor. Outra solução possa ser usar o isolante térmico em fita, tb para processador, mais esse apesar de bom condutor deve ter 1mm, no mínimo eu acho, pode ser muito grosso.

Essa seria uma opção para não teque fazer o código para correção.

Link para o comentário
Compartilhar em outros sites

Boa ideia a da pasta térmica. Acho que tenho aqui. Ainda deu uma diferença. Menor do que a acusada pelo termopar, mas deu. Nada que uma linha map não resolva.

Também oscilou um pouco o sensor, desta feita por conta do tempo de variação muito curto que coloquei para ler o interruptor e o sensor 10ms é pouco. Vou aumentar para 250.

Viu mexer tb na preinfusão. Não precisa ser ativa porque o próprio boiler cria pressão quando aquecido.

Link para o comentário
Compartilhar em outros sites

Esse painel é o provisório. O futuro painel vai ser touch e cobrirá toda a área cinza

 

Boa ideia a do knob cromado. Sabe onde tem para vender?

 

A lataria da máquina está pressionando a caixinha do Arduino e travando o sistema. Vou retirar e soldar todos os fios direto na plaquinha. Assim, mesmo que encoste na caixa, não vai fazer pressão em cima.

Introduzi a linha map. Funcionou adequadamente.

Link para o comentário
Compartilhar em outros sites

Passei a tarde inteira na rua. Fui assistir hotel transilvania 2 com os meninos. Cheguei em casa e tomei um Espresso com preinfusão na Fiamma. Feito a grão blend Espresso. Ficou maravilhoso. Voltei a rua. Final da noite volto a desmontar a máquina, soldar os fios e remontar. Depois faço vídeo demonstrativo

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...
×
×
  • Criar Novo...