Ir para conteúdo

Guilherme Torres

Senior Members
  • Total de itens

    5.364
  • Registro em

  • Última visita

  • Days Won

    93

Tudo que Guilherme Torres postou

  1. Ficou pequeno mesmo. Precisa ver o DUO, parece até de brinquedo.
  2. As coisas, de fato, estão caminhando para a produção do STC TRIO. Acho que vou conseguir fabricar o tambor, o que vai ser show (amanhã devo saber). Enquanto isso, retornando ao DUO, hoje de manhã, voltei no meu serralheiro e soldei a outra metade do anel que envolve o tambor. Tinha soldado apenas metade, para ver o comportamento, se iria ou não interferir na rodagem (afinal, o rolamento não está perfeito, oscilando em torno de 1 a 2 mm durante o giro, porque estou usando um tambor adaptado, que cortei um dos lados para permitir a instalação do sensor BT, retirada de amostras etc). Agora a tarde deve ter chegado o módulo de aquecimento (remetido ontem por sedex por um cabra muito legal, que tem me fornecido os módulos a um preço razoável e é muito solícito e rápido nas minhas urgências). Esse módulo veio para substituir o anterior, que queimou. Fiz logo na potência que dimensionei e acho que vai ser mais do que suficiente, mantendo a economia de energia, que, para mim, deve ser essencial. Já tenho um visor orçado, que, por sua vez, ensejou modificação no projeto do TRIO, em face de limitações na fabricação do visor cerâmico. O preço não está assim tão estratosférico. Bem menor do que estimava. Mas, de qualquer forma, aguardo mais dois orçamentos para decidir por quem vai fabricá-lo. Esse visor vai servir de portinhola para saída do café. Então, durante a torra, dependendo da carga utilizada pelo cabra que estará controlando o torrador, o café ficará em contato com o visor, assim como ocorre no Diedrich, servindo como mais um parâmetro para controle do perfil (cor). Tal instrumento, destaco, é mais uma perfumaria, uma vez que, tanto como o STC UNO o é, o DUO e o TRIO serão torradores de prova (dá para retirar amostras, como visto nos videos acima). Mas, por outro lado, facilita não ter que ficar retirando amostras toda hora, apenas para saber em que ponto de coloração está o café. Como hoje a noite irei a um aniversário de criança (não poderei ir ao TNT também Anita) (amiguinha da escola do meu primogênito - só não falei herdeiro para não soar ainda mais a las Caras, kkkkkk), a remontagem do DUO, com a adição do novo módulo, ficará para amanhã, provavelmente. Haja ansiedade homi! Meu propósito é entregar um torrador que, no mercado, tem preço estimado acima de R$10.000,00, a um preço viável para o âmbito doméstico. A pretensão é popularizar, de vez, a torra doméstica! Esse é um esboço de como será o torrador Estou pensando em fazer um para ser utilizado sob um fogareiro a gás também, assim como o é o Huky 500. Ficaria ainda menor. O TRIO tem as seguintes medidas: 32cm de altura, 33 de largura e 15 de profundidade, já considerados os pés. Estimo que o TRIO a gás teria uma altura menor, perda de em torno de 10cm.
  3. Hoje tomei FAF 322 no café da manhã (coador). A torra, realizada ontem de manhã, de fato, ficou muito boa. Agora a tarde, já tomei dois espressos. Um café do lote luke do Campo Místico (guardado há um mês e ainda estava gostoso, embora já não no seu auge). O segundo - unique frutado - 5 dias de torra. Ficou muito bom.
  4. Quanto tempo de torra Márcio? Mexeu alguma coisa em controle de potência? Se deixar no original, a temperatura não vai ser suficiente, porque o termostato vai cortar quando estiver em 200º.
  5. De vez em quando a gente acerta. Fiz uma torra linda do FAF 322 hoje de manhã. E olha que estava cozinhando no momento, rsss. Descobri que sou duo tarefa (melhor do que uno tarefa, mas pior que multitarefa).
  6. Ontem a noite, fiz um capu com o exótico que, logo após despejar o leite, cheirava a azeitonas verdes. Ficou uma delícia. Casou muito bem com leite. De manhã, exótico (azeitonado) no coador. Aqui rolou NDA, torrado há mais de uma semana (uh uh, consegui) no espresso. E, daqui a pouco, unique frutado torrado há uns 4 dias. Indo lá preparar.
  7. Nem daria para montar o eixo depois, a não ser que a fixação fosse externa à câmara, o que não é possível. Bom. Hoje mandam para mim o módulo de quartzo que pretendo usar nos meus futuros roteadores. Amanhã está aqui e ai vou poder testar. Enquanto isso, para aumentar o estoque de café torrado, torrei 300g do FAF 322 no STC UNO
  8. Legal saber que o mini tá ficando pronto Fiz uma modificação na cruzeta para facilitar a soldagem ou fixação via parafuso no tambor. Depois te mostro tb
  9. Da sim Gil. Basta montar a câmara depois de por o tambor lá dentro. E, em seguida, prender a câmara na base de aquecimento. Depois te mostro com o meu. É o mesmo método de montagem. No meu o eixo tá fixo tb.
  10. Bom. Fiquei sem postar por alguns dias, mas o trabalho, por outro lado, foi incessante. As novidades. Consegui fazer o tambor vazado funcionar adequadamente. Perfeito não posso dizer que ficou, pois oscila ainda um tico (irrelevante, mas oscila). Balanço perfeito só no STC TRIO, que vou fazer o tambor por projeto (valeu Gilberto, pela ajuda no brainstorming). Bom, o torrador está bem castigado (essa é, de qualquer forma, a finalidade do protótipo). Depois vai passar pelo salão de beleza. Segue vídeo do funcionamento do tambor agora. Enquanto isso, não parei de projetar. Fiz o trio, que já está cotado, com orçamento aprovado para maioria das peças. Falta apenas o orçamento do tambor, que projetei por último. O trio já vou fabricar em inox 304 polido. Poderia fazer escovado, mas não acho que fica adequado para ambiente de alta temperatura, porque dificulta a limpeza.
  11. Hoje tomei, no café da manhã, um unique frutado que torrei ontem de manhã (coador). O cheiro estava tão bom, mas tão bom, que não aguentei deixar mofar esquecido num canto. Chegando aqui no trampo, tomei um espresso do mesmo café - uma torra um pouco mais antiga do que essa (de uns 3, 4 dias atrás), mas que ficou um pouco mais escura (cheguei a pensar que tinha perdido o café). Está um espresso competente e correto, sem traços de queimado ou amargor pronunciado. No entanto, a minha melhor torra desse café foi a que fiz ontem e tomei hoje de manhã. Vou guardar num canto agora e só tomar daqui a uns 10 dias. Voltarei a consumir o blend que fiz do exótico (duas torras diferentes do mesmo café, uma média-clara e outra média), que está excepcional no coador. No espresso está um pouco agressivo além da conta, rsss. Aliás, meu palpite é que o exótico deve descansar um pouco mais, para mostrar o seu melhor. Devo torrar mais hoje a noite, depois da 22h, rsss. Acho que, dessa vez, vou de ouro verde. Vou usá-lo para coador. O unique de ontem ficará excelente para expresso. Andei enfrentando um probleminhas no STC UNO, que culminaram em repetição da solda dos cabos dos sensores no controlador. Não vou dizer que ficou 100% livre de erros de leitura, mas está 95%, suficiente para que eu reaprenda o controle do perfil do torrador (no trio, vou deixar opção para que o cabra escolha qual método de leitura de temperatura vai preferir, se analógico ou digital, talvez os dois, uma vez que, nele, o tambor será, provavelmente, vazado dos dois lados). Aliás, baseado nas últimas 3 torras, já tracei alarmes em determinadas temperaturas, para que eu realize um ajuste fino. Tenho que bolar um código eficiente para acabar de vez com esses problemas. Já até tenho algo em mente. Me falta tempo. Tempo: inexorável, raro ultimamente.
  12. Se não for colocar sensor BT, vai resolver esse casulo.
  13. Seiti, às vezes, mesmo quando você já tem um pouquinho de experiência, faz besteira por outro motivo - falta de atenção. Hoje mesmo, fui fazer a segunda etapa de uma double roast (nessa segunda etapa, você já começa com o torrador mais quente, porque tem que ser mais rápido, para não perder muita massa). Mas, o problema é que estava cozinhando o almoço e, além disso, dando atenção ao meu filho mais velho, que pedia minha ajuda para montar o lego dele (cara, mulher consegue bem essas coisas de multi-tarefa. Nós homens, em geral, somos mais limitados nesse aspecto). Então, alguma coisa tinha que sair do controle e foi justamente o café. Começou o primeiro crack, baixei bem a potência, mas não o suficiente, porque o torrador estava bem quente. Então....., o café entrou no segundo crack, terceiro crack e haja fumaça, rssssssss. Foi para o lixo.
  14. Depois vou ver o que fiz no sketch lá de casa (esse fiz aqui e não cheguei a testar conectado ao relê) Quanto a erros de leitura, bem que avisei que não é fácil. O motor é o grande culpado por interferências. O ideal seria ter uma bucha de cerâmica para conectar o motor no resto do conjunto. Quanto à ligação no eixo, uso um acoplamento de alumínio, que não é bom condutor. Depois vou ver se bolo algo razoável para evitar erros de leitura. Mas, no momento, estou concentrado em outra coisa, que é fazer o meu tambor (importado) funcionar bem com o resto do conjunto do STC DUO.
  15. Deu certo? Outra coisa, na linha setpoint, coloca um valor bem baixo. Por padrão, quando não está conectado ao computador, ele está programado para aquecer e manter em 220°
  16. É isso mesmo. Errar é fundamental. Daqui a pouco já vai ser mestre na arte do bolotar.
  17. Bom. Eu mandaria um e-mail para eles, reclamando. Certamente vão se propor a substituir. Não é normal eles errarem na torra. A última vez que comprei torrado com eles, uma encomenda do café do Trampo, o café veio tão bom que acabei voltando a comprar dele cru para mim. E, confesso que, embora tenha feito torras muito boas, ainda não cheguei naquela que eles enviaram.
  18. Inverte o código: onde está digitalWrite (HIGH) muda para LOW E vice versa
  19. Weiler, Fiz a alteração que você propôs no tempo de leitura do termopar. Elaborei, também, uma linha para excluir erros de leitura (que são constantes quando há corrente elétrica de qualquer forma (inclusive gerada por atrito) em contato com o sensor). Não sei se vai funcionar adequadamente, pois ainda não cheguei a testar essa linha (Já fiz outras abordagens, que não expus aqui porque não deram 100% certo). Não fiz nada muito elaborado para o controle de potência do fan (então, não há zero cross, nem modulação via frequência, como no sketch original do TC4). Apenas especifiquei um analogWrite, já com a devida multiplicação da porcentagem pelo valor suportado pela porta analógica. acho mais fácil postar o código aqui. Se tiver alguma sugestão, alteração, vamos trocando idéias aqui. O que acha? Bom, segue o código: #include <PID_Beta6.h> // include the PID library #include <MAX31855.h> #define CELSIUS //RoastLogger default is Celsius - To output data in Fahrenheit comment out this one line #define DP 1 // No. decimal places for serial output #define maxLength 30 // maximum length for strings used const int arduino = 0; // either overridden if power pot is set below 97% to power pot control const int computer = 1; /**************************************************************************** * * Arduino pin assignments * * The following are the pin assignments used by my setup. * * You only need to change the following 5 constants to suit the pin * assignments suitable for your Arduino board. You should use the pre defined SPI pins for your board * and an additional digital pin for the chip select 2 pin. I have shown below the pins relevant for * a Teensy 2.0 and Arduino Duemilanove/Uno and compatible boards. * ****************************************************************************/ // set pin numbers: const int pwmPin = 10; // digital pin for pulse width modulation of heater /** // pins used to test Max 31855 with Teensy 2.0 const int CS1 = 4; // CS (chip 1 select) pin const int CS2 = 8; // CS (chip 2 select) pin const int SO = 3; // SO pin const int SCKa = 1; // SCK pin **/ // pins used to test Max 31855 with Arduino Duemilanove/Uno and compatible boards const int CS1 = 11; // CS (chip 1 select) pin const int CS2 = 8; // CS (chip 2 select) pin const int SO = 12; // SO pin const int SCKa = 13; // SCK pin /**************************************************************************** * After setting the above pin assignments you can use the remainder of this * sketch as is or change it, if you wish, to add additional functionality * ****************************************************************************/ MAX31855 readt1(SCK, CS1, MISO); MAX31855 readt2(SCK, CS2, MISO); // time constants const int timePeriod = 2000; // total time period of PWM milliseconds see note on setupPWM before changing const int tcTimePeriod = 2000; // 250 ms loop to read thermocouples // thermocouple settings float calibrate1 = 0.0; // Temperature compensation for T1 float calibrate2 = 0.0; // Temperature compensation for T2 // PID variables - initial values just guesses, actual values set by computer double pidSetpoint, pidInput, pidOutput; double pidBias = 0; double pidP = 20.0; double pidI = 45.0; double pidD = 10.0; //Specify the links and initial tuning parameters (last three are P I and D values) PID myPID(&pidInput, &pidOutput, &pidSetpoint, &pidBias, pidP, pidI, pidD); // set global variables //temporary values for temperature to be read float temp1 = 0.0; // temporary temperature variable float temp2 = 0.0; // temporary temperature variable float t1 = 0.0; // Last average temperature on thermocouple 1 - average of four readings float t2 = 0.0; // Last average temperature on thermocouple 2 - average of four readings float tCumulative1 = 0.0; // cumulative total of temperatures read before averaged float tCumulative2 = 0.0; // cumulative total of temperatures read before averaged int noGoodReadings1 = 0; // counter of no. of good readings for average calculation int noGoodReadings2 = 0; // counter of no. of good readings for average calculation int inByte = 0; // incoming serial byte String inString = String(maxLength); // input String // loop control variables unsigned long lastTCTimerLoop; // for timing the thermocouple loop int tcLoopCount = 0; // counter to run serial output once every 4 loops of 250 ms t/c loop // PWM variables int timeOn; // millis PWM is on out of total of timePeriod (timeOn = timePeriod for 100% power) unsigned long lastTimePeriod; // millis since last turned on pwm int power = 100; //use as %, 100 is always on, 0 always off default 100 int controlBy = arduino; // default is arduino control. PC sends "pccontrol" to gain control or // swapped back to Arduino control if PC sends "arduinocontrol" int fan =0; // requisito necessario para se ter a leitura do fan int rettemp1 = 0; // variavel para manter a leitura anterior da temperatura caso haja erro void setup() { // start serial port at 115200 baud: Serial.begin(115200); // use establish contact if you want to wait until 'A' sent to Arduino before start - not used in this version // establishContact(); // send a byte to establish contact until receiver responds setupPWM(); //set up pin modes for Max 31855 pinMode(CS1, OUTPUT); pinMode(CS2, OUTPUT); pinMode(SO, INPUT); pinMode(SCKa, OUTPUT); // deselect both Max 31855 digitalWrite(CS1, HIGH); digitalWrite(CS2, HIGH); //set up the PID pidInput = 0; // for testing start with temperature of 0 pidSetpoint = 0; // default if not connected to computer myPID.SetOutputLimits(0,100); // set output range 0 - 100 % myPID.SetInputLimits(0,250); // 0 - 250 degrees C myPID.SetSampleTime(2000); // set 2 second sample time for pID so equal to PWM cycle time //turn the PID on myPID.SetMode(AUTO); Serial.println("Reset"); // flag that Arduino has reset used for debugging } /**************************************************************************** * Set up power pwm control for heater. Hottop uses a triac that switches * only on zero crossing so normal pwm will not work. * Minimum time slice is a half cycle or 10 millisecs in UK. * Loop in this prog may need up to 10 ms to complete. * I will use 20 millisecs as time slice with 100 power levels that * gives 2000 milliseconds total time period. * The Hottop heater is very slow responding so 2 sec period is not a problem. ****************************************************************************/ void setupPWM() { // set the digital pin as output: pinMode(pwmPin, OUTPUT); //setup PWM lastTimePeriod = millis(); digitalWrite(pwmPin, HIGH);//set PWM pin on to start } void dofan() { pinMode (3, OUTPUT); // ESTABELECE O PIN 3 PWM COMO O PIN QUE VAI SER USADO PELA VENTOINHA AC analogWrite (3, (fan * 2.55)); } // this not currently used void establishContact() { // while (Serial.available() <= 0) { // Serial.print('A', BYTE); // send a capital A // delay(300); // } Serial.println("Opened but no contact yet - send A to start"); int contact = 0; while (contact == 0){ if (Serial.available() > 0) { inByte = Serial.read(); Serial.println(inByte); if (inByte == 'A'){ contact = 1; Serial.println("Contact established starting to send data"); } } } } /**************************************************************************** * Toggles the heater on/off based on the current power level. Power level * may be determined by arduino or computer. ****************************************************************************/ void doPWM() { timeOn = timePeriod * power / 100; //recalc the millisecs on to get this power level, user may have changed if (millis() - lastTimePeriod > timePeriod) lastTimePeriod = millis(); if (millis() - lastTimePeriod < timeOn){ digitalWrite(pwmPin, LOW); // turn on } else { digitalWrite(pwmPin, HIGH); // turn off } } /**************************************************************************** * Called to set power level. Now always safe as hardware only turns heater on * if BOTH the Arduino AND the Hottop control board call for heat. ****************************************************************************/ void setPowerLevel(int p) { if (p > -1 && p < 101) power = p; } /**************************************************************************** * Called when an input string is received from computer * designed for key=value pairs or simple text commands. * Performs commands and splits key and value * and if key is defined sets value otherwise ignores ****************************************************************************/ void doInputCommand() { float v = -1; inString.toLowerCase(); int indx = inString.indexOf('='); if (indx < 0){ //this is a message not a key value pair if (inString.equals("pccontrol")) { controlBy = computer; } else if (inString.equals("arduinocontrol")) { controlBy = arduino; } } else { //this is a key value pair for decoding String key = inString.substring(0, indx); String value = inString.substring(indx+1, inString.length()); //parse string value and return float v char buf[value.length()+1]; value.toCharArray(buf,value.length()+1); v = atof (buf); //only set value if we have a valid positive number - atof will return 0.0 if invalid if (v >= 0) { if (key.equals("power") && controlBy == computer && v < 101){ setPowerLevel((long) v);//convert v to integer for power } else if (key.equals("sett2")){ // set PID setpoint to T2 value pidSetpoint = v; } else if (key.equals("pidbias")) { // set pid bias default is 0% pidBias = v; myPID.Reset();// this resets the PID deleting any accumulated error } else if (key.equals("pidp")) { pidP = v; } else if (key.equals("pidi")) { pidI = v; } else if (key.equals("pidd")) { pidD = v; } if (key.equals("fan")) { fan = v; } } } } /**************************************************************************** * check if serial input is waiting if so add it to inString. * Instructions are terminated with \n \r or 'z' * If this is the end of input line then call doInputCommand to act on it. ****************************************************************************/ void getSerialInput() { //check if data is coming in if so deal with it if (Serial.available() > 0) { // read the incoming data as a char: char inChar = Serial.read(); // if it's a newline or return or z, print the string: if ((inChar == '\n') || (inChar == '\r') || (inChar == 'z')) { //do whatever is commanded by the input string if (inString.length() > 0) doInputCommand(); inString = ""; //reset for next line of input } else { // if we are not at the end of the string, append the incoming character if (inString.length() < maxLength) { inString += inChar; } else { // empty the string and set it equal to the incoming char: // inString = inChar; inString = ""; inString += inChar; } } } } /**************************************************************************** * Send data to computer once every second. Data such as temperatures, * PID setting etc. * This allows current settings to be checked by the controlling program * and changed if, and only if, necessary. * This is quicker that resending data from the controller each second * and the Arduino having to read and interpret the results. ****************************************************************************/ void doSerialOutput() { //send data to logger float tt1; float tt2; #ifdef CELSIUS tt1 = t1; tt2 = t2; #else tt1 = (t1 * 9 / 5) + 32; tt2 = (t2 * 9 / 5) + 32; #endif Serial.print("t1="); Serial.println(tt1,DP); //Comment out the next two lines if using only one thermocouple Serial.print("t2="); Serial.println(tt2,DP); Serial.print("power%="); Serial.println(power); Serial.print ("fan="); Serial.println (fan); // only need to send these if Arduino controlling by PID if (controlBy == arduino) { Serial.print("targett2="); Serial.println(pidSetpoint,DP); Serial.print("pidP="); Serial.println(pidP,DP); Serial.print("pidI="); Serial.println(pidI,DP); Serial.print("pidD="); Serial.println(pidD,DP); Serial.print("pidBias="); Serial.println(pidBias,DP); } } /**************************************************************************** * Read temperatures from Max 31855 chips Sets t1 and t2, -1 if an error * occurred. Max 31855 needs 240 ms between readings or will return last * value again. I am reading it once per second. ****************************************************************************/ void getTemperatures() { temp1 = readt1.readCelsius(); temp2 = readt2.readCelsius(); //readt? returns 2000 if error if (temp1 < 2000) { tCumulative1 = tCumulative1 + temp1; noGoodReadings1 ++; } if (temp2 < 2000) { tCumulative2 = tCumulative2 + temp2; noGoodReadings2 ++; } } /**************************************************************************** * Purpose to adjust PID settings and compute new output value setting power * to pidOutput on exit ****************************************************************************/ void updatePID(){ pidInput = t2; myPID.SetTunings(pidP,pidI,pidD); myPID.Compute(); setPowerLevel(pidOutput); // range set in setup to 0 - 100% } /**************************************************************************** * Called by main loop once every 250 ms * Used to read each thermocouple once every 250 ms * * Once per second averages temperature results, updates PID and outputs data * to serial port. ****************************************************************************/ void do250msLoop() { getTemperatures(); if (tcLoopCount > 3) // once every four loops (1 second) calculate average temp, update PID and do serial output { tcLoopCount = 0; if (noGoodReadings1 > 0) {t1 = tCumulative1 / noGoodReadings1; rettemp1 = t1;} else t1 = rettemp1; if (noGoodReadings2 > 0) t2 = tCumulative2 / noGoodReadings2; else t2 = -1.0; noGoodReadings1 = 0; noGoodReadings2 = 0; tCumulative1 = 0.0; tCumulative2 = 0.0; // only use PID if in Arduino control. If Computer control power is set by computer if (controlBy == arduino){ updatePID(); // set to execute once per 2 seconds in setup, just returns otherwise } doSerialOutput(); // once per second } tcLoopCount++; } /**************************************************************************** * Main loop must not use delay! PWM heater control relies on loop running * at least every 40 ms. If it takes longer then heater will be on slightly * longer than planned. Not a big problem if 1% becomes 1.2%! But keep loop fast. * Currently loop takes about 4-5 ms to run so no problem. ****************************************************************************/ void loop(){ getSerialInput();// check if any serial data waiting // loop to run once every 250 ms to read TC's update PID etc. if (millis() - lastTCTimerLoop >= 250) { lastTCTimerLoop = millis(); do250msLoop(); } doPWM(); // Toggle heater on/off based on power setting dofan(); }
  20. Weiler, O sketch não tem o recurso da ventoinha. Vc que vai ter que bolar. Tenho aqui em algum lugar. Amanhã posto as linhas
  21. Estou apenas engatinhando na arte, pois, na gaggia nunca me senti inclinado a vaporizar. Treino mais nos chocolates do meu caçula O de agora a pouco
  22. O Mário é um cabra pra lá de bom! Pode comprar com ele que é tranquilíssimo. O café é excelente também! Quem dera todos os caras que vendem café verde/torrado fossem tal qual ele.
×
×
  • Criar Novo...