Cronómetro Arduino Sencillo: Activado por Botón con EEPROM e Interrupciones
Componentes y suministros
| Componente | Descripción | Cantidad |
|---|---|---|
| Arduino UNO | Cualquier modelo Arduino. | 1 |
| Pulsador (no retentivo) | Con resistencia pull-down de 1kΩ. | 1 |
| Resistencia 10kΩ | Para pull-up/pull-down según necesidad. | 1 |
Aplicaciones y servicios
- Arduino IDE
Sobre el proyecto
Un cronómetro simple que se activa al pulsar un botón. Guarda el último tiempo medido en la EEPROM interna para conservarlo tras reinicios. Ideal para integrar en otros proyectos.
EEPROM
Memoria no volátil del Arduino (1024 bytes en Uno). Se usa la librería EEPROM.h (incluida por defecto) para almacenar el tiempo en la dirección 0.
Interrupciones
El pin 2 (interruptPin) detecta cambios de nivel (CHANGE). Al pulsar el botón, la interrupción llama a refreshTime() tanto en flanco de subida (inicio) como de bajada (fin). La resistencia pull-down mantiene el pin LOW en reposo.
Código del proyecto
Definiciones e includes
#include <EEPROM.h>
#define interruptPin 2
#define eeAddress 0
float starttime = 0;
float endtime = 0;
float resulttime = 0, oldresulttime = 0;
setup()
void setup() {
Serial.begin(9600);
while (!Serial) { ; }
Serial.println("Serial comms are ready sir!:.. bip bip");
attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);
}
loop()
void loop() {
// Tu código principal aquí
// La variable resulttime (guardada en EEPROM) está disponible
}
Función refreshTime()
void refreshTime() {
if (digitalRead(interruptPin)) { // Flanco subida: inicio
starttime = millis();
Serial.print("Start time: "); Serial.println(starttime);
} else { // Flanco bajada: fin
endtime = millis();
resulttime = endtime - starttime;
Serial.print("End time: "); Serial.println(endtime);
Serial.print("Result time: "); Serial.println(resulttime);
WhatsNewEeprom();
}
}
Función WhatsNewEeprom()
void WhatsNewEeprom() {
Serial.println("-----------checking eeprom");
EEPROM.get(eeAddress, oldresulttime);
Serial.print("oldresulttime"); Serial.println(oldresulttime);
Serial.print("resulttime"); Serial.println(resulttime);
if (resulttime != oldresulttime) {
EEPROM.put(eeAddress, resulttime);
Serial.print("-----Ding! New time recorded in eeprom: "); Serial.println(resulttime);
} else {
Serial.println("No new time found, eeprom was not disturbed");
}
}
Antirrebote (Debouncing)
El rebote mecánico del pulsador genera múltiples flancos. Se puede mitigar por software o hardware (condensador 220nF en paralelo entre el pin y GND).

Esquemático
Conexión simple del pulsador con resistencia pull-down.

Proceso de manufactura
- Construye un Reloj de Pared Elegante con Anillo Neopixel 60 LEDs Adafruit y Arduino
- Reloj de Palabras DIY con Arduino: Construye una Pantalla Elegante en Tiempo Real
- Construya un osciloscopio Arduino de 20 kHz en LCD Nokia 5110: Guía DIY fácil
- Construye un Spybot controlado por Bluetooth con Arduino
- FlickMote: Mando IR por gestos para Smart Home
- TV‑B‑Gone DIY con Arduino: Mando universal para apagar cualquier TV
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Soluciones de Alimentación Optimizadas para Proyectos Arduino
- Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO