Evaluando propuestas

Programa Esp32 contador con Hall sensor Ky-003

Publicado el 04 Agosto, 2024 en Programación y Tecnología

Sobre este proyecto

Abierto

Necesito un programa para un ESP32 con pantalla tft (ESP32-2432S028).

Tengo hecho un ejemplo simple usando éstas librerias:
#include <TFT_eSPI.h>
#include <XPT2046_Touchscreen.h>
#include <SPI.h>
#include <Preferences.h>

Y estos pines son para el sensor ( KY-003 ) y la pantalla táctil:
// Pines
#define HALL_SENSOR_PIN 22
#define TOUCH_CS 33
#define TOUCH_IRQ 36
Hay que añadir un debounce al sensor hall KY-003 y lógica de histéresis (Variable counted: Introduce una variable counted que indica si se ha contado una interrupción. Esto asegura que solo se cuente una vez mientras el imán está en el rango del sensor.
Lógica de Histeresis: Dentro de la función onHallSensor, se actualiza counted a true después de contar un pulso. Esto evita que se cuenten múltiples pulsos hasta que el sensor vuelva a su estado original.)

Necesitaré un define para CM_PER_REVOLUTION (Empezaremos por 10 como ejemplo)

Y éstos son los datos de la pantalla para el tácil

    p.x = map(p.x, 200, 3800, 0, tft.width());
    p.y = map(p.y, 300, 3900, 0, tft.height());

También quiero un Define para poner la cantidad de bobinas y otro para añadir el nombre a esas bobinas

define 3 bobinas
define nombres: as120, am260, ns180 por ejemplo

ahora que tenemos las bases, te explico las diferentes partes del programa y usando paréntesis explicaciones extra.

La base del programa será el apartado: "COUNT"

Será una pantalla donde saldrá lo siguiente:

Bobina NOMBRE1 (Arriba izquierda en letra mediana) duston filters (arriba a la derecha con letra mediana)

en letra grande: d: xx m (simbolizará la distancia recorrida en metros, donde x es el número,  se actualizará por cada vuelta que detecte el hall sensor usando cm_per_revolution y el texto estará centrado en el espacio disponible en la pantalla, ésta información se guardará en la memoria para  cada bobina para evitar que vuelva a 0 en cada reinicio )

a la derecha de la distancia recorrida dos botones en dos tonalidades de gris, uno con una flecha arriba y otro con la flecha abajo. (El de la flecha arriba sumará 1m por cada toque y el de la flecha abajo restará 1m por cada toque. Esto sólo ocurrirá en la bobina actual)

Abajo a la izquierda en rojo un botón que ponga RESET (Al pulsarlo, cambiará a color blanco y si se mantiene pulsado durante 2 segundos, pondrá el contador de distancia a cero para la bobina en la que está) y  a la derecha un botón MENU (Para acceder al menú)

“MENU”

Será una pantalla con lo siguiente:

Duston filters (Arriba, en letra mediana, centrado)

BOBINA AS160 (Un botón, ejemplo de nombre, aquí saldrá el nombre en grande, al pulsar en el botón nos llevará a la pantalla COUNT de la bobina que muestra, se actualizará usando los botones de arriba y abajo que explico a continuación )

Y dos botones:  Una flecha arriba y una flecha abajo (Que servirán para cambiar de bobina, cambiando el BOBINA AS160 a la siguiente bobina según pulses arriba o abajo)

“ECOUNT”
Muy similar a COUNT, pero con alguna particularidad. La bobina de ECOUNT siempre se llamará “contador” y tendrá abajo (Entre el botón de reset y el de menú un botón verde con el símbolo +, el botón + llevará al menú para seleccionar otra bobina, al pulsarla, cogerá la distancia que tiene la bobina contador, la sumará a la bobina seleccionada, hará reset a la bobina contador y te dejará en la pantalla COUNT de la bobina seleccionada, asegurándose de actualizar la pantalla para mostrar la nueva distancia correctamente)



A parte de lo explicado, hay otra funcionalidad a  añadir:

Cuando el dispositivo se enciende, muestra siempre MENU. Si el sensor hall detecta una revolución y seguimos en el menu, pasaremos automáticamente a ecount.

Contexto general del proyecto

https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/tree/main/DisplayConfig/CYD2USB Puedo proporcionar un código de ejemplo para que se entienda mejor la idea, y un vídeo con una versión muy temprana de la idea.

Categoría Programación y Tecnología
Subcategoría Otros
Tamaño del proyecto Pequeño
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo las especificaciones
Disponibilidad requerida Según se necesite
Integraciones de API Otros (Otras APIs)

Plazo de Entrega: No definido

Habilidades necesarias