Regenmesser Basisversion - Teil 1 - AZ-Delivery

Esta publicación también es como documento pdf disponible.

 

Si bien hay toda una gama de sensores disponibles para registrar la temperatura, la humedad, la presión del aire, la iluminancia... tenemos que profundizar en la caja de herramientas para construir un sensor de precipitación. Se trata simplemente de registrar cantidades relativamente pequeñas de líquidos, que no representan un flujo continuo sino que, en el sentido estricto de la palabra, se presentan en forma de gotas. Es necesario recoger estas gotas. Cuando el orinal se llena de gotitas, se debe vaciar automáticamente y se debe registrar este proceso. Copié el principio de dispositivos comerciales en Internet. Un balancín con dos cubetas está montado de manera que se puede girar e inclinar fácilmente cuando se alcanza un determinado nivel de llenado. Este proceso de vuelco debe ser registrado ahora mediante sensores adecuados. Descubrirás cómo te fue en detalle, incluidos los giros equivocados, en los próximos episodios de la serie.

 

MicroPython en ESP32 y ESP8266

 

hoy [1] 

 

El ESP32 como pluviómetro – Parte 1

En el episodio de hoy nos ocuparemos de la mecánica del proyecto, veremos cómo funcionan los contactos Reed y crearemos un pequeño programa de prueba inicial que ampliaremos en los próximos dos episodios. Para hacer esto, utilizamos la bolsa de trucos de MicroPython. Aprenderá sobre las interrupciones, el rebote de contactos y cómo desactivarlo mediante programación. Finalmente transferiremos los archivos con los valores medidos al PC vía FTP, mediante tecnología threading.

 

mecánica

el balancín

El sensor para medir la cantidad de lluvia es un balancín con dos bandejas.

 

Figura 1: Parte base del aparato

Aquí el balancín ya está instalado en la parte inferior del tubo de medición. Utilicé una cubierta de una tubería de alcantarillado de PVC de calibre 100. Se cortaron dos aberturas para que el agua pueda escurrirse.

 

Figura 2: Patrón de balancín de lluvia

La Figura 2 muestra el patrón de la mecedora, que fue hecha de plexiglás de 2 mm. La plantilla 1:1 en forma de archivo pdf, se puede descargar. Para el pegado utilicé adhesivo PLEXIGLAS® “Acrifix 192”. Rellena huecos y se endurece bajo la luz ultravioleta o simplemente con la luz del día. Pegué las partes de la plantilla al vidrio acrílico con una barra de pegamento soluble en agua. Después de serrar y taladrar, puedes volver a quitar el papel. No olvides limpiar las zonas a pegar con acetona o isopropanol.

 

La posición del orificio de 1,5 mm para el eje hecho de alambre de cobre de 1,4 mm (el eje no debe oxidarse, así que no use hierro) determina la facilidad con la que se inclina el balancín. Esto aumenta cuanto más alto está el agujero sobre el suelo. Utilizo el orificio superior y obtengo una capacidad de aprox. 2,4 cm³ hasta que la tecla se vuelque. Más adelante veremos a qué cantidad de lluvia equivale esto según el área.

 

¿Qué puedes hacer mal? La resolución de la medición del volumen es mejor si el balancín es lo más ligero posible. Por lo tanto, conviene utilizar el material más fino posible y la menor cantidad de pegamento posible. Mi primer intento de hacer la mecedora con hojalata o lámina de cobre fue un fracaso total. El volumen de las cubetas no era suficiente para hacer que el balancín se volcara porque la construcción era demasiado pesada.

 

La suspensión de la mecedora también es de cristal acrílico. Los paneles laterales se atornillan a la placa base de 6 mm de espesor para poder desmontarlo. Las dimensiones se pueden encontrar en la Figura 3.

 

Figura 3: Soporte basculante

 

Para evitar que la mecedora roce las paredes laterales, coloqué pequeños discos de plexiglás entre ellas.

 

Figura 4: Mecedora desde el lateral

 

Figura 5: Balancín, vista desde el noreste

 

Para que la precipitación caiga específicamente en las bandejas, debe recogerse en un área de tamaño conocido y guiarse a través de un embudo hasta justo encima del balancín. Por supuesto, sólo se puede llenar una de las dos mitades a la vez. Hay tres cosas a considerar.

 

       Las bañeras tienen que ser lo suficientemente anchas para que nada salga mal.

       El borde superior de la partición debe estar lo suficientemente alejado de la línea de caída de las gotas de agua.

       Y, como los embudos grandes suelen tener tubos de salida más gruesos, tuve que usar la boquilla de un cartucho de silicona para crear una salida más delgada. La boquilla simplemente se pegó al embudo con silicona.

 

Un tubo de aguas residuales de 100 mm que soporta el embudo se cortó a la medida necesaria para poder colocar el embudo en la posición correcta. La figura 5 muestra los tres componentes de la mecánica.

 

Figura 6: Las partes mecánicas del pluviómetro.

 

Así es como se ve el dispositivo terminado. La abertura en el tubo permite controlar la alineación precisa del embudo. Si es necesario, la pieza cortada se puede equipar con bisagras y utilizar como puerta.

 

Figura 7: Estación de medición montada

 

Registrar movimiento de inclinación

Pasemos a la determinación del movimiento de inclinación. Las mediciones con una pipeta han demostrado que el balancín se inclina hacia la derecha y hacia la izquierda con cantidades de llenado ligeramente diferentes, 2,4 cm³ y 2,5 cm³. Esta circunstancia aparentemente se debió a una aplicación desigual del adhesivo u otras asimetrías. Por tanto, ambas posiciones finales estables tenían que ser detectables. Inicialmente planeé usar un acelerómetro MPU6050 en forma de módulo GY 521. Sin embargo, los cuatro cables necesarios interferían tanto en la inclinación de la mecedora que tuve que abstenerme de hacerlo. Las barreras de luz reflectantes eran demasiado voluminosas para mí y terminé usando contactos de láminas.

 

Se trata de pequeños interruptores operados magnéticamente en un tubo de vidrio que mide 2 mm x 13 mm. Lo común en estas cosas son los cables de conexión rígidos. Maté a cuatro de los contactos, porque si lo doblas demasiado cerca del vidrio, inmediatamente se romperá y matará el componente..

 

Figura 8: Contacto Reed

 

Finalmente conseguimos fijar dos de los objetos a una pared lateral del soporte utilizando masilla de dos componentes. Parece salvaje, pero funciona bien. Lo mejor es fijar el cable de la misma forma.

 

Figura 9: Ubicación de contactos e imán

 

Se pega un pequeño disco magnético de neodimio al balancín (Acrifix) y los contactos se alinean según esta posición. La Figura 10 ilustra cómo funcionan los contactos Reed y explica por qué este tipo de imán no debe ubicarse exactamente delante del contacto.

 

Figura 10: Cómo funciona un contacto de láminas

 

Fuera de los campos magnéticos (1), el contacto está abierto. Los resortes de contacto están hechos de un material ferromagnético, probablemente hierro o una aleación correspondiente. Los polos de un disco magnético se asientan sobre las superficies cortadas. Si se acerca al contacto Reed, el alambre de hierro (abajo) se convierte debido a la influencia magnética en un imán (polo sur) y atrae el segundo resorte de contacto. El contacto se cierra (2).

 

Si se deslizara el disco magnético centralmente debajo del contacto, en los resortes se influirían polos similares. Debido a que se repelen, el contacto no puede cerrarse (3).

 

Se pueden colocar pequeñas barras magnéticas directamente paralelas al contacto. Debido a la influencia de diferentes polos en los resortes de contacto, el contacto se cierra (4).

 

 

Hardware

Para ambas familias de controladores, ESP32 y ESP8266, primero hay que pensar en los pines GPIO que se pueden utilizar. Algunos de ellos están integrados en el proceso de arranque y, por tanto, no se pueden utilizar sin restricciones. Además de tres entradas IRQ, una entrada de botón y una salida de LED, también necesitamos los buses I2C y SPI, que por sí solos ocupan 6 pines. Las tablas proporcionan información sobre el uso de los pines. En el ESP8266, además de las líneas de bus, sólo quedan 3 pines GPIO, de los cuales D0 = GPIO16 no es compatible con IRQ. Por tanto, los “pequeños” quedan excluidos de nuestro proyecto.

 

Pero también hay un problema con el ESP32. El pin 12 no debe estar en ALTO al iniciar; de lo contrario, el controlador no iniciará. Desafortunadamente, esta conexión es la línea MISO del bus SPI1 y el esclavo la lleva a 3,3 V. Por lo tanto, SPI1 es tabú. Entonces use SPI2 o Soft-SPI. Llegaremos a eso en la próxima publicación.

 

Pasemos a las piezas necesarias para el proyecto. La tabla enumera todos los componentes que se necesitan a lo largo de todo el proyecto. En este primer episodio, los resaltados en gris no se utilizan al principio.

 

1

ESP32 Dev Kit C sin soldar o

ESP32 Dev Kit C V4 sin soldar o

Placa de desarrollo WiFi WLAN del módulo ESP32 NodeMCU con CP2102 o

Kit NodeMCU-ESP-32S o

ESP32 Lolin Kit de desarrollo Bluetooth WiFi LOLIN32

1

10x interruptor de láminas N/A interruptor magnético 2*14mm

1

Reloj en tiempo real RTC DS3231 I2C reloj en tiempo real

1

Lector SPI Micro Memoria Tarjeta SD TF Módulo de protección de tarjeta de memoria

1

Tarjeta SD por ejemplo 8GB

1

Sensor de humedad y temperatura GY-21 HTU21

1

Placa de pruebas MB-102 con 830 contactos 3 piezas

1

Pantalla OLED SSD1306 de 0,96 pulgadas I2C 128 x 64 píxeles

1

CONDUJO

1

Resistencia 220Ω

2

Resistencia 10kΩ

1

Módulo de botones KY-004 o

Juego de botones de microinterruptor - 180 piezas, varios tamaños, botones versátiles para electrónica

opcional

Analizador lógico

Tabla 3: Componentes

 

De los 10 contactos de láminas del juego, se necesitan 2 (o como yo, seis).

 

El diagrama de circuito de la Figura 11 muestra cómo están conectadas las piezas.

 

Figura 11: Circuito pluviómetro

 

El software

Para flashear y programar el ESP32:

thony o

µPyCraft

 

 

Firmware utilizado para un ESP32:

Descarga del firmware de Micropython

 v1.19.1 (2022-06-18).bin

 

 

Los programas MicroPython para el proyecto:

tiempo de espera.py Temporizador de software sin bloqueo

oled.py API OLED

ssd1306.py controlador OLED

cuchillo de lluvia.py Programa de demostración

 

MicroPython - lenguaje - módulos y programas

Para instalar Thonny puedes encontrar uno aquí instrucciones detalladas (versión en inglés). También hay una descripción de cómo hacer esto. firmware de micropython (a partir del 18 de junio de 2022) en el chip ESP quemado se convierte.

 

MicroPython es un lenguaje intérprete. La principal diferencia con el IDE de Arduino, donde siempre y exclusivamente actualiza programas completos, es que solo necesita actualizar el firmware MicroPython una vez al principio en el ESP32 para que el controlador comprenda las instrucciones de MicroPython. Puedes usar Thonny, µPyCraft o esptool.py para hacer esto. Tengo el proceso para Thonny. aquí descrito.

 

Una vez que se actualiza el firmware, puede tener una conversación informal con su controlador, probar comandos individuales y ver inmediatamente la respuesta sin tener que compilar y transferir primero un programa completo. Eso es exactamente lo que me molesta del IDE de Arduino. Ahorrará mucho tiempo si puede realizar pruebas sencillas de sintaxis y hardware, hasta probar y refinar funciones y partes completas del programa a través de la línea de comandos antes de crear un programa a partir de él. Para ello siempre me gusta crear pequeños programas de prueba. Como una especie de macro, combinan comandos recurrentes. A veces se desarrollan aplicaciones enteras a partir de dichos fragmentos de programa.

 

Inicio automático

Si desea que el programa se inicie de forma autónoma cuando se enciende el controlador, copie el texto del programa en un archivo en blanco recién creado. Guarde este archivo como main.py en el espacio de trabajo y cárguelo en el chip ESP. La próxima vez que reinicie o encienda, el programa se iniciará automáticamente.

 

Programas de prueba

Los programas se inician manualmente desde la ventana del editor actual en Thonny IDE usando la tecla F5. Esto es más rápido que hacer clic en el botón de inicio o usar el menú. correr. Solo los módulos utilizados en el programa deben estar en la memoria flash del ESP32.

¿Arduino IDE otra vez en el medio?

Si más adelante desea volver a utilizar el controlador junto con el IDE de Arduino, simplemente actualice el programa de la forma habitual. Sin embargo, el ESP32/ESP8266 olvidó que alguna vez hablaba MicroPython. Por el contrario, cualquier chip Espressif que contenga un programa compilado del IDE de Arduino o del firmware AT o LUA o... puede equiparse fácilmente con el firmware MicroPython. El proceso siempre es así. aquí descrito.

 

 

una primera prueba

lo mejor es empezar con esto Cargue los siguientes archivos al flash ESP32:

 

oled.py, ssd1306.py, ds3231.py y timeout.py

 

Cuando todo esté montado, comenzamos las primeras pruebas. En REPL ingresemos las siguientes líneas. La belleza de MicroPython es que puedes probar el efecto de los comandos desde la línea de comandos antes de incorporarlos a un programa. Eso es exactamente lo que estamos haciendo ahora. Ponemos el balancín en la posición izquierda. Las entradas están en negrita, el sistema responde en cursiva.

 

>>> desde pin de importación de máquina

>>> cañaR = Pin(16,Pin.IN)

>>> cañaL = Pin(17,Pin.IN)

>>> cañaR()

1

>>> cañaL()

0

 

Después de plegar la mecedora:

 

>>> cañaR()

0

>>> cañaL()

1

 

Entonces eso funciona. Al consultar los niveles, uso la propiedad de los objetos pin. invocable, es decir, ser invocable. Esto se hace por el método Pin.__llamar__() habilita. Ella pertenece a la llamada Métodos mágicos y permite llamar al objeto como una función. Por lo tanto, las siguientes instrucciones deben utilizarse como sinónimos.

 

>>> cañaR(1)

>>> cañaR.valor(1)

>>> cañaR.on()

 

O

 

>>> cañaR()

0

>>> cañaR.valor()

0

>>> cañaR.on()

0

 

Próxima prueba: Autobús I2C. Vinculamos el módulo suaveI2C uno, crear una instancia de un objeto, i2c y observar quién está representado en el bus.

 

>>> desde Pin de importación de máquina, SoftI2C

>>> i2c=SoftI2C(scl=Pin(22),sda=Pin(21),frecuencia=100000)

>>> i2c.escanear()

[60, 87, 104]

 

Probablemente le sorprenda que se encuentren tres direcciones de dispositivos periféricos, ya que solo tenemos dos módulos en el bus. Sí, pero además del chip RTC, el módulo DS3231 también tiene una EEPROM de 32 Kb = 8 KB con la dirección de hardware 87 = 0x57 en la placa. Nos interesan el 60 = 0x3C (OLED) y el 104 = 0x68 (DS3231). La EEPROM podría utilizarse, por ejemplo, para almacenar permanentemente datos de configuración. Entonces también funciona.

 

pantalla oled: Al crear una instancia, pasamos el objeto I2C y le decimos a la API que nuestra pantalla tiene 64 píxeles de alto.

 

>>> d=OLED(i2c,heightw=64)

this is the constructor of OLED class

Size:128x64

>>> d.writeAt("Hallo Welt",3,0)

13

 

"Hola mundo" está impreso en el medio de la línea superior. El valor devuelto 13 es la siguiente posición de escritura libre en la línea.

 

El RTC (Reloj en tiempo real) también está en el bus I2C. Por lo tanto, también pasamos la instancia I2C al constructor del objeto RTC. Luego configuramos la fecha y la hora y obtenemos la hora. Se pasa una tupla con los siguientes siete valores (año, mes, día, día de la semana, hora, minuto, segundo). También merece la pena el módulo muy extenso. ds3231.py para echar un vistazo más de cerca.

 

>>> rtc=DS3231(i2c)

DS3231 bereit @ 0x4C

>>> rtc.DateTime((2024,6,14,5,14,19,30))

>>> rtc.Time()

[14, 19, 32]

 

El ESP32 también tiene un RTC, pero no tiene temporizador de alarma. Para obtener una función de despertador, tenemos que usar el DS3231 y – programar interrupciones, en resumen IRQs. Se utilizan para informar un evento externo al programa en ejecución y solicitar su funcionamiento interrumpiendo inmediatamente el programa (solicitud de interrupción).

 

Los contactos basculantes y el RTC pueden desencadenar tales eventos cambiando el nivel en un pin GPIO (cambio de pin IRQ). Necesitamos definir una entrada GPIO para cada evento. La IRQ se puede armar después de que se haya definido una rutina de servicio de interrupción (ISR). en el parametro alfiler El objeto del pasador de disparo es transmitido por el sistema. Las entradas están conectadas a pull-ups externos de 10kOhm porque los internos tienen una impedancia demasiado alta. Esto mejora la pendiente; eso es lo que me dijo el DSO (osciloscopio de almacenamiento digital).

 

>>> reedR = Pin(16,Pin.IN)

>>> reedL = Pin(17,Pin.IN)

led=Pin(2,Pin.OUT,value=0)

 

>>> def pinIRQ(pin):

    global source

    if pin==reedL:

        source="L"

        led(0)

    elif pin==reedR:

        source="R"

        led(1)

 

>>> reedR.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

<IRQ>

>>> reedL.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

<IRQ>


 

Al armar, la referencia al ISR se transfiere y el flanco descendente se establece como disparador.

 

Si ahora se inclina la tecla con la mano, el LED se enciende cuando se inclina hacia la derecha y se apaga cuando se inclina hacia la izquierda. – Espeluznante, ¿verdad? – No se está ejecutando ningún programa y los contactos no están conectados directamente al circuito LED. Por lo tanto, las IRQ están activas incluso si no se está ejecutando ningún programa principal. Lo que ahora se interrumpe es REPL, el Rleer mivale PAGimprimir lups. Y así volvemos a apagar la magia.

 

>>> reedL.irq(handler=None)

<IRQ>

>>> reedR.irq(handler=None)

<IRQ>


 

Usaremos esto para limpiar cuando salgamos del programa y dejemos una habitación limpia. Podemos activar este proceso presionando el botón en GPIO4 - más tarde, ahora no.

 

Para el latido del corazón (señal de vida) durante el funcionamiento del circuito principal utilizamos el LED y un temporizador de software sin bloqueo. Esto se ejecuta en segundo plano sin bloquear la ejecución del bucle. La magia está todo en uno aquí. Cierre. Esta es una función encapsulada en una definición de función circundante. Debido a que la función interna utiliza variables de la función circundante, tanto la función interna como las variables permanecen vivas después de abandonar la función circundante. Normalmente, todas las entrañas de una función se trituran cuando salen de ella. Oh místico MicroPython – ¡Ommm!

 

La función circundante se llama aquí. tiempo de espera(). ella vive en el modulo tiempo de espera.py, desde donde los importamos. En tiempo de espera() vive la función comparar(), que toma el argumento pasado 5000 y también el estado actual del tic del temporizador. Siempre que la diferencia entre otras marcas de tiempo y el tic del temporizador registrado al principio no exceda 5000, la función ofrece comparar() devuelve el valor Falso; en caso contrario, Verdadero. tiempo de espera() devuelve una referencia al salir comparar() hacia atrás y así hace que el cierre sea inmortal. Asignamos esta referencia al identificador. ahora parpadeando y puede utilizar la función comparar() bajo el seudónimo ahora parpadeando llamar en cualquier momento.

 

>>> from timeout import TimeOutMs

>>> jetztBlinken=TimeOutMs(5000)

>>> jetztBlinken()

False

>>> jetztBlinken()

False

>>> jetztBlinken()

True

 

Después de cinco segundos, obtenemos el resultado. Verdadero. La definición de la función es bastante insignificante, pero vale la pena investigarla. Para hacer esto, simplemente abra el archivo tiempo de espera.py en una ventana del editor.

 

 

el programa

Con estas pruebas manuales básicamente ya hemos comentado todo el programa. Todos los elementos aparecen de nuevo en un orden quizás ligeramente diferente, con algunas pequeñas adiciones que se comentan.

 

# regenmesser.py

 

from oled import OLED

from machine import Pin, SoftI2C

from time import sleep_us, sleep, sleep_ms

from ds3231 import DS3231

import sys

from timeout import TimeOutUs, TimeOutMs

 

# externe 10k-Pullups bringen steilere Flanken!

reedR = Pin(16,Pin.IN) # rechts prellt 75us

reedL = Pin(17,Pin.IN) # links kein Prellen

key=Pin(4,Pin.IN,Pin.PULL_UP) # Tasteneingang an GPIO4

                              # mit internem Pullupwiderstand

led=Pin(2,Pin.OUT,value=0)

 

i2c=SoftI2C(scl=Pin(22),sda=Pin(21),freq=100000)

i2cDevices=i2c.scan()

i2cNamen={ # Das Dictionary erleichtert die Identifikation

    0x57"DS3231.EEPROM 32Kb",

    0x68"DS3231.RTC",

    0x3C"OLED",

    0x40"SHT21",

    }

print("I2C-Devices @ ")

for i in i2cDevices:  # Nummer in Hexcode und Klartext wandeln

    print(hex(i),i2cNamen[i])

print()

 

d=OLED(i2c,heightw=64)

rtc=DS3231(i2c)

 

source="*"

 

# Inhalt der Kippschalen in ccm

cLinks = 2.4  # ccm

cRechts = 2.5

 

# Trichter Durchmesser d=10,9cm

area=(10.9/2)**2 * 3.1415  # Trichterfläche

bucketHour=0 # Der Sammeleimer

     

# IRQ-Service-Routine

def pinIRQ(pin):

    global source # Damit der neue Wert die ISR verlassen kann

    if pin==reedL:

        source="L"

    elif pin==reedR:

        source="R"

 

def shutdown(): # Funktion zum Aufraeumen beim Beenden

    reedL.irq(handler=None)

    reedR.irq(handler=None)

    print("von User abgebrochen")

   

# Pin Change IRQ scharfschalten

reedR.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

reedL.irq(handler=pinIRQ, trigger=Pin.IRQ_FALLING)

 

jetztBlinken=TimeOutMs(2000# Das erste Blinken initiieren

 

while 1:  # Hauptschleife

    Y,M,D,_,h,m,s=rtc.DateTime() # Datum und Zeit holen

    if source=="L":

        source="#"  # Trigger zuruecksetzen

        bucketHour += cLinks  # aufsummieren

        print("Links", bucketHour,"+",h,":",m,":",s)

 

    elif source=="R":

        source="-"  # Trigger zuruecksetzen

        bucketHour += cRechts # aufsummieren

        print("rechts",bucketHour,"-",h,":",m,":",s)

 

    datum=f"{D:02}.{M:02}.{Y}" # Datums- und Zeit-String bauen

    zeit=f"{h:02}:{m:02}:{s:02}"

    niederschlag="\'\'\'\' {:.2f} mm".  /

    format(bucketHour/area*10# dto. Niederschlag in mm

 

    d.clearAll(False)          # Display loeschen

    d.writeAt(datum,3,0,False)

    d.writeAt(zeit,4,1,False)

    d.writeAt(niederschlag,3,3)

   

    if jetztBlinken(): # Wenn Timer abgelaufen, kurz blitzen

        jetztBlinken=TimeOutMs(2000# Ablauf neu setzen

        led(1# LED an

        sleep_ms(5)

        led(0# und wieder aus

       

    if key()==0# Falls Taste key gedrueckt,

        sys.exit(shutdown()) # shutdown() aufrufen und Ende

Para generar texto mezclado con números, puede utilizar ventajosamente cadenas de formato. Hay dos variantes, cuerda f y la función formato(). Las citas son similares.

 

>>> D,M,Y = 14,6,2024

>>> f"{D:02}.{M:02}.{Y}"

'14.06.2024'

 

Esto coloca el día y el mes en dos dígitos y el año en una cadena, separados por puntos.

 

>>> "{:02}.{:02}.{}".format(D,M,Y)

'14.06.2024'

 

Esta forma produce el mismo resultado. La primera variante es ideal para la estructura de textos HTML. La segunda variante permite interrumpir la línea con "\" si es demasiado larga, como en el listado anterior. Las instrucciones de formato son muy diversas. Enumerarlos todos ocuparía varios episodios del blog.

 

Unas palabras sobre las salidas de la pantalla. Los cambios para la pantalla se escriben primero en una memoria intermedia en la RAM, que también se envía inmediatamente a la pantalla cuando está en el modo escribirAT()- o borrar todo() enuncia el argumento FALSO omite o mediante un Verdadero reemplazado. Pero luego la pantalla parpadea, y eso es molesto. Por eso primero dejo que el nuevo contenido del buffer se acumule completamente en la RAM y solo transfiero todo el contenido con el último comando de escritura. Eso le quita la agitación a todo el asunto.

 

Ahora inicie el programa y mueva la tecla basculante. La salida izquierda o derecha puede aparecer varias veces seguidas, incluso si solo se realizó un movimiento de inclinación. También tuve este fenómeno con mi contacto de lengüeta derecho: el contacto rebota al cerrarlo. En el próximo episodio se proporcionará cómo se puede eliminar esto mediante programación y más adiciones al proyecto.

 

Hasta entonces, ¡estad atentos!


Esp-32Esp32Esp32-dev-kitGrundlagen softwareProjekte für fortgeschritteneSensoren

1 comentario

Francesco Cerquone

Francesco Cerquone

Salve. Mi chiedevo se per misurare in modo semplice la quantità di acqua caduta dal cielo non è meglio misurare il suo peso, anzichè il suo volume?
Per esempio un estensimetro o cella di carico come sensore del peso dell’acqua….

Deja un comentario

Todos los comentarios son moderados antes de ser publicados