Raspberry pi 4 und mcc118

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Guten Tag,

    ich habe mir einen Raspberry pi 4 Modell B angelegt und einen Mcc118. Ich möchte damit den Druck messen, welcher in der Solarzelle auf dem Dach unseres Hauses herrscht. Allerdings finde ich nirgendwo einen Code, der mir dabei helfen kann.

    Zum Einen möchte ich den Druck herausfinden, welcher sich in der Solarzelle befindet. Dieser möchte ich dann graphisch darstellen, dies sollte dann in einem Druck-Zeit Diagramm dargestellt werden, wo ich anschliessend ein Inteface gestalten muss.

    Vielen Dank für ihre Hilfe

  • Hallo Physik12, willkommen im Forum.

    Uns wäre geholfen, wenn Du die Komponenten die Du hast gleich verlinken könntest - somit würdest Du jedem etwas (such) Arbeit sparen, der Dir helfen möchte.

    Das MCC118 ist ja "nur" ein analog/digital Wandler. Du brauchst also einen Drucksensor, der Dir ein analoges Signal liefert - aber ich vermute mal Du weißt das bereits, oder?

    Hier habe ich eine Seite gefunden, auf der der MCC118 erklärt ist - und dort befindet sich auch ein "Treiber" für den Raspberry: DAQ-HAT-Library. Laut Beschreibung auf dieser Seite sind dort sogar Beispiele dabei - und der Screenshot hat sogar schon ein Diagramm.

    Ich denke mir, das solltest Du Dir genauer ansehen...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Hallo,

    Vielen Dank für die Antwort.

    Das wusste ich nicht, werde es in Zukunft dann hinzufügen.

    Mir wurde gesagt, dass ich kein Drucksensor direkt brauchen würde. Ich bekomme eine Kalibrationskurve zur Verfügung gestellt, welche meine Referenz sein soll.

    Ich habe viele Beispiele gefunden, welche auf den MCP3008 aufgebaut sind. Diese habe ich bei Erik Bartmann gefunden. Aber da wird immer das Gnuplot verwendet. Dies sollte ich jedoch nicht verwenden und stattdessen eine eigene GUI entwerfen, wo mir nachher eine Kurve in Echtzeit angezeigt wird

  • Ich möchte damit den Druck messen, welcher in der Solarzelle auf dem Dach unseres Hauses herrscht.

    Du meinst wahrscheinlich Solarkollektoren, auch bekannt als Sonnenkollektoren.

    Eine Solarzelle produziert Strom. Solarkollektoren erhitzen Wasser.

    Wenn du den Druck messen willst, brauchst du ein Manometer mit analogem oder digitalem Ausgangssignal.

    Bei einem analogen Ausgangssignal benötigt man einen ADC wie z.B. den MCP3008 und ggf. noch einen Spannungsteiler.

    Der MCP3208 hat 12 Bit und der MCP3008 hat 10 Bit Auflösung.

    Beide werden am RPI mit 3.3V betrieben und die zu messende Spannung darf die 3.3V nicht überschreiten.

    Es gilt beim MCP3xxxx VDD == VREF. Da der Raspberry PI nur mit 3.3V umgehen kann, muss man den halt mit 3.3V betreiben.

    5V gingen nicht, es seiden man packt einen Level-Shifter für die SPI/I2C Signale dazwischen, der in beide Richtungen die Spannungen entsprechend anpasst.

    In der Regel arbeiten die Sensoren mit Analogspannungen von 0 - 10V oder 0-20mA/4-20mA Strom.

    In der Verfahrenstechnik verwendet man lieber 4-20 mA, da das Verfahren störungssicher ist und sogar ein Drahtbruch (0 mA) erkannt werden kann.

    Beim Strom ist es sehr einfach, da man dann den gewünschten Spannungsfall direkt ausrechnen kann.

    3.3V / 20mA = 165 Ω (160 Ω aus der E24 Reihe)

    Merksatz: Je größer der Widerstand ist, desto größer der Spannungsfall am Widerstand.

    Wenn man eine Ausgangsspannung (0-10V) hat, muss man den Spannungsteiler berechnen.

    Da könnte man z.B. 10 mA als Maximalstrom definieren und mit den Verhältnissen die beiden Widerstände rechnen.

    Bei 10V und 10 mA wäre das ein Gesamtwiderstand von 1 kΩ.

    10V insgesamt, an R2 sollen 3.3V anliegen, also müssen 6.7 V am R1 in Wärme umgewandelt werden.

    An R2 werden 3.3 V / 10 mA in Wärme umgewandelt. Also wird am R1 67 mW und am R2 33 mW in Wärme umgewandelt. (U * I)

    Rges: 1 kΩ

    R1: 670 Ω

    R2: 330 Ω

    Aus der E24 Reihe könnte man dann 680 Ω und 330 Ω verwenden. Dann ist der Strom etwas geringer und an R1 fällt dann auch ein wenig mehr Spannung ab. D.h. bei einem Maximalausschlag (10 V), würde ein etwas kleinerer Wert angezeigt werden, da dann am R2 ein bisschen weniger Spannung anliegt. Ich bin jetzt zu faul das auch noch auszurechnen ^^

    Dann kommt die Quantisierung durch den ADC, der dann entweder mit 1024 (10 Bit) oder 4096 (12 Bit) Quantisierungsstufen arbeitet.

    Je nach verwendeter Bibliothek wird entweder ein Integer ausgegeben oder der Messwert wird automatisch normalisiert (0 - 1) und dann auf 3.3 V skaliert.


    Python
    def scale(min_v, max_v, min_unit, max_unit, value):
        v_range = max_v - min_v
        u_range = max_unit - min_unit
        norm = (value - min_v) / v_range
        return norm * u_range + min_unit
    
    # value wäre der gemessene Wert (V oder A)
    # min_v, max_v gibt den Spannungsbereich/Strombereich an
    # min_unit, max_unit entspricht dem Messbereich z.B. des Manometers

    Den Messbereich des Manometers so wählen, dass er ideal ist.

    Es ist z.B. sehr ungenau ein Manometer mit einem Messbereich von 0 bis 250 bar (Hydraulik) zu verwenden, wenn der Maximaldruck z.B. nur 10 bar sein kann. D.h. im Endeffekt, dass nur 4 % des Messbereichs genutzt werden könnten. Dann kommt noch die Ungenauigkeit durch den Spannungsteiler und die Quantisierung zustande. Deswegen sollte das Manometer weder unterdimensioniert, noch überdimensioniert sein.

    Den Analog-Teil könnte man sich sparen, falls es Manometer mit I2C/SPI und 3.3V Logikspannung gibt.

    Ich habe jetzt nicht danach gesucht.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!