Benutzer-Werkzeuge

Webseiten-Werkzeuge


schaltungen

Elektronische Schaltungen



Taktgeber

Um eine kleine LED im Takt blinken zu lassen, verwendet man einen NE555.

Benötigt werden folgende Bauteile:

  • NE555
  • Kondensator (C1, 100µF)
  • Kondensator (C2, 104, 100nF)
  • Widerstand (R1, 10K Ohm)
  • Widerstand (R2, 10K Ohm)
  • Widerstand (R3, 585 Ohm)
  • LED, gelb oder rot
  • Lochrasterplatine
  • 9V Block


Die LED blinkt mit einer Frequenz von 0,472 Hz.


Die Frequenz lässt sich auch berechnen:

ne555_taktgeber.xlsx


Quellen:
https://de.wikipedia.org/wiki/Multivibrator
http://www.hobby-bastelecke.de/projekte/signalgenerator_rechteck.htm
http://www.dieelektronikerseite.de/Tools/NE555.htm
http://www.ne555.at/2014/index.php/timer-ic-ne555/grundschaltungen/146-astabile-kippstufe-rechteckgenerator.html
http://www.jb-electronics.de/html/elektronik/digital/d_takt1.htm
https://elektroniktutor.de/analogverstaerker/timer555.html



Transistor

Optokoppler

Grundlage meiner Schaltungsexperimente ist diese Seite:
http://elektronik.skyline-service.de/elektronik/optokoppler/



Geiger-Müller-Zählrohr auslesen

Zum Bau eines Detektors für Beta- und Gammastrahlung verwendet man ein Geiger-Müller-Zählrohr.
Dieses mit Edelgas gefüllte Metallrohr benötigt eine Hochspannung von ca. 400 V. Die Teilchen erzeugen eine Entladung innerhalb des Rohrs die wiederum gemessen werden kann.

Die Hochspannung wird mittels Taktgeber, Drossel und Diode erzeugt. Das Signal wird über eine Transistor/Optokoppler-Stufe von einem Arduino Uno detektiert.

Hier die Schaltung, Bauteilliste sowie Fotos vom Testaufbau auf einer Steckplatine.


Benötigt werden folgende Bauteile:

  • IC (NE555) - Conrad 152184-62 - 0,24 €
  • Kondensator (1 nF) - Conrad 1235230-62 - 0,10 €
  • Kondensator (10 nF/1250V) - Conrad 456500-62 - 0,87 €
  • Widerstand (220 K Ohm) - Conrad 1417665-62 - 0,06 €
  • Widerstand (330 Ohm) - Conrad 405191-62 - 0,09 €
  • Widerstand (1 K Ohm) - Conrad 1417606-62 - 0,10 €
  • Widerstand (100 K Ohm) - Conrad 1417735-62 - 0,06 €
  • Widerstand (15 Ohm / 1 W) - Conrad 1474474-62 - 0,24 €
  • Widerstand (4,7 M Ohm) - Conrad 405698-62 - 0,09 €
  • Diode (1N914 / 100V) - 1262857-62 - 0,10 €
  • Diode (1N4937 / 600V) - 564856-62 - 0,45 €
  • Transistor (FJN3303F oder auch PHE13007) - Conrad 1113124-62 - 0,79 €
  • Transistor (2N3904) - Conrad 163350-62 - 0,20 €
  • Drossel (10 mH) - Conrad 535524-62 - 1,28 €
  • Lochrasterplatine - Conrad 1516559-62 - 9,76 €
  • 9V Block - Aldi - 1,79 €



Die Auswertung des vom Zählrohr kommende Signal erfolt über diese Schaltung:

Hier wird das Signal über einen Spannungsteiler reduziert und über einen Optokoppler an den Arduino Uno übergeben.





Gesamtbautteileliste:

Menge 	Artikel 		Bezeichnung 								Einzelpreis Summe

1 Stück 	152184 		IC NE555P DIP8 TID 							EUR 0.24 	EUR 0.24
1 Stück 	1235230 	MKT 1nF 100V 10% RM5 Ammo 					EUR 0.11 	EUR 0.11
1 Stück 	456500 		KONDENS. FKP1 0,01µF 1250VDC 10% 			EUR 0.94 	EUR 0.94
1 Stück 	1417665 	Kohle-Widerst. 5% 0207 0,25W 220K 			EUR 0.06 	EUR 0.06
1 Stück 	405191 		K.-WID.0,5 W 330R BF 0411 5% 				EUR 0.10 	EUR 0.10
1 Stück 	1417606 	MET.-WID.1K 0,6W 1% 0207 					EUR 0.11 	EUR 0.11
1 Stück 	1417735 	Kohle-Widerst. 5% 0207 0,25W 100K 			EUR 0.06 	EUR 0.06
1 Stück 	1474474 	WIDERSTAND 15K OHM 1W 5% AXIAL 				EUR 0.26 	EUR 0.26
1 Stück 	405370 		K.-WID.0,5 W 10K BF 0411 5% 				EUR 0.10 	EUR 0.10
1 Stück 	1262857 	DIODE DO-214-ACLL SIG 1N914BTR DO-35 ONS 	EUR 0.10 	EUR 0.10
1 Stück 	564856 		DIODE SCHN REC 1N4937-E3/54 DO-204AL VIS 	EUR 0.49 	EUR 0.49
1 Stück 	1113124 	TRANS NPN 400V PHE13007,127 TO-220AB NXP 	EUR 0.85 	EUR 0.85
1 Stück 	535524 		DROSSEL 10 MH 								EUR 1.39 	EUR 1.39
2 Stück 	163350 		TRANSISTOR 2 N 3904BU TO92 ONS 				EUR 0.22 	EUR 0.44
1 Stück 	405418 		K.-WID.0,5 W 22K BF 0411 5% 				EUR 0.10 	EUR 0.10
1 Stück 	1417669 	Kohle-Widerst. 5% 0207 0,25W 390R 			EUR 0.06 	EUR 0.06
2 Stück 	1417697 	Kohle-Widerst. 5% 0207 0,25W 10K 			EUR 0.06 	EUR 0.12
1 Stück 	1584824 	K.-WID. 100 KR 1/4W 0207 5% 6.8X2.5MM 		EUR 0.12 	EUR 0.12
1 Stück 	1265480 	OPTOCOUPLER DARL 1.5KVRM 4N33M DIP-6 ONS 	EUR 0.60 	EUR 0.60
1 Stück 	1589456 	KERKO 220PF 500V RM5,08 Y5P 				EUR 0.10 	EUR 0.10
2 Stück 	189502 		IC-FASSUNG 8POLIG 							EUR 0.16 	EUR 0.32

Gesamtpreis 	EUR 6.67 



Ardunio-Script

arduino_uno_gm_display_netz_messdaten.ino


/* Quelle:
*  https://beelogger.de/?page_id=28
*  https://funduino.de/nr-13-lcd-display
*  https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
*/

// Display Standard
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
//LiquidCrystal lcd(12, 11, 5, 4, 3, 6);      // alte ursprungsverkabelung ohne netzwerk 
LiquidCrystal lcd(8, 9, 5, 7, 3, 6);      // neue verkabelung mit netzwerk
/*
 The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2 -> neu: 6
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
*/

// Impulszaehler
// Digitaleingang 2 mit Ground über 4,7 K Ohm Widerstand verbinden
// Spannungssignal von NE555 Port 3 wird an Digitaleingang 2 angelegt
//
//  Ground - 4,7KOhm - Signal von NE555 - Digitaleingang 2
// Quelle: http://forum.arduino.cc/index.php?topic=260131.0
// http://profhof.com/arduino-als-frequenzzaehler/
// http://www.hjberndt.de/soft/ardfreq.html
//

// Setzen der variabeln und ausgangswerte
int pin = 2;
long counterstand =0;
#define IMPULSEINGANG 2
long start;                 // dauerausgabe 
float dauer;                // dauerausgabe 
float dauer2;               // dauerausgabe 
int messzeit = 15000;       // messzeit
float cps;                  // counts per second
float cpm;                  // counts per minute
float dosisleistung;        // dosisleistung in µSv (142 CPM = 1µSv)
float Bq;                   // Bq (1 Bq = 1 CPM)

long counts;
float frequenz;


// beginn netzwerk

#include <SPI.h>
#include <Ethernet.h> 
 
// Hier muss eine eigene IP-Adresse, Gateway und DNS eingetragen werden, 
// wenn die Netzwerkkonfiguration nicht über DHCP bezogen wird
// Sofern nicht mehrere Ethernet-Apdater gleichzeitig verwendet werden, 
// braucht die MAC-Adresse nicht geändert werden
// Bitte darauf achten, dass die Adressen im Netzwerk nicht doppelt vergeben sind
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 2);
IPAddress gateway(192, 168, 1, 254);
IPAddress dnServer(192, 168, 1, 254);
 
// IP-Adresse statt Domainname zum Webserver mit Upload-Skript 
// Bei verwendung der IP-adresse ist "static char serverName[]" stattdessen auszukommentieren
IPAddress server(192, 168, 1, 2); 
 
// Domainname statt IP-Adresse zum Webserver mit beelogger-Skript
//static char server[] = "meineDomain.de"; 
 
// Verzeichnis in dem die Webserver-Skripte für den jeweiligen Logger liegen (mit nachgestelltem "/") 
// z.B. const char* pfad[1][1]={"test/"};
const char* pfad[1][1]={"/arduino/"};
 
// Passwort vom Webserver-Skript
static char Passwort[] = "!meinPasswort!";
 
EthernetClient client;
 
// Test-Messdaten (regulär kommen die Messdaten von den Sensoren)
float wert1 = cpm;
float wert2 = dosisleistung;
float wert3 = 40.00;
float wert4 = 60.00;
float wert5 = 50000.00;
long wert6 = 25000;
long wert7 = 200;
long wert8 = 500;
 
long Check;

// ende netzwerk


void setup() {
  Serial.begin(9600);

  //  - beginn netzwerk - 
  delay(5000);
 
  pinMode(4,OUTPUT);    // Pin 4 wird für die Deaktivierung der SD-Karte genutzt, 
  digitalWrite(4,HIGH); // falls ein entsprechendes Ethernet-Shield mit SD-Adapter verwendet wird 
 
  // Für Verwendung der Konfiguration über DHCP
  //if (Ethernet.begin(mac) == 0) Serial.println("Fehler bei der Konfiguration des Ethernet-Adapters ueber DHCP");
 
  // Für Verwendung die eigenen Konfiguration
  Ethernet.begin(mac, ip, dnServer, gateway);      
       
  delay(1000);
  // - ende netzwerk - 

  // - beginn impulse -
  attachInterrupt(0, impulsISR, RISING);  // Interrupt 0 hängt beim UNO an Pin-2
  pinMode(IMPULSEINGANG, INPUT);

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  //lcd.print("Counts: ");
  
  // - ende impulse - 
  }


volatile unsigned long impulsCounter=0;

void impulsISR()
{
  impulsCounter++;
}

unsigned long letzterStand=0;

void loop() { // beginn void loop

// set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  //lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  //lcd.print(millis() / 1000);


Serial.println(" - Beginn des Scripts - "); // Ausgabe
start = millis();         // dauerausgabe 

//  zeitraum
// do {
// counterstand++;
// Serial.println(counterstand); 
// } while (counterstand <= 99999);
// counterstand=0;
// zeitraum
 
   // beginn der zaehlerfunktion
   // if (impulsCounter!=letzterStand)
   // {
      noInterrupts();
      letzterStand=impulsCounter;
      counts=impulsCounter; // als variable fuer spaeter rechnungen
      interrupts();
      Serial.print ("Anzahl: ");
      Serial.println(letzterStand);
      //lcd.print (letzterStand);
    
      // reset der ausgangswerte
      impulsCounter=0;
      letzterStand = 0;
      //Serial.print ("neue Anzahl: ");
      //Serial.println(letzterStand);
  // }
   // ende der zaehlerfunktion

      //dauer = millis() - start;             // dauerausgabe
      //Serial.println(dauer);                // dauerausgabe 
     
      delay(messzeit);  // messzeit

      dauer2 = millis() - start;              // dauerausgabe
      Serial.print("Gesamtscriptdauer: ");    // dauerausgabe 
      Serial.print(dauer2);                   // dauerausgabe 
      Serial.println(" ms");                   // dauerausgabe 
  // }

  // -- Berechnung Frequenz ---- Anfang --------------------------------
     frequenz = (counts/dauer2)*1000;       // Frequenzberechnung

    // Serial.print("Counts: ");            // Frequenzberechnung 
    // Serial.println(counts);              // Frequenzberechnung
    
    // Serial.print("Dauer2: ");            // Frequenzberechnung 
    // Serial.println(dauer2);              // Frequenzberechnung

    Serial.print("Frequenz: ");             // Frequenzberechnung 
    Serial.print(frequenz);                 // Frequenzberechnung
    Serial.println(" Hz");                  // Frequenzberechnung
    // -- Berechnung Frequenz --- Ende ----------------------------------


// -- Berechnung Counts per second ---- Anfang --------------------------------
    cps = (counts/dauer2)*1000;             // Counts pro Sekunde
    Serial.print("Counts per second: ");    // Counts pro Sekunde 
    Serial.print(cps);                      // Counts pro Sekunde
    Serial.println(" CPS");                 // Counts pro Sekunde
// -- Berechnung Counts per second ---- Ende ----------------------------------


// -- Berechnung Counts per minute ---- Anfang --------------------------------
    cpm = (counts/dauer2)*60000;            // Counts pro Minute
    Serial.print("Counts per minute: ");    // Counts pro Minute 
    Serial.print(cpm);                      // Counts pro Minute
    Serial.println(" CPM");                 // Counts pro Minute
    lcd.setCursor(0, 0);
    lcd.print ("CPM: " );
    lcd.print (cpm);
    lcd.print (" (Bq)");
        // -- Berechnung Counts per minute ---- Ende ----------------------------------


// -- Berechnung Becquerel ---- Anfang --------------------------------
    Bq = (counts/dauer2)*60000;             // Becquerel
    Serial.print("Becquerel: ");            // Becquerel 
    Serial.print(Bq);                       // Becquerel
    Serial.println(" Bq");                  // Becquerel
    //lcd.print ("BG:");
    //lcd.print (Bq);
// -- Berechnung Becquerel ---- Ende ----------------------------------


// -- Berechnung Dosisleistung ---- Anfang --------------------------------
    dosisleistung = (counts/dauer2*60000)/142;    // Dosisleistung
    Serial.print("Dosisleistung: ");              // Dosisleistung 
    Serial.print(dosisleistung);                  // Dosisleistung
    Serial.println(" µSv");                        // Dosisleistung
    lcd.setCursor(0, 1);
    lcd.print ("DL: ");
    lcd.print (dosisleistung);
    lcd.print (" uSV");
// -- Berechnung Dosisleistung ---- Ende ----------------------------------




   // -- Serialterminal leeren, funktioniert nur mit Putty --------------
      //Serial.write(27);       // ESC command
      //Serial.print("[2J");    // clear screen command
      //Serial.write(27);
      //Serial.print("[H"); 
    
    Serial.println(" - Ende des Scripts - "); // Ausgabe


// - beginn netzwerkuebertragung - 
Check = round(wert1+wert2+wert3+wert4+wert5+wert6+wert7+wert8);
 
  Serial.println(F("Verbinde zum Server ..."));
 
  for (byte i = 0; i < 1; i++) {  // Anzahl der Wiederholungen bei Verbindungsproblemen 
                                  // oder korrupten Daten, die vom Webserver empfangen werden
 
    if (client.connect(server, 80)){
      client.print("GET /");
      client.print(pfad[0][0]); 
      client.print("messwerteintragen.php?wert1=");
      client.print (cpm);
 
      client.print ("&wert2=");
      client.print (dosisleistung);
 
      client.print ("&wert3=");
      client.print (wert3); 
 
      client.print ("&wert4=");
      client.print (wert4); 
 
      client.print ("&wert5=");
      client.print (wert5);
 
      client.print ("&wert6=");
      client.print (wert6);
 
      client.print ("&wert7=");
      client.print (wert7); 
 
      client.print ("&wert8=");
      client.print (wert8);
 
      client.print ("&Check=");
      client.print (Check);
 
      client.print ("&Passwort=");
      client.print (Passwort);
 
      client.println (" HTTP/1.1");
      client.print("Host:");
      client.println(server);
      client.println("Connection: close");
      client.println(); 
 
      delay(10000);
 
      Serial.println(F("Verbindung erfolgreich")); 
 
    } else Serial.println(F("Verbindung fehlgeschlagen"));
 
    unsigned long start = millis();
    char c;
    while ((millis() - start < 2000) and (client.connected() )) {
      c = client.read(); 
      //Serial.print(c); //Debugausgabe
      if (c=='*') {
        i=10;
        Serial.println(F("Upload erfolgreich")); 
      }
    }; 
 
    client.stop(); 
    client.flush(); 
 
    delay(1000); 
 
    Serial.println(F("Verbindung beendet"));
    Serial.println(); 
  }
// - beginn netzwerkuebertragung - 
    
} // ende void loop



PHP-Script

auf dem Webserver zur Verarbeitung der Daten:

	
<p>
Hier werden übergebene Werte angezeigt und später in eine Datei geschrieben.
<?php
$wert1=($_GET["wert1"]);
$wert2=($_GET["wert2"]);

echo "<br>Wert1: ", $_GET["wert1"];
echo "<br>Wert2: ", $_GET["wert2"];
?>
</p>
			
<p>
<?php
// datum und uhrzeit bestimmen
date_default_timezone_set("Europe/Berlin");
$timestamp = time();
			
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
//echo $datum," - ",$uhrzeit," Uhr";
echo "<br> Timestamp: $timestamp";
$aktuellezeit = "$datum $uhrzeit";
echo "<br>aktuelle Zeit: $aktuellezeit<br>";
?>
			
<?php
// alle werte in datei schreiben
$datei = fopen("messwerte.txt", "a"); // ans ende der datei
fputs($datei,"\n".$timestamp." - ".$wert1." - ".$wert2);
fclose($datei);
echo "<br>Werte in Datei geschrieben.";
?>
			
<?php
// CPM werte in datei schreiben
$datei2 = fopen("cpm.txt", "w"); // a ans ende der datei, w an den anfang der datei
fputs($datei2,"\n".$wert1);
fclose($datei2);
echo "<br>Wert CPM in Datei geschrieben.";
?>
</p>
			
	
<p>
Hier sind alle Werte der Datei:<br>
<br>
			
<?php
$file = fopen("messwerte.txt","r");
while($row = fgets($file, 4096))
 {
  echo $row."<br/>";
 }	
?>
</p>



Quellen:
https://mightyohm.com/blog/products/geiger-counter/design-files/
http://mightyohm.com/files/geiger/geiger_sch_fixedR5R6.png

schaltungen.txt · Zuletzt geändert: 17.05.2018 von Frank Hochrath