Benutzer-Werkzeuge

Webseiten-Werkzeuge


schaltungen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


schaltungen [30.11.2020] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Elektronische Schaltungen ======
 +
 +\\
 +\\
 +==== Taktgeber ====
 +
 +Um eine kleine LED im Takt blinken zu lassen, verwendet man einen NE555.\\
 +\\
 +{{::ne555_taktgeber.jpg?400|}}
 +{{::ne555_taktgeber_schaltplan.jpg?400|}}
 +
 +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 ====
 +Grundlage meiner Schaltungsexperimente sind diese Seiten:\\
 +https://www.elektronik-kompendium.de/sites/slt/0208031.htm\\
 +https://www.mikrocontroller.net/articles/Transistor\\
 +http://homepages.uni-regensburg.de/~erc24492/Transistorkunde/Transistorkunde.html\\
 +
 +
 +\\
 +\\
 +==== 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.\\
 +
 +{{::geigerzaehler1.jpg?200|}}
 +{{::geigerzaehler2.jpg?200|}}\\
 +{{::geigerzaehler_schaltplan1.jpg?400|}}
 +
 +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:\\
 +{{::geigerzaehler_schaltplan2.jpg?400|}}
 +\\
 +Hier wird das Signal über einen Spannungsteiler reduziert und über einen Optokoppler an den Arduino Uno übergeben.\\
 +
 +\\
 +\\
 +{{::geigerzaehler_zeichnung_7.jpg?800|}}
 +\\
 +\\
 +Gesamtbautteileliste:
 +<code>
 +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 
 +</code>
 +
 +\\
 +\\
 +=== Ardunio-Script ===
 +
 +arduino_uno_gm_display_netz_messdaten.ino\\
 +
 +<code>
 +
 +
 +/* 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
 +
 +
 +</code>
 +
 +
 +
 +\\
 +\\
 +=== PHP-Script ===
 +auf dem Webserver zur Verarbeitung der Daten:
 +
 +<code>
 +<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>
 +
 +</code>
 +\\
 +\\
 +Quellen:\\
 +https://mightyohm.com/blog/products/geiger-counter/design-files/\\
 +http://mightyohm.com/files/geiger/geiger_sch_fixedR5R6.png\\
 +
 +
 +