Arduino GeigerzaehlerSimulator
Geigerzähler Simulator
Hier mal ein erster Entwurf von einem Geigerzähler Simulator als Spielzeug. Basis ist ein Raspberry Pi Pico. Er verwendet:
- 9 LEDs als optische Anzeige
- ein Voltmeter als Nadelanzeige
- Einen Lautsprecher
Hier der Code den ich für die erste Version verwendet habe
/*
Geigerzaehler Simulator V 1.0 Für Rasperberry Pi Pico Geigerzähler haben etwa maximal 500 counts pro Minute, etwa 8,3 counts pro Sekunde zur Vereinfachung verwnedet das Programm 600 counts pro Minute, was 10 counts pro Sekunde macht das ergibt etwa alle 100 ms +- Jitter einen Impüls. Mit 10 ms Zykluszeit sollte das ganz gut werden.
- /
// Variablen für die LED Ausgabe auf 9 LEDs // 1 - 3 grün // 4 - 6 gelb // 7 - 9 rot bool bLED1 , bLED2 , bLED3 , bLED4 , bLED5 , bLED6 , bLED7 , bLED8 , bLED9 ; int iLED1 = 6; int iLED2 = 7; int iLED3 = 8; int iLED4 = 9; int iLED5 = 10; int iLED6 = 11; int iLED7 = 12; int iLED8 = 13; int iLED9 = 14;
// Varibalen für den Lautsprecher Ausgang bool bSpeaker; int iSpeaker = 17;
// Variablen für den Analog Zeiger Ausgang bool bAnalog; int iAnalog = 16;
// Variable für Potentionmeter Eingang ( Pegel , Strahlenlevel) int iStrahlenlevel; // (0.. 500) int iPinStrahlenlevel = 28; // ADC Pin für das Strahlenlevel
// sonstige Variablen
int iLoopCounter; // Schleifenzaehler
void setup() {
// Setup der Pins pinMode(LED_BUILTIN, OUTPUT); // Takt blinken der internen LED (GP 25)
pinMode(iLED1, OUTPUT); pinMode(iLED2, OUTPUT); pinMode(iLED3, OUTPUT); pinMode(iLED4, OUTPUT); pinMode(iLED5, OUTPUT); pinMode(iLED6, OUTPUT); pinMode(iLED7, OUTPUT); pinMode(iLED8, OUTPUT); pinMode(iLED9, OUTPUT);
pinMode(iSpeaker, OUTPUT); pinMode(iAnalog, OUTPUT);
}
// the loop function runs over and over again forever void loop() {
iStrahlenlevel = analogRead(iPinStrahlenlevel); if (iStrahlenlevel > 640) { iStrahlenlevel = 640; }
if (iLoopCounter <= 0) { // Dauer bis zum nächsten Impuls // minimum 10 bei Strahlenlevel 600 // maximum xxx bei Strahlenlevel 0 iLoopCounter = 5 + random((600-iStrahlenlevel) / 10 ,(600-iStrahlenlevel) / 10 + (600 / (iStrahlenlevel + 1))); // +1 um division by zero zu vermeiden
digitalWrite (iSpeaker, HIGH); digitalWrite (iAnalog, HIGH); } else { iLoopCounter -= 1; digitalWrite (iSpeaker, LOW); digitalWrite (iAnalog, LOW); }
bLED1 = iStrahlenlevel > 0; bLED2 = iStrahlenlevel > 80; bLED3 = iStrahlenlevel > 160; bLED4 = iStrahlenlevel > 240; bLED5 = iStrahlenlevel > 320; bLED6 = iStrahlenlevel > 400; bLED7 = iStrahlenlevel > 480; bLED8 = iStrahlenlevel > 560; bLED9 = iStrahlenlevel > 630;
digitalWrite (iLED1, bLED1); digitalWrite (iLED2, bLED2); digitalWrite (iLED3, bLED3); digitalWrite (iLED4, bLED4); digitalWrite (iLED5, bLED5); digitalWrite (iLED6, bLED6); digitalWrite (iLED7, bLED7); digitalWrite (iLED8, bLED8); digitalWrite (iLED9, bLED9);
delay(10);
}