Analog-Digital Wandler mit USB Anschluss

    • Offizieller Beitrag

    Ok, der Ablauf ist ja einfach!

    Wobei vielleicht ein Taster, zum starten/stoppen der Aufnahme, ganz hilfreich wäre. Und eine zusätzliche LED, zum anzeigen, dass die Aufnahme läuft (die interne blaue LED habe ich für die WLAN-Verbindung verplant).

    Kannst Du noch ein paar Angaben zum A/D-Wandler machen?

    Die 1V sind Maximum hast Du oben geschrieben. Das ist definitiv so? Ich frage, weil der "D1 mini" max. 3.3V am Analogeingang verträgt.

    Und diese 1V entsprechen 20mBar (tun sie das immer oder ist das einstellbar?). Und ist die Kennlinie linear? Also 0.5V sind dann 10mBar, 0.25V gleich 5mBar usw.?

    Und ist WLAN vorhanden? Und Internet?

    Bei 8 Stunden und 60 Messungen/h wären das 480 Messungen insgesamt. Um die Auflösung von 10Bit zu erhalten, brauchen wir 2 Bytes pro Messung, das ergibt 960 Bytes.

    Hübschen wir das auf und setzen Stunden/Minuten vor jede Messung, also nochmal 2 Bytes pro Messung, macht 1920 Bytes. Dafür bräuchte man nicht mal die SD-Karte.

    Könnte man komplett im RAM speichern, bis zum Abruf.

    Willst Du Dir dann die Meßergebnisse auf den Rechner holen und dort speichern?

    Oder sollen die lieber auf eine SD-Karte gespeichert werden?

    • Offizieller Beitrag

    Die 1V sind Maximum hast Du oben geschrieben. Das ist definitiv so?

    Ja, alle Druckmessgeräte geben ihr Signal analog von 0 bis 1 Volt aus.

    Und diese 1V entsprechen 20mBar (tun sie das immer oder ist das einstellbar?). Und ist die Kennlinie linear?

    Sollte linear sein. Um da sicher zu gehen, habe ich das Unterprogramm Kalibration, um eine Referenz zu bekommen. Es kann auch passieren dass ich ein Druckmessgerät mit max 50 mbar nutze (Ausgang ist auch hier 0 bis 1 Volt). Mit der entsprechenden Umrechnung/Linienanpassung würde ich mich dann später befassen. Aber das ist reine Rechenarbeit.

    Und ist WLAN vorhanden? Und Internet?

    WLAN und Internet sind im Servicebereich nicht verfügbar.

    Willst Du Dir dann die Meßergebnisse auf den Rechner holen und dort speichern?

    Oder sollen die lieber auf eine SD-Karte gespeichert werden?

    Es gibt zwei Szenarien:

    1. konstante Druckeinstellung während der gesamten Messung

    2. Messung mit veränderlichen Druckwerten während der Aufzeichnung

    Bei 1. kann das natürlich alles im Nachhinein ausgelesen werden.

    Bei 2. muss die Interaktion (Druckänderung am Gerät) auch in der Doku auftauchen, d.h. hier müssen die Aufzeichnungsdaten ins Log am PC übertragen werden, dann Druck ändern, neuen Druckwert im Log eintragen, weiter messen usw.

    Insofern schwebt mir eigentlich eher ein Szenario vor, dass ausschliesslich vom PC gesteuert wird (der muss sowieso angeschlossen sein zur Fernsteuerung des Gerätes).

    So elegant die Aufzeichnungslösung auch ist, ist das für mich eigentlich schon zu viel.

    Streng genommen brauche ich nur:

    - mit AutoIt erreichbare Schnittstelle, die 0 bis 1 V digitalisiert

    - und bei Bedarf frage ich ab, welcher Wert gerade an der Schnittstelle anliegt

    Für mich hätte das den Vorteil, dass alle Softwareroutinen AutoIt-seitig verlaufen und ich dort jederzeit Anpassungen im Ablauf vornehmen kann.

    Deshalb war meine Anfrage auch auf AD-Wandler ausgerichtet.

    Aber:

    Ich denke, dass die Stand-Alone Lösung auch sinnvoll ist. Modul mal schnell zum AD schicken, der hängt es an ein Kundengerät und liest dann die SD-Karte aus.

    Die umfangreichere Variante mit Druckänderungen vom PC aus brauche ich auch, reicht aber, wenn sie in der Zentrale zur Verfügung steht.

    • Offizieller Beitrag

    Ok, wenn Du alles vom PC aus steuern willst (per AutoIt), dann würde ich einen Arduino Nano nehmen. Es würde zwar auch ein "nackter" ATmega328P oder sogar ein ATtinyx5 ausreichen, aber der Nano hat den Vorteil, dass ein USB-Seriell-Wandler bereits "on Board" ist.

    Der Nano besitzt außerdem 8 analoge Eingänge. Du könntest also sogar 8 Geräte gleichzeitig anschließen. Ich packe Dir mal den PinOut vom Nano in den Anhang.

    Die Echtzeituhr und den SD-Cardreader brauchst Du dann ja auch nicht. Das kann das AutoIt-Script erledigen. Die Stromversorgung des Nano erfolgt dann über das USB-Kabel, also auch kein externes Netzteil.

    Somit bleibt dann nur der Arduino Nano plus eine Buchse (oder mehrere) um die Geräte anzuschließen. :)

    Edit: Wenn ich vom "Arduino Nano" schreibe, meine ich eigentlich die China-Clones mit CH340-Chipsatz (muss man einen Treiber installieren). Die gibt es einzeln für 7€ oder im 3er Pack für 11€. Zum Beispiel: https://www.amazon.de/AZDelivery-Atm…DD78VSC1G0&th=1

    • Offizieller Beitrag

    Ich habe schon mal einen Test gemacht (ein paar Arduino Nano habe ich hier auch rumliegen).

    Auf dem Nano reichen schon ein paar Zeilen, um den analogen Port "A0" auszulesen und auf Anforderung über die Serielle Schnittstelle (USB) zu senden:

    Auf der AutoIt-Seite brauchst Du meine kleine UDF ("SerialComm.au3"). Ich habe mal ein Beispielprogramm dazu geschrieben (siehe ZIP-Archive im Anhang).

    So kannst Du den Arduino Nano connecten und der übermittelt dann jede Sekunde die Daten von A0. Natürlich kann man die Frequenz auch auf eine Minute setzen. Zum Testen war es aber mit einer Sekunde einfacher.

    Falls Du mehr analoge Eingänge abfragen willst, sag Bescheid, dann passe ich das an.

    • Offizieller Beitrag

    Mir ist gerade die Idee gekommen, dass ich das Druckmessgerät evtl. einsparen kann. Ich habe noch zig.. Platinen von verschrotteten Geräten, die einen Drucksensor haben - sieht so aus wie dieser.

    Dann kann ich das zu testende Gerät direkt anschliessen. Mal testen.

    • Offizieller Beitrag

    Ich habe noch zig.. Platinen von verschrotteten Geräten, die einen Drucksensor haben

    Wenn Du dazu auch ein Datenblatt hast, wird das wohl gehen.

    Wenn Du die genaue Typenbezeichnung von den Sensoren hast, dann einfach mal mit Zusatz "Arduino" googeln. Oftmals findet sich dann bereits eine Library, die Du benutzen kannst.

    • Offizieller Beitrag

    Wenn Du dazu auch ein Datenblatt hast, wird das wohl gehen.

    Hab mir gerade eine Platine geholt und mal nachgeschaut. Ist ein MPXV5004. Datenblatt habe ich auch gefunden.

    Hier habe ich nur einen anderen Spannungsbereich: 1V Offset und linearer Output 1V/kPa - also max. 5V. Das anzupassen, wird aber nicht so schwer sein.

    Ich habe auch noch einen MPXM2010GS/GST1, da nur bis 10kPa, wäre der eigentlich geeigneter - aber dann brauche ich extra Spannungsversorgung.

    Da packt einen das Bastelfieber. ;)

    Schade, dass ich die vielen kleinen Displays der Geräte nicht verwerten kann. die Displays sind rein mechanisch auf die Platine gecklickt und haben per "Gummileiste" Verbindung zu Kontaktflächen auf der Platine. (Wird angesteuert von einem Philips PCF2100CT). Aber das ist ein anderer Schuh.

    • Offizieller Beitrag

    Hier habe ich nur einen anderen Spannungsbereich: 1V Offset und linearer Output 1V/kPa - also max. 5V. Das anzupassen, wird aber nicht so schwer sein.

    Ja, bis max. 5V ist kein Problem mit dem Nano. Der verträgt an seinen analogen Eingängen bis 5V oder genauer: bis zur Versorgungsspannung (was meistens das Gleiche ist).

    Aufpassen musst Du nur, wenn Du die Geräte mit zwei getrennten Spannungsquellen betreibst. Also z.B. den Nano über USB und den Sensor von einem anderen 5V-Regler.

    Wenn dann der USB-Anschluss nur 4.5V liefert und der Sensor aber 5V, dann wird es kritisch.

    Der zweite, von Dir genannte, Sensor braucht min. 10V Versorgungsspannung. Klar, dann brauchst Du eine extra Spannungsquelle und (ganz wichtig) am Nano dann einen Spannungsteiler (2:1 oder 3:1).

    Größenordnung im Zehner-Kilo-Ohm-Bereich, also 30kOhm <-> 10 kOhm. Nicht viel größere Werte nehmen, weil damit die Meßergebnisse verfälscht werden. Und nicht unter der Output-Impedanz (1,4k - 3k).

    Und die Widerstände sollten mindestens 1%-Metallschicht-Widerstände sein, sonst handelst Du Dir damit einen zu großen Meßfehler ein.

    Edit: Wenn Du ein Display brauchst, nimm eines von den vielen 16x2 oder 20x4 LCDs und am besten gleich mit I2C-Huckepackplatine:

    https://www.amazon.de/AZDelivery-HD4…ps%2C168&sr=8-6

    oder:

    https://www.amazon.de/SunFounder-Ser…s%2C168&sr=8-11

    Die sind relativ günstig und funktionieren einwandfrei. Allerdings muss man beim ersten Anschluss den Kontrast-Trimmer anpassen, sonst sieht man nichts.

    • Offizieller Beitrag

    Ich habe jetzt mal zum Testen einen Sensor ausgelötet und mit dem Arduino verbunden. Mit dem folgenden Sketch habe ich mir den Messwert alle 500 ms auf dem Seriellen Monitor ausgeben lassen:

    Sketch

    Pin 7 habe ich deshalb genommen, weil er direkt neben +5V und GND liegt und somit mit einem 4-PIN Steckverbinder am Einfachsten anzuschliessen war.

    Ich habe testweise in 0,5 mbar Schritten Druck von 4 bis 20 mbar (0,4 bis 0,2 kPa) angelegt. Laut Datenblatt habe ich jetzt Ausgangsspannung von 1,4V bis 3,0V erwartet.

    Übertragen werden aber folgende Werte:

    Die Werte sind nahezu linear (ich habe ohne Filterung gemessen, daher sind Schwankungen OK), das passt. Aber woher kommen diese Werte?

    • Offizieller Beitrag

    Die Werte sind nahezu linear (ich habe ohne Filterung gemessen, daher sind Schwankungen OK), das passt. Aber woher kommen diese Werte?

    Hey, das sieht doch gut aus! :)

    Bei analogRead bekommst Du nicht die Spannungswerte, sondern den Sample-Wert (10 Bit, also: 0...1023).

    Kann man aber leicht in Spannung umrechnen: 5V geteilt durch 1024 mal dem Sample-Wert = 5 / 1024 * 333 = ca. 1.63 Volt

    Um die Genauigkeit noch zu erhöhen, musst Du die Größe der Versorgungsspannung messen. Wenn die z.B. "nur" 4.7 Volt beträgt, dann damit rechnen: 4.7 / 1024 * 333 = 1.52 Volt.

    • Offizieller Beitrag

    Bei analogRead bekommst Du nicht die Spannungswerte, sondern den Sample-Wert (10 Bit, also: 0...1023).

    Wissen ist Macht! :thumbup: (Jetzt bin ich in meinem Arduino-Buch an genau der Stelle angekommen ^^)

    Um die Genauigkeit noch zu erhöhen, musst Du die Größe der Versorgungsspannung messen.

    Ich nutze ja den USB-Port zur Spannungsversorgung, je nach Spezifikation also zwischen 4,40V und 5,25V.

    Wenn der Arduino das messen könnte, kann ich die Berechnung ja dort gleich ausführen. - Kann er das?

    Ansonsten bleibt nur manuell messen - das wäre aber sehr nutzerunfreundlich. X/

    Edit:

    Ich habe die Berechnung in die Messreihe eingefügt um durch Anpassen der Versorgungsspannung Übereinstimmung mit meinen Vorgabewerten zu erlangen. Das passt einigermaßen bei 4,48V. Bei gefilterten Messwerten und somit dann auch vollständiger Linearität sollte das OK sein.

    Allerdings kann ich auch mit Ungenauigkeiten leben. Der Prüflauf soll ja nur Deltas finden. Insofern müssen die absoluten Werte nicht zu 100% real sein, es ist wichtig zu sehen, ob über längere Zeit diese Werte sich plötzlich ändern.

    Edit2:

    Hab noch weitergelesen: Referenzspannung ist die Lösung, Da kommt einfach eine CR2032 dran und gut ist. :thumbup:

    • Offizieller Beitrag

    Wenn der Arduino das messen könnte, kann ich die Berechnung ja dort gleich ausführen. - Kann er das?

    Darauf ein ganz klares: Jein! ;)

    Im Prinzip beißt sich die Katze dabei in den eigenen Schwanz. Zur Berechnung der gemessenen (eigenen) Versorgungsspannung, muss man ja erstmal die Versorgungsspannung kennen (Referenz).

    Nun kommt aber ein Trick des ATmega ins Spiel. Es gibt nämlich durchaus eine interne Referenzspannung (1.1 Volt). Kann man aktivieren mit analogReference(INTERNAL);.

    Aber: Vorsicht!

    Dann darf die Spannung an den analogen Anschlüssen nicht größer als die Referenzspannung werden.

    Du brauchst dann also immer einen Spannungsteiler pro Eingang.

    • Offizieller Beitrag

    Nun kommt aber ein Trick des ATmega ins Spiel. Es gibt nämlich durchaus eine interne Referenzspannung (1.1 Volt). Kann man aktivieren mit analogReference(INTERNAL);.

    Aber: Vorsicht!

    Dann darf die Spannung an den analogen Anschlüssen nicht größer als die Referenzspannung werden.

    Du brauchst dann also immer einen Spannungsteiler pro Eingang.

    Gilt das auch für externe Referenzspannung? Habe im Buch noch keinen Verweis darauf gefunden.

    • Offizieller Beitrag

    Darauf ein ganz klares: Jein!

    Ich habe ein JA gefunden! Guckst du. ;)

    Edit:

    Habs mal getestet

    Spoiler anzeigen

    Aber das mochte mein Nano gar nicht. Keinerlei Ausgabe und neue Sketche nimmt er nicht mehr entgegen

    avrdude: stk500_recv(): programmer is not responding

    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x8c

    :rolleyes: