Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
Komponenten und Materialien
| Arduino UNO | 1 Stück |
| SG90 Mikro-Servomotor | 1 Stück |
| Ultraschallsensor HC-SR04 (generisch) | 1 Stück |
| Jumper-Kabel (generisch) | 1 Satz |
| Lötfreies Steckbrett (Vollgröße) | 1 Stück |
Benötigte Werkzeuge und Maschinen
- Heißklebepistole (generisch)
- Lötkolben-Set, SolderPro 150
Apps und Online-Dienste
- Arduino IDE
- Processing (The Processing Foundation)
Projektbeschreibung
Der Autor wollte ein Hindernisvermeidungs-Auto bauen, entschied sich aber für ein Sonar-System, da er kein TFT-Display hatte. Die Idee: Ein HC-SR04-Ultraschallsensor wird auf einem Servomotor montiert (mit Heißkleber fixiert), schwenkt über 180° und sendet die Entfernungsdaten per Serial an einen PC, wo Processing eine grafische Darstellung (Radar-Ansicht) erzeugt.
Aufbau
- Ultraschallsensor auf Servo geklebt → schwenkt 0–180° und zurück.
- Arduino misst Distanz per Pulsdauer (Trigger/Echo) und sendet Winkel + Distanz als CSV-String (z. B. „90,45.“).
- Processing liest die serielle Daten, parst Winkel und Distanz und zeichnet einen Radar-Bogen mit erkannten Objekten als rote Linien.
Arduino-Code (C/C++)
#include <Servo.h>
const int trigPin = 12;
const int echoPin = 11;
long duration;
int distance;
Servo s1;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
s1.attach(9);
}
void loop() {
// Vorwärts 0° → 180°
for(int i = 0; i < 180; i++) {
s1.write(i);
delay(30);
distance = calDist();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
}
// Rückwärts 180° → 0°
for(int i = 180; i > 0; i--) {
s1.write(i);
delay(30);
distance = calDist();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
}
}
int calDist() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // cm
return distance;
}
Processing-Code (Java)
import processing.serial.*;
Serial myPort;
String ang = "", distance = "", data = "";
int angle, dist;
void setup() {
size(2000, 800);
myPort = new Serial(this, "COM3", 9600); // Port anpassen!
myPort.bufferUntil('.');
background(0);
}
void draw() {
fill(0, 5);
noStroke();
rect(0, 0, width, height * 0.93);
fill(0, 255);
rect(0, height * 0.93, width, height);
drawRadar();
drawLine();
drawObject();
drawText();
}
void serialEvent(Serial myPort) {
data = myPort.readStringUntil('.');
if (data != null) {
data = data.substring(0, data.length() - 1);
int idx = data.indexOf(",");
ang = data.substring(0, idx);
distance = data.substring(idx + 1);
angle = int(ang);
dist = int(distance);
}
}
// Radar-Hintergrund, Sweep-Linie, Objekte, Text – siehe Originalcode für Details
// ...
Schaltplan
Der Schaltplan zeigt die Verdrahtung: HC-SR04 an Pins 12/11, Servo an Pin 9, Stromversorgung über Arduino (5 V/GND).
Hinweis: In Processing muss der richtige COM-Port eingestellt werden. Die Visualisierung zeigt Distanzringe (10/20/30/40 cm) und Winkelmarkierungen (30°–150°). Erkannte Objekte erscheinen als rote Linien innerhalb von 40 cm.
Herstellungsprozess
- TinyML Spracherkennung mit Edge Impulse auf Arduino Nano 33 BLE Sense
- Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- Ultraschall-Schwebegerät mit Arduino bauen – Akustische Levitation Schritt für Schritt
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Intelligenter Parkplatzzähler: Echtzeit-Fahrzeugverfolgung mit Arduino, Processing & PHP
- Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
- Digitaler Kompass in Echtzeit mit Arduino & Processing bauen