🚀 Introduzione
Vuoi costruire un vero cronometro con Arduino? ⏱️
Con questo progetto realizzi un sistema che avvia, ferma e resetta il tempo, mostrando tutto su un display LCD.
È molto più avanzato di un semplice timer: qui controlli il tempo in modo interattivo.
👉 Perfetto per allenamenti, esperimenti o test.
Vuoi costruire un vero cronometro con Arduino? ⏱️
Con questo progetto realizzi un sistema che avvia, ferma e resetta il tempo, mostrando tutto su un display LCD.
È molto più avanzato di un semplice timer: qui controlli il tempo in modo interattivo.
👉 Perfetto per allenamenti, esperimenti o test.
🎯 Cosa realizzerai
Con Arduino creerai un sistema che:
Con Arduino creerai un sistema che:
- ⏱️ misura il tempo in modo preciso
- ▶️ avvia e ferma il cronometro
- 🔄 permette il reset
- 📟 mostra il tempo su display LCD
🧰 Materiale necessario
- 1x Arduino UNO
- 1x display LCD 16x2 con modulo I2C
- 2x pulsanti (start/stop + reset)
- cavetti jumper
- breadboard
🛒 Componenti e risorse consigliate
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Molti kit includono display LCD e pulsanti, ideali per questo progetto.
📚 Libri utili per imparare Arduino in modo pratico
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
👉 Kit Arduino consigliato: https://amzn.to/41fmFNK
💡 Molti kit includono display LCD e pulsanti, ideali per questo progetto.
📚 Libri utili per imparare Arduino in modo pratico
👉 Arduino per tutti – Volume 1: https://amzn.to/4rGNxB9
👉 Arduino per tutti – Volume 2: https://amzn.to/4bkfaey
👉 Arduino per tutti – Volume 3: https://amzn.to/4bogjAg
📚 Librerie necessarie
👉 LiquidCrystal_I2C
Installazione:
👉 LiquidCrystal_I2C
Installazione:
- IDE Arduino → Gestione librerie
- cerca LiquidCrystal I2C
🔌 Schema di collegamento
Display LCD I2C
Pulsanti
Display LCD I2C
- VCC → 5V
- GND → GND
- SDA → A4
- SCL → A5
Pulsanti
- Pulsante START/STOP → pin 2
- Pulsante RESET → pin 3
👉 collegati a GND (INPUT_PULLUP)
💻 Codice Arduino
// ============================================
// Progetto 110 - Cronometro con display LCD
// Start, stop e reset con pulsanti
// ============================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int btnStart = 2;
const int btnReset = 3;
unsigned long tempoInizio = 0;
unsigned long tempoCorrente = 0;
bool inEsecuzione = false;
void setup() {
pinMode(btnStart, INPUT_PULLUP);
pinMode(btnReset, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Cronometro");
}
void loop() {
// Pulsante START/STOP
if (digitalRead(btnStart) == LOW) {
delay(200); // debounce
if (!inEsecuzione) {
tempoInizio = millis() - tempoCorrente;
inEsecuzione = true;
} else {
inEsecuzione = false;
}
}
// Pulsante RESET
if (digitalRead(btnReset) == LOW) {
delay(200); // debounce
tempoCorrente = 0;
tempoInizio = millis();
}
// Calcolo tempo
if (inEsecuzione) {
tempoCorrente = millis() - tempoInizio;
}
int secondi = (tempoCorrente / 1000) % 60;
int minuti = (tempoCorrente / 60000);
// Visualizzazione
lcd.setCursor(0, 1);
if (minuti < 10) lcd.print("0");
lcd.print(minuti);
lcd.print(":");
if (secondi < 10) lcd.print("0");
lcd.print(secondi);
lcd.print(" ");
}
// Progetto 110 - Cronometro con display LCD
// Start, stop e reset con pulsanti
// ============================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int btnStart = 2;
const int btnReset = 3;
unsigned long tempoInizio = 0;
unsigned long tempoCorrente = 0;
bool inEsecuzione = false;
void setup() {
pinMode(btnStart, INPUT_PULLUP);
pinMode(btnReset, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Cronometro");
}
void loop() {
// Pulsante START/STOP
if (digitalRead(btnStart) == LOW) {
delay(200); // debounce
if (!inEsecuzione) {
tempoInizio = millis() - tempoCorrente;
inEsecuzione = true;
} else {
inEsecuzione = false;
}
}
// Pulsante RESET
if (digitalRead(btnReset) == LOW) {
delay(200); // debounce
tempoCorrente = 0;
tempoInizio = millis();
}
// Calcolo tempo
if (inEsecuzione) {
tempoCorrente = millis() - tempoInizio;
}
int secondi = (tempoCorrente / 1000) % 60;
int minuti = (tempoCorrente / 60000);
// Visualizzazione
lcd.setCursor(0, 1);
if (minuti < 10) lcd.print("0");
lcd.print(minuti);
lcd.print(":");
if (secondi < 10) lcd.print("0");
lcd.print(secondi);
lcd.print(" ");
}
⚙️ Come funziona
Il cronometro utilizza millis() per contare il tempo senza bloccare il programma.
👉 Pulsante START:
👉 Pulsante RESET:
👉 Il display mostra:
MM:SS
💡 Il sistema mantiene il tempo anche quando viene fermato (non si azzera).
Il cronometro utilizza millis() per contare il tempo senza bloccare il programma.
👉 Pulsante START:
- avvia o ferma il cronometro
👉 Pulsante RESET:
- azzera il tempo
👉 Il display mostra:
MM:SS
💡 Il sistema mantiene il tempo anche quando viene fermato (non si azzera).
🧠 Perché è un progetto importante
Impari:
👉 È un vero sistema interattivo.
Impari:
- gestione input (pulsanti)
- debounce
- gestione tempo avanzata
- interfaccia utente base
👉 È un vero sistema interattivo.
🔄 Varianti possibili
Vuoi migliorarlo?
Vuoi migliorarlo?
- ⏱️ aggiungi millisecondi
- 🔊 buzzer → segnale sonoro
- 📟 display OLED → grafica migliore
- 🧠 salva tempo in memoria