MCP3008 und Forosensor

  • Hallo ihr Pi begeisterten,

    ich möchte meinen PI mit einem Fotosensor beschäftigen und dazu will (und muss) ich den MCP3008 nutzen damit ich die analogen Werte mit dem PI auslesen bzw. nutzen kann.

    dabei halte ich mich strikt an dieses tut.

    http://nicht-traeumen-sondern-machen.de/RaspberryPi_Ba…ge.php?anker=a4

    Jedoch bekomme ich über die PHP Variante immer den Wert 1023 oder 1022 und mit dem Python Skript die Fehlermeldung:
    unexpected end of file.

    ich wäre schon froh wenn die bash läuft kann das mal bitte jemand testen. Die Verkabelung habe ich auch soweit gleich außer ch1 bis ch7 liegen nicht auf ground auch habe ich es mal mit und mal ohne wiederstand realisiert. immer mit dem gleichen Ergebnis.

    Leider bin ich aber noch nicht so fit in dem Thema deswegen wäre Hilfe sehr erwünscht.

  • Hallo.

    Wenn du dich an das TUT gehalten hast, wird das nichts, weil:

    Im Durchlass hat der Fotowiderstand ~10-20 kOhm, dein vorgeschalteter Widerstand 1kOhm, also misst du den Mittelabgriff des Spannungsteilers.
    Der liegt dann im Verhältnis 1:10-20, also noch über ~3V.(Bei 0,003 A bei idealen 10k)
    (Nachrechnen ist erlaubt ;)
    Du musst das Verhältnis umkehren also ~10-20:1

    gruß root

    Einmal editiert, zuletzt von root (28. September 2015 um 21:16)

  • Hollo


    ..das heißt mein Wiederstand muss drastisch größer werden oder? wenn ja welche größe ich habe das nicht recht verstanden.


    korrekt.
    nimm statt 1K mal 180K.(was du grade in der Größe so rumfliegen hast)
    Wenn der Fotowiderstand gesperrt (dunkel) ist hat er ~15MOhm, die 180k bleiben ->der MCP bekommt dann ~3,2V
    Wenn durchgeschaltet (hell) hat er ~10-20kOhm, die 180K bleiben -> der MCP bekommt dann ~0,2-0,3V.
    Dus hast also nen vernünftigen Spannungshub.
    ... guck mal bei Tante goggle Reihenschaltung von R's.
    Es verhalten sich hier die Teilspannungen wie die Teilwiderständer.

    gutes Gelingen.

    gruß root

    Einmal editiert, zuletzt von root (28. September 2015 um 22:21)

  • ok 180k ist drin! bringt aber absolut garnix! der Wert bleibt bei 1023 kann es vielleicht noch am Skript liegen? kann ich irgendwie die Schaltung ohne großen Aufwand testen?

    Leider lässt sich das bash-Skript nicht zum arbeiten bewegen

    Einmal editiert, zuletzt von tutter (28. September 2015 um 23:07)

  • Hallo.


    ok 180k ist drin! bringt aber absolut garnix! der Wert bleibt bei 1023 kann es vielleicht noch am Skript liegen? kann ich irgendwie die Schaltung ohne großen Aufwand testen?


    Mit bash scripten hab ich leider nicht viel am Hut.
    Wenn du ein Multimeter hast, kannst zumindest den MCP Eingang messen, der muss sich ja je nach Lichteinfall ändern, und so feststellen ob die Schaltung überhaupt funktioniert.
    Tut sie das, und alles richtig verdrahtet...sage ich mal vorsichtig, scipt.

    gruß root

  • Hallo


    ok Multimeter habe ich! aber kannst du bitte konkretisieren wo ich messen soll? ich würde denken am ch0 des mcp direkt oder?

    korrekt, das ist ja der Mittelabgriff des Spannungsteilers.
    Also ch0 gegen Masse, und den Fotowiderstand verdunkeln... erhellen.
    3 Hände hat selten jemand... hol dir jmndn, sonst "funkt's" noch :D

    gruß root

    Einmal editiert, zuletzt von root (28. September 2015 um 23:36)

  • jippi habs gefunden!! es war auch noch ein kleiner verkabelungsfehler dabei! ich testete noch die 1 k ohm Sache aus dem Tut. Es würde gehen aber man merkt, wie root schon beschrieben hat, nur ein sehr geringen Ausschlag. Ein 180 k Ohm Wiederstand ist die bessere Lösung.

    ich verstehe zwar noch nicht alle zusammenhänge aber ich werde mir das mal genauer anschauen. hast du noch ein paar tipps für mich root?

    Ansonsten herzlichen Dank für deine Hilfe!

  • Hi


    ...jippi habs gefunden!! es war auch noch ein kleiner verkabelungsfehler dabei! ich testete noch die 1 k ohm Sache aus dem Tut.

    ich verstehe zwar noch nicht alle zusammenhänge aber ich werde mir das mal genauer anschauen. hast du noch ein paar tipps für mich root?


    ...wie war das ? ... "ich habe mich strikt an das TUT gehalten" :lol::lol::lol:
    aber das passiert jedem mal.

    Welche Tipps?, klar, einfach fragen.
    und weiterhin viel Spass.

    gruß root

    //nachtrag
    für dir das mal zu Gemüte, ist recht gut erklärt, und genau das passiert hier. Den Fotowiderstand kannst als Potentiometer ansehen, der abhängig vom Licht sein R alleine regelt.

    Einmal editiert, zuletzt von root (29. September 2015 um 00:23)

  • Hallo
    Na, da misst jetzt jmnd wie ein Berserker... :lol::thumbs1:


    kann man irgendwie auf die Temperatur schließen an Hand des Wertes? irgendwie umrechnen ?


    ...ja, man kann, ist gar nicht so kompliziert.
    Ich schreibt dir heute Abend, wie das geht, und ne kleine Zeichnung zum Verständnis dazu.

    gruß root

  • Hallo tutter,

    auf dem Download-Bereich des von Dir angegebenen Links befindet sich ein Datenblatt.

    Daraus geht die Auswertung (Umrechnung Widerstand in Temperatur) hervor.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo.
    So, wie versprochen ne Erklärung über das Auswerten des Analogsignals des NTC's .
    Andreas hatte ja schon eine Möglichkeit gesagt, aus Tabelle bei TempX Ry Werte lesen, zb. in ein Array eintragen, gemessenen Wert vergleichen, in Tabelle gucken usw.

    Nö, das mach'mer brutal :)
    Eines vorweg, es geht dabei um das Prinzip, und nicht um Genauigkeit..Der TE scheint recht unerfahren zu sein, und ich versuch ihm die Schaltung begreiflich zu machen.

    Also Rv und NTC als Spannungsteiler.
    Welchen Rv nehmen ?. Der muss einerseits so groß sein, dass die MaxPowerdissipation des NTC nicht erreicht wird, andererseits klein genug und nen vernünfigen Spannungshub zu erzeugen.
    Auserdem dient er als minimale Linearisierung der NTC Kurve.Den Wert hab ich aus Erfahrung gewählt.
    Das Diagramm in der Datentabelle zeigt leider dass die Kurve exponentiell ist.
    Was tun ?
    Wer will, kann sich damit austoben aber wenn ich das dem TE zumute, schmeisst er alles inne Ecke.
    Also improvisieren.
    Beim genauereren Hinsehen wird man feststellen, je enger man den zu messenden Wertebereich macht, um so mehr nähert sich die Kurve einer Geraden.
    Genau da wollen wir hin.
    Wir nehmen mal an, es soll zw. 0 und 80°C gemessen werden, und verkleinern somit die Kurve.
    Nachdem wir mit Rv schon ein bischen linearisiert haben, sehen wir die Kurve zw. 0 und 80°C als Gerade an.
    Wenn das also als Gerade angesehen wird, brauchen wir noch die Steigung der Geraden, und den Versatz des Nulldurchgangs.
    Diese Werte errechen wir uns.
    Ich habe einfach mal die 2.Kurve von unten aus der Tabelle angenommen.

    Um die Steigung einer Geraden zu bestimmen brauche ich 2 Punkte auf der Geraden, P1 und P2.
    Beim MCP gehe ich davon aus, dass er Werte von 0-1023 Digits hat, von 0-3,3V . Die 3,3V hat ja als Vref
    Hab mit ihm noch nicht gearbeitet, und schätze die Werte unten nur grob.

    P1 liegt bei 0°C (x) und ~900 (y) Digit vom MCP.
    (da bei 3,3V Rv und Rtmp(12k) in Reihe liegen und bei 0°C an Rtmp ~2,8V abfallen, was ~900 Digits entspricht)

    P2 liegt bei 80°C (x) und ~400 (y) Digit vom MCP.
    (da bei 3,3V Rv und Rtmp(1,8k) in Reihe liegen und bei 80°C an Rtmp ~1,4V abfallen, was ~400 Digits entspricht)

    An den TE:
    Ruhig mal nachrechnen:
    Du hast zwei unterschiedliche Spannungsteiler: einmal bei 0°C und einmal bei 80°C.
    Beide male ist Rv konstant, aber bei 0°C hat Rtmp ~12k Ohm, und bei 80°C hat Rtmp ~1,8kOhm ... klingelt's ? :D
    Der Gesamtstrom ändert sich also jeweils.
    Errechne den Gesamstrom bei 0°C und bei 80°C und setze den errechneten Strom jeweils bei Rmtp ein, dann bekommst den UMCP Volt-wert bei 0°C und bei 80°C, der dir wiederum den Digitwert sagt.

    Eine Gerade hat die Grundfunktion: f(y)=mx+b, wobei m die Steigung der Geraden ist, und b der Y-Versatz des Nulldurchgangs bei x=0 ist
    m errechnet sich also aus (900-400)/-80 = -6,25.(siehe Formel für m im Anhang)
    b ergibt sich automatisch bei x=0, also 900.

    Damit hast gewonnen :)
    Du bekommst allso vom MCP einen Digitwert, davon ziehst 900 ab und dividierst das Ergebnis durch -6,25.
    Das ergibt dir den ungefähren °C Wert.

    Ich sage bewusst ungefähr, da alles als linear angesehen wird.

    Aber ich denke, dir geht es um's probieren, dazu sollte es genügen.

    Das ganze ist im Anhang nochmal zeichnerisch dargestellt.

    So, hoffe dass ich mich einigermaßen verständlich ausgedrückt habe, wenn nicht frage ruhig gezielt nach.

    gruß root

  • erst noch mal ein megagroßes Dankeschön an dich root! wenn ich das also richtig verstanden habe wird die größe des Wiederstands um so kleiner um so höher die Temperatur ist. Somit fällt auch die Spannung. und die Digitsanzahl am MCP.
    Im Umkehrschluss heißt das bei der niedrigsten Temperatur die höchstmögliche Anzahl an Digits gemessen wird und der Wiederstand auch am höchsten ist. (Maximal gesteckter Wiederstand) Somit kann auch die maximale Spannung von 3,3 Volt anliegen.
    Jetzt qualmt mir aber auch der Kopf. Ich werde morgen hier weitermachen. Denn ich habe hier noch einen ntc mit 10 kohm weitere Werte zu dem ntc habe ich leider nicht aber ich möchte ihn wenn es machbar ist unbedingt nutzen und auslesen.

  • Hallo.


    wenn ich das also richtig verstanden habe wird die größe des Wiederstands um so kleiner um so höher die Temperatur ist. Somit fällt auch die Spannung. und die Digitsanzahl am MCP


    Korrekt.Aber nur mit Rv. S.u.Du bekommst den Spannungsabfall sonst nicht mit.


    Somit kann auch die maximale Spannung von 3,3 Volt anliegen.


    Vref und Vcc sind zwei paar Stiefel.
    Bsp. Vcc 5v und Vref 3,3V am MCP.
    Stell es Dir so vor... Du bertreibst den MCP an 5V und Vref an 3,3V ,und den NTC an 3,3V. Was passiert ? Mit steigender Temp steigt lediglich der Strom durch den NTC, die Spannung am NTC bleibt aber konstant.
    Wenn Du aber einen konstanten Rv davorschaltest, wird sich aufgrund des konstanten Rv und des variablen vom Temperaturabhängigen NTC's auch der Spannungsabfall an ihm ändern... verstanden ?
    ...les Dir Das mal in Ruhe durch.


    Somit kann auch die maximale Spannung von 3,3 Volt anliegen.


    Vref kann maximal Vcc liegen.Der MCP hat als Vref die 3,3V.
    D.h. Ein Eigangskanal wird mit der Vref verglichen und ein entspr. Digitwert ausgegeben.
    Aber Achtung, das Kanaleingangssignal sollte nie Vref übersteigen, das kann den MCP killen.


    Jetzt qualmt mir aber auch der Kopf. Ich werde morgen hier weitermachen. Denn ich habe hier noch einen ntc mit 10 kohm weitere Werte zu dem ntc habe ich leider nicht aber ich möchte ihn wenn es machbar ist unbedingt nutzen und auslesen.


    ... macht nix, tut gut :D
    einfach weiterfragen.

    evtl noch einfacher.
    Nimm einen 10k R und ein 10k Poti und hänge sie in Reihe an 5V.
    Messe am Ausgang des 10 k R's die Spannung und drehe das Poti langsam gegen Null.
    Das gleiche passiert am NTC, nur dass die Spannung am NTC nicht linear fällt, sondern nach der NTC Kurve (siehe Tabelle)
    Mit dem Rv stellst Du also letztlich dem MCP eine Eingangsspannung zur Verfügung, die aufgrund des NTC's fällt/steigt ,mit Vref verglichen und entspr. Digits ausgegeben werden.Der Rest ist umrechnen

    gruß root

    Einmal editiert, zuletzt von root (23. Oktober 2015 um 17:58)

Jetzt mitmachen!

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