15–20 J
📖 Page 05 von 8 · ~25 Min

Sensoren: wie ein MCU die Welt liest 🌡️

Ein MCU ohne Sensoren ist wie ein Mensch mit Kopfhörern und Augenklappe — er kann zwar denken, kriegt aber nichts mit. Auf dieser Page lernst du die 4 Hauptarten, wie Sensoren Daten an den MCU schicken: Digital, Analog, I2C und SPI. Plus: ein Sensor-Zoo, damit du weisst, was du wann nimmst.

🌡 Temperatur · Druck · Licht 📐 IMU · Distanz · Ultraschall 🔌 4 Protokolle erklärt
MCU brain 🌡 📡 IMU 🎯 💧 "Read the World"

01Wie redet ein Sensor mit dem MCU?

Sensoren sind kleine Spezialisten — einer für Temperatur, einer für Licht, einer für Beschleunigung. Aber wie schicken sie ihre Daten an den MCU? Vier Hauptwege:

🔁 Digital 1 Pin

Sensor sagt nur „JA/NEIN" — z.B. PIR-Bewegungsmelder, Reedkontakt, Endschalter. Schlechteste Auflösung, einfachste Verkabelung.

✅ Easy zu lesen mit digitalRead()
❌ Nur Boolean — keine Werte zwischen 0 und 1

📊 Analog 1 Pin

Sensor gibt eine variable Spannung aus (0V – Vcc). Der MCU misst sie mit ADC. Klassiker: Potentiometer, LDR, einfache Temperatursensoren.

✅ Auflösung 1024–4096 Werte, kontinuierlich
❌ Empfindlich auf Rauschen, langsam, jeder Sensor braucht einen Pin

🔗 I2C 2 Pins

Bus-Protokoll: viele Sensoren teilen sich 2 Drähte (SDA + SCL). Jeder Sensor hat eine eigene Adresse. Geschwindigkeit: 100 kHz – 1 MHz.

✅ Bis zu 127 Geräte am selben Bus
❌ Langsamer als SPI, Adressen-Konflikte möglich

⚡ SPI 4 Pins

Hochgeschwindigkeits-Bus: 4 Leitungen (MOSI, MISO, SCK, CS). Jeder Sensor hat ein eigenes CS-Kabel — der MCU wählt aus.

✅ Bis 50 MHz, sehr schnell
❌ Mehr Pins, mehr Kabelsalat
🤔
Welches Protokoll wann? Faustregel: Digital für Buttons & Bewegung, Analog für Potis & einfache Sensoren, I2C für Hauptsensoren (Temp, IMU, OLED), SPI für schnelle Sensoren oder SD-Karten/Displays.

02ADC: wie aus Spannung eine Zahl wird

„Analog lesen" heisst, der MCU wandelt eine analoge Spannung in eine digitale Zahl um — mit dem Analog-Digital-Converter (ADC). So funktioniert's:

Beispiel: Photo-Widerstand (LDR) am Arduino Uno

Der LDR ändert seinen Widerstand je nach Licht — von ~1 kΩ (hell) bis ~1 MΩ (dunkel). Du verschaltest ihn mit einem festen Widerstand zu einem Spannungsteiler. Das Resultat: eine Spannung zwischen 0V und 5V am Analog-Pin A0.

Der Arduino ADC hat 10 Bit Auflösung = 2¹⁰ = 1024 Stufen. Bei 5V: jede Stufe ist ~4.88 mV. analogRead(A0) gibt dir einen Wert zwischen 0 und 1023.

Arduinoconst int LDR = A0; void setup() { Serial.begin(9600); } void loop() { int raw = analogRead(LDR); // 0–1023 float voltage = raw * (5.0 / 1023.0); // in Volt Serial.print("Helligkeit: "); Serial.println(raw); delay(100); }
🤓
Auflösung-Vergleich: Arduino Uno hat 10-bit ADC (1024 Stufen). ESP32 hat 12-bit (4096 Stufen). Raspberry Pi hat gar keinen ADC — du brauchst einen externen Chip wie MCP3008 (über SPI). Das ist einer der Gründe, warum RPi für Analog-Projekte oft schlechter ist als ein MCU.

03Live-Demo: I2C-Bus in Action 🔗

Schau zu, wie der MCU (Master) über zwei einzige Drähte mit drei verschiedenen Sensoren redet — jeder hat seine eigene Adresse:

MCU Master SDA SCL 🌡 BMP280 addr: 0x76 📐 MPU6050 addr: 0x68 📺 OLED addr: 0x3C 4.7kΩ +3.3V
[MASTER] Bus initialized at 100 kHz · Click a button above to trigger a transaction.
🤓
Was hier passiert: Der Master „addressiert" einen Slave (z.B. 0x76 für den BMP280), schickt eine Anfrage, der Slave antwortet mit Daten. Die anderen Slaves bleiben still — sie hören nur ihre eigene Adresse. So können bis zu 127 Geräte einen Bus teilen. Bei deinem Smartphone laufen exakt so die Sensoren (Beschleunigung, Kompass, Lichtsensor, Touchpanel-Controller).

04Sensor-Zoo: die wichtigsten 9 zum Bookmarken

Diese Sensoren findest du in fast jedem Maker-Projekt. Schnellüberblick mit Protokoll + Lab-Preis:

🌡

DHT22 1-Wire

Temperatur (-40 bis 80°C) + Luftfeuchte. Klassiker für Wetterstationen.

CHF 6
📐

MPU6050 I2C

6-Achs-IMU: 3× Beschleunigung + 3× Drehrate. Für Drohnen, Wearables.

CHF 3
🔭

VL53L0X I2C

Time-of-Flight Distanz-Sensor. 0–2 m, ±3% genau. Laser-basiert.

CHF 8
📡

HC-SR04 Digital

Ultraschall-Distanz. 2 cm – 4 m. Klassiker für Roboter.

CHF 2
🌬

BMP280 I2C/SPI

Druck + Temperatur. Daraus → Höhe (±1 m). Für Drohnen / Höhenmesser.

CHF 4

BH1750 I2C

Lichtstärke in Lux (0–65 000). Genauer als ein einfacher LDR.

CHF 4
👋

PIR HC-SR501 Digital

Bewegungsmelder. Reagiert auf Wärme-Veränderung. Klassiker für Alarme.

CHF 3
🌫

MQ-2 Analog

Gas-Sensor (Rauch, LPG, Methan). Liefert Analog-Wert, nicht super präzise.

CHF 3
🌱

Bodenfeuchte Analog

Misst Feuchtigkeit der Erde. Mega für Pflanzen-Monitor-Projekte.

CHF 2

055 Pro-Tipps, die Stunden Debug ersparen

Die typischen Stolpersteine, in die jeder Maker einmal tritt:

Pull-Up-Widerstände bei I2C

Die SDA + SCL-Leitungen brauchen meistens 4.7 kΩ Pull-Ups zu Vcc. Manche Sensor-Module haben sie eingebaut, manche nicht. Wenn der Bus nicht reagiert → das prüfen.

Adresse mit i2cdetect finden

Sensor angeschlossen aber weisst die Adresse nicht? Auf RPi: i2cdetect -y 1. Auf Arduino: I2C-Scanner-Sketch. Zeigt alle aktiven Adressen.

Spannungen nicht mischen

3.3V-Sensor an 5V-MCU? Du brauchst einen Level-Shifter (BSS138, TXS0108). Sonst killst du den Sensor — manchmal still und langsam.

Kabel kurz halten

I2C-Bus wird ab ~50 cm Kabel-Länge wackelig. Bei längeren Strecken: I2C-Buffer-Chips (P82B96) verwenden, oder anderes Protokoll wählen.

Datenblatt lesen lohnt sich

Jeder Sensor hat ein PDF mit allen Specs. Klingt nerdig, ist aber Gold wert: zeigt min/max Spannungen, Timing-Diagramme, Code-Beispiele.

06Echtes Code-Beispiel: BMP280 mit Arduino

Druck + Temperatur lesen in 10 Zeilen — dank Adafruit-Library:

Arduino + I2C#include <Wire.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; void setup() { Serial.begin(9600); if (!bmp.begin(0x76)) { // I2C address Serial.println("BMP280 nicht gefunden!"); while (1); } } void loop() { Serial.print("Temp: "); Serial.print(bmp.readTemperature()); Serial.print(" °C, Druck: "); Serial.print(bmp.readPressure() / 100.0); Serial.println(" hPa"); delay(1000); }
📚
Library-Magie: Adafruit und Sparkfun haben für fast jeden bekannten Sensor eine fertige Library mit dem Namensschema Adafruit_*. Library-Manager öffnen → Sensor-Namen suchen → installieren → Beispiel-Sketch laden. So sparst du Stunden an Datenblatt-lesen.

🎯Key Takeaways aus Page 05