Manual

do

Maker

.

com

Controle da maturação da cerveja com ESP8266 (parte I de II)

Controle da maturação da cerveja com ESP8266 (parte I de II)

Escrevi dois posts sobre um sistema de refrigeração da cerveja na semana de fermentação utilizando pastilhas de peltier. Agora vamos para as duas semanas de maturação, onde a temperatura deve ficar realmente baixa, próximo a 0 graus.

Se você desejar fazer um curso de produção de cerveja artesanal (que é tão barato quanto um Raspberry), em São Paulo (capital) eu sugiro o lugar onde fiz curso, que é o Ye Vesta Home Brewing, em Moema. Ligue (+55 11 2935-0090), veja o preço e fale que você leu no Manual do Maker que tinha R$30,00 de desconto se falasse que leu aqui (não tem, mas vai ter, depois eu seguro a bronca).

Se você não leu os artigos relacionados à fermentação da cerveja, siga os links abaixo:

http://www.manualdomaker.com/article/refrigerar-a-cerveja-na-fermentacao http://www.manualdomaker.com/article/como-refrigerar-a-cerveja-na-semana-de-fermentacao-parte-ii-ou-final/

Peltier, frigobar ou geladeira?

Agora não dá pra fazer com a peltier, a não ser que o sistema seja ampliado, mas o custo de dissipação é alto demais para essa opção. Se você tem espaço em sua residência, uma geladeira usada deve sair (na data atual) uns R$350,00. Vale muito a pena porque você poderá refrigerar até 50 litros de cerveja, ou algumas bombonas de 20 litros (mas uma bombona de 20 litros cabe no meu frigobar, então você pode ganhar com economia de energia). No meu caso especificamente, sou obrigado a utilizar um frigobar, pois moro em um apartamento com pouco espaço e produzir cerveja em um apartamento popular não é lá uma tarefa tão simples. adquiri um frigobar, por isso o artigo se baseará nele, mas serve também para geladeira.

Controle de temperatura

Esse frigobar possui controle interno de temperatura. Trata-se de um frigobar de 121 litros, portanto um pouco maior que os tradicionais encontrados em quartos de hotel (que tem na faixa de 70 litros). Porém não sei o quanto é confiável esse controle, além de que ele não dá nenhum feedback. Aí que entra a graça da coisa; vamos transformar esse frigobar em um dispositivo da Internet das coisas!

O projeto é simples e consistirá em alguns passos básicos:

  • Adicionar controle pelo ESP8266 e relé
  • Utilizar MQTT para enviar comandos e receber status
  • Adicionar um termopar ao frigobar para controle da temperatura

Ainda que o frigobar não chegue próximo a 0 graus, com esse controle é possível utilizá-lo também para a semana de fermentação e com isso podemos ter um equipamento único para todas as fases da produção de cerveja.

Existem termostatos com display prontos para a venda

Se você não quer se dar ao trabalho de produzir a solução, pode comprar alguma coisa pronta para bater um relé quando chegar na temperatura desejada e ainda ter um feedback pelo display. Porém você não terá controle pela Internet, nem pelo seu smartphone. Não é uma boa motivação? Mas na verdade não é apenas isso; inserir um fio entre a borracha da porta e a porta fará com que o ar frio vaze por essa fissura, então a melhor opção está descrita em detalhes mais abaixo.

Material

Para esse projeto existem duas possibilidades. Uma delas é utilizar apenas um ElectroDragon com um DHT22. A outra é utilizar um ESP8266 extra fazendo apenas a medição de temperatura e enviando para o MQTT broker. O ElectroDragon faz um subscribe no broker e reage conforme a condição de temperatura. Os termos "broker" e "subscribe" não lhe são familiares? Então dê uma olhada nesses artigos:

Para quem utiliza Lua com NodeMCU

http://www.manualdomaker.com/article/iot-esp8266-nodemcu-com-mqtt-a-seu-proprio-broker/

Configuração de um broker em Linux (desktop, notebook, Raspberry, etc)

http://www.manualdomaker.com /iot-configurando-um-mqtt-broker/

Para quem utiliza MicroPython (ou pretende utilizar)

http://www.manualdomaker.com/article/como-utilizar-mqtt-no-esp8266-com-micropython

Se você pretende um visual mais clean, a melhor opção é ter um segundo ESP8266 só aferindo a temperatura. Se colocar o ElectroDragon grudado no frigobar na parte de trás, pode até ser viável, mas de qualquer modo haverá um fio que seguirá até a frente do frigobar (talvez por baixo dele?) que será o sensor de temperatura. Com um segundo ESP8266 talvez fique visualmente melhor.

Considerando as duas possibilidades, a lista fica assim:

  • 1 ElecroDragon (e opcionalmente)
  • 1 ESP8266 apenas para coletar temperatura
  • 1 DHT22 para o EletroDragon ou
  • 1 DS18B20 para o ESP8266 coletor de temperatura
  • 1 fio para corrente alternada com terminador fêmea (tamanho a seu critério)

É realmente básico esse controle, por isso o custo é reduzido.

Preparação

Do lado do relé, tudo o que você precisa fazer é conectar o cabo com terminador fêmea ao borne como se fosse a conexão de uma fonte de alimentação DC. Não tem ordem, pois trata-se de uma saída de corrente alternada. Apenas utilize os 2 bornes da esquerda ou os 2 bornes da direita. Se quiser montar já uma segunda saída para o relé que sobra, tudo bem, mas não deixe de fazer terminador fêmea. Veja na imagem abaixo como fica a conexão.

Eu particularmente preferi utilizar mais um ESP8266 dentro do frigobar ligado em baterias recarregáveis apenas para não colocar fio entre a porta e a borracha isolante porque pelo teste que fiz, vazaria ar do interior. Com o ESP8266 lá dentro haverá o desconforto de  trocar  a bateria, mas a bateria li-ion 3.7V tem 6800mAh. São duas baterias que ficam acima de 7.5V no total e o ESP8266 consome no pico uns 250mA, o que dá aproximadamente 27 horas de uso contínuo. Para não ter que lembrar da troca, colocarei um alerta via MQTT para o ESP8266 avisar que tem que trocar a bateria em torno de 24 horas, pra evitar drenar demais e prejudicar tanto a bateria quanto o ESP8266.

Algumas pessoas podem estranhar, mas sim, mesmo estando dentro do frigobar com a porta fechada o ESP8266 está conectado à minha rede WiFi e está funcionando.

Preparando o ESP8266 interno

Esse é bastante simples de programar. Ele deve ter suporte a MQTT também, mas apenas fará publishing, reportando a temperatura dentro do frigobar. O outro ESP8266 (o ElectroDragon) fará subscribe no tópico desse primeiro ESP8266, para saber se a temperatura está alta ou baixa e tomar as devidas providências. Além disso, ele tem um LDR embutido, então consigo saber quando a porta do frigobar foi aberta e dá pra montar um histórico da variação de temperatura em relação à abertura da porta.

Primeiro passo

O primeiro passo é substituir o firmware original pelo MicroPython. Você pode baixar o firmware no repositório através desse link. O firmware se chama firmware-combined.bin. O procedimento é simples, você deve apagar a flash antes de subir o novo firmware e então, subí-lo. Lembre-se de entrar no modo de gravação, segurando o botão Flash, então o botão Reset; solte o Reset e depois solte o Flash. Daí é só gravar:

sudo apt-get install esptool

#supondo /dev/ttyUSB0 - veja qual a sua porta
esptool.py --port /dev/ttyUSB0 erase_flash

#agora fazendo o flashing
esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect -ff 40m -fm qio 0x0 firmware-combined.bin

Segundo passo

Agora que você já pode reiniciar o ESP8266 através do botão Reset. Conecte via serial com a velocidade de 115200. Somente utilizo Linux há mais de 20 anos e no meu caso, a porta é /dev/ttyUSB0, quando não há outro dispositivo conectado utilizando essa porta.

Quando efetuar a conexão ao ESP8266, pressione Enter uma vez e você verá o prompt exibindo >>>. Agora vamos habilitar o WEBREPL para pode transferir arquivos para o ESP sem que ele esteja conectado a uma porta serial. Assim ele pode ficar dentro do frigobar enquanto recebe programação. Legal ou não ?

Digite:

import webrepl_setup

Você deverá escolher a opção E (pode ser minúsculo mesmo) quando for questionado. Em seguida será perguntado sobre uma senha e então sobre o reboot. Coloque uma senha simples (1234 já está ótimo) e confirme, então confirme o reboot com 'y'.

webrepl.webp

Após o reboot, quando você ver o IP recebido do DHCP, aperte Enter uma vez para ver o prompt.

Terceiro passo

Você precisará conectá-lo à sua rede, hum? Uma vez configurado, a configuração é guardada. Faça da seguinte maneira:

import network

sta_if = network.WLAN(network.STA_IF)

sta_if.active(True)

sta_if.connect('SeuSSID','SuaSenha')

Quarto passo

Para interagir com o ESP8266, você vai precisar do client. Clone o git do projeto:

git clone https://github.com/micropython/webrepl.git

Entre no diretório webrepl e daí você tem duas opções; ou executa a cópia de arquivos por linha de comando, ou abre o arquivo html em um browser, de modo que você poderá tanto fazer a transferência de arquivos como acessar o shell para digitar comandos como se estivesse conectado via serial. Ótimo ou não?

python webrepl_cli.py --help
webrepl_cli.py - Perform remote file operations using MicroPython WebREPL protocol
Arguments:
  <host>:<remote_file> <local_file> - Copy remote file to local file
  <local_file> <host>:<remote_file> - Copy local file to remote file
Examples:
  webrepl_cli.py script.py 192.168.4.1:/another_name.py
  webrepl_cli.py script.py 192.168.4.1:/app/
  webrepl_cli.py 192.168.4.1:/app/script.py .

Se como eu, preferir utilizar o WEBREPL pelo browser, então abra o arquivo html. Costumo chamá-lo pelo terminal:

xdg-open webrepl.html

Digite o IP na caixa de conexão no seu browser (não na URL do browser, veja a imagem a seguir). Mesmo que você queira apenas enviar arquivos para o ESP8266, sempre será necessário conectar-se a ele primeiro.

Quinto passo

Você precisará adicionar o suporte ao MQTT que não é padrão no MicroPython. Mas é tão fácil quanto todo o resto mostrado até agora. Siga esse outro artigo que escrevi a respeito.

Sexto passo

Enfim a programação!

Faremos a leitura do LDR e a leitura de um sensor de temperatura. A leitura analógica é muito simples. Faça um teste no console do MicroPython:

from machine import ADC

ldr = ADC(0)

ldr.read()

Isso que implementaremos no código. O próximo passo é o sensor de temperatura. Eu vou de DS18B20 porque tem um driver prontinho pra ele no MicroPython!

from machine import Pin
import onewire
import time
import ds18x20

ow   = onewire.OneWire(Pin(12))

ds   = ds18x20.DS18X20(ow)

roms = ds.scan()

if not len(roms):
    print("Device not found. Check it.")
    exit()

ds.convert_temp()

time.sleep_ms(750)

for rom in roms:
    print(ds.read_temp(rom))

Até aqui já temos um bocado de informação, hum? Vamos fazer o seguinte então, no próximo artigo mostro a programação do ElectroDragon, a programação do MQTT de ambos e disponibilizo os códigos fonte no  meu github, ok?

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.