Tabla de contenido:
- Paso 1: Cómo lo vamos a hacer
- Paso 2: Equipo necesario
- Paso 3: el protocolo Jura
- Paso 4: Desmontaje
- Paso 5: anulación de la garantía
- Paso 6: Cableado del lado lógico
- Paso 7: programación del módulo
- Paso 8: Hacer que funcione …
- Paso 9: Refinamientos / Todo
Video: Máquina de café habilitada para IoT: 9 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
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
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
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
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
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
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.
Primer premio en el Concurso de Internet de las cosas 2017
Recomendado:
Lámpara de matriz habilitada para WiFi: 6 pasos (con imágenes)
Lámpara de matriz habilitada para WiFi: ¿Quién no quiere tener una lámpara impresionante que pueda mostrar animaciones y sincronizarse con otras lámparas en la casa? Correcto, nadie. Por eso hice una lámpara RGB personalizada. La lámpara consta de 256 LED direccionables individualmente y todos los LED se pueden controlar
Rastreador de máquina de café con Raspberry Pi y Google Sheets: 5 pasos
Rastreador de máquina de café con Raspberry Pi y Google Sheets: este instructivo le mostrará cómo construir un rastreador basado en Raspberry Pi para la máquina de café compartida en su espacio de oficina. Usando la pantalla OLED del rastreador y los interruptores mecánicos, los usuarios pueden registrar su consumo de café, ver su saldo y
Cómo interactuar con Alexa Dragonboard, la aplicación de Android y la máquina de café: 7 pasos
Cómo interactuar con Alexa Dragonboard, la aplicación de Android y la máquina de café: este tutorial proporciona los pasos necesarios para conectar, integrar y usar la máquina de café con Alexa Dragonboard y la aplicación de Android. Para obtener más detalles sobre la máquina de café, consulte este instructivo
Lámpara de la estrella de la muerte habilitada para Alexa: 17 pasos (con imágenes)
Lámpara de la estrella de la muerte habilitada para Alexa: lleva un fragmento del lado oscuro a tu sala de estar con esta lámpara única activada por voz. Una obra de arte funcional, útil y agradable a la vista. ¿Encendido o apagado? ¡Todas las lámparas hacen eso! ¿Cambiar el brillo? ¡Muy común! Pero puede el tuyo
Estación meteorológica cruda habilitada para WiFi: 3 pasos (con imágenes)
Estación meteorológica cruda habilitada para WiFi: hoy aprenderá cómo puede construir una estación meteorológica simple habilitada para WiFi que le envíe los datos de temperatura y humedad usando IFTTT directamente a su correo electrónico. Las piezas que he usado se pueden encontrar en kumantech.com