DIY chromatografie/spektrometrie Software

Giosuchthilfe

Newbie
Registriert
Dez. 2024
Beiträge
1
Ich habe ein DIY-Spektrometer gebaut und benötige Hilfe bei der Entwicklung einer dazu passenden Software. Obwohl ich bereits ein Grundgerüst erstellt habe, treten immer wieder Fehler auf, und es fehlen einige wichtige Funktionen. Hierbei wäre ich über Unterstützung, Ideen und gegebenenfalls eine Code-Umsetzung sehr dankbar.





Da ich selbst Chemielaborant bin und meine Kenntnisse in der Programmierung begrenzt sind, habe ich bereits detaillierte Anforderungen und ein bestehendes Grundgerüst (beschrieben unten). Ziel ist es, eine funktionierende Software zu entwickeln, die sowohl chemisch-numerische Berechnungen als auch eine benutzerfreundliche GUI beinhaltet.





Projektübersicht: Was ist das Ziel der Software?





Ich habe ein Spektrometer gebaut, das Licht durch eine Küvette leitet, es mit einem Beugungsgitter aufspaltet und eine Webcam verwendet, um die spektralen Daten aufzuzeichnen. Die Software soll:


1. Automatisch Wellenlängen kalibrieren.


2. Absorptionsspektren erstellen und diese als numerische Daten speichern.


3. Echtzeit-Chromatogramme bei einer oder mehreren spezifischen Wellenlängen darstellen.


4. Eine Benutzeroberfläche bereitstellen, die auch für chemische Experimente genutzt werden kann.





Technischer Hintergrund





Hardware:


• Kamera: Handelsübliche Webcam.


• Optische Komponenten: Beugungsgitter von Perkin-Elmer, Sammellinse, Messküvette.


• Lichtquelle: D2-Lampe oder LED.





Software-Anforderungen:


Die Software soll die Kamera initialisieren, Referenzspektren aufnehmen und kalibrieren sowie folgende Funktionen bieten:


• Echtzeit-Chromatogramme: Absorption gegen Zeit darstellen.


• Wellenlängenauswahl: Absorption bei bestimmten Wellenlängen berechnen.


• Daten speichern: CSV-Dateien mit Spektren und Chromatogrammen.





Bisheriger Fortschritt: Was habe ich schon?





Ich habe bereits eine rudimentäre GUI erstellt, die aber mehrere Probleme aufweist:


1. Die Kamera wird zwar als „initialisiert“ angezeigt, es gibt jedoch keine Garantie, dass tatsächlich Daten gelesen werden.


2. Das Referenzspektrum wird angeblich gespeichert, aber es gibt keine Möglichkeit zu überprüfen, ob dies korrekt erfolgt ist.


3. Das Echtzeit-Chromatogramm zeigt keine Daten an, und die Einzelmessungen funktionieren nicht.


4. Einige GUI-Funktionen scheinen nur optisch vorhanden zu sein, haben aber keine Implementierung.





Detaillierte Anforderungen an die Software





Hier ist eine Liste der spezifischen Anforderungen, die ich für die Software benötige:


1. Kamera-Initialisierung:


• Eine Funktion, die sicherstellt, dass die Kamera korrekt initialisiert wurde.


• Wenn die Kamera nicht funktioniert, sollte die Software eine Fehlermeldung anzeigen.


2. Referenzaufnahme:


• Eine Funktion, die ein Referenzspektrum aufnimmt und speichert (z. B. das Spektrum einer Lichtquelle ohne Probe).


• Das Referenzspektrum sollte in der GUI visualisiert werden, um seine Korrektheit zu überprüfen.


3. Spektrale Verarbeitung:


• Berechnung der Absorption A(\lambda) = -\log(I_{\text{Probe}}/I_{\text{Referenz}}) .


• Glättung und Filterung der Spektren, z. B. mit einem Savitzky-Golay-Filter.


4. Echtzeit-Chromatogramm:


• Eine Schleife, die Daten kontinuierlich aufnimmt und die Absorption bei einer spezifischen Wellenlänge berechnet.


• Die GUI sollte das Chromatogramm in Echtzeit aktualisieren.


5. Einzelmessungen:


• Eine Funktion, die auf Knopfdruck ein Spektrum aufnimmt und in einem separaten Plot darstellt.


6. Wellenlängenauswahl:


• Der Benutzer sollte in der GUI eine Wellenlänge (z. B. 254 nm oder 365 nm) eingeben können.


• Die Software sollte überprüfen, ob die eingegebene Wellenlänge im kalibrierten Bereich liegt, und bei ungültigen Eingaben eine Warnung anzeigen.


7. Daten speichern:


• Alle Spektren und Chromatogramme sollten automatisch in CSV-Dateien gespeichert werden, um später analysiert werden zu können.





Code-Struktur und Technologie





Die Software sollte modular aufgebaut sein, um Fehler einfacher beheben und Funktionen erweitern zu können. Empfohlene Technologien:


• Python mit:


• opencv: Für die Kameradatenaufnahme.


• matplotlib: Für die Visualisierung in der GUI.


• numpy: Für numerische Berechnungen.


• scipy: Für Filterung und Glättung.


• tkinter: Für die grafische Benutzeroberfläche (GUI).


• pandas: Für die Speicherung von Daten in CSV-Dateien.





Warum ich Hilfe brauche





Ich habe bereits viele Versuche unternommen, aber da ich nur begrenzt Zeit und Programmierkenntnisse habe, stoße ich immer wieder auf Probleme. Falls sich jemand mit Python-Programmierung oder Spektrometer-Software auskennt und bereit ist, mir zu helfen, wäre ich sehr dankbar. Es könnte entweder durch direkte Code-Erstellung oder durch Verbesserung meines bestehenden Grundgerüsts erfolgen.

Also grundlegend habe ich wie gesagt eine Lichtquelle die das Licht in verschiedenen Wellenlängen ähnlich wie bei einem Regenbogen durch ein glas Gefäß schiesst durch welches die enthaltenen Substanzen das Licht in verschiedenen Stellen ‚schlucken‘ zu einem Anteil und das aufgetrennte Licht was am Detektor also meiner webcam wie ein Regenbogen Spektrum als Bild erkennbar wird sollte von Pixel zu graustufen und alogrhytmen von 0-1200 nm umgerechnet werden und die intensitätsverteilungen als y Achse dargestellt werden. Nachdem man in der Software das eigene emissionspektrum der Lampe Kalibrieren kann wird das als nullwert gespeichert. Dann kann man an einer bestimmten Stelle der x Achse zb 380 nm messen und dann ein chrosmtogramm in Form von der Zeit also sobald man startet es als Zeit auf der x Achse und bei der ausgewählten Intensität der x Achse und unterscheide Echtzeit dargestellt wird.




Jede Idee, Unterstützung oder auch nur ein Ansatz, wie ich weiterkomme, würde mir enorm helfen!





Wenn du Fragen hast, was genau gemacht werden muss, lass es mich wissen, und ich erkläre es gern detaillierter. Vielen Dank für jede Unterstützung!
 
Ich hab nicht viel Ahnung von Programmierung aber dafür von chemischer Analytik und bin interessiert gerade, was das werden soll.

Eine LED sendet diskrete Wellenlängen aus, reichen dir die drei Linien? Die wird dann zum Kalibrieren der Wellenlängen der Deuteriumlampe verwendet?

Was soll denn gemessen werden? Mit einer Wbcam als Detektor wird ja kein besonders großer Wellenlängenbereich möglich sein. Wenn überhaupt, dann nur der VIS-Bereich. 380 nm halte ich für unmöglich mit dem Setup. Der Videocodec ist hier ein weiterer Pferdefuß.
Oder nutzt du nur das Diodenarray in der Webcam und greifst die elektrischen Roh-Signale dort ab?

Den Punkt mit der Chromatographie hab ich jetzt noch nicht verstanden. Hast du einen Chromatographen mit Durchfluss-Küvette oder ist das jetzt erstmal nur theoretisch und dir geht es um die Aufzeichnung des Zeitverlaufs der Intensität?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: xxMuahdibxx
Ich bleib auch mal hier, als Laborant 😀

Kannst du deinen Einsatzzweck mal kurz umreißen?
Und noch eine Frage, das soll ein Einstrahl Photometer werden, korrekt?
Da gibt es doch hu zuhauf Software die gerade für den Science Bereich, die man kostenlos oder sehr günstig nutzen kann.

Was für Genauigkeiten willst du erreichen, und was für Modelle (linear oder höhere Ordnungen) willst du berechnen.
Und welche Konzentrationsbereiche?
 
Das ist ein TL;DR. Idealerweise kürzer fassen.

Nur mal drüber gescrollt:
Giosuchthilfe schrieb:
• Optische Komponenten: Beugungsgitter von Perkin-Elmer, Sammellinse, Messküvette.
Ganz wichtig: Breite des optischen Spaltes.

Giosuchthilfe schrieb:
Ich habe ein Spektrometer gebaut, das Licht durch eine Küvette leitet, es mit einem Beugungsgitter aufspaltet und eine Webcam verwendet, um die spektralen Daten aufzuzeichnen.
Kurze Google suche hilft:)
Theremino ist geläufig und müsste bereits alles können was gefordert ist.
Zu dem Aufbau: kurze Literatur Suche.

Giosuchthilfe schrieb:
• Lichtquelle: D2-Lampe oder LED.
Naja. Hängt davon ab was du machen willst. Deuterium wird dir mit deinem Sensor vermutlich nichts bringen switchover Wellenlänge ist da so bei ca. 350nm. Deine webcam wird nicht mal 350nm schaffen. Eine LED ist auch unglücklich. Nehm lieber eine klassische halogen.

Giosuchthilfe schrieb:
• opencv: Für die Kameradatenaufnahme.
Nö. Das ist Bilderkennung.
Dein Spektrum ist immer an den gleichen Pixeln d.h. du kannst hardcoden/einmal Kalibrieren.
Giosuchthilfe schrieb:
• scipy: Für Filterung und Glättung.
NumPi hat eigentlich auch schon geeignete Filter. Kann aber sein, dass scipy das besser kann.
 
Mach's Open Source, dann kann dir die ganze Welt helfen. Wenn du dann noch ne detaillierte Anleitung erstellst, wie du den Chromatographen / das Spektrometer nachbauen kannst, dürftest du auch gut Publikum bekommen.
 
  • Gefällt mir
Reaktionen: Methylherd und Tevur
Giosuchthilfe schrieb:
eine Webcam verwendet, um die spektralen Daten aufzuzeichnen
Interessant, wie funktioniert das? Kommt jeweils nur eine Frequenz pro Imager-Pixel an? Weil ein Kamera Imager kann ja eigentlich nur die ankommende Energie über das gesamte Spektrum auswerten.
 
@BeBur Die sind im Kern immer gleich aufgebaut:
optische komponeten -> diffraction graiting (spaltet das Licht je nach Freqneunz in unterschiedliche Winkel auf) -> "Bild" wird auf die Kamera/Sensor fokusiert -> Kamera sieht jetzt je Pixel "eine" Frequenz.

Problem ist, dass deine Kamera einen UV-filter und dann nochmal Farbfilter vor dem Sensor (Bayer-Matrix) hat und in keinerweise Kalibriert ist.

PerkinElmer stellt professionelle UV-Vis her daher dürften seine Bauteile high end/Professionell sein.
Sind dann nicht diese "flachen" transmission Gitter wie die meisten DIY-design es verwenden sondern solche reflection diffraction graitings die einige Vorteile haben und das ganze auch noch fokusieren.

1733800370119.png
 
  • Gefällt mir
Reaktionen: Tevur
Michael-Menten schrieb:
UV-filter und dann nochmal Farbfilter vor dem Sensor (Bayer-Matrix)
Ja genau. Den UV-Filter kann man wie ich hörte zumindest bei DSLRs öfters mal entfernen, aber die Bayer-Matrix sitzt denke ich direkt auf dem Imager. Wie funktioniert das dann mit einer Webcam?

Michael-Menten schrieb:
und in keinerweise Kalibriert ist.
Die quantum efficiency dürfte ein Problem sein. Die geben Hersteller nicht raus, soweit ich weiß, aber mit bekannter Lichtquelle sollte man das ja kalibrierenkönnen. Oder was anderes bzw. noch mehr? Rauschen (z.B. Shot noise) ist im Kontext hier vermutlich kein Problem?

Fragen über fragen :D.

@Giosuchthilfe Ich krieg grad ein bisschen Lust, mitzumachen :-). Bin Softwareentwickler und grundsätzlich mit der Physik von Kameras vertraut. Aber wieso verwendest du keine bestehende Software, es sollte doch so einiges schon geben als open source?
 
Zuletzt bearbeitet:
BeBur schrieb:
Rauschen (z.B. Shot noise) ist im Kontext hier vermutlich kein Problem?
noise ist immer ein Problem.
Einmal hast du die Wellenlängen Auflösung/breite die bestimmt was möglich ist. Zum anderem rauschen vom Sensor was sich in den Daten wiederfindet.
Dazu kommen dann noch nicht linearität im Sensor response sowohl bei Intensität als auch im Bezug auf Wellenlängen.
Als wäre das nicht schon genug haben deine anderen optischen Komponenten auch Wellenlänge abhängiges Verhalten. Besonders die diffraction graitings sollte man nicht unterschätzen.

BeBur schrieb:
Die geben Hersteller nicht raus
Die Datenblätter haben eigentlich immer das drin. Jedoch weißt du nicht welcher Sensor in der 10€ Webcam steckt. Die Angeben in den Datenblättern sind auch ehr grobe Richtwerte.

BeBur schrieb:
aber mit bekannter Lichtquelle sollte man das ja kalibrierenkönnen
Im VIS-Bereich daheim eignet sich dafür ganz black body radiation.
 
  • Gefällt mir
Reaktionen: StormXP und BeBur
Zurück
Oben