⭐⭐⭐ Herausforderung
⏱️ 30 Minuten
Parksensor deluxe
Die Deluxe-Version vom Parksensor! Er piept schneller, wenn du näher kommst. Und das OLED zeigt den Abstand in Zentimetern. Mit einem kleinen Balken. Der wird länger, wenn du näher kommst.
🧰 Was brauchst du?
🔌
USB-Kabel + Jumperkabel🗺️ Schaltplan
Folge den Drähten vom Arduino zu jedem Teil. Die Farben der Drähte darfst du selbst wählen.
| Von | Nach |
|---|---|
Arduino UNO · D9 |
Abstandssensor HC-SR04 · Trig |
Arduino UNO · D10 |
Abstandssensor HC-SR04 · Echo |
Arduino UNO · 5V |
Abstandssensor HC-SR04 · Vcc |
Arduino UNO · GND |
Abstandssensor HC-SR04 · Gnd |
Arduino UNO · D8 |
Aktiver Summer · S |
Arduino UNO · 5V |
Aktiver Summer · + |
Arduino UNO · GND |
Aktiver Summer · - |
Arduino UNO · A4 |
OLED-Display 0,91" · SDA |
Arduino UNO · A5 |
OLED-Display 0,91" · SCL |
Arduino UNO · 5V |
OLED-Display 0,91" · VCC |
Arduino UNO · GND |
OLED-Display 0,91" · GND |
🛠️ So baust du es
- Schließe den HC-SR04 an: Trig an Pin 9, Echo an Pin 10, VCC an 5V und GND an GND.
- Schließe den Summer an: S an Pin 8, + an 5V und − an GND.
- Schließe das OLED an: SDA an A4, SCL an A5, VCC an 5V und GND an GND.
- Drei Teile brauchen 5V und GND. Benutze die + und − Leisten von deinem breadboard.
💻 Der Code
// Parksensor deluxe
// Wie der normale Parksensor. Aber jetzt siehst du den Abstand auch auf dem OLED.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int TRIG_PIN = 9; // Trig vom HC-SR04 an Pin 9
const int ECHO_PIN = 10; // Echo vom HC-SR04 an Pin 10
const int SUMMER_PIN = 8; // S vom Summer an Pin 8
Adafruit_SSD1306 bildschirm(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
// Misst den Abstand in Zentimetern
long missAbstand() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long zeit = pulseIn(ECHO_PIN, HIGH, 30000);
if (zeit == 0) return 999; // Kein Echo: nichts in der Naehe
return zeit / 58;
}
// Zeigt den Abstand gross auf dem Bildschirm, mit einem Balken darunter
void zeigeAbstand(long abstand) {
bildschirm.clearDisplay();
bildschirm.setTextSize(2);
bildschirm.setCursor(0, 0);
if (abstand >= 999) {
bildschirm.print(F("---"));
} else {
bildschirm.print(abstand);
bildschirm.print(F(" cm"));
}
// Balken: je naeher, desto laenger
int laenge = map(constrain(abstand, 0, 100), 0, 100, 128, 0);
bildschirm.fillRect(0, 24, laenge, 8, SSD1306_WHITE);
bildschirm.display();
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(SUMMER_PIN, OUTPUT);
bildschirm.begin(SSD1306_SWITCHCAPVCC, 0x3C);
bildschirm.setTextColor(SSD1306_WHITE);
}
void loop() {
long abstand = missAbstand();
zeigeAbstand(abstand);
if (abstand < 5) {
digitalWrite(SUMMER_PIN, HIGH); // Ganz nah: ein langer Ton
delay(100);
} else if (abstand < 50) {
digitalWrite(SUMMER_PIN, HIGH); // Kurzer Piep
delay(50);
digitalWrite(SUMMER_PIN, LOW);
delay(abstand * 10); // Naeher = schneller piepen
} else {
digitalWrite(SUMMER_PIN, LOW);
delay(100);
}
}
🧠 Was macht der Code?
missAbstand()misst den Abstand in Zentimetern mit dem HC-SR04.zeigeAbstand()schreibt die Zahl groß auf den Bildschirm und zeichnet einen kleinen Balken mitfillRect().- Der Summer piept schneller, wenn der Abstand kleiner wird.
🎯 Probier mal …
- Zeige "STOP!" auf dem Bildschirm, wenn du näher als 5 cm bist
- Zeige den Abstand in Metern, wenn etwas weiter als 1 Meter weg ist
- Füge den LED-Ring hinzu. Er soll von grün nach rot wechseln
🚀 Baue dieses Projekt mit Codey: Öffne codey.online/de/starter-kits/uno/projects/parking-sensor-deluxe und klicke auf BAU DAS. Dann sind der Code und der Schaltplan sofort bereit.
Codey Online ist ein Produkt von OTRONIC