⭐⭐⭐ Wyzwanie
⏱️ 30 minut
Czujnik parkowania deluxe
To luksusowa wersja czujnika parkowania! Pika szybciej, gdy jesteś bliżej. A ekran OLED pokazuje odległość w centymetrach. Jest też pasek. Robi się dłuższy, gdy jesteś bliżej.
🧰 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 · D8 |
Aktywny buzzer · S |
Arduino UNO · 5V |
Aktywny buzzer · + |
Arduino UNO · GND |
Aktywny buzzer · - |
Arduino UNO · A4 |
Ekranik OLED 0,91" · SDA |
Arduino UNO · A5 |
Ekranik OLED 0,91" · SCL |
Arduino UNO · 5V |
Ekranik OLED 0,91" · VCC |
Arduino UNO · GND |
Ekranik OLED 0,91" · 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 brzęczyk: S do pin 8, + do 5V i − do GND.
- Podłącz ekran OLED: SDA do A4, SCL do A5, VCC do 5V i GND do GND.
- Trzy części potrzebują 5V i GND. Użyj pasków + i − na swoim breadboard.
💻 Kod
// Czujnik parkowania deluxe
// Jak zwykły czujnik parkowania, ale teraz widzisz odległość też na ekranie OLED.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.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 BRZECZYK_PIN = 8; // S brzęczyka na pin 8
Adafruit_SSD1306 ekran(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
// Mierzy odległość w centymetrach
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; // Brak echa: nic blisko
return czas / 58;
}
// Pokazuje dużą odległość na ekranie, z paskiem pod spodem
void pokazOdleglosc(long odleglosc) {
ekran.clearDisplay();
ekran.setTextSize(2);
ekran.setCursor(0, 0);
if (odleglosc >= 999) {
ekran.print(F("---"));
} else {
ekran.print(odleglosc);
ekran.print(F(" cm"));
}
// Pasek: im bliżej, tym dłuższy
int dlugosc = map(constrain(odleglosc, 0, 100), 0, 100, 128, 0);
ekran.fillRect(0, 24, dlugosc, 8, SSD1306_WHITE);
ekran.display();
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BRZECZYK_PIN, OUTPUT);
ekran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
ekran.setTextColor(SSD1306_WHITE);
}
void loop() {
long odleglosc = zmierzOdleglosc();
pokazOdleglosc(odleglosc);
if (odleglosc < 5) {
digitalWrite(BRZECZYK_PIN, HIGH); // Bardzo blisko: jeden długi dźwięk
delay(100);
} else if (odleglosc < 50) {
digitalWrite(BRZECZYK_PIN, HIGH); // Krótkie piknięcie
delay(50);
digitalWrite(BRZECZYK_PIN, LOW);
delay(odleglosc * 10); // Bliżej = szybsze pikanie
} else {
digitalWrite(BRZECZYK_PIN, LOW);
delay(100);
}
}
🧠 Co robi kod?
zmierzOdleglosc()mierzy odległość w centymetrach za pomocą HC-SR04.pokazOdleglosc()pokazuje dużą liczbę na ekranie i rysuje pasek przezfillRect().- Brzęczyk pika szybciej, gdy odległość jest mniejsza.
🎯 Spróbuj…
- Pokaż "STOP!" na ekranie, gdy jesteś bliżej niż 5 cm
- Pokaż odległość w metrach, gdy coś jest dalej niż 1 meter
- Dodaj pierścień LED, który zmienia kolor z zielonego na czerwony
🚀 Zbuduj ten projekt z Codey: otwórz codey.online/pl/starter-kits/uno/projects/parking-sensor-deluxe i kliknij ZRÓB TO. Wtedy kod i schemat podłączenia będą od razu gotowe.
Codey Online to produkt od OTRONIC