⭐⭐⭐ Sfida
⏱️ 25 minuti
Misuratore di distanza con barra luminosa
Costruisci una barra luminosa che mostra quanto è vicina una cosa. Lontano: nessuna lucina. Più è vicina, più lucine si accendono. Prima verde, poi arancione e molto vicino rosso.
🧰 Che cosa ti serve?
🗺️ Schema di collegamento
Segui i fili dall'Arduino a ogni componente. Puoi scegliere tu i colori dei fili.
| Da | A |
|---|---|
Arduino UNO · D9 |
Sensore di distanza HC-SR04 · Trig |
Arduino UNO · D10 |
Sensore di distanza HC-SR04 · Echo |
Arduino UNO · 5V |
Sensore di distanza HC-SR04 · Vcc |
Arduino UNO · GND |
Sensore di distanza HC-SR04 · Gnd |
Arduino UNO · D6 |
Anello LED RGB (8 LED) · DI |
Arduino UNO · 5V |
Anello LED RGB (8 LED) · 5V |
Arduino UNO · GND |
Anello LED RGB (8 LED) · GND |
🛠️ Così lo costruisci
- Collega il HC-SR04: Trig al pin 9, Echo al pin 10, Vcc a 5V e Gnd a GND.
- Collega l'anello LED: DI al pin 6, 5V a 5V e GND a GND.
💻 Il codice
// Misuratore di distanza con barra luminosa
// Più ti avvicini, più lucine si accendono: verde, poi arancione, poi rosso.
#include <Adafruit_NeoPixel.h>
const int TRIG_PIN = 9; // Trig del HC-SR04 sul pin 9
const int ECHO_PIN = 10; // Echo del HC-SR04 sul pin 10
const int RING_PIN = 6; // DI dell'anello LED sul pin 6
const int NUMERO_LED = 8;
const int DISTANZA_MAX = 80; // Oltre questo (in cm): tutte le lucine spente
Adafruit_NeoPixel anello(NUMERO_LED, RING_PIN, NEO_GRB + NEO_KHZ800);
long misuraDistanza() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long tempo = pulseIn(ECHO_PIN, HIGH, 30000);
if (tempo == 0) return 999;
return tempo / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
anello.begin();
anello.setBrightness(40);
anello.show();
}
void loop() {
long distanza = misuraDistanza();
Serial.print(F("Distanza: "));
Serial.print(distanza);
Serial.println(F(" cm"));
// Quante lucine devono accendersi? Vicino = 8, lontano = 0
int numero = map(constrain(distanza, 0, DISTANZA_MAX), 0, DISTANZA_MAX, NUMERO_LED, 0);
for (int i = 0; i < NUMERO_LED; i++) {
if (i < numero) {
if (i < 3) anello.setPixelColor(i, anello.Color(0, 255, 0)); // Verde
else if (i < 6) anello.setPixelColor(i, anello.Color(255, 120, 0)); // Arancione
else anello.setPixelColor(i, anello.Color(255, 0, 0)); // Rosso
} else {
anello.setPixelColor(i, 0); // Spento
}
}
anello.show();
delay(100);
}
🧠 Che cosa fa il codice?
misuraDistanza()misura la distanza con il HC-SR04.map()trasforma la distanza in un numero di lucine: da 0 a 8.- Le prime 3 lucine sono verdi, le 3 dopo arancioni e le ultime 2 rosse.
🎯 Prova anche…
- Fai lampeggiare tutte le lucine in rosso se sei più vicino di 10 cm
- Aggiungi il buzzer che fa beep quando è rosso
- Rendi il misuratore più sensibile: tutte le lucine accese a 40 cm invece di 80 cm
🚀 Costruisci questo progetto con Codey: apri codey.online/it/starter-kits/uno/projects/distance-light-bar e clicca su FAI QUESTO. Così il codice e lo schema di collegamento sono subito pronti.
Codey Online è un prodotto di OTRONIC