Concepto del proyecto
El concepto de este producto es satisfacer la necesidad de mirar la llama real. Una descarga luminosa en un gas, estrictamente hablando, no es exactamente una llama, aunque parece una llama real.
Me gusta su color y este fue el único motivo para comenzar a crear tales relojes para mí en una sola copia.
La tarea de crear un dispositivo para la producción en masa no se planteó.
Por lo tanto, el presupuesto del proyecto es mucho más razonable. Se tomaron decisiones basadas en nuestras propias ideas sobre la belleza, no se tuvo en cuenta el costo de los componentes. Por supuesto, siempre hay limitaciones, por ejemplo, no compré grandes GRI (indicadores de descarga de gas) como IN18: su precio es más que un límite intuitivamente definido y no encajaban en mi concepto de la apariencia del producto. Usé el tipo GRI IN-12.
IN12 se llena con una mezcla de neón (o una mezcla de gases inertes) y vapor de mercurio. El vapor de mercurio proporciona un aumento significativo en la durabilidad del dispositivo y le da un tono azulado al brillo del plasma. Otros GRI pueden estar libres de mercurio y dar un claro brillo de neón.
La función principal del reloj es mostrar la hora exacta (CEP, ¡hola!). Es muy deseable que el tiempo de inicio se establezca automáticamente y no requiera ninguna manipulación por parte del usuario. Desde mi punto de vista personal, los botones en dichos dispositivos no son necesarios en absoluto. Dispositivos similares con una docena de botones y cientos de funciones causadas por varias combinaciones de prensas y tiempos de prensa me causan una tristeza silenciosa. En primer lugar, los GRI están bien adaptados para mostrar solo números. No se prevé nada más, y los intentos de mostrar elementos de menú, etc., en mi opinión, utilizan una herramienta inadecuada. Lo mismo se aplica a funciones adicionales como un despertador, etc.
En segundo lugar, es obvio que no es realista recordar qué combinación de pulsaciones de botón activa una u otra función incorporada. Escribir programas para tales dispositivos es divertido y agradable, pero luego imposible de usar.
Esta pregunta se considera perfectamente en el libro Donald A. Norman Diseño de cosas familiares. Citaré un pasaje:
“Durante mis viajes, usé el proyector de diapositivas Leitz varias veces. La primera vez fue la peor pesadilla. Comencé a dar una conferencia y mostré la primera diapositiva. Cuando fue necesario pasar a la siguiente diapositiva, el estudiante a cargo del programa presionó suavemente el botón y comenzó a mirar con horror mientras el soporte iba en la dirección opuesta, se deslizó del proyector de diapositivas y cayó de la mesa al piso, mezclando todas las diapositivas. Se necesitaron 15 minutos para organizar las diapositivas en orden. No era el estudiante el culpable de esto, sino este elegante proyector de diapositivas. ¿Cómo puede un botón realizar dos funciones opuestas? Nadie pudo hacerlo bien la primera vez ".
El problema era que un botón realizaba dos funciones opuestas: una pulsación breve desplazaba la corredera hacia adelante, una larga, hacia atrás ".Continuamos la discusión sobre la configuración del reloj. Estos dispositivos están configurados de manera óptima desde su propia página web utilizando una computadora, tableta o teléfono inteligente.
No necesito un reloj despertador para relojes con GRI: en primer lugar, siempre hay teléfonos celulares con tales funciones y una interfaz mucho más conveniente. En segundo lugar, el reloj en el GRI no puede usar una fuente de energía autónoma ya que el consumo de energía típico (200 voltios * 7 mA = 1400 mW o 1.4 vatios) es bastante grande y va más allá de los límites razonables para las fuentes de corriente química. Por lo tanto, el reloj con el GRI será alimentado por la red y la función de alarma dependerá de la confiabilidad de la red.
Del razonamiento anterior, surge el siguiente sistema:
Reloj GRI con energía de la red, con la capacidad de tomar el tiempo exacto de Internet, con la configuración de su propia página web. No se requieren características adicionales.
Sin embargo, violé la rigurosidad de esta regla al agregar las siguientes características:
Un reloj puede mostrar la temperatura de la calle, la humedad y la presión atmosférica. Esta función satisface mi necesidad personal de conocer la temperatura exterior cuando llego al trabajo por la mañana. Me abrocho la camisa todos los días en el mismo lugar y cuando el reloj me encuentra allí, siempre muestran la temperatura exterior, la humedad y la presión del aire en milímetros de mercurio. La función resultó ser exitosa y muy solicitada tanto por mí como por los miembros de mi familia. Los datos sobre temperatura, presión y humedad de la calle se toman y almacenan automáticamente durante el tiempo entre parcelas de una fuente externa. Si se excede el tiempo de espera (los datos están desactualizados), el reloj muestra la fecha actual. En mi sistema doméstico, los datos sobre los parámetros del entorno externo llegan a intervalos de 10 minutos, el tiempo de espera "datos obsoletos" se establece en 30 minutos. Al diseñar el reloj, se asumió que el equipo externo podría tener una voz, por ejemplo, decir: "¡Reloj, clima!". Sin embargo, durante la creación de prototipos, resultó que este método no es confiable e inconveniente. Por lo tanto, en el futuro, el control por voz fue reemplazado por un método para determinar la presencia de una persona frente al reloj de acuerdo con el localizador láser de tiempo de vuelo. El reloj debe mostrar los datos del clima si se para frente a ellos durante aproximadamente un segundo.
El reloj mediante un comando externo a través de la interfaz HTTP puede mostrar los datos recibidos en este comando. El equipo transfiere los datos en sí y la hora en que se muestran en la pantalla. Fue concebido como una oportunidad para mostrar algo de la computadora por eventos, por ejemplo, sobrecalentamiento del procesador del servidor doméstico o algunos otros parámetros. La interfaz integrada le permite mostrar un código de siete dígitos desde el exterior, que incluye dos puntos. En la práctica, no se aplica en absoluto.
Los requisitos obligatorios también incluían el efecto de un cambio suave de números. Es este efecto, el único de todos, ¡realmente me gusta!
El brillo de los indicadores debe ajustarse a la luz ambiental, manteniendo el contraste de la imagen sin cambios.
El reloj debe mostrar seis dígitos y un valor auxiliar delante de los dígitos para indicar lo que se muestra actualmente.
Implementación de la solución de hardware concebida
Selección GRI
Para mostrar el tiempo y otros datos, se utilizaron cuatro GRI IN-12A, dos IN-12B y uno IN-15A.
IN-12B contiene los puntos que solía separar horas-minutos-segundos.
GRI IN-15A puede mostrar una serie de signos especiales "+", "-", "%", "P", etc., colocados al comienzo de la línea.
La distancia óptima entre los indicadores.
Para que el reloj se vea armonioso, debe asegurarse una cierta distancia entre los indicadores, como entre letras en una línea. El estudio de la pregunta proporcionó la siguiente información: la distancia óptima entre los números es de 4 mm, entre las palabras de 8 mm. La distancia óptima entre los números se garantiza con indicadores de ajuste ceñido en los paneles. Creo que esto no es una coincidencia, los ingenieros soviéticos pensaron con la cabeza durante el desarrollo y tomaron la distancia correcta.
Sincronización con servidores horarios
Considere formas de obtener automáticamente la hora exacta:
- Una solicitud por Internet a un servidor horario exacto.
- Glonass \ receptor GPS. Desafortunadamente, en algunos casos no funciona: por ejemplo, en mi apartamento en la parte inferior de la habitación, la señal de los satélites desaparece, la configuración fallida de los edificios circundantes me afecta, en el que el cielo despejado es visible solo directamente en la ventana.
- Red celular. En teoría, puede solicitar tiempo desde una estación celular sin registrarse (es decir, sin una tarjeta SIM). No lo he intentado. Teóricamente, la forma más universal que no requiere nada del usuario.
- Señales de tiempo precisas a largas longitudes de onda. Es difícil de aplicar, no hay soluciones portátiles listas para usar.
En mi opinión, la mejor manera es solicitar la hora exacta a través de Internet. Cabe señalar que las funciones integradas para almacenar la hora actual del ESP8266 resultaron ser bastante precisas: en un mes de desconexión accidental del punto de acceso a la red a través del cual las horas descritas se conectaron a Internet, la salida fue de menos de un minuto. Determiné esto por la coincidencia del reloj y la hora de la computadora. Después de que se restablezca la energía, el punto de acceso se sincroniza automáticamente.
La elección del procesador y circuitos de control GRI
Para controlar el reloj se requiere un procesador con la capacidad de acceder a Internet. De los disponibles, estos son tableros basados en ESP8266. El estudio del problema mostró que la placa es barata, generalizada, tiene un rico software listo para usar creado por entusiastas, puede programarse en el entorno Arduino.
La elección del sistema (microcircuito) del control
GRI es alimentado por un voltaje bastante alto de aproximadamente 200 voltios. De acuerdo con el pasaporte (ver Fig. 1), IN12 requiere al menos 170 voltios para la ocurrencia normal de una descarga incandescente a una corriente de hasta 2 mA. El sistema de control debe poder cambiar las corrientes de varios miliamperios y soportar voltajes en la región de 200 voltios. En la Unión Soviética, se produjeron microcircuitos K155ID1 (133ID1, etc.) (decodificador decimal binario de alto voltaje). Funcionaron perfectamente en modo estático, se requería un decodificador por lámpara. Ahora estos microcircuitos están disponibles en existencias antiguas e incluso son producidos en pequeños lotes por la planta de Minsk Integral. En principio, una buena opción para relojes en contra microcircuitos. Sin embargo, son difíciles de usar en un sistema de microprocesador debido al número limitado de salidas en microprocesadores. Entonces, el reloj ESP8266, tomado como base, solo tiene una docena de conclusiones, y algunas tienen ciertas limitaciones. Para 7 decodificadores, se requieren 28 salidas, o un registro intermedio, en el que los datos deben emitirse secuencialmente y luego salir en paralelo a K155ID1, lo que complica enormemente el circuito.
Fig 1. Pasaporte del indicador de descarga luminosa IN-12
Fig. 2. Pasaporte del indicador de descarga luminosa IN-15Cuando se usa 155ID1, el efecto de un cambio suave de números requiere una indicación dinámica. El hecho es que GRI es un dispositivo fuertemente no lineal y es muy difícil controlar su brillo de forma analógica cambiando el voltaje; es muy difícil debido a la alta pendiente de la característica de voltaje aplicado a la corriente. En la región de bajo brillo, la descarga de gas se vuelve inestable. Además, la iluminación externa afecta el encendido constante de la lámpara, con una disminución de la iluminación externa, tanto el voltaje de ruptura como el tiempo de encendido del indicador aumentan. Los fotones externos sirven como una especie de iniciadores de la descarga más ligeros. Por cierto, la alta inclinación de la dependencia de la corriente a través del dispositivo de descarga de gas del voltaje aplicado se utiliza para obtener un voltaje estable, de hecho, dicho dispositivo de descarga de gas es un estabilizador de voltaje. Por lo tanto, para controlar el brillo del GDI, se requiere el uso de un modo de potencia pulsada, en el que el brillo es proporcional a la corriente promedio a través del GDI, que a su vez es proporcional al ancho del pulso.
La indicación dinámica cuando se usa 155ID1 + GRI es bastante posible, pero tiene varias limitaciones. Por lo tanto, debido a la peculiaridad de los circuitos 155ID1 (elementos clave de voltaje relativamente bajo, solo 60 voltios), son posibles destellos de números vecinos y otros efectos indeseables. Estos efectos se luchan con una variedad de trucos, tanto de hardware como de software. Hay un gran tema en el sitio web RADIOKOT.RU (https://radiokot.ru/forum/viewtopic.php?f=3&t=3210) dedicado a NIXIE CLOCK, lo leí todo y saqué conclusiones por mí mismo: la indicación dinámica no es adecuada para mis propósitos .
Una búsqueda en Internet dio un excelente sustituto para 155ID1: este es el chip HV5622, que representa un registro de desplazamiento de 32 bits con salidas de alto voltaje. El diagrama de bloques se muestra en la figura 3.
Figura 3. Diagrama estructural de HV5622, Supertex inc. © ©HV5622 es capaz de conmutar voltajes de hasta 230 voltios, recibiendo datos a través de una interfaz en serie con una frecuencia de reloj de hasta 8 MHz. Los microcircuitos se pueden conectar en serie en una cadena. Para el control, solo se requieren 4 salidas del MK: datos, una señal de reloj, una señal de escritura en el registro de salida y una señal de habilitación. Lo único que causó algunas dudas fue alimentar la tensión. Según el manual, debe ser de al menos 8 voltios. Y me gustaría alimentar los chips desde 5 voltios, e incluso controlarlos con una señal lógica con un nivel de 3.3v. En Internet, encontré un par de ejemplos del uso de dichos microcircuitos y los alimentó a partir de 5 voltios. Por lo tanto, durante el desarrollo, por si acaso, brindé la oportunidad de instalar un convertidor de nivel lógico y una fuente de alimentación 5622 con un voltaje más alto, pero no instalé inmediatamente estos nodos. La práctica ha demostrado que todo funciona bien desde 5 voltios de todos modos.
Watch Nutrition
Para alimentar el reloj en el GRI, se requiere una fuente de alimentación con dos salidas: 5 voltios con una corriente en la región de medio amperio y 180-200 voltios con una corriente de aproximadamente 10 mA. Por defecto, los autores de esquemas para tales relojes resuelven el problema de energía de la siguiente manera: usan una fuente de alimentación de conmutación externa de 220 -> 12 voltios, de los cuales 5 voltios se hacen dentro del reloj, y el segundo convertidor de pulsos obtiene 180 voltios para la fuente de alimentación de la entrada de 12 voltios. Es decir de hecho, se utilizan 2 convertidores de pulso en el circuito de suministro de energía general, el primero de los cuales es 220-12, y el segundo 12-180. En mi opinión, es ineficiente. Por lo tanto, elegí una forma muy tradicional de usar el transformador toroidal listo para usar TorAN15. La apariencia de este transformador se muestra en la figura 4.
Figura 4. Transformador TorAN15Compré este transformador en el sitio web ISTOK2.COM. El transformador tiene dos devanados secundarios: uno a 170 voltios, el segundo a 6.3 voltios. Esto hizo posible sobrevivir con el circuito de fuente de alimentación más simple. La fuente de alta potencia GRI se rectifica mediante un puente de diodos y se filtra en condensadores. Estas partes se utilizan de un protector de lámpara fluorescente innecesario. La fuente de alimentación baja para microcircuitos también se rectifica mediante un puente de diodos, se filtra en un condensador electrolítico y se estabiliza en un estabilizador integral 7805. La eficiencia de dicho circuito es mucho mayor que la de un sistema con dos conversiones, la confiabilidad del sistema es mucho mayor. Además de la ausencia total de interferencia de alta frecuencia. La desventaja no está de moda y el transformador es pesado. Pero la gravedad del transformador en este caso es más bien una ventaja: quería que el reloj fuera brutalmente masivo.
Entonces, el esquema del reloj está definido: es un módulo listo para usar basado en ESP12E, tres microcircuitos HV5622, un sensor de luz basado en MAX44009 y una fuente de alimentación tradicional (incluso diría conservadora). Posteriormente, se agregó un nodo para determinar una persona frente al reloj basado en el módulo láser del telémetro de tiempo de vuelo VL53L0X. El diagrama esquemático del reloj se muestra en la figura 5.
Figura 5. Reloj Dronsky Nixie. Diagrama esquemáticoDividí el cambio de pines de la siguiente manera: las tres primeras lámparas, la primera HV5622, las segundas tres lámparas, la segunda HV5622, la HV5622 restante controla la lámpara con caracteres especiales y puntos en dos IN12B.
En la etapa de diseño, no estaba claro si el canal SPI tendría suficiente velocidad para generar datos para un cambio suave de dígitos. El hecho de que una vez por segundo emitir 96 bits no es difícil para el ESP12E estaba fuera de toda duda. ¿Pero hay suficiente velocidad para producir efectos? Según los cálculos debería ser suficiente con un margen. Pero como saben, fue suave en papel ...
Por lo tanto, al principio se planeó generar datos en tres etapas, por separado para cada chip. Una prueba práctica mostró que el canal SPI tiene suficiente velocidad con un gran margen para los efectos, incluso con una frecuencia de reloj de 4 MHz. Incluso la capacidad de duplicar la velocidad no fue reclamada. Como resultado, todos los microcircuitos están conectados en una cadena y la salida de 96 bits se realiza con un comando. Según los cálculos, el tiempo de salida de 96 bits debe ser de 24 μs. La Figura 6 muestra un registro de un analizador lógico que genera siete caracteres en el GRI. El tiempo de salida total, teniendo en cuenta la generación de la señal LE, es inferior a 30 μS.
Figura 6. Salida del analizador lógico Canal de salida de 96 bits HSPI con una frecuencia de reloj de 4 MHzLos pines CLOCK de todos los chips se combinan. El terminal DI (entrada de datos) del segundo y tercer microcircuito está conectado a los terminales DO (salida de datos) del primer y segundo microcircuito, respectivamente. Los pines LE (activación de enganche) se combinan, reciben un pulso que transfiere datos del cambio al registro de salida. Hasta que se transfiera la lámpara, se emite lo que está almacenado en el registro de salida. Los pines BLOCK se combinan, se conectan a tierra a través de una resistencia de 1k, para mantener apagadas las etapas de salida del HV5622 hasta que el programa comience en el MK. El manual recomienda aplicar energía, realizar la primera salida de datos y luego encender las etapas de salida.
Control de brillo
Para controlar el brillo del GRI con el fin de mantener un contraste óptimo constante de los indicadores, se utiliza la salida BLOCK, a la que se suministra una señal PWM de 2500 Hz. Se utilizó una frecuencia suficientemente alta de la señal de control PWM, lo que garantizó la ausencia de efectos estroboscópicos, etc. De conformidad con las normas (Normas y Reglamentos de Construcción (Normas y Normas de Construcción) 23 - 05 - 2010 (versión actualizada de SNiP 23 - 05 - 95) y Normas Sanitarias y Normas de Normas y Reglamentos Sanitarios 2.21 /2.1.1.1278-03) se cree que una persona no percibe la frecuencia de pulsaciones de iluminación por encima de 300 Hz. En este caso, un exceso de la frecuencia PWM en casi un orden proporciona el nivel adecuado de comodidad visual.
El efecto de un cambio suave de números
Para obtener el efecto visual de un cambio suave de dígitos, es necesario encender los dígitos antiguos y nuevos alternativamente durante el tiempo de cambiar un dígito a otro (generalmente 200-250 ms), y el tiempo de grabación del antiguo dígito debería disminuir, y el nuevo debería aumentar. El algoritmo para cambiar dígitos (cambio de subrutina ()) realiza 60 ciclos.
Al iniciar el algoritmo de cambio de dígitos, el primer dígito se incluye el 100% del tiempo del ciclo y el segundo 0%. A medida que pasan los ciclos, el tiempo de activación del primer dígito disminuye del 100% al 0%, y el tiempo de activación del segundo dígito aumenta del 0% al 100%). Por lo tanto, el algoritmo para cambiar suavemente los dígitos en más de 200 ms y 60 ciclos reduce el brillo del primer dígito a apagado y el segundo a brillo completo.El resto del tiempo del segundo intervalo, los números se encienden de forma continua y estática, su brillo general se reduce al controlar la indicación general de encendido / apagado de la señal PWM en los terminales BL.La Figura 7 muestra las señales registradas por el analizador lógico al cambiar los números. Se puede ver que al comienzo de la subrutina de turno, el número antiguo se enciende durante el tiempo máximo, y el nuevo es el mínimo, y durante el turno (aproximadamente 250 ms) el tiempo de grabación del número antiguo disminuye a 0, y el nuevo crece al máximo. Visualmente, esto se manifiesta como una disminución suave en el brillo de la vieja figura con la "descongelación" simultánea de la nueva.
Fig. 7. Grabación de señales de control durante un cambio suave de dígitosAquí se proporciona una grabación de video del efecto.y aquiy aqui:
Sincronización con servidores horarios
Después de estudiar el tema en Internet, llegué a la conclusión de que básicamente los autores de los programas mismos escriben (o usan rutinas de terceros) para el protocolo NTP. Esto me sorprendió un poco, porque el SDK de Espressif menciona funciones integradas para trabajar en tiempo real. La funcionalidad incorporada proporciona una solicitud de servidores de tiempo (hasta tres), corrección de tiempo (de acuerdo con mis observaciones, una solicitud a un servidor de tiempo se lleva a cabo cada 4-6 horas), conversión de un valor en forma de tiempo Unix a una forma legible para humanos, corrección de acuerdo con un tiempo determinado. zonaDe las características del uso de la función de tiempo real incorporada: para la primera y varias solicitudes de tiempo subsiguientes, se devuelve cero y se emite el diagnóstico "ejecutar rtc primero" Cómo hacerlo: no lo encontré y, por lo tanto, solo esperé (un par de segundos) hasta que aparezca un tiempo distinto de cero.Algoritmo de lanzamiento de reloj
Cuando se enciende el reloj, el sistema se enciende en modo cliente y se intenta conectarse al punto de acceso con los detalles almacenados.ESP8266 recuerda estos detalles después de una conexión previa exitosa por sí sola en la memoria de servicio. Esta es una característica implementada en el SDK. Si esta conexión no tiene éxito, se realiza el siguiente intento, pero el nombre y la contraseña del punto de acceso se leen desde la EEPROM. La EEPROM también almacena la zona horaria (un número en el rango -12 - +12), que luego se utiliza para convertir correctamente la hora a un formato local.Si esta conexión tampoco funciona, el modo de funcionamiento cambia al "punto de acceso" y la página web del reloj estará disponible en la dirección estándar 192.168.4.1 para cualquier dispositivo conectado a este punto de acceso. En mi caso, el nombre del punto de acceso es ESP_D. Desde un teléfono inteligente, tableta o computadora portátil, vaya a la página del dispositivo, seleccione un punto de acceso e ingrese una contraseña. Mientras el modo de punto de acceso está activado, el modo de cliente está desactivado. Esto se debe a las peculiaridades del comportamiento del sistema en una situación donde la conexión al punto de acceso falló. El sistema repetirá constantemente los intentos de unirse, estará ocupado solo con esto y prácticamente no quedarán recursos para nada más. Exteriormente, esto se manifestará como una inhibición desagradable de la interfaz. La apariencia de la página se muestra en la Fig. 8.
Fig. 8. Aspecto de la interfaz del reloj WEB y la línea de comando, que muestra la respuesta al comando ping.En esta página se muestran todos los puntos de acceso encontrados. Los puntos de acceso están ordenados por la intensidad de la señal, la línea superior es el punto de acceso con la señal más fuerte y muy probablemente la más cercana (es decir, la que debe unirse). Debe ingresar una contraseña, seleccionar una zona horaria y hacer clic en Aceptar. El sistema activará el modo "cliente" (simultáneamente con el "punto de acceso") e intentará unirse. Si la conexión es exitosa, los parámetros se almacenarán en la EEPROM. Si la conexión falla, aparece un mensaje en la página y puede intentar nuevamente ingresar la contraseña, etc.Después de una entrada exitosa en la red, el modo de punto de acceso se desactivará y solo permanecerá el modo de cliente, es decir, Solo se puede acceder a la página de visualización desde la red interna.Para poder acceder al reloj por su nombre (en mi caso "esp"), se inicia la biblioteca NBNS, que proporciona una respuesta a través del protocolo NetBios. La biblioteca permite que el reloj responda a comandos como ping esp y acceda a ellos simplemente por el nombre espPor razones que no me quedan claras, esta es una biblioteca maravillosa que responde a una solicitud de transmisión como "¿en qué dirección se encuentra el" nombre "? y que le permite olvidarse del triste procedimiento de determinar la dirección IP del dispositivo de acuerdo con los datos internos del enrutador (conmutador), se usa muy raramente. Casi todos los dispositivos en el ESP8266 descritos en Internet no utilizan este mecanismo simple y conveniente. La pereza debería mover el progreso, pero en este caso no se mueve.A continuación, comienza el ciclo principal del programa, en el que ocurre lo siguiente:- Se interroga la hora actual y cuando pasan los segundos, comienza un cambio en la visualización de la hora.
- Se sondea el sensor de luz y se ajusta el ciclo de trabajo de la señal PWM, que controla el brillo del reloj. El propósito del ajuste es mantener el contraste constante de los números al cambiar la iluminación de la habitación.
- VL53L0X. , 2 .
Los experimentos han demostrado que 2 metros están en condiciones ideales cuando se utiliza como reflector una hoja de papel blanco o papel de aluminio con un coeficiente de reflexión cercano a la unidad. Para objetos ordinarios con un coeficiente de reflexión imperfecto (tejido, piel humana, etc.), la distancia de determinación segura es ligeramente superior a 1 metro. Si el sensor indica la presencia de un objeto frente al reloj, una subrutina comienza a mostrar la temperatura exterior actual, la humedad y la presión del aire. Se tomaron medidas para aumentar un poco la inmunidad al ruido: se utiliza el algoritmo más simple "más del 50% de las operaciones". Esto significa que durante un intervalo de 800 ms, el objetivo debe detectarse a una distancia de menos de 1 metro en más de la mitad de las mediciones de rango. Al depurar, el sistema mostró que generalmente se obtienen 50-60 operaciones cuando el objetivo está en el campo de visión del sensor.El sistema de detección humana solo funciona cuando el objetivo aparece en el campo de visión. Para comenzar el programa nuevamente, debe retroceder e ir nuevamente. Esto se hace para eliminar la situación de que, mientras está parado frente al reloj, se muestran todos los parámetros externos.El sensor láser VL53L0X utiliza un diodo láser IR que emite a una longitud de onda de 940 nm, seguro para los ojos.El video muestra la reacción del sistema ante la aparición de un obstáculo en el campo de visión del localizador láser:El plan inicial para activar la visualización de datos externos era usar un chip de reconocimiento de voz. Para hacer esto, utilicé el chip WTK6900B02 (reconocedor de comandos de voz), amablemente proporcionado por Sound Technologies. Según la descripción, el microcircuito debe reconocer una docena de comandos de audio y emitir un código binario correspondiente al comando recibido. Se conectó un pulso del microcircuito a una de las salidas del ESP8266 y se le adjuntó un controlador de interrupción de hardware. Por interrupción de hardware, se registra el hecho del reconocimiento de un comando de voz. Varios comandos en inglés fueron pregrabados en el chip que recibí. Me entrené mucho en la "pronunciación correcta" de los comandos, para que sean reconocidos. Resultó que uno debería hablar no con la pronunciación de Oxford, sino con acento chino :)), en voz muy alta.A pesar del considerable tiempo invertido, no pude lograr un reconocimiento confiable de los comandos de voz. Lo mejor que obtuve fue un 50% de reconocimiento correcto. Por lo tanto, me vi obligado a usar otro mecanismo para activar la visualización de datos externos: el medidor de distancia láser VL53L0X.El programa principal del reloj dejó rastros del uso del sistema de control por voz.El programa también tiene partes para leer datos de su sensor ultravioleta VEML6070. El hecho es que depuré el programa del reloj alternativamente en casa y en el trabajo, y solo tenía un sensor MAX44009. Por lo tanto, en el trabajo, el sensor ultravioleta VEML6070 se conectó al ESP8266 y se escribió una parte del programa que determina cuál de los sensores está conectado actualmente. Para resolver el algoritmo de ajuste de contraste, esto resultó ser suficiente, y no cambié nada en la versión final del programa.Salida de datos a registros HV5622
Como mencioné anteriormente, para controlar las lámparas de descarga de gas, se requieren microcircuitos capaces de conmutar un voltaje bastante alto. Elegí los chips HV5622, que son un registro de 32 bits con escritura secuencial y lectura paralela. Los cátodos de las lámparas están conectados a su terminal HV5622. Para encender un dígito específico, es necesario emitir 0. A los dos primeros HV5622 están conectados los cátodos de seis GRI, al tercer HV5622 están los separadores de puntos de horas-minutos y minutos-segundos y los cátodos de la séptima lámpara con caracteres especiales. Para habilitar los dígitos requeridos en las lámparas, debe mostrarse un número de 32 bits en el registro, en el que el registro 1 (los datos dentro del HV5622 están invertidos) corresponden a los cátodos necesarios de las lámparas. El programa tiene matrices de dimensiones 10 variables de 32 bits.Cada elemento de dicha matriz contiene un número binario con log 1 en una de las posiciones, cuya salida al registro conducirá al encendido del dígito deseado. Como cada microcircuito controla varias GDI, para la salida es necesario formar una variable de 32 bits a partir de varios elementos, que consiste principalmente en 0 lógico, donde log 1 corresponde a los dígitos necesarios en cada lámpara.Vale la pena mencionar que la decisión de usar matrices para controlar los cátodos GRI tiene una gran ventaja: si se cometió un error y las conclusiones del GRI se mezclaron al soldar cables de los enchufes GRI a los enchufes HV5622, luego para arreglarlo, simplemente cambie la constante en el programa sin soldar nada. El número significativo y la disposición ajustada de los cables HV5622 hacen que la soldadura de dos cables adyacentes sea una operación difícil.Para completar los tres registros, es necesario generar 3 variables de 32 bits (96 bits en total). No es razonable hacer esto con un "apalancamiento": demasiado largo y lento.Afortunadamente, el ESP8266 incorpora un mecanismo de hardware (HSPI) para la comunicación en serie, y el SDK tiene funciones de acceso a este mecanismo. Con el lanzamiento de este mecanismo, tuve que sufrir. La dificultad era que no estaba claro dónde colocar las variables de 32 bits para la salida en modo HSPI. Para comprender el mecanismo HSPI, utilicé un analizador lógico. Después de una serie de experimentos, me di cuenta de que se emiten 96 bits, sin embargo, este es el número deseado de 32 bits al principio y dos números de 32 bits que contienen basura arbitraria. La búsqueda en Internet no dio nada, pero en ese momento me di cuenta de que si hay una instrucción como WRITE_PERI_REG (SPI_W0 (HSPI), d0); entonces puede intentar escribir WRITE_PERI_REG (SPI_W1 (HSPI), d1); y además WRITE_PERI_REG (SPI_W2 (HSPI), d2); donde d0, d1, d2 son variables de 32 bits. Es decir
primero debe descomponer los datos en registros SPI_W0 - SPI_W2, y luego emitir un comando para iniciar el intercambio. También noto que el módulo HSPI puede generar hasta 512 bits y solo hay 16 de estos registros: W0 - W15.La señal LE, mediante la cual los datos se transfieren al registro de salida HV5622, se genera mediante programación.Depuración del sistema
No me atreví a depurar el sistema inmediatamente con un alto voltaje completo (230 voltios) e hice una docena de LED con un indicador de depuración con un voltaje de funcionamiento de 5 voltios. Después de la depuración, cuando estaba seguro de que los LED correctos se encendieron correctamente, el GRI se montó en los paneles y se aplicó uno alto. Como resultado de tal secuencia de depuración, no se dañó ni un solo chip ni una sola lámpara indicadora :). En la Figura 9 se muestra una fotografía del nodo utilizado para la depuración.
Figura 9. Foto del conjunto de LED de depuración.Un breve proceso de depuración de video aquíVivienda
La idea original era hacer una caja brutal hecha de metal grueso como cobre, latón o bronce. Sin embargo, dado que la conexión Wi-Fi requiere una carcasa dieléctrica, en la versión final solo queda el panel frontal de metal grueso. Una búsqueda rápida en Internet de empresas que realizan recintos a medida arrojó una cifra de alrededor de 5000 r por recinto. En mi opinión, esta es una cantidad irrazonable en las circunstancias actuales. Así que recogí el edificio terminado (Gainta G2119C), lo compré camino a la cabaña en la tienda Shcherbinsky Chip-i-Deep y me decidí por eso, dejando la cuestión del panel frontal y posiblemente otro edificio para más tarde.
A pesar de la falla en la parte de la caja del reloj, decidí declarar los resultados obtenidos en el artículo, creyendo que las soluciones de software y circuitos desarrollados y aplicados serían de interés para el público.
La apariencia del caso hoy se presenta en la figura 10.

Figura 10. Aspecto de la caja del relojConclusión
El reloj ha estado funcionando durante más de un año, no ha habido fallas, las tareas se han completado. Volveré a enumerar las características distintivas de mi variante de reloj:
- Modo de visualización estático con el efecto simultáneo de un cambio suave de números.
- Uso de chips HV5622 para controlar GRI
- Los datos HV5622 se escriben usando el motor de hardware HSPI
- La hora exacta se toma de los servidores de hora exactos de Internet.
- El acceso al reloj es posible por nombre desde la red interna
- La configuración se requiere una vez al primer inicio.
- La ausencia total de botones, alarmas, etc.
- Ajuste continuo del brillo del brillo del GRI para mantener un contraste de imagen constante en los límites dados del cambio en la luz ambiental
- El reloj reacciona al acercamiento de una persona y muestra la temperatura de la calle, la humedad y la presión del aire.
Estoy satisfecho :)
→ El archivo con el programa se encuentra
aquí