GPIO's täglich zu bestimmter Uhrzeit ein, bzw. Ausschalten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • GPIO's täglich zu bestimmter Uhrzeit ein, bzw. Ausschalten? Schau mal ob du hier fündig wirst!

  • Hallo an alle,

    erst mal vielen Dank für die vielen Tipp's und Rückmeldungen.

    Ich habe mir jetzt in Bezzo's Kleinwarenladen folgendes Relais [Anzeige] bestellt.

    Und folgenden Code geschrieben:

    so sollte es doch eigentlich funktionieren.

    Vlt. Arbeite ich auch mit zwei hintereinanderschalteten Relais, einem normalen "on/off" Relais und dem von Bezzo, dann sollte ich eigentlich auf der sicheren Seite sein.

    Btw: Falls der Rasp abschmiert, neu startet und dabei die GPIO's alle "Resettet", würden ja auch die Ventile zur Entleerung der Leitung schließen - quasi "Sommerbetrieb" - bis der Temp.-Sensor dann wieder meldet, es ist zu kalt für Sommer und das Procedere "Winterbetrieb" neu startet.

    Mal ne ganz andere Frage zu meinem Projekt: Da ich ja hauffenweise Kabel nach außen führen muss, und ich das mit einem D-SUB25 (Auch bekannt als LPT-1 Druckerkabel parallel) gemacht habe, stellt sich die Frage, wie lange darf das Kabel sein, um ein Analogsignal zum Raspberry auf einen A/D1115 zu senden? Gibt es da Probleme bei ca. 15 m länge? Hintergedanke: Evtl. will ich eine Durchflussmessung an der Pumpe anschließen, damit ich ungefähr weiß, wie viel Wasser ich mir von der örtl. Wasserversorgung gespart habe. Zum Einsatz würde ein AS010 von autosen kommen (Flow: 9 ... 150 l/min, U: 10 ... 33 V DC), lt. Hersteller liefert der Sensor 4 - 20 mA)

    Die Ventile für die Beregnung laufen mit 24 VAC (nur zur Info)

  • Mal ne ganz andere Frage zu meinem Projekt: Da ich ja hauffenweise Kabel nach außen führen muss, und ich das mit einem D-SUB25 (Auch bekannt als LPT-1 Druckerkabel parallel) gemacht habe, stellt sich die Frage, wie lange darf das Kabel sein, um ein Analogsignal zum Raspberry auf einen A/D1115 zu senden? Gibt es da Probleme bei ca. 15 m länge? Hintergedanke: Evtl. will ich eine Durchflussmessung an der Pumpe anschließen, damit ich ungefähr weiß, wie viel Wasser ich mir von der örtl. Wasserversorgung gespart habe. Zum Einsatz würde ein AS010 von autosen kommen (Flow: 9 ... 150 l/min, U: 10 ... 33 V DC), lt. Hersteller liefert der Sensor 4 - 20 mA)

    4 - 20 mA sind schön. Die kann man ohne Probleme verlängern: https://www.mikrocontroller.net/topic/222785

    Eine Anmerkung war, dass ein Blitzschlag die Spannung auch ändern kann und dadurch dann den Strom beeinflusst.

    Der Sensor fängt erst bei 4 mA an, was als Drahtbruchsicherung gilt. 0 mA bzw. 0V == Drahtbruch.
    Der ADC kann nur analoge Spannungen verarbeiten, also muss man mit einem Widerstand den gewünschten Spannungsfall erzeugen.

    Die maximale Größe des Widerstands steht im Datenblatt des Sensors.

    Falls das nicht angegeben ist, wird die Betriebsspannung von bis angegeben.

    Bei dem Sensor sind es 10 - 33 V.

    Wenn man z.B. 3.3 V als Maximalspannung für den ADC bestimmen möchte:

    Code
    R = U / I
    R = 3.3V / 20mA
    R = 165 Ohm
    
    # 10 V
    R = 10V / 20mA
    R = 500 Ohm

    Dann musst du den AD1115 mit 3.3V über VDD versorgen.

    Das ist dann auch die digitale Spannung für I2C und die analoge Bezugsspannung.

    Den Sensor mit mindestens 10V aber nicht mehr als 33V einspeisen. Über die Spannung wird der Strom erzeugt.

    Der Bereich des ADC geht von 0 bis 65535 (16 Bit), aber die Skalierung fängt erst bei 4mA bzw. 9l/min an.

    Die Spannung für den unteren Messbereich kann man sich ausrechnen.

    Code
    min_wert = int(0.04 / 0.2 * 2**16)
    # 1307

    Der min_wert sollte nur bei einem kaputten Sensor oder Kabelbruch unterschritten werden.

    Da man immer Ungenauigkeiten hat, kann man den unteren Messbereich auch einfach mit dem ADC erfassen
    und diesen dann als Wert für den unteren Messbereich übernehmen.

    Hinterher normalisierst du den Eingangs-Wert (auf 0 - 1) und danach skalierst du den normalisierten Wert auf 9 - 150 l/m.

    Wenn zwei unterschiedliche Sensoren eingesetzt werden, könnte man sich aus der Funktion eine Klasse machen oder mit functools.partial arbeiten.


    Bezüglich der Abschaltung der GPIOs müsste man es einfach mal testen.

    Die einfache Variante zum Testen: reboot

  • Also wenn ich das Richtig verstehe, brauche ich, wenn ich das Ding mit 12 V versorgen möchte, einen 600 Ohm Widerstand?

    Den Code "def analog2unit ..." kann ich so übernehmen?

    Hab an der ADS1115 schon einen Temp-Sensor hängen ...
    Beim ADS handelt es sich um folgenden: CQRobotADS1115 [Anzeige]

  • Die Spannung, mit der der Sensor versorgt wird (10-33VDC), bestimmt nicht die Ausgangsgröße (4-20mA). Die Ausgangsgröße wird durch den erfassten Messwert und die Auswerteelektronik erzeugt. Die Elektronik gibt dann einen Konstantstrom aus und der liegt immer zwischen 4mA und 20mA. Den gewünschten Spannungsfall legt man mit dem Widerstand fest.

    Du musst also mit den Werten rechnen, die der ADC erfassen kann. Da dieser mit 3.3V betrieben wird, da der RPI auch mit 3.3V arbeitet, muss man das Eingangssignal auf 3.3V abfallen lassen. Mehr Spannung == kaputter ADC und ggf. kaputter RPI


    Hier eine Abbildung, die es ungefähr wiedergibt.

    Auf der linken Seite hast du den Sensor (der auch mit 10-33VDC eingespeist wird), in der Mitte jeweils der Widerstand zum Erzeugen des Spannungsfalls. Rechts die gemessene Spannung. Bezugspotential sind die 0V.

    Zum Ausprobieren kannst du den Sensor ohne ADC an einem Widerstand anschließen.

    Im Datenblatt steht die Pinbelegung. Wenn du mit 12V arbeiten möchtest, dann L+ 12V an Pin 1 anschließen.

    Pin 2 ist die Temperatur und Pin 4 ist die Durchflussmenge.

    Die Angabe im Datenblatt scheint falsch zu sein, da sich diese nicht mit der Grafik übereinstimmt:

    Zitat

    Pin 1 & Pin 4 versorgen Sensor mit Strom; Analogausgang auf Pin 2 ist optional


    An Pin 2 kommt dann ein 165 Ohm Widerstand und die andere Seite an die Masse (-) der Batterie/Netzteils.

    Bei Pin 4 genau das Gleiche. Eine Seite des Widerstands an den Pin 4 und die andere Seite an Masse.

    Der Sensor gibt einen Strom aus, der Widerstand bestimmt den Spannungsfall.

    Mit einem Messgerät solltest du dann an beiden Widerständen eine Spannung zwischen ~0V und 3.3V messen.

    Die 0V werden nie erreicht, da immer 4 mA mindestens ausgegeben werden.

  • Hallo liebe Raspifreunde,

    mittlerweile hat sich auch mein Schwipp-Schwager (Freund meiner Schwester) dem Script mal angenommen und deutlich mehr Struktur reingebracht.

    Allerdings läuft es noch nicht, es kommt immer ein Fehler.

    Ich finde den Grund aber nicht.

    Hier der bearbeitete Code:

    und hier die Fehlermeldung:

    Code
    Traceback (most recent call last):
    File "/home/pi/Gartenbewässerung/smartgarden.py", line 152
    match self.gartenzustand:
    ^
    SyntaxError: invalid syntax

    self.gartenzustand ist doch definiert? Oder?

  • Hallo,

    und deutlich mehr Struktur reingebracht.

    ja, findest du?

    Ich denke, er wechselt Python mit einer anderen Programmiersprache.

    self.gartenzustand ist doch definiert? Oder?

    Die Fehlermeldung sagt nicht, dass ein Name nicht definiert ist, sondern weist auf einen Synatx-Fehler hin.

    Siehe:

    re — Regular expression operations — Python 3.10.2 documentation

    Falls das 'match' gemeint war. Der Import dazu fehlt auch.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Java, oder?

    Ja, soweit ich weis geht da nicht viel ohne Klassen.

    Python benötigt Klassen, wenn man sich zum Beispiel etwas merken will. Wenn man keinen Sinn darin sieht, wieso man ständig Namen an 'self' bindet, dann kann die Klasse eigentlich auch weg. So zumindest meine Erfahrung. (Auch wenn die nicht all zu groß ist)

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Und while TRUE: bzw. case sieht man auch eher selten in Python. :conf:

    Das liegt daran, dass match und case erst mit Python 3.10 eingeführt worden ist.

    Beides sind Soft-Keywords und können weiterhin als normale Namen verwendet werden.

    Viele, die diese Konstruktion sehen, vermuten die gleiche Funktionalität wie beim switch/case in C.

    Structural Pattern Matching kann aber mehr.

    Da RPi OS Bullseye aber nur Python 3.9 zur Verfügung stellt, sieht man die Anwendung hier im Forum eher selten.

  • Ganz normal mit if-elif-else Verzweigungen. Das structural pattern matching nutzt auch unter anderem isinstance.

    Ein Beispiel zu konstruieren, ist gar nicht so einfach.

    Der Vorteil beim neuen Syntax ist, dass man sofort sieht welcher case zutrifft, sofern man es richtig macht und dort einsetzt, wo es auch einen Sinn ergebigt.

Jetzt mitmachen!

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