Arduino Integration

Anleitung zur Verwendung von Arduino-basierten GM-Zählern mit HRNGGUI.

Hardware-Setup

Benötigte Komponenten: - Arduino Uno/Nano/Pro Mini - GM-Röhre (z.B. SBM-20, J305βγ) - Hochspannungsmodul (~400V) - Pull-up Widerstand (10kΩ) - USB-Kabel für Datenübertragung

Verkabelung: - GM-Röhre Anode → HV+ (400V) - GM-Röhre Kathode → Arduino Pin 2 (Interrupt) + 10kΩ Pull-up zu 5V - HV- → Arduino GND

Arduino-Code

Minimal-Code für HRNGGUI-Kompatibilität:

volatile unsigned long pulseCount = 0;
unsigned long lastTime = 0;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(2), countPulse, FALLING);
}

void loop() {
  unsigned long currentTime = millis();
  if (currentTime - lastTime >= 1000) {  // Jede Sekunde
    Serial.println(pulseCount);
    pulseCount = 0;
    lastTime = currentTime;
  }
}

void countPulse() {
  pulseCount++;
}

Erweiterte Version mit Zeitstempel:

void loop() {
  if (pulseCount > 0) {
    unsigned long timestamp = millis();
    Serial.print(timestamp);
    Serial.print(",");
    Serial.println(pulseCount);
    pulseCount = 0;
  }
  delay(100);
}

HRNGGUI-Konfiguration

Für Arduino-Geräte in config.json:

{
  "device": {
    "port": "auto",
    "baudrate": 9600,
    "timeout": 2.0,
    "protocol": "arduino"
  },
  "acquisition": {
    "expected_rate": 30,    // Erwartete counts/min
    "calibration_factor": 1.0
  }
}

Port-Erkennung (manuell): - Windows: COM3, COM4, etc. - Linux: /dev/ttyUSB0, /dev/ttyACM0 - macOS: /dev/cu.usbmodem*

Protokoll-Details

Standard-Format: - Ein Wert pro Zeile - Dezimalzahl (Anzahl Pulse) - Zeilenende: \n

Mit Zeitstempel: - Format: timestamp,count - Timestamp in Millisekunden - Komma-separiert

Fehlerbehandlung: - Ungültige Zeilen werden ignoriert - Timeout führt zu Verbindungsabbruch - Automatischer Reconnect verfügbar

Troubleshooting

Keine Daten empfangen: - Serieller Monitor testen: screen /dev/ttyUSB0 9600 - Baudrate überprüfen (9600 vs. 115200) - Verkabelung und Spannungsversorgung prüfen

Unrealistische Zählraten: - HV-Spannung anpassen (typisch 380-420V) - Störquellen eliminieren (Handy, WLAN) - Pull-up Widerstand überprüfen

Verbindungsabbrüche: - USB-Kabel und -Port wechseln - Timeout-Werte erhöhen - Arduino-Reset vermeiden (DTR deaktivieren)

Optimierungen

Performance: - Buffer-basierte Ausgabe für hohe Raten - Interrupt-basiertes Counting (nicht Polling) - Dedizierte Timer für präzise Zeitstempel

Genauigkeit: - Deadtime-Korrektur implementieren - Temperaturkompensation - Kalibrierung mit bekannter Quelle