Índice:

Máquina de café habilitada para IoT: 9 etapas (com fotos)
Máquina de café habilitada para IoT: 9 etapas (com fotos)

Vídeo: Máquina de café habilitada para IoT: 9 etapas (com fotos)

Vídeo: Máquina de café habilitada para IoT: 9 etapas (com fotos)
Vídeo: Não sabe beber Coca Cola 🥤 2024, Julho
Anonim
Image
Image
Equipamento Necessário
Equipamento Necessário

Este instrutível é inscrito na competição IoT - Se você gostar, vote nele

ATUALIZADO: agora suporta comunicações bidirecionais e atualizações OTA

Já há algum tempo que tenho uma máquina de café Jura e sempre quis automatizá-la de alguma forma.

Eu tenho um sistema básico de automação residencial há alguns anos, mas a máquina de café não era algo que fosse simples de modificar (ou assim eu pensava). As máquinas de café Jura geralmente possuem uma 'porta de diagnóstico' e / ou uma porta usada para adicionar um sistema de pagamento à máquina, porém não consegui encontrar nenhuma informação sobre como ela poderia ser utilizada. Mais recentemente, o protocolo foi submetido a engenharia reversa por alguns indivíduos e tornado público. O problema era que a maioria das referências às funções disponíveis eram para máquinas muito maiores que a minha (Ena 7).

Além disso, minha máquina não tem uma alimentação de espera permanente como as máquinas maiores, em vez disso, ela tem um interruptor HV que faz a fonte de alimentação 'travar'. O botão físico na máquina ativa 2 interruptores - um volt baixo (lado lógico, desligar) e um volt alto (ligar). Ambas as opções são momentâneas.

Eu também precisava ter certeza de que a máquina ainda operava 100% independente de qualquer mecanismo de controle, ou seja, a máquina ainda funciona normalmente como se não estivesse habilitada para IoT.

Para automatizar a máquina são necessárias duas coisas: 1) Ser capaz de controlar a energia da máquina 2) Ser capaz de se comunicar com a máquina para ativar as funções de fazer café, enxágue etc.

Etapa 1: Como vamos fazer isso

Usaremos um módulo ESP8266 'ESP-01' para se conectar ao wi-fi doméstico e se inscrever no servidor MQTT / tópico que escuta os comandos. O 'front end' que usei é o OpenHAB2, mas não há motivo para você não poder adicionar à interface da web no dispositivo e controlar diretamente se quiser ou por meio de comandos HTTP Get.

O ESP8266 controlará 2 relés relacionados ao botão liga / desliga e também processará comandos seriais de / para a máquina de café.

AVISO - Este instrutivo descreve o procedimento que usei para modificar minha máquina de café Jura Ena7 para ser controlada por automação residencial. Trata da modificação de um dispositivo de eletricidade da rede que pode ser perigoso se executado incorretamente. As informações aqui podem estar incompletas, imprecisas e inseguras. Prossiga com cuidado. Nenhuma responsabilidade aceita.

Etapa 2: Equipamento necessário

Equipamento Necessário
Equipamento Necessário
Equipamento Necessário
Equipamento Necessário
Equipamento Necessário
Equipamento Necessário

Peças

  • Módulo ESP-01 e uma forma de programá-lo (Arduino IDE e adaptador físico para programação)
  • Módulo de relé de 2 vias EBAY
  • Regulador 5v -> 3,3v EBAY
  • Carregador de telefone pequeno 5v alimentado pela rede elétrica
  • Conversor de nível lógico * Freetronics
  • Fios diversos, cabeçotes de pinos, termorretráteis, etc. para conectar tudo.

Ferramentas

  • Ferro de solda de ponta fina
  • Solda
  • Os descascadores de fios são úteis
  • Driver Torx T15
  • Ferramenta de segurança oval (ou faça uma, leva apenas alguns minutos)

* Usei inicialmente um arduino UNO em meus testes de todos os comandos seriais da máquina e funcionou perfeitamente, porém o módulo ESP se recusou a funcionar. Eu verifiquei três vezes o código e tive certeza de que os comandos que saíam do módulo ESP eram os mesmos do arduino, mas era impossível. Eu coloquei isso para baixo para o módulo ESP trabalhando apenas em lógica 3.3v e não 5V. Depois de instalar o conversor lógico, ele funcionou bem. Isso pode ou não ser necessário em outras máquinas.

Idealmente, você teria um sistema de automação residencial existente que suportasse o protocolo MQTT (como o openhab), pois é esse o objetivo do projeto. Se quiser apenas controlá-lo por meio de botões em uma página da web sem nenhum sistema de suporte, você precisará fazer algumas alterações no código da página da web embutida. Não é muito complicado de conseguir (talvez rev2..)

Etapa 3: O Protocolo Jura

O Protocolo Jura
O Protocolo Jura

Os dados de / para a máquina são apenas serial @ 9600, mas Jura também tem alguns truques na manga. O protocolo usa isso para ECC extra e / ou para obscurecer a comunicação. Simplificando, cada byte de dados (caractere) é dividido entre os bits 2 e 5 de 4 bytes seriais padrão seguidos por uma pausa de 8 ms. Se você quiser saber como isso funciona, há muitas informações nos links aqui.

Informações de protocolo extraídas de:

O código do arduino simplifica isso, permitindo que você transmita comandos padrão legíveis por humanos que, em seguida, transpõe para o protocolo Jura.

Meu código é uma combinação de código de:

Os comandos mencionados nos sites acima não eram precisos para minha máquina, mas por meio de um método de tentativa e erro, consegui chegar ao seguinte:

FA: 01 - Desliga (mas não parece enxaguar, mesmo que precise) FA: 02 - Responde 'ok' mas não tem certeza do que faz. FA: 03 - Mensagem de enxágue (Força uma mensagem de 'enxágue' na tela, pressionando a máquina rotativa de enxágue) FA: 04 - Ação de enxágue - Enxágue quando a mensagem 'Pressione o botão rotativo' aparecer, caso contrário não faz nada FA: 05 - Forte na tela (Presumivelmente, combine isso com fazer um café forte) FA: 06 - Forte na tela (Presumivelmente combine isso com fazer um café forte) FA: 07 - 'Especial' na tela, mas na verdade não faz nada, não tenho certeza do que isso serve para FA: 08 - Steam FA: 09 - Café Pequeno FA: 0A - Café Grande

Existem outros comandos, mas isso é suficiente para mim …

Tenha cuidado ao emitir comandos desconhecidos, por exemplo, aparentemente AN: 0A limpará a EEPROM da máquina …

Etapa 4: desmontagem

Abrir a máquina não é muito fácil, pois você precisa de algumas ferramentas ligeiramente especiais, mas uma pessoa experiente encontrará uma maneira - você precisa de uma broca Torx T15 e uma 'chave oval' para 2 parafusos. O Torx que eu já tinha, a ferramenta oval que fiz com um parafuso de cabeça cilíndrica de 4 mm, perfurado e achatado com um martelo.

As instruções aqui são bastante bem apresentadas -

Etapa 5: anulação da garantia

Anulando a garantia
Anulando a garantia
Anulando a garantia
Anulando a garantia
Anulando a garantia
Anulando a garantia
Anulando a garantia
Anulando a garantia

Uma vez na máquina, você verá os componentes principais. A entrada de alimentação principal tem um bom local sob ela para adicionar o carregador de 5v.

Eu adicionei fios (com potência nominal) ao bloco de terminais na entrada da máquina e os soldou / encolhi a quente aos pinos de alimentação do carregador de 5v. Meu modelo específico não era do tipo de porta USB, mas tinha o cabo permanentemente conectado. Você pode não ter espaço suficiente para uma porta USB do tipo um para poder usar um cabo USB real, mas se você abrir o carregador, poderá remover a porta USB e substituí-la por um fio padrão para os pontos 5v e Gnd.

Você pode substituir por outra fonte de alimentação de 5 V, se desejar. 500ma deve ser suficiente.

Há bastante espaço para o módulo de relé perto do moedor. Temos que conectar os dois relés para operar em paralelo com os interruptores de alimentação principais. Simplesmente cortei os fios existentes, descasquei, estanhei, adicionei um fio extra e os soldou novamente (não se esqueça do encolhimento por calor). Havia folga suficiente nos fios para fazer isso.

O módulo de relé é mantido no lugar com fita dupla-face de boa qualidade. Com os fios conectados e com espaço limitado para movimento, mesmo que a fita perca aderência, o módulo não irá muito longe e não poderá entrar em contato com nenhum objeto de metal.

Também pesquisei a porta de diagnóstico em minha máquina para determinar a localização das conexões internas para que pudesse obter uma integração completamente oculta. Apenas fios tx, rx e Gnd são usados.

Se você tem uma máquina mais comercial que suporta uma tensão de espera e / ou não deseja anular a garantia da sua máquina, você pode conectar diretamente à porta de diagnóstico, mas pode não ser capaz de ligar a máquina usando este dispositivo.

Minha máquina usa um conector de 7 pinos. Da esquerda para a direita é:

NC Tx G Rx NC 5v NC

Os pinos correspondentes na placa-mãe: Vermelho = Gnd Laranja = Rx Preto = Tx

Mais informações podem ser encontradas nas pinagens aqui:

Etapa 6: Conectando o lado lógico

Fiação do lado lógico
Fiação do lado lógico
Fiação do lado lógico
Fiação do lado lógico
Fiação do lado lógico
Fiação do lado lógico

Revise o diagrama - parece muito complicado, mas realmente não é.

Montei o conversor de nível na parte de trás do regulador de tensão (depinado) com fita dupla-face. Em seguida, usei algumas pernas de componentes para soldar os pinos de alimentação e aterramento em ambos os lados do conversor de nível aos pinos do módulo de alimentação correspondentes. Todo esse módulo funciona como uma 'passagem' para toda a lógica e fonte de alimentação do ESP-01.

Usei os dois conversores intermediários para os dados seriais e os dois externos para os sinais de condução do relé, mas não importa qual você usar.

Na verdade, não é necessário com esses módulos de relé executar uma lógica de 5v, pois eles estão ativos em BAIXO, mas funcionou bem, então fiz isso de qualquer maneira.

Usei um conector fêmea 4x2 para conectar ao módulo ESP. Isso permite o upload fácil do código ou a substituição do módulo.

A entrada de 5 V não está representada no diagrama - conectei a minha diretamente ao módulo de relé (veja a segunda foto). O fio preto na parte inferior esquerda da imagem são os dados seriais para a placa principal. Usei uma parte de um cabo de extensão de fone de ouvido blindado de 3,5 mm apenas para ajudar a reduzir as chances de interferência na linha de dados.

O código 12f usa SoftwareSerial em vez de serial de hardware - Isso permite que o módulo relate o status para depuração via serial normal. As conexões são feitas por meio dos pinos 4 e 5. Adaptei o mesmo cabeçalho para fazer do ESP12F um plug-in swap para o ESP-01, apenas trocando aqueles pinos seriais

Etapa 7: Programando o Módulo

Programando o Módulo
Programando o Módulo

O código foi compilado em relação ao Arduino 1.8.1 com o complemento da placa ESP8266 e PubSubClient 2.6.0 (que é a biblioteca MQTT)

Modifique o código de acordo com seus requisitos, carregue-o no módulo ESP-01 e conecte-o à máquina. Cuidado com a orientação dos pinos!

Configuração

Opção 1)

Somente no código base no zip. Quando o módulo ESP é inicializado pela primeira vez, ele entra no modo AP e define seu IP como 192.168.4.1. Você pode então se conectar ao módulo e alterar o IP e se conectar ao seu próprio ponto de acesso. Você também precisará definir um IP para sua máquina nessa faixa, pois não há DHCP no módulo.

SSID AP padrão é 'ESPSwitch' e a senha é '12345678'

Ele permanece no modo AP por 2 minutos por padrão. Você pode alterar esta configuração em 'global.h' - é chamado de 'adminTimeout' e está em milissegundos. Eu recomendo mudar isso para um valor baixo, uma vez que você tenha uma configuração válida na EEPROM, pois, de outra forma, isso apenas causará atrasos desnecessários na inicialização do dispositivo.

Opção 2)

Este é o modo padrão para o código mais recente que suporta comunicação bidirecional, a opção 1 não está disponível. Você também pode alterar as configurações padrão de SSID / senha no arquivo ino principal (procure por '// DEFAULT CONFIG') para que ele carregue essas configurações na EEPROM na primeira inicialização e altere o atraso do modo admin para algo baixo em 'global.h'. Isso evita a necessidade de se conectar ao AP temporário.

O dispositivo irá definir automaticamente sua id MQTT (e caminho de assinatura) para os últimos 4 dígitos do número de série do módulo. O caminho por padrão é ha / mod // #, mude como achar necessário, mas leia os comentários no código para certificar-se de que a matriz apropriada tem o comprimento correto.

Faço isso porque significa que não preciso gerar uma ID exclusiva para cada módulo em minha rede.

O ID do dispositivo é visível e o servidor MQTT pode ser definido por meio da página do servidor MQTT no servidor da web interno

Etapa 8: Fazendo com que tudo funcione …

Os comandos MQTT são

ha / mod / xxxx / 0 ou 1 = Alternar potência

Qualquer outra string será tratada como um comando e enviada pela porta serial. O status é relatado para / ha / café em HEX

Com OpenHAB

coffeemachine.items

Número Coffee_Machine_Power "Power" {mqtt = "> [control: ha / mod / 8002 /: command: *: default]"} String Coffee_Machine_Status {mqtt = "<[control: ha / coffee: state: default]"}

Mapa do site

Grupo item = "Máquina de Café" {Switch item = Coffee_Machine_Power label = "Power" mapeamentos = [1 = "Alternar"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Pequeno"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Grande"] Trocar item = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Enxaguar"] Texto item = Coffee_Status label = "Status [% s] "}

voicecontrol.rules

import org.openhab.model.script.actions. * import org.openhab.core.library.types. * import java.util. *

regra "Regras de comando de voz"

quando o item VoiceCommand recebeu o comando, então var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand recebido" + comando)

if (command.contains ("ligue a máquina de café") || command.contains ("desligue a máquina de café")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("faça-me um café pequeno")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("faça-me um café grande")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("enxágue a máquina de café")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} end

Regras (para interpretar as respostas HEX em valores 'reais'):

regra "Status da máquina de café" quando o item Coffee_Machine_Status recebeu atualização, então var String response = Coffee_Machine_Status.state.toString () if (response.indexOf ("ic:")> -1) {var String hexString = response.substring (3, 5)

var int num = (Integer.parseInt (hexString, 16));

var String binaryString = String.format ("% 8s", Integer.toBinaryString (num)). replace ('', '0')

var int trayBit = binaryString.substring (0, 1)

var int tankBit = binaryString.substring (2, 3) var int heatBit = binaryString.substring (7, 8) var int rinseBit = binaryString.substring (6, 7)

if (trayBit == "0") {

postUpdate (Coffee_Status, "Bandeja ausente")} if (tankBit == "1") {postUpdate (Coffee_Status, "Encher tanque")} if (rinseBit == "1") {postUpdate (Coffee_Status, "Press Rotary")} if (trayBit == "1" && tankBit == "0" && rinseBit == "0") {postUpdate (Coffee_Status, "Ready")}

}

if (response == "Off") {postUpdate (Coffee_Status, "Off")} end

Etapa 9: Refinamentos / Todo

Simplifique a configuração inicial de conexão ao wi-fi - Pronto. Abandonou a ideia de 'modo de administração', pois era irritante. Agora basta inserir o SSID e a senha no código. Salva na EEPROM se você atualizar / alterar por meio da interface da web.

O código mais recente também suporta atualizações OTA, mas você precisará atualizar o EEPROM no módulo ESP-01 para que isso funcione ou comentar os itens OTA correspondentes

Adicione o código para processar as respostas da máquina e ler o status como nenhuma bandeja, terreno vazio e tanque de enchimento - Concluído. Eu adicionei o código para ler o status de volta e publicar no ha / coffee. Estas são apenas as respostas brutas e ainda estou trabalhando para interpretá-las, mas até agora tenho Bandeja ausente e Tanque vazio funcionando. Ele pesquisa a máquina a cada 9 segundos quando ligado e publica a resposta ao MQTT

A resposta é em HEX, mas bits individuais indicam os sensores

Adicione código às páginas da web para controle direto por meio de comandos HTTP GET.

Concurso de Internet das Coisas 2017
Concurso de Internet das Coisas 2017
Concurso de Internet das Coisas 2017
Concurso de Internet das Coisas 2017

Primeiro Prêmio no Concurso Internet das Coisas 2017

Recomendado: