⭐⭐⭐ Wyzwanie
⏱️ 25 minut
Miernik odległości z paskiem świetlnym
Zrobisz pasek świetlny, który pokazuje, jak blisko jest coś. Daleko: nie świeci żadna lampka. Im bliżej, tym więcej lampek się zapala. Najpierw zielone, potem pomarańczowe, a bardzo blisko czerwone.
🧰 Czego potrzebujesz?
🔌
Kabel USB + Przewody połączeniowe🗺️ Schemat podłączenia
Poprowadź przewody od Arduino do każdej części. Kolory przewodów możesz wybrać samodzielnie.
| Od | Do |
|---|---|
Arduino UNO · D9 |
Czujnik odległości HC-SR04 · Trig |
Arduino UNO · D10 |
Czujnik odległości HC-SR04 · Echo |
Arduino UNO · 5V |
Czujnik odległości HC-SR04 · Vcc |
Arduino UNO · GND |
Czujnik odległości HC-SR04 · Gnd |
Arduino UNO · D6 |
Pierścień LED RGB (8 diod LED) · DI |
Arduino UNO · 5V |
Pierścień LED RGB (8 diod LED) · 5V |
Arduino UNO · GND |
Pierścień LED RGB (8 diod LED) · GND |
🛠️ Tak to zbudujesz
- Podłącz HC-SR04: Trig do pin 9, Echo do pin 10, Vcc do 5V i Gnd do GND.
- Podłącz pierścień LED: DI do pin 6, 5V do 5V i GND do GND.
💻 Kod
// Miernik odległości z paskiem świetlnym
// Im bliżej jesteś, tym więcej lampek świeci: zielone, potem pomarańczowe, potem czerwone.
#include <Adafruit_NeoPixel.h>
const int TRIG_PIN = 9; // Trig z HC-SR04 na pin 9
const int ECHO_PIN = 10; // Echo z HC-SR04 na pin 10
const int RING_PIN = 6; // DI z pierścienia LED na pin 6
const int LICZBA_LED = 8;
const int MAX_ODLEGLOSC = 80; // Dalej niż to (w cm): wszystkie lampki zgaszone
Adafruit_NeoPixel pierscien(LICZBA_LED, RING_PIN, NEO_GRB + NEO_KHZ800);
long zmierzOdleglosc() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long czas = pulseIn(ECHO_PIN, HIGH, 30000);
if (czas == 0) return 999;
return czas / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pierscien.begin();
pierscien.setBrightness(40);
pierscien.show();
}
void loop() {
long odleglosc = zmierzOdleglosc();
Serial.print(F("Odleglosc: "));
Serial.print(odleglosc);
Serial.println(F(" cm"));
// Ile lampek ma świecić? Blisko = 8, daleko = 0
int liczba = map(constrain(odleglosc, 0, MAX_ODLEGLOSC), 0, MAX_ODLEGLOSC, LICZBA_LED, 0);
for (int i = 0; i < LICZBA_LED; i++) {
if (i < liczba) {
if (i < 3) pierscien.setPixelColor(i, pierscien.Color(0, 255, 0)); // Zielony
else if (i < 6) pierscien.setPixelColor(i, pierscien.Color(255, 120, 0)); // Pomarańczowy
else pierscien.setPixelColor(i, pierscien.Color(255, 0, 0)); // Czerwony
} else {
pierscien.setPixelColor(i, 0); // Wyłączone
}
}
pierscien.show();
delay(100);
}
🧠 Co robi kod?
zmierzOdleglosc()mierzy odległość za pomocą HC-SR04.map()przelicza odległość na liczbę lampek: od 0 do 8.- Pierwsze 3 lampki są zielone, następne 3 pomarańczowe, a ostatnie 2 czerwone.
🎯 Spróbuj…
- Spraw, żeby wszystkie lampki migały na czerwono, gdy jesteś bliżej niż 10 cm
- Dodaj brzęczyk, który piszczy przy czerwonym
- Zrób czulszy miernik: wszystkie lampki włączone przy 40 cm zamiast 80 cm
🚀 Zbuduj ten projekt z Codey: otwórz codey.online/pl/starter-kits/uno/projects/distance-light-bar i kliknij ZRÓB TO. Wtedy kod i schemat podłączenia będą od razu gotowe.
Codey Online to produkt od OTRONIC