Tabla de contenido:

Máquina de café habilitada para IoT: 9 pasos (con imágenes)
Máquina de café habilitada para IoT: 9 pasos (con imágenes)

Video: Máquina de café habilitada para IoT: 9 pasos (con imágenes)

Video: Máquina de café habilitada para IoT: 9 pasos (con imágenes)
Video: 💰 Inicia un Negocio del internet de las cosas (IoT) - IoTicos Admin ya está Disponible en GitHub 🐱 2024, Mes de julio
Anonim
Image
Image
Equipo necesario
Equipo necesario

Este instructivo se inscribe en la competencia de IoT: si le gusta, ¡vote por él

ACTUALIZADO: Ahora admite comunicaciones bidireccionales y actualizaciones OTA

Hace un tiempo que tengo una máquina de café Jura y siempre he querido automatizarla de alguna manera.

He estado ejecutando un sistema de automatización del hogar básico durante algunos años, pero la máquina de café no era algo que fuera fácil de modificar (o eso pensé). Las máquinas de café Jura generalmente tienen un 'puerto de diagnóstico' y / o un puerto que se usa para agregar un sistema de pago a la máquina, sin embargo, no pude encontrar ninguna información sobre cómo podría utilizarse. Más recientemente, algunas personas realizaron ingeniería inversa al protocolo y se hizo público. El problema era que la mayoría de las referencias a las funciones disponibles eran para máquinas mucho más grandes que la mía (Ena 7).

Además de eso, mi máquina no tiene una energía de reserva permanente como las máquinas más grandes, sino que tiene un interruptor de alta tensión que hace que la fuente de alimentación se "enganche". El botón físico de la máquina en realidad activa 2 interruptores: uno de bajo voltaje (lado lógico, apagado) y otro de alto voltaje (encendido). Ambos interruptores son momentáneos.

También necesitaba asegurarme de que la máquina aún funcionara al 100% de forma independiente de cualquier mecanismo de control, es decir, la máquina aún funciona con normalidad, como si no estuviera habilitada para IoT.

Para automatizar la máquina se requieren dos cosas: 1) Poder controlar la energía a la máquina 2) Poder comunicarse con la máquina para activar las funciones para hacer café, enjuague, etc.

Paso 1: Cómo lo vamos a hacer

Usaremos un módulo ESP8266 'ESP-01' para conectarnos al wifi doméstico y suscribirnos al servidor / tema MQTT que escucha los comandos. El 'Front End' que utilicé es OpenHAB2, pero no hay ninguna razón por la que no pueda agregar a la interfaz web en el dispositivo y controlar directamente si lo desea o mediante los comandos HTTP Get.

El ESP8266 manejará el control de 2 relés relacionados con el botón de encendido y también procesará comandos seriales hacia / desde la máquina de café.

ADVERTENCIA: este instructivo describe el procedimiento que utilicé para modificar mi máquina de café Jura Ena7 para que se controle a través de la automatización del hogar. Se trata de modificar un dispositivo de red eléctrica que puede resultar peligroso si se realiza de forma incorrecta. La información aquí puede estar incompleta, ser inexacta e insegura. Proceda con precaución. No se acepta responsabilidad.

Paso 2: Equipo necesario

Equipo necesario
Equipo necesario
Equipo necesario
Equipo necesario
Equipo necesario
Equipo necesario

Partes

  • Módulo ESP-01 y una forma de programarlo (Arduino IDE y adaptador físico para programación)
  • Módulo relé de 2 vías EBAY
  • 5v -> 3.3v Regulador EBAY
  • Cargador de teléfono pequeño con alimentación de red de 5v
  • Convertidor de nivel lógico * Freetronics
  • Cable misceláneo, cabezales de clavija, termocontraíble, etc. para conectarlo todo.

Instrumentos

  • Soldador de punta fina
  • Soldar
  • Los pelacables son útiles
  • Conductor Torx T15
  • Herramienta de seguridad ovalada (o haz una, solo toma unos minutos)

* Inicialmente usé un arduino UNO en mi prueba de todos los comandos seriales de la máquina y funcionó perfectamente, sin embargo, el módulo ESP se negó a funcionar. Verifiqué tres veces el código y estaba seguro de que los comandos que salían del módulo ESP eran los mismos que los del arduino, sin embargo, no fue posible. Dejo esto al módulo ESP que solo funciona con lógica de 3.3v y no con 5V. Una vez que puse el convertidor lógico, funcionó bien. Esto puede ser necesario o no en otras máquinas.

Idealmente, tendría un sistema de automatización del hogar existente que admita el protocolo MQTT (como openhab), ya que este es el objetivo del proyecto. Si solo desea controlarlo a través de botones en una página web sin ningún sistema de soporte, deberá realizar algunos cambios en el código de la página web incrustado. No es demasiado complicado de lograr (tal vez rev2..)

Paso 3: el protocolo Jura

El Protocolo de Jura
El Protocolo de Jura

Los datos hacia / desde la máquina son solo serie @ 9600, pero Jura también tiene algunos trucos bajo la manga. El protocolo utiliza esto para ECC adicional y / o para ofuscar la comunicación. En pocas palabras, cada byte de datos (carácter) se divide en los bits 2 y 5 de 4 bytes en serie estándar seguidos por una pausa de 8 ms. Si desea saber cómo funciona esto, hay mucha información en los enlaces aquí.

Información del protocolo extraída de:

El código arduino simplifica esto, permitiéndole transmitir comandos estándar legibles por humanos que luego transpone al protocolo Jura.

Mi código es una combinación de código de:

Los comandos a los que se hace referencia en los sitios anteriores no eran precisos para mi máquina, pero a través de un método de prueba y error, pude encontrar lo siguiente:

FA: 01 - Se apaga (pero parece que no se enjuaga, incluso si es necesario) FA: 02 - Responde 'ok' pero no estoy seguro de lo que hace. FA: 03 - Mensaje de enjuague (Fuerza un mensaje de 'enjuague' en la pantalla, presionando la máquina de enjuague giratoria) FA: 04 - Acción de enjuague - Enjuaga cuando aparece el mensaje 'Presione el botón giratorio', de lo contrario no hace nada FA: 05 - Fuerte en la pantalla (Presumiblemente combine esto con hacer un café fuerte) FA: 06 - Fuerte en la pantalla (presumiblemente combine esto con hacer un café fuerte) FA: 07 - 'Especial' en la pantalla pero en realidad no hace nada, no estoy seguro de qué es esto FA: 08 - Vapor FA: 09 - Café pequeño FA: 0A - Café grande

Hay otros comandos, pero esto es suficiente para mí …

Tenga cuidado al emitir comandos desconocidos, por ejemplo, aparentemente AN: 0A borrará la EEPROM de la máquina …

Paso 4: Desmontaje

Abrir la máquina en sí no es demasiado fácil, ya que necesita algunas herramientas un poco especiales, pero una persona entusiasta encontrará la manera: necesita una broca Torx T15 y una 'llave ovalada' para 2 tornillos. El Torx que ya tenía, la herramienta ovalada que hice con un perno de cabeza hueca de 4 mm perforado y aplanado un poco con un martillo.

Las instrucciones aquí están bastante bien presentadas:

Paso 5: anulación de la garantía

Anulación de la garantía
Anulación de la garantía
Anulación de la garantía
Anulación de la garantía
Anulación de la garantía
Anulación de la garantía
Anulación de la garantía
Anulación de la garantía

Una vez dentro de la máquina, verá los componentes principales. La entrada de energía principal tiene un buen lugar debajo para agregar el cargador de 5v.

Agregué cables (con clasificación de red) al bloque de terminales en la entrada de la máquina y los soldé / encogí por calor a las clavijas de red del cargador de 5v. Mi modelo en particular no era un tipo de puerto USB sino uno que tenía el cable conectado permanentemente. Es posible que no tenga suficiente espacio para que un puerto USB tipo uno pueda usar un cable USB real, pero si abre el cargador, puede quitar el puerto USB y reemplazarlo con un cable estándar a los puntos 5v y Gnd.

Si lo desea, puede sustituirla por otra fuente de alimentación de 5 V de potencia nominal. 500ma debería ser suficiente.

Hay mucho espacio para el módulo de relés cerca de la amoladora. Tenemos que cablear los dos relés para que funcionen en paralelo con los interruptores de alimentación principales. Simplemente corté los cables existentes, los despojé, estañé, agregué un cable adicional y los volví a soldar (no olvides el termorretráctil). Había suficiente holgura en los cables para hacer esto.

El módulo de relé se mantiene en su lugar con cinta adhesiva de doble cara de buena calidad. Con los cables conectados y con un espacio limitado para el movimiento, incluso si la cinta pierde agarre, el módulo no irá demasiado lejos y no podrá entrar en contacto con ningún objeto metálico.

También probé el puerto de diagnóstico en mi máquina para determinar la ubicación de las conexiones internas para poder lograr una integración completamente oculta. Solo se utilizan cables tx, rx y Gnd.

Si tiene una máquina más comercial que admite un voltaje de espera y / o no desea anular la garantía de su máquina, puede conectarse directamente al puerto de diagnóstico, pero es posible que no pueda encender la máquina con este dispositivo.

Mi máquina usa un conector de 7 pines. De izquierda a derecha es:

NC Tx G Rx NC 5 v NC

Los pines correspondientes en la placa base: Rojo = Gnd Naranja = Rx Negro = Tx

Puede encontrar más información en los pines aquí:

Paso 6: Cableado del lado lógico

Cableado del lado lógico
Cableado del lado lógico
Cableado del lado lógico
Cableado del lado lógico
Cableado del lado lógico
Cableado del lado lógico

Revise el diagrama: parece demasiado complicado, pero en realidad no lo es.

Monté el convertidor de nivel en la parte posterior del regulador de voltaje (definido) con cinta adhesiva de doble cara. Luego utilicé algunas patas de componentes para soldar los pines de alimentación y tierra a cada lado del convertidor de nivel a los pines correspondientes del módulo de potencia. Todo este módulo funciona como un "paso a través" para toda la lógica y la fuente de alimentación del ESP-01.

Usé los dos convertidores del medio para los datos en serie y los dos externos para las señales de conducción del relé, pero no importa cuál use.

En realidad, no es necesario con estos módulos de relé ejecutar una lógica de 5v, ya que están activos BAJO, pero funcionó bien, así que lo hice de todos modos.

Usé un encabezado hembra 4x2 para conectarme al módulo ESP. Esto permite cargar fácilmente el código o reemplazar el módulo.

En el diagrama no se muestra la entrada de 5 V; conecté el mío directamente al módulo de relé (ver la segunda imagen). El cable negro en la parte inferior izquierda de la imagen son los datos en serie que van a la placa principal. Utilicé una parte de un cable de extensión de auriculares blindado de 3,5 mm solo para ayudar a reducir las posibilidades de interferencia en la línea de datos.

El código 12f usa SoftwareSerial en lugar de hardware serial - Esto permite que el módulo informe el estado para la depuración a través del serial normal. Las conexiones se realizan a través de los pines 4 y 5. Adapté el mismo encabezado para hacer del ESP12F un intercambio de enchufe para el ESP-01, simplemente intercambiando esos pines seriales

Paso 7: programación del módulo

Programación del módulo
Programación del módulo

El código se compiló contra Arduino 1.8.1 con el complemento de placa ESP8266 y PubSubClient 2.6.0 (que es la biblioteca MQTT)

Modifique el código según sus requisitos y cargue el código en el módulo ESP-01 y conéctese a la máquina. ¡Tenga cuidado con la orientación de los pines!

Configuración

Opción 1)

Solo en código base en zip. Cuando el módulo ESP se inicia por primera vez, entra en modo AP y establece su IP en 192.168.4.1. Luego puede conectarse al módulo y cambiar la IP y conectarse a su propio punto de acceso. También deberá configurar una IP para su máquina en ese rango, ya que no hay DHCP en el módulo.

El AP SSID predeterminado es 'ESPSwitch' y la contraseña es '12345678'

Permanece en modo AP durante 2 minutos por defecto. Puede cambiar esta configuración en 'global.h': se llama 'adminTimeout' y está en milisegundos. Recomiendo cambiar esto a algo bajo una vez que tenga una configuración válida en EEPROM, ya que de lo contrario solo causará demoras innecesarias en el arranque del dispositivo.

Opcion 2)

Este es el modo predeterminado para el código más nuevo que admite comunicaciones bidireccionales, la opción 1 no está disponible. También puede cambiar la configuración predeterminada de SSID / Contraseña en el archivo ino principal (busque '// CONFIGURACIÓN PREDETERMINADA') para que se cargue esas configuraciones en la EEPROM en el primer arranque y cambie el retraso del modo de administración a algo bajo en 'global.h'. Esto evita tener que perder el tiempo para conectarse al AP temporal.

El dispositivo establecerá automáticamente su ID de MQTT (y la ruta de suscripción) a los últimos 4 dígitos del número de serie del módulo. La ruta por defecto es ha / mod // #, cambie como mejor le parezca, pero lea los comentarios en el código para asegurarse de que la matriz apropiada tenga la longitud correcta.

Hago esto porque significa que no tengo que generar una ID única para cada módulo en mi red.

La ID del dispositivo está visible y el servidor MQTT se puede configurar a través de la página del servidor MQTT en el servidor web interno

Paso 8: Hacer que funcione …

Los comandos MQTT son

ha / mod / xxxx / 0 o 1 = Alternar potencia

Cualquier otra cadena se tratará como un comando y se enviará a través del puerto serie. El estado se informa a / ha / café en HEX

Con 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 del sitio

Elemento de grupo = "Máquina de café" {Cambiar elemento = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Cambiar elemento = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Cambiar elemento = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Cambiar elemento = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Rinse"] Elemento de texto = Coffee_Status label = "Estado [% s] "}

voicecontrol.rules

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

regla "Reglas de comandos de voz"

cuando el Item VoiceCommand recibió el comando, entonces var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand recibido" + comando)

if (command.contains ("enciende la máquina de café") || command.contains ("apaga la máquina de café")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("hazme un café pequeño")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("hazme un café grande")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("enjuague la máquina de café")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} end

Reglas (para interpretar las respuestas HEX en valores 'reales'):

regla "Estado de la máquina de café" cuando el artículo Coffee_Machine_Status recibió una actualización, entonces 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)

si (trayBit == "0") {

postUpdate (Coffee_Status, "Tray Missing")} if (tankBit == "1") {postUpdate (Coffee_Status, "Fill Tank")} if (rinseBit == "1") {postUpdate (Coffee_Status, "Press Rotary")} if (trayBit == "1" && tankBit == "0" && rinseBit == "0") {postUpdate (Coffee_Status, "Listo")}

}

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

Paso 9: Refinamientos / Todo

Simplifique la configuración inicial conectándose a wifi - Listo. Abandonó la idea del 'modo de administración' porque era molesto. Ahora solo ingrese el SSID y la contraseña en el código. Guarda en EEPROM si actualiza / cambia a través de la interfaz web.

El código más nuevo también admite actualizaciones OTA, pero deberá actualizar la EEPROM en el módulo ESP-01 para que esto funcione o comentar los elementos OTA correspondientes

Agregue código para procesar las respuestas de la máquina y lea el estado como sin bandeja, tierra vacía y llenar el tanque - Listo. He agregado código para leer el estado y publicarlo en ha / coffee. Estas son solo las respuestas sin procesar y todavía estoy trabajando para interpretarlas, pero hasta ahora me falta la bandeja y el tanque está vacío. Sondea la máquina cada 9 segundos cuando está encendida y publica la respuesta a MQTT

La respuesta está en HEX, pero los bits individuales indican los sensores

Agregue código a las páginas web para un control directo a través de los comandos HTTP GET.

Concurso de Internet de las cosas 2017
Concurso de Internet de las cosas 2017
Concurso de Internet de las cosas 2017
Concurso de Internet de las cosas 2017

Primer premio en el Concurso de Internet de las cosas 2017

Recomendado: