GPIO, LED, Sensoren verbinden

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Abend zusammen,

    ich habe vor kurzem Interesse an das Raspberry Pi erhalten und habe mir dazu auch paar Zubehöre gekauft.

    Ich habe als erstes versucht eine LED Lampe zum leuchten zu bringen, dass auch geklappt hat. Nun habe ich auch ein Feuchtigkeitssensor in Betrieb genommen, was auch nicht schwer war.

    Jetzt will ich aber, dass wenn Feuchtigkeitssensor 70% anzeigt, dass die LED Lampe anfängt zu Leuchten.

    Wisst ihr eventuell wie ich mein Script schreiben muss?

    Danke im Voraus.:)

  • Hallo,

    welchen Feuchtigkeitssensor hast du denn?

    Hast du schon irgendwelche Programmiererfahrungen?

    Wenn du in allem neu bist, stellt sich erstmal die Frage welche Programmiersprache du verwenden willst.

    Ich werfe einfach mal "Python" in den Raum. Mit dieser Sprache und deinem Sensor findest du bestimmt schon einige Anleitungen im Internet. Zum einen gibt es viel zu Python selbst und zum anderen gibt es sicherlich auch einige Projekte mit Feuchtigkeitssensoren.

    Deine Fortschritte kannst du ja gerne posten und dann bekommst du sicherlich Hilfestellung.

    Grüße

    Dennis

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

  • Ja ich arbeite mit Python . Ich habe noch kein Script, wo ich mit dem LED und dem Sensor arbeite, da ich nicht weiß wie ich es schreiben soll. Habe auch schon überall recherchiert. Habe ein Script alleine zu LED(Funktioniert) und zum Sensor, dass ebenfalls funktioniert.

  • Grüße,

    vllt wäre es noch wichtig zu sagen daß du mit Python 3 Programmieren solltest. Die Versionen darunter werden nicht mehr weiterentwickelt.

    Wenn du in Python programmieren möchtest nutzt du am besten GpioZero.

    Damit kannst die Pins am Raspi ansteuern.

    Zum lernen von Python hat mir diese Seite sehr geholfen.

  • Hallo,

    zeig doch mal die beiden Skripte.


    Grüße

    Dennis

    <import Adafruit_DHT>

    from time import sleep

    sensor = Adafruit_DHT.DHT11

    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BCM)

    GPIO.setwarnings(False)

    GPIO.setup(19,GPIO.OUT)

    GPIO.output(19,GPIO.LOW)

    GPIO.output(19,GPIO.HIGH)


    pin = 4

    print("[press ctrl+c to end the script]")

    try:

    while True:

    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

    sleep(1.5)

    if humidity is not None and temperature is not None:

    print("Temp={0:0.1f}*C Feuchtigkeit={1:0.1f}%".format(temperature, humidity))

    else:

    print("Failed to get reading. Try again!")

    try:

    while True:

    if humidity = 70.0%

    GPIO.output(19,GPIO.HIGH)

    else:

    GPIO.output(19,GPIO.LOW)


    except KeyboardInterrupt:

    print("Script end!")

    GPIO.cleanup()

    Einmal editiert, zuletzt von moking21 (3. November 2020 um 20:29)

  • Abend das ist mein Script. Da ich noch nicht so viel Ahnung habe versuche ich hier Hilfe zu bekommen. Habe mir vieles durchgelesen und angeschaut, finde aber keine Lösung dafür .

    Danke im Voraus

  • Ich trenne das mal von einander. Dieser Teil liest solange den DTH11 Sensor aus oder versucht es, bis du "Strg+c" drückst.

    Bei 'while True' beginnt die Schleife. Was in der Schleife passiert erkennst du an den Einrückungen.

    'humidity, temperature = Adafruit_DHT.read_retry(SENSOR, PIN)' schreibt die die Werte für die Luftfeuchtigkeit in 'humidity' und die Werte für die Temperatur in 'temperature'. Aber wenn du 'humidity' einfachso ausgibst, dann wird nicht "70%" oder "50%" erscheinen, sondern "70,xxxxxxxx" oder "50,xxxx". Also mit vielen Nachkommastellen und ohne Einheit. Das heißt du kannst diese Werte nicht mit "70%" vergleichen.

    Am besten ist du formatierst die Ausgabe zu einer brauchbaren Zahl, zum Beispiel "70,5".

    In "deinem" Code wird das direkt in der Ausgabe 'print' gemacht, allerdings wird hier noch die Einheit hinzugefügt:

    'Temp={0:0.1f}*C Feuchtigkeit={1:0.1f}%".format(temperature, humidity)'

    Versuche doch mal die formatierte Ausgabe, ohne Einheit in eine Variable zu schreiben, die du dann für deine 'if'-Abfrage verwendest.

    Das gehört aber nicht in eine neue Schleife.

    Dann kannst du dir mal https://gpiozero.readthedocs.io/en/stable/ durchlesen. Dass ist das Pythonmodul das du für die GPIO Steuerung verwenden solltest. Muss natürlich wieder importiert werden, ich hab es aus oberen Beispiel gelöscht, da es da nicht verwendet wird.

    'GPIO.setwarnings(False)' Hiermit ignorierst du Fehler, wenn ich das richtig im Kopf habe, aber wieso sollte man das machen?

    Dann schreibst du:

    Code
    GPIO.output(19,GPIO.LOW)
    GPIO.output(19,GPIO.HIGH)

    Der GPIO Pin 19 wird Low und dann High, wieso?

    Ich hoffe ich habe es richtig erklärt und du kannst was damit anfangen. Die User die sich viel besser mit Python auskennen, werden mich hoffentlich verbessern.

    Achja, du siehst das ich zum Beispiel "PIN" ganz groß geschrieben habe, dazu siehe PEP8

    Grüße

    Dennis

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

  • Erstmal Danke für dein Kommentar.

    Ich habe es jetzt geschafft, das die LED Lampe leuchtet wenn der Sensor angeschaltet ist. Aber wie ich die LED Lampe zum leuchten bekomme, wenn der Sensor 70% Feuchtigkeit zeigt, weiß und bekomme ich immer noch nicht (hin).

    Ich habe mir das Raspberry Pi gekauft, weil ich bald damit bei meiner Firma ein Projekt beginne und ich schonmal Vorkenntnisse sammeln will.

    Danke im Voraus

  • Hallo,

    du musst jetzt halt noch eine if-Abfrage einbauen, wo du den ausgelesenen Wert mit deinem Schwellwert (also 70) vergleichst und dann, basierend auf dem Ergebnis der Abfrage, wird die LED ein- oder aus geschaltet.

    Zitat

    Ich habe mir das Raspberry Pi gekauft, weil ich bald damit bei meiner Firma ein Projekt beginne und ich schonmal Vorkenntnisse sammeln will.

    Ohne dir zu nahe treten zu wollen: dann lern' mal die Grundlagen ordentlich und strukturiert. Z.B. indem du das Tutorial auf docs.python.org mal in Ruhe durcharbeitest.

    Könnte es vielleicht auch sein, dass die gezeigten Skripte einfach nur Copy&Paste sind und du noch gar nicht verstehst, was da eigentlich läuft?

    Gruß, noisefloor

  • Hallo,

    Ich habe es jetzt geschafft, das die LED Lampe leuchtet wenn der Sensor angeschaltet ist.

    Wie hast du das gemacht?

    Es ist hier im Forum immer hilfreich zu zeigen was man gemacht hat. In deinem Fall den "neuen" Code zeigen. Dann kannst du sagen was du dir dabei gedacht hast und andere Forenmitglieder können dir deinen eventuellen Denkfehler aufzeigen.

    War mein Link und die Erklärung nicht hilfreich oder verständlich? In deinem ersten Code war ja schon ein Versuch einer 'if'-Abfrage drin.

    Ansonsten ist solltest du den Rat von noisefloor auf jeden Fall befolgen.


    Grüße

    Dennis

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

  • Hallo,

    du musst jetzt halt noch eine if-Abfrage einbauen, wo du den ausgelesenen Wert mit deinem Schwellwert (also 70) vergleichst und dann, basierend auf dem Ergebnis der Abfrage, wird die LED ein- oder aus geschaltet.

    Ohne dir zu nahe treten zu wollen: dann lern' mal die Grundlagen ordentlich und strukturiert. Z.B. indem du das Tutorial auf docs.python.org mal in Ruhe durcharbeitest.

    Könnte es vielleicht auch sein, dass die gezeigten Skripte einfach nur Copy&Paste sind und du noch gar nicht verstehst, was da eigentlich läuft?

    Gruß, noisefloor

    Heyy,

    ja also ist zur Hälfte Copy&Paste , aber hab den Sinn dahinter verstanden. Ja ich habe mir jetzt auch vorgenommen erstmal die Grundlagen zu lernen, bevor ich etwas anfange.

    Danke für deine Hilfe.

    Gruß, Mo :)

  • Hallo,

    gut. Wenn du das Skript (bzw. beide) wirklich verstand hast, dann weißt du eigentlich alles, was du wissen musst. Du musst nur an passender Stelle einen weiteren if-else Block einfügen, der die LED an bzw. ausschaltet.

    Und bitte bei zukünftigen Post nicht andere Post in voller Länge zitieren. Das ist in den meisten Fällen ziemlich sinnfrei und fördert nur die Unleserlichkeit eines Posts. Wenn du gezielt auf eine Textstelle o.ä. antworten willst, dann einfach nur die Textstelle gezielt zitieren.

    Gruß, noisefloor

Jetzt mitmachen!

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