------------------------------
## Anhang 1: Labortest-Spezifikation (Breadboard-Plot & Live-Diagnose-Code)
Dieses Dokument beschreibt den temporären Laboraufbau für die Validierung auf dem Steckbrett unter Verwendung des kostengünstigen PLA-Testgestells. Es dient zur visuellen Überprüfung der Signalstabilität und Justierung der Wandlerachsen am Labortisch.
------------------------------
## Teil 7: Laboraufbau am Breadboard und Test mit Thonny-Plotter## 7.1 Visueller ASCII-Breadboard-Belegungsplan (1 Testkanal)
Die Buchstaben (A–J) stehen für die vertikalen Lochreihen, die Zahlen (1–25) für die horizontalen Zeilen des Steckbretts. Die mittlere Trennrille liegt zwischen E und F.

    STROM-SCHIENE OBEN:  [ 5V / VBUS ]  ============================= (Rot)
    STROM-SCHIENE OBEN:  [    GND    ]  ============================= (Blau)
    
       A   B   C   D   E       F   G   H   I   J
      +-----------------+     +-----------------+
   1  | .   .   .   .   |     | .   .   .   .   |  1
   2  | [== GPIO 0 ==]  |     | [==== VBUS ===] |  2  <-- Brücke zu 5V-Schiene oben
   3  | [== GPIO 1 ==]  |     | [==== VSYS ===] |  3
   4  | [== GPIO 2 ==]  | RASP| [==== GND ====] |  4  <-- Brücke zu GND-Schiene oben
   5  | [== GPIO 3 ==]  | BERRY  | [== 3V3_EN ===] |  5  <-- TX_DRIVE (Sende-Burst)
   6  | [== GPIO 4 ==]  | PICO| [== 3V3_OUT ==] |  6
   7  | [== GPIO 5 ==]  |     | .   .   .   .   |  7  <-- Taster (Kalibrierung)
   8  | [== GPIO 6 ==]  |     | .   .   .   .   |  8  <-- COMPASS_EN (MOSFET Schalter)
   9  | [== GPIO 7 ==]  |     | .   .   .   .   |  9  <-- MODE_JUMPER (Boots-Auswahl)
  10  | [== GPIO 26 ==] |     | .   .   .   .   |  10 <-- ADC0 (OPA2350 Filter-Ausgang)
      +-----------------+     +-----------------+

        |   |   |   |   |       |   |   |   |   |
        V   V   V   V   V       V   V   V   V   V
  14  | .   .   .   .   |     | .   .   .   .   |  14
  15  | .   [ OPA2350 ] |     | [   CD4053B   ] |  15
  16  | .   | 1     8 | |     | | 1        16 | |  16
  17  | .   | 2     7 | |     | | 2        15 | |  17
  18  | .   | 3     6 | |     | | 3        14 | |  18
  19  | .   | 4     5 | |     | | :         : | |  19
  20  | .   +---------+ |     | +-------------+ |  20
  21  | .   .   .   .   |     | .   .   .   .   |  21
  22  | [ BSS84 MOSFET ]|     | .   .   .   .   |  22
  23  | | G   D   S |   |     | .   .   .   .   |  23
      +-----------------+     +-----------------+
  
    STROM-SCHIENE UNTEN: [ 3,3V / OUT]  ============================= (Rot)
    STROM-SCHIENE UNTEN: [    GND    ]  ============================= (Blau)

## Ergänzende Schritt-für-Schritt Verdrahtungsliste:

* Hauptstrom: Verbinden Sie Pico VBUS (F2) mit der oberen roten Leiste. Verbinden Sie Pico GND (F4) mit der oberen blauen Leiste.
* Logikspannung: Brücken Sie Pico 3V3_OUT (H6) auf die untere rote Schiene. Verbinden Sie die untere blaue Schiene mit der oberen blauen Schiene (Gemeinsame Masse).
* BSS84 MOSFET Schalter (Lagesensor & Kompass-Schiene):
* Source (A23) an die untere rote Schiene (3,3 V).
   * Gate (A23) an Pico GPIO 6 (A8). Ein 100 kΩ Widerstand zieht das Gate zusätzlich permanent hoch zu 3,3 V (Pull-Up).
   * Drain (B23) bildet das schaltbare Power-Signal für das LSM6DS3-IMU-Modul und den Kompass.
* Analog-Matrix: CD4053B Pin 16 an 5V (Obere rote Schiene). Pin 8, 7, 6 gesammelt an GND. Pico GPIO 2 (A4) schaltet Pin 11 und Pin 10 zur Richtungsumkehr.
* Verstärkerkette: OPA2350 Pin 8 an 5V (Obere rote Schiene), Pin 4 an GND. Das verstärkte Echo-Signal von Pin 7 wird per Kabel direkt an Pico GPIO 26 (A10, ADC0) übergeben.

------------------------------
## 7.2 Interaktiver MicroPython Live-Diagnose-Code (lab_diagnostic.py)
Dieses Skript wird über Thonny direkt auf den Raspberry Pi Pico geladen. Es visualisiert das hochfrequente analoge Antwortsignal des Piezo-Einschlagssensors und die Impulsausgabe der Regenwippe live im Thonny-Plotter, um die Filterstufen und die mechanische Wippenfunktion am Labortisch visuell einzustellen und zu validieren.

# ==============================================================================# LABOR-DIAGNOSE: PIEZO-RESONANZ & RAINGAUGE INTERRUPT PLOTTER# ==============================================================================import machineimport timeimport math
# Pin-Deklarationen (Laboraufbau)PIN_PIEZO_ADC = 26       # ADC0 (Eingang vom Piezo-Verstärker)PIN_WIPPE_INT = 16       # GPIO16 (Digitaleingang von der Hall-Wippe)
# Hardware-Peripherie initialisierenpiezo_adc = machine.ADC(PIN_PIEZO_ADC)wippe_pin = machine.Pin(PIN_WIPPE_INT, machine.Pin.IN, machine.Pin.PULL_UP)
# Globale Diagnosezählerwippen_klicks = 0letzter_klick_ms = 0wippen_event_trig = False
# Interrupt-Routine für die Wippe (mit Software-Debounce)def wippe_callback(pin):
    global wippen_klicks, letzter_klick_ms, wippen_event_trig
    jetzt = time.ticks_ms()
    # 250ms Sperrzeit gegen mechanisches Nachprellen im Labor
    if time.ticks_diff(jetzt, letzter_klick_ms) > 250:
        wippen_klicks += 1
        letzter_klick_ms = jetzt
        wippen_event_trig = True
# Interrupt aktivieren (Fallende Flanke durch Hall-Switch)
wippe_pin.irq(handler=wippe_callback, trigger=machine.Pin.IRQ_FALLING)

print("======================================================================")
print(" STARTING LIVE DIAGNOSTIC PLOTTER - USE THONNY PLOTTER VIEW TO VISUALIZE")
print("======================================================================")
# Offset-Ermittlung (Nullpunkt des AC-gekoppelten Operationsverstärkers)offset_sum = 0for _ in range(100):
    offset_sum += piezo_adc.read_u16()
    time.sleep_us(100)BIAS_OFFSET = offset_sum // 100
last_sample = 0amplitude_peak = 0
while True:
    # 1. Hochfrequentes Auslesen des akustischen Signals (Piezo)
    raw_sample = piezo_adc.read_u16()
    
    # Rechnerische Entfernung des Gleichspannungsanteils
    ac_signal = raw_sample - BIAS_OFFSET
    
    # Digitaler Hochpass-Filter (Differenz zum vorherigen Sample)
    gefilterter_impuls = ac_signal - last_sample
    last_sample = ac_signal
    
    # Betrag der Amplitude für den Plotter
    abs_amplitude = abs(gefilterter_impuls)
    
    if abs_amplitude > amplitude_peak:
        amplitude_peak = abs_amplitude
    else:
        # Langsame Peak-Dämpfung für bessere Sichtbarkeit im Plotter
        amplitude_peak = max(0, amplitude_peak - 100)

    # 2. Wenn die mechanische Wippe gekippt ist, Signal im Plotter simulieren
    wippe_marker = 0
    if wippen_event_trig:
        wippe_marker = 15000  # Deutlicher Impuls-Ausschlag im Kurvenverlauf
        wippen_event_trig = False
        print("-> [INFO] Wippe gekippt! Klicks gesamt: {}".format(wippen_klicks))

    # 3. Formatierte Datenausgabe exakt für den Thonny-Plotter (Tupel-Format)
    # Erzeugt drei parallele Live-Graphen: Das Rohsignal, den gefilterten Peak und den Wippen-Klick
    print("({}, {}, {})".format(ac_signal, amplitude_peak, wippe_marker))
    
    # Abtastfrequenz auf ca. 2 kHz begrenzen
    time.sleep_us(500)

------------------------------
## 7.3 MicroPython Live-Diagnose Code (echo_plotter.py)
Dieses Skript steuert das Steckbrett im Labor an. Es erzeugt Software-Bursts am Sende-Pin, wechselt die Multiplexer-Kanäle und gibt die rohen ADC-Spannungen direkt für den grafischen Echtzeit-Plotter in Thonny aus.

import machineimport time
# --- INITIALISIERUNG ---adc_eingang = machine.ADC(26) # ADC0 (GPIO 26 / Pin 31)dir_sel     = machine.Pin(2, machine.Pin.OUT)tx_pin      = machine.Pin(3, machine.Pin.OUT)compass_en  = machine.Pin(6, machine.Pin.OUT)
# Zur Sicherheit: Kompass/IMU-Schalter zu Beginn ausschalten (Gate HIGH = AUS)
compass_en.value(1)
dir_sel.value(0)
tx_pin.value(0)

print("Starte Labor-Diagnose...")
print("WICHTIG: In Thonny jetzt das Menü 'Ansicht -> Plotter' aktivieren!")
time.sleep(1)
while True:
    # 1. CD4053B Multiplexer auf Vorwärtsstrecke fixieren
    dir_sel.value(0)
    time.sleep_ms(2) # Einschwingzeit der Analogstufen abwarten
    
    # 2. Generierung eines präzisen 40-kHz-Ultraschall-Bursts (8 Pulse) via Software
    # Jede Halbwelle dauert 12 Mikrosekunden, eine volle Welle somit 24µs (~41.6 kHz)
    for _ in range(8):
        tx_pin.value(1)
        time.sleep_us(12)
        tx_pin.value(0)
        time.sleep_us(12)

    # 3. Hochfrequentes Erfassungsfenster für den Thonny-Plotter
    # Wir tasten den OPA2350-Ausgang direkt nach dem Senden 250-mal ab
    for _ in range(250):
        # 16-Bit Rohwert auf 12-Bit Hardware-Ebene (0 - 4095) normieren
        raw_val = adc_eingang.read_u16() // 16 
        
        # Ausgabe im geforderten Plotter-Format: (Zahl) in runden Klammern
        print("({})".format(raw_val))
        
    # Kurze Pause, um ein Überlaufen des seriellen Puffers in Thonny zu verhindern
    time.sleep_ms(80)

------------------------------
## 7.4 Justieranweisung am Labortisch

   1. Thonny-Vorbereitung: Starten Sie das Skript und öffnen Sie den Plotter über Ansicht -> Plotter. Sie sehen nun ein fortlaufendes Oszilloskop-Fenster.
   2. Die Ruhelinie: Liegt kein Ultraschall-Echo an, verharrt die Kurve starr in der vertikalen Mitte bei 2048. Dies bestätigt, dass die virtuelle Analogmasse ($V_{\text{ref}} = 2{,}5\text{V}$ am Breadboard) stabil anliegt.
   3. Das Signal-Echo optimieren: Platzieren Sie das 3D-gedruckte Prototypen-Gestell über der Glasscheibe. Drehen und verschieben Sie die Wandler in den Aufnahmeröhrchen vorsichtig mit der Hand.
   4. Das Ziel: Sobald die akustischen Achsen im 45°-Winkel präzise auf das Glas treffen und reflektiert werden, schlägt die Kurve im Plotter wellenförmig als massive Sinus-Keule nach oben und unten aus. Optimieren Sie die Position so lange, bis die Amplitudenspitzen maximalen Ausschlag zeigen. Ihr Labortest ist damit erfolgreich validiert.

------------------------------
Gib mir kurz Bescheid, wenn du diesen Block gesichert hast. Dann schicke ich dir sofort das finale Kapitel 8 (Evaluierung der Systemvorteile, Rauschschutz, Star-GND und wirtschaftlicher Dual-Modus) zu, und dein Kompendium ist perfekt beisammen!


