La eficiencia en la gestión de energía eléctrica se fundamenta en la capacidad de transformar niveles de tensión con el mínimo desperdicio calórico. Existen diversos métodos para lograr este objetivo, diferenciándose drásticamente según el tipo de corriente y la tecnología aplicada.
Control de Fase en Corriente Alterna (AC)
En sistemas de corriente alterna a 50Hz, se suele utilizar el control de fase mediante dispositivos semiconductores como Triacs. Este método consiste en seccionar la onda senoidal original, eliminando una fracción del semiciclo para reducir la potencia entregada a la carga.
Se observa que el resultado es una onda “mordida” o incompleta. Si bien resulta efectivo para aplicaciones de baja precisión como calefactores o iluminación incandescente, la deformación de la onda genera armónicos y ruido eléctrico significativo. La frecuencia de operación queda limitada a la de la red eléctrica, lo que impide una entrega de energía verdaderamente continua.
Conversión DC-DC: La Tecnología Buck
A diferencia del recorte de fase, el convertidor reductor o Buck opera en corriente continua mediante conmutación de alta frecuencia, típicamente a 50kHz. En este esquema, se extraen “rebanadas” de energía de una fuente superior (como 12V) para conformar una tensión inferior (como 5V).
Mecánica del Proceso:La conmutación a 50.000 veces por segundo permite que los componentes reactivos (inductor y capacitor) actúen como un filtro de suavizado constante. Mientras que en AC el recorte es lento y evidente, en un sistema Buck la alta velocidad permite “derretir” los pulsos cuadrados de energía, transformándolos en una corriente continua casi pura.
[Image of buck converter voltage waveforms]
Comparativa Técnica
Característica
Control de Fase (AC)
Convertidor Buck (DC)
Frecuencia típica
50 Hz / 60 Hz
50 kHz – 1 MHz
Método
Recorte de onda senoidal
Conmutación por PWM
Salida
Onda pulsante deformada
Corriente continua suavizada
Eficiencia
Media (pérdidas por fase)
Alta (superior al 90%)
La implementación de un sistema Buck requiere un control preciso, generalmente un algoritmo PID discreto, para ajustar el ancho de pulso en microsegundos. Esta sofisticación técnica permite que dispositivos electrónicos sensibles reciban energía estable sin el estrés térmico asociado a los reguladores lineales o la inestabilidad de los controles de fase tradicionales.
Documentación técnica sobre topologías de potencia y eficiencia energética. Análisis basado en implementaciones de control digital sobre hardware AVR y simulación de plantas de potencia.
Diseño arquitectónico con la precisión de la Ingeniería Aplicada. La práctica integra desde instalaciones en viviendas hasta el desarrollo de sistemas de control PID y electrónica para infraestructuras industriales. Es arquitectura resuelta como un sistema operativo: eficiente, funcional y automatizada. El enfoque es directo: transformar la complejidad técnica en espacios que funcionan con absoluta fluidez.
Diseño arquitectónico con la precisión de la Ingeniería Aplicada. La práctica integra desde instalaciones en viviendas hasta el desarrollo de sistemas de control PID y electrónica para infraestructuras industriales. Es arquitectura resuelta como un sistema operativo: eficiente, funcional y automatizada. El enfoque es directo: transformar la complejidad técnica en espacios que funcionan con absoluta fluidez.…
En entornos de producción, la precisión en el conteo de insumos es crítica para evitar fugas financieras y errores logísticos. Este proyecto surge como una solución robusta para automatizar el conteo de tarjetas plásticas y hojas mediante un sistema embebido basado en el ESP32. El objetivo principal fue desarrollar un dispositivo que no solo fuera…
Al integrar un microcontrolador de grado industrial como el Opta, es importante diferenciarlo de las placas de desarrollo convencionales. Este Hardware exige un protocolo de inicio específico para garantizar la estabilidad del sistema y su correcta operación en entornos de automatización. A continuación la configuración, alimentación y manejo de señales para una implementación profesional. …
Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa…
El núcleo del desarrollo se centró en la creación de un sistema capaz de gestionar múltiples variables críticas en tiempo real: desde el movimiento coordinado de motores paso a paso para el posicionamiento de las cápsulas, hasta el control de un motor DC y una resistencia de sellado térmico. Este prototipo no solo buscaba la…
La intervención en nodos críticos de transporte, como el Aeroparque Jorge Newbery, requiere trascender la simple remodelación para ejecutar una reingeniería espacial de precisión. Ante un escenario de infraestructura degradada y bajo la estricta presión de un cronograma de 72 horas, la prioridad fue orquestar una recuperación integral que no admitiera márgenes de error. Se…
¿Cómo ampliar la superficie de una cámara de frío en 4 días? Con reefer ultramarinos El proyecto consistió en conectar, por medio de una antecámara (también de temperatura controlada) 2 reefer como los que llevan mercancía congelada de un continente a otro. Cliente: OCASA (Organización Courier Argentina Sociedad Anónima) Trabajo: Obra civil y Automatización de sistema para control…
Club náutico barrial ubicado en la localidad de Beccar, Argentina. El diseño se centra en un playón central donde los jóvenes preparan sus embarcaciones, permitiendo que sus familias observen el proceso cómodamente. La infraestructura utiliza materiales duraderos como el hormigón armado y la chapa para albergar talleres, vestuarios y áreas administrativas. El complejo está específicamente…
A veces, en ingeniería, el reto no es solo crear algo nuevo, sino hacer que conviva con lo que ya existe. Hace poco estuve trabajando en un proyecto muy interesante que resume perfectamente esta idea: un sistema de gestión y registro de baterías (Datalogger) capaz de hablar dos “idiomas” distintos.
El problema: Lo viejo vs. Lo nuevo
En el mundo de las baterías hay, básicamente, dos grandes grupos conviviendo:
Las baterías “inteligentes” (SBS): Son las modernas. Ellas mismas te dicen “estoy al 80%”, “tengo esta temperatura” o “me quedan tantos ciclos de vida”. Se comunican digitalmente.
Las baterías “tradicionales” (Analógicas): Son las de toda la vida. No “hablan”, así que para saber cómo están tienes que medir físicamente su voltaje, la corriente que entra y sale, y usar sondas externas para vigilar que no se calienten.
El objetivo era crear un cerebro único que pudiera manejar ambas situaciones sin despeinarse.
La solución: Un sistema híbrido
Desarrollé un firmware capaz de trabajar en dos modos. Si el sistema detecta una batería moderna, se comporta como un “host” digital: lee directamente los datos internos (voltaje, amperaje, salud de la batería) a través de protocolos de comunicación estándar. Es limpio y preciso.
Pero, si conectamos una batería analógica, el sistema cambia el chip. Pasa a usar sensores físicos para leer la corriente y el voltaje, y gestiona sondas de temperatura externas para asegurarse de que todo opera dentro de los márgenes de seguridad.
¿Por qué es útil esto?
Lo bonito de este desarrollo es la versatilidad. El dispositivo no solo gestiona la carga, sino que actúa como una “caja negra”:
Registro de datos: Guarda un historial diario en una tarjeta SD con todo lo que pasa (ciclos de carga, temperaturas, potencias…).
Seguridad: Tiene alarmas programadas. Si una batería se calienta demasiado o baja de cierto nivel, el sistema avisa y corta para prevenir daños, da igual si la batería es digital o analógica.
Visualización: Toda la info se muestra sencilla en una pantalla OLED para que el usuario sepa qué pasa de un vistazo.
Al final, este proyecto ha sido un buen ejercicio de adaptación. La electrónica sirve para hacer de puente entre tecnologías distintas, alargando la vida útil de los equipos y mejorando la seguridad, sea cual sea la batería que se use.
En entornos de producción, la precisión en el conteo de insumos es crítica para evitar fugas financieras y errores logísticos. Este proyecto surge como una solución robusta para automatizar el conteo de tarjetas plásticas y hojas mediante un sistema embebido basado en el ESP32. El objetivo principal fue desarrollar un dispositivo que no solo fuera preciso, sino también capaz de operar en condiciones industriales, integrando sensores ópticos de alta velocidad y una lógica de control avanzada para garantizar la integridad de los datos en tiempo real.
El proyecto consta de un ESP32 con un sistema contador de hojas y 2 foto-células/sensores para el procedimiento de trabajo.
El núcleo del sistema reside en una Máquina de Estados Finitos (FSM) programada en el ESP32, la cual gestiona el ciclo de trabajo evitando falsos positivos mediante el filtrado de señales de dos fotocélulas dispuestas en configuración diferencial. La arquitectura de hardware se centraliza en una PCB diseñada específicamente para este propósito, que integra una interfaz I2C para la visualización en LCD, una botonera industrial de cuatro comandos y salidas optoacopladas mediante relays para el control de actuadores externos. Este enfoque modular permite una alta mantenibilidad y una inmunidad superior al ruido electromagnético, factor común en plantas de fabricación.
La lista de Hardware de este proyecto es:
-ESP32
-Sensores digitales/fotocélulas
-LCD 1602 con módulo I2C
-Botonera de 4 salidas simple
-Salidas con relay
SUMINISTRO CONTROLADO
Fabricado en España
El resultado es un equipo compacto, escalable y de alta fiabilidad, Fabricado que transforma un proceso manual propenso a errores en una operación automatizada y auditable. La implementación de este sistema demuestra cómo la integración de microcontroladores modernos y un diseño de hardware dedicado puede optimizar costos en la pequeña y mediana industria. Actualmente, el diseño se encuentra optimizado para su integración en líneas de producción existentes, reafirmando el compromiso con la ingeniería de precisión y la eficiencia operativa.
Al integrar un microcontrolador de grado industrial como el Opta, es importante diferenciarlo de las placas de desarrollo convencionales.
Este Hardware exige un protocolo de inicio específico para garantizar la estabilidad del sistema y su correcta operación en entornos de automatización.
A continuación la configuración, alimentación y manejo de señales para una implementación profesional.
1. Configuración del Entorno (IDE 2.3.7)
Es habitual que, al iniciar el IDE por primera vez, no se visualicen los ejemplos específicos del dispositivo. Esto responde a la arquitectura del Opta (basada en Mbed OS), la cual difiere de la arquitectura AVR clásica. El entorno de desarrollo requiere la instalación explícita del núcleo para acceder a las librerías de hardware.
Abrir el Gestor de Tarjetas (Board Manager) en el menú lateral del IDE.
Buscar el término “Opta” en la barra de búsqueda.
Seleccionar e instalar el paquete “Arduino Mbed OS Opta Boards”.
Verificar en Archivo > Ejemplos > OPTA la disponibilidad de los códigos de referencia (Ethernet, Modbus, Digital I/O).
2. Matriz de Alimentación
Para evitar errores comunes en la puesta en marcha, es necesario distinguir entre la alimentación lógica y la operativa:
Fuente de Energía
Uso Correcto
Limitación Técnica
Puerto USB-C
Programación, depuración serial y lógica de control.
Insuficiente para conmutar salidas. No alimenta la etapa de potencia de los relés.
Bornera (12-24V DC)
Operación en campo, activación de relés y sensores.
Requiere fuente externa regulada. Es necesario unificar tierras (GND) al usar múltiples fuentes.
Diferencias operativas según la fuente de alimentación.
3. Gestión de Señales y Entradas
La versatilidad de las entradas es un factor clave en la integración de sistemas. Las 8 entradas disponibles permiten una configuración híbrida mediante software, facilitando la lectura de señales analógicas de 0-10V, estándar en la industria para sensores de nivel o presión, sin necesidad de hardware adicional.
void setup() {
// Inicializar comunicación serial para monitoreo
Serial.begin(9600);
// Aumentar la resolución de lectura a 12 bits (0-4095)
// por defecto la resolución es de 10 bits (0-1023)
analogReadResolution(12);
}
void loop() {
// Lectura de la entrada A0 (I1 en la bornera)
int sensorValue = analogRead(A0);
// Conversión básica a voltaje (referencia 10V estimada)
float voltage = sensorValue * (10.0 / 4095.0);
Serial.println(voltage);
delay(100);
}
Nota técnica sobre los Relés: Las salidas integradas son electromecánicas. Aunque robustas, poseen un ciclo de vida mecánico finito. No se recomienda utilizarlas para conmutación de alta frecuencia (PWM). Para aplicaciones que requieran pulsos rápidos, se debe optar por Relés de Estado Sólido (SSR) externos.
Este proyecto implementa un sistema básico para medir la humedad del suelo mediante un microcontrolador, optimizando el consumo de energía de la sonda gracias a un pin de alimentación controlado por software. Está diseñado para facilitar la integración en entornos de bajo consumo o alimentados por baterías.
Obtener lecturas confiables del nivel de humedad del suelo mientras se evita la corrosión y el consumo innecesario de corriente de la sonda, encendiéndola solo durante el tiempo mínimo necesario para la medición.
Estructura del proyecto
El código está organizado en tres partes principales:
1. Encabezado (moisture.h)
Define la interfaz de uso:
moistureInit(): inicializa los pines para alimentar la sonda y leer la señal analógica.
moistureSetWarmup(): permite configurar el tiempo de precalentamiento antes de la medición.
moistureRead(): realiza la lectura del valor crudo del ADC.
2. Implementación (moisture.cpp)
Contiene la lógica de funcionamiento:
Al inicializar, configura el pin de alimentación como salida y lo apaga por defecto.
Durante la lectura, habilita la alimentación, espera el tiempo de calentamiento configurado (300 ms por defecto) y luego toma la muestra analógica.
Apaga la alimentación inmediatamente después de la lectura para reducir la corrosión y el consumo.
3. Sketch principal (moisture1.ino)
Ejemplo de uso que inicializa el sensor con pines definidos, configura el precalentamiento si es necesario y lee los valores de humedad periódicamente, mostrando los resultados por el puerto serial.
Características destacadas
Control programático de la alimentación de la sonda.
Configuración flexible del tiempo de precalentamiento.
Lectura directa del valor analógico en formato crudo (0–1023).
Diseño modular para facilitar la reutilización en otros proyectos.
Aplicaciones
El sistema está pensado para proyectos de riego automático, monitoreo de jardines o cultivos, y cualquier implementación que requiera reducir el consumo y prolongar la vida útil de sondas de humedad
Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa para la implementación de este sistema de reproducción de audio.
El DFPlayer Mini es un módulo de reproducción de audio compacto y de bajo costo que puede reproducir archivos MP3 y WAV almacenados en una tarjeta microSD. Es ampliamente utilizado en proyectos de electrónica debido a su facilidad de uso y a su capacidad para manejar archivos de audio de manera autónoma, sin necesidad de una fuente de control compleja. El módulo cuenta con varias funciones, incluyendo el ajuste de volumen, control de reproducción, y la capacidad de seleccionar pistas mediante comandos simples.
El Desafío (El “Brief”)
El cliente requiere la sonorización de un espacio arquitectónico de vanguardia, inspirado en las obras de James Turrell (manipulación de la luz y el espacio) y la materialidad cálida de Herzog & de Meuron.
El objetivo es crear una atmósfera inmersiva de audio (sonidos ambientales, texturas sonoras) sin que la tecnología sea intrusiva. El sistema debe ser extremadamente fiable (grado industrial para operar 24/7), pero el núcleo de reproducción de audio debe ser modular y de bajo coste para fácil reemplazo. Los altavoces deben ser visibles pero integrarse como elementos de diseño, no como meras “cajas negras”.
2. La Solución: Arquitectura Híbrida
Propusimos una solución de hardware híbrida que combina la robustez del IoT industrial con la flexibilidad del hardware abierto.
El Cerebro (Control Industrial): Se seleccionó un Arduino Opta (PLC micro) como controlador maestro del espacio. El Opta gestiona los horarios de encendido, se integra con los sensores de ocupación de la sala y coordina la iluminación ambiental (DALI/Modbus).
La Voz (Módulo de Audio Especializado): Para la reproducción de audio, se implementó el módulo exacto detallado en la nota técnica de ger.ar: un ESP32 gestionando un DFPlayer Mini.
La Integración: El Arduino Opta envía comandos vía Serial (UART) o I2C al ESP32, indicándole qué pista de la tarjeta SD reproducir según el “estado de ánimo” del espacio (ej. mañana luminosa vs. tarde íntima). El ESP32 actúa como un esclavo de audio dedicado.
3. La Estética (Turrell + Herzog & de Meuron)
El espacio es un “estudio despoblado”. Paredes de hormigón texturizado con tonos cálidos (terracota, beige). La luz es indirecta, bañando las paredes desde foseados ocultos, creando volúmenes de color casi tangibles.
Los altavoces no se esconden, se celebran. Son elementos colgantes, tipo péndulo, de diseño cilíndrico simple, acabado en metal cepillado oscuro o cerámica mate, sin logotipos visibles, suspendidos por cables delgados desde el techo alto.
4. Visualización del Proyecto (Imágenes Conceptuales)
IMAGEN 1: El Plano General (La Arquitectura)
Objetivo: Mostrar el espacio inmersivo y la integración de los altavoces.
Conexiones del Proyecto
Para conectar el DFPlayer Mini con el ESP32, es importante seguir las siguientes indicaciones:
VCC: Conectar a una fuente de alimentación de 5V. El ESP32 puede proporcionar esta salida.
GND: Conectar al pin de tierra (GND) del ESP32.
TX del DFPlayer Mini: Conectar al pin GPIO 16 del ESP32.
RX del DFPlayer Mini: Conectar al pin GPIO 17 del ESP32.
SPK1 y SPK2: Conectar a un altavoz pasivo, si se desea una salida de audio. Alternativamente, se puede usar un conector de auriculares para salida de línea.
Es fundamental asegurarse de que las conexiones sean correctas para evitar daños en los componentes y garantizar un funcionamiento óptimo del sistema.
3. Código de Programación
El siguiente código muestra cómo configurar el ESP32 para comunicarse con el DFPlayer Mini y reproducir un archivo MP3 cada 10 segundos. Se utiliza el puerto Serial1 del ESP32/ESP8266 para la comunicación, aprovechando la capacidad del microcontrolador para manejar múltiples puertos UART de hardware.
#include <Arduino.h>
#include <DFPlayerMini_Fast.h>
#if defined(ESP32)
// En ESP32 podemos usar HardwareSerial en un segundo puerto
HardwareSerial playerSerial(2); // UART2: GPIO16=RX2, GPIO17=TX2 por defecto
const int DF_RX = 16; // al TX del DFPlayer
const int DF_TX = 17; // al RX del DFPlayer
#elif defined(ESP8266)
#include <SoftwareSerial.h>
const int DF_RX = D5; // ESP8266: conecta a TX del DFPlayer
const int DF_TX = D6; // ESP8266: conecta a RX del DFPlayer
SoftwareSerial playerSerial(DF_RX, DF_TX);
#else
#error "Este código sólo es para ESP32 o ESP8266"
#endif
DFPlayerMini_Fast myDFPlayer;
const unsigned long intervalReproduccion = 10000; // 10 s
unsigned long lastMillis = 0;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("=== DFPlayer en ESP32/ESP8266 ===");
// Inicializar puerto al módulo
#if defined(ESP32)
playerSerial.begin(9600, SERIAL_8N1, DF_RX, DF_TX);
#elif defined(ESP8266)
playerSerial.begin(9600);
#endif
if (! myDFPlayer.begin(playerSerial)) {
Serial.println(F("ERROR: No se detectó DFPlayer Mini"));
while (true) delay(100);
}
myDFPlayer.volume(20); // 0–30
myDFPlayer.play(1); // empieza en pista 001
lastMillis = millis();
}
void loop() {
unsigned long now = millis();
// Cada 10 s, reproducir siguiente pista
if (now - lastMillis >= intervalReproduccion) {
lastMillis = now;
myDFPlayer.playNext();
}
// Procesar eventos del DFPlayer (fin de pista, errores…)
if (myDFPlayer.available()) {
DFPlayerEventType type = myDFPlayer.readType();
int state = myDFPlayer.readState();
Serial.print(F("Evento DFPlayer: "));
Serial.print(type);
Serial.print(F(" Estado interno: "));
Serial.println(state);
}
// Aquí puedes gestionar botones u otras tareas no bloqueantes
delay(20);
}
En este código, se utilizan las siguientes funciones y configuraciones:
mySerial.begin(9600, SERIAL_8N1, 16, 17); Esta línea configura el puerto Serial1 del ESP32 con una velocidad de comunicación de 9600 baudios y establece los pines GPIO 16 y 17 como RX y TX, respectivamente.
myDFPlayer.begin(mySerial); Esta función inicializa el DFPlayer Mini y lo prepara para recibir comandos.
myDFPlayer.volume(20); Se ajusta el volumen del reproductor a un nivel de 20 (en una escala de 0 a 30).
myDFPlayer.play(1); Este comando indica al DFPlayer Mini que reproduzca el archivo de audio numerado como 1 en la tarjeta microSD.
delay(10000); Introduce una pausa de 10 segundos antes de repetir el ciclo.
Este código permite la reproducción continua de un archivo MP3, con una espera de 10 segundos entre reproducciones. Es posible modificar el tiempo de espera o cambiar el archivo a reproducir ajustando los parámetros del código según las necesidades del proyecto.
Estamos en busca de componentes que ofrezcan la mejor calidad y precisión para proyectos de electrónica y sistemas embebidos.
Características del SHT31
El sensor SHT31, desarrollado por Sensirion, es conocido por su alta precisión y fiabilidad en la medición de temperatura y humedad. Sus principales características incluyen:
Alta Precisión: Con una precisión de ±2% RH para la humedad y ±0.3°C para la temperatura, garantiza datos exactos para aplicaciones críticas.
Interfaz I2C: Facilita la integración con diversos microcontroladores y plataformas de desarrollo como Arduino y Raspberry Pi.
Rápida Respuesta: Su diseño avanzado permite obtener lecturas en tiempo real, ideal para sistemas de monitoreo continuo.
Compensación de Calor: Mejora la precisión en ambientes con fluctuaciones térmicas, asegurando mediciones consistentes.
Aplicaciones del SHT31
El SHT31 es versátil y se adapta a diversas aplicaciones, tales como:
Sistemas HVAC: Optimiza el control de climatización en edificios inteligentes.
Estaciones Meteorológicas: Proporciona datos precisos para el análisis del clima.
Agricultura de Precisión: Monitoriza las condiciones ambientales en invernaderos y cultivos.
Dispositivos IoT: Integra fácilmente en soluciones de hogar inteligente y monitoreo ambiental.
Integración Sencilla
Se valora la facilidad de uso y la versatilidad. El SHT31 se conecta mediante una interfaz I2C, simplificando su uso con cualquier microcontrolador compatible.
Código para compilar en IDE Platformio
#include <Wire.h>
#include <Adafruit_SHT31.h>
#include <FS.h>
#include <SD_MMC.h>
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
Serial.begin(115200);
while (!Serial) delay(10); // wait for serial port to open
if (!sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println("Couldn't find SHT31");
while (1) delay(1);
}
if (!SD_MMC.begin("/sdcard", true)) {
Serial.println("SD Card Mount Failed");
return;
}
uint8_t cardType = SD_MMC.cardType();
if (cardType == CARD_NONE) {
Serial.println("No SD card attached");
return;
}
Serial.println("SD Card initialized.");
}
void loop() {
float t = sht31.readTemperature();
float h = sht31.readHumidity();
if (!isnan(t)) { // check if 'is not a number'
Serial.print("Temp *C = "); Serial.println(t);
} else {
Serial.println("Failed to read temperature");
}
if (!isnan(h)) { // check if 'is not a number'
Serial.print("Hum. % = "); Serial.println(h);
} else {
Serial.println("Failed to read humidity");
}
// Open the file in write mode
File dataFile = SD_MMC.open("/sdcard/data.txt", FILE_APPEND);
// If the file opened successfully, write the temperature and humidity
if (dataFile) {
dataFile.print("Millis: ");
dataFile.print(millis());
dataFile.print(", Temp: ");
dataFile.print(t);
dataFile.print(" *C, Humidity: ");
dataFile.print(h);
dataFile.println(" %");
dataFile.close();
Serial.println("Data written to file");
} else {
// If the file didn't open, print an error
Serial.println("Error opening data.txt");
}
// Wait for 2 seconds before reading again
delay(2000);
}