MCP 3008 Lüftersteuerung

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo
    bin im Moment dabei ein paar Lüfter mit dem Raspberry Pi zu steuern dazu habe ich einen A/D Wandler (MCP3008) an den Pi angeschlossen und messe nun mit einem PTC die Raumtemperatur das funktioniert auch super nur wie kann ich dem pi nun sagen dass er mir bei einem wert von 400 mein Relais einschaltet damit die Lüfter loslaufen ...
    hab schon ein bischen rumprobiert aber es noch nicht zum laufen bekommen :)
    ich habe mich an diese anleitung gehalten
    https://www.raspiprojekt.de/machen/basics/….html?showall=1
    Hat jemand eine idee wie ich es hinbekomme?

    LG Chris

  • das Messen ist doch eine Sache, das scheinst du geschafft zu haben?

    Das Schalten ist eine andere Sache, Beispiele wie man einen Portpin zum Schalten bewegt gibt es doch genug


    .... mein Relais einschaltet damit die Lüfter loslaufen ...
    hab schon ein bischen rumprobiert aber es noch nicht zum laufen bekommen :)

    ist leider keine brauchbare Aussage.

    Vielleicht versuchst du erst mal einen Portpin auf high oder low zu setzen?

    Als Hilfe eine low current oder UH LED mit einem Vorwiderstand von 1k.

    Ich habe es mit dieser Anleitung in C und geany geschafft
    http://kampis-elektroecke.de/?page_id=1544

    andere nutzen Python o.ä.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Wenn Du das Script von meiner Seite als Anhalt genommen hast, brauchst Du nur das Ergebnis welches Du aus getAnalogData() bekommst mit einem Sollwert vergleichen und dann den gewünschten Pin auf high setzten. Vorher natürlich den Pin als Ausgang definieren. Die Whileschleife in der DEMO ist natürlich nicht der Weißheit letzter Schluss, aber belastungsmäßig geht das eigentlich. Aber um so mehr in der Schleife passiert, um so belastender wird das auch für die CPU. Da die Temperaturmessung bestimmt nicht so schnell hintereinander erfolgen muss würde ein sleep() in der Schleife ganz gut tun oder die Messung wird in einem eigenen Thread durchgeführt (beim Pi3 lohnt sich das).


  • Wenn Du das Script von meiner Seite als Anhalt genommen hast

    mal ne doofe Frage ist MCP + PTC nicht etwas aufwändig für ne Raumtemperaturmessung?

    wäre da nicht ein 1w DS18b20 sinnvoller und einfacher?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • mal ne doofe Frage ist MCP + PTC nicht etwas aufwändig für ne Raumtemperaturmessung?

    wäre da nicht ein 1w DS18b20 sinnvoller und einfacher?

    Des Menschen Wille ist sein Himmelreich! Grundsätzlich wäre ein DS18B20 einfacher, aber vielleicht sollen ja noch weitere analoge Werte dazukommen, dann wäre die Sache mit dem MCP3008 wieder die Bessere.


  • Des Menschen Wille ist sein Himmelreich!...

    dachte ich auch, wie war das mit den Wegen und Rom?

    aber vielleicht hat sich der TO nur verirrt und will nix anderes und hat nur die erste Lösung gesehen?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (24. April 2016 um 11:11)

  • Es kommen später noch weitere Analogwerte hinzu deswegen der MCP3008

    Wie würde dann der Befehl in Der while True Schleife lauten

    If getAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS) >= 400
    Set GPIO.output(18, 1)
    else set GPIO.output(18. 0)

    Bin im Moment nicht zuhause deswegen kann ich es nicht ausprobieren ?

  • Erst mal einen GPIO als Ausgang definieren am besten ausserhalb der Schleife, ist sonst unnötiger Ballast und der GPIO würde sich fragen was das soll ;) .

    Code
    GPIO.setup(18, GPIO.OUT)


    In der Schleife dann nur noch die Bedingung setzen
    und mit

    Code
    wert=getAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS) #wuerde ich so machen, falls der Wert noch wo anders gebraucht wird, weil dann die Funktion nicht erneut aufgerufen werden muss.
    if  wert >= 400:
        GPIO.output(18, 1)
    else:
        GPIO.output(18, 0)

Jetzt mitmachen!

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