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