• Du musst dich registrieren, bevor du Beiträge verfassen kannst. Klicke auf Jetzt registrieren!, um den Registrierungsprozess zu starten. Registrierte User surfen werbefrei, können Suchen durchführen und sehen die volle Darstellung des Forums mit vielen anderen Unterforen!!!

WLAN-Thermometer selbst bauen mit Raspberry Pi

Hallo zusammen,

da der China-Arduino-Klon noch auf seiner langen Reise ist und mich das Thema PWM mit dem RPi nicht in Ruhe gelassen hat, habe ich mich gestern Abend mal drangesetzt. Mein Thermometeraufbau ist prinzipiell sehr ähnlich, allerdings habe ich die Stromversorgung anders geregelt:
- Ich hatte keine Lust auf 230V im Gehäuse und habe mir ein 12V-Schaltnetzteil besorgt.
- Somit kommen im Gehäuse lediglich 12V an. Die Versorgung läuft über eine Buchse.
- Ein DC-DC-Stepdownwandler (Modul von ebay auf Basis von LM2596S) macht aus den 12V 5V.
- Die Massen habe ich natürlich verbunden.
- Der Raspberry wird aus den 5V gespeist, der Lüfter aus den 12V.
Die normale GPIO-Bibliothek kann definitiv kein 25kHz-PWM. Dafür gibt es die RPIO-Bibliothek, die die GPIO-Funktionen 1:1 ersetzen kann ("import RPIO as GPIO" und dann muss kein weiterer Code verändert werden) und zusätzlich weitere Funktionen bietet. Der Lüfter hängt an Masse und 12V, PWM an bspw. an Pin4 des Raspberry. Den Tacho habe ich frei gelassen. Dann mittels GPIO einen 4000µs-Subcycle erzeugt, dem 100 Pulse à je 0-39 µs hinzugefügt werden. Somit lässt sich der Lüfter (Arctic F9 PWM) bis zum Stillstand bzw. Vollgas regeln.
Der Lüfter läuft auch an, wenn das PWM-Kabel nicht verbunden ist (Sicherheitsfeature?!). Bei Pulsen von 0-2µs läuft der Lüfter aus diesem Grund auf Vollgas. 3 ist Stillstand, ab da geht's dann immer schneller. Sicherheitshalber werde ich die Tage noch ein IRF3708 einbauen, der den Lüfter komplett abschalten kann.
Fazit: 25kHz-PWM ist ohne weitere Bauteile mit der RPi möglich. :-) Nachteil ggü Arduino-Lösung: den Code muss man ein wenig anpassen.

Viele Grüße
 
Hi Joe,

glaube ich auch nicht, läuft nämlich. ;-) Den Quellcode kann ich gerne mal zur Verfügung stellen. Eventuell könnte man das ja als dritte Option einbauen ("PWM on-board" oä). Per N-MOSFET lässt sich der Lüfter dann auch komplett ausschalten bzw. im reinen An/Aus-Betrieb betreiben.
Mir gefällt die Lösung auch mit am besten. Es hat mich total gewurmt, dass es anders nicht funktioniert hat und mehr Bauteile kosten mehr Geld und mehr Nerven, wenn wieder irgendwas nicht geht. ;-)

LG
 
Hallo Clayburn,

kannst du nun auch neben dem PWM Signal noch mit den anderen GPIO's normal Arbeiten, ich musste den Servoblaster so Kompilieren das nur der eine GPIO benutzt wird und nicht alle, sonst geht das Thermo ja nicht mehr...

Kannst du den Link zur RPIO Bibliothek und deine Aufrufe posten?
 
Hi Joe,

die GPIOs sollten noch normal arbeiten. In meiner Demo habe ich es noch nicht ausprobiert, sehe aber keine Probleme. Das Modul heißt RPIO (http://pythonhosted.org/RPIO/) und für PWM gibt es sogar eine Hilfeseite (http://pythonhosted.org/RPIO/pwm_py.html). Des Weiteren ermöglicht das Modul einfaches Interrupthandling (z.B. für Taster). Weitere externe Module wie etwa der Servoblaster sind nicht nötig.
Im Anhang eine kleine Demo inkl. ein paar Kommentaren. Ich habe gerade nur eine etwas ältere Version zur Hand, sollte aber laufen. Die Demo ist für Python3 geschrieben, aber das Prinzip sollte klar sein. Einfach RPIO installieren und mit sudo ausführen.

LG

Anhang:
Da ich anscheinend keine Dateien hochladen darf, hier der Quellcode:

Zuerst das Modul "pwmfancontrol.py", welches mit einer "__init__.py" im Ordner "pwmfan" liegt.
Code:
import RPIO.PWM as pwm


def setup_pwm():
    pwm.setup(pulse_incr_us=1, delay_hw=pwm.DELAY_VIA_PWM)
    pwm.init_channel(channel=0, subcycle_time_us=4000) # 100 cycles @ 40µs each
    pwm.set_loglevel(pwm.LOG_LEVEL_ERRORS) # show errors only (less verbose)

def set_fan_speed(fan_speed=1.0,
                  gpiopin=4):
    # check if properly setup
    if pwm.is_setup == 0:
        setup_pwm()
    fan_speed = max(0.0,fan_speed) # reduce to [0,1]
    fan_speed = min(fan_speed,1.0)
    duty_cycle = fan_speed * 39
  
    for i in range(100):
        pwm.add_channel_pulse(0, gpiopin, i*40, round(duty_cycle))

def cleanup():
    pwm.cleanup()

if __name__ == '__main__':
    setup_pwm()
    set_fan_speed(0.5)

Dann die Demo
Code:
import pwmfan.pwmfancontrol as fc

fc.setup_pwm()

while True:
  speed = input('Speed: ')
  try:
      speed = float(speed)
      fc.set_fan_speed(speed)
  except:
      fc.cleanup()
      break
 
Hallo Clayburn,

das sieht sehr gut aus, vor allem weil du direkt dem GPIO aus Python aktivierst muss kein Modul wie beim Servoblaster kompiliert und auch erst geladen werden!

Auch der Preis für einen Lüfter ist mit unter EUR 10 auf jeden Fall super!
 
Ja, das ist richtig. Alles Python bzw. Python-Wrapper für C. Bei der Installation von RPIO werden die nötigen Dateien direkt mitkompiliert und erstellt.
Man könnte ziemlich schmerzfrei das gesamte Projekt auf RPIO umstellen (RPIO installieren, in den imports RPIO statt GPIO importieren). Eine Servo-Hilfsklasse wird übrigens auch gleich mitgeliefert. ;-) Den Lüfter gibt's für nicht mal sechs Euro inkl. Versand beim großen Fluss. :-)
 
Das hört sich echt gut an. Wie ich das sehe, kann es auch kompatibel zu allen anderen Lösungen und kann einfach als weitere Option verwendet werden.

Man benötigt eigentlich nur einen zusätzlichen IO um den Lüfter komplett ausschalten zu können. Es geht nämlich nicht jeder PWM-Lüfter aus wenn min. Signal anliegt.

Viele Grüße
Martin
 
@Joe16 ich schicke Dir heute Abend nochmal meinen aktuellen Code mit dem PID-Regler. Ich habe das ja schon so umgebaut, dass Reglertyp und Ausgang, getrennt über die Konfiguration festgelegt werden können. Vielleicht möchtest du das ja verwenden, würde hierzu gut passen.

Viele Grüße,
Martin
 
Moment, ich schaue nach....
uploadfromtaptalk1407337897206.jpg


Nö!

Grüßle und Tschöh!

Armin
 

Anhänge

  • uploadfromtaptalk1407337897206.jpg
    uploadfromtaptalk1407337897206.jpg
    258,8 KB · Aufrufe: 1.032
Gibt's hier jemanden, der mir ein fertiges WLAN Grillthermometer verkaufen würde?
Denke der Selbstbau übersteigt meine technischen Fähigkeiten leider :(

Bitte PN
 
Hi Grill_Teufel,

ich weiß zwar nicht, ob sich schon jemand gemeldet hat, aber das würde vermutlich ziemlich teuer werden, fürchte ich. Alleine das Material sind locker >100 Euro (und da hast du nicht 8 Fühler...). Von der Arbeitszeit ganz zu schweigen.
Versuche es doch mal selbst, so schwer ist das nicht. Wo hängt es denn am meisten? Löten? Software?

VG
 
@Arminth

Wie man im Bild unten schön erkennen kann hast du ein schönes gleichmäßiges Branding. Ok die weißen Flächen könnten etwas dunkler sein aber meiner Meinung nach würde ich die Schlappen runter nehmen bevor sie an der dunklen Fläche zu sehr verkohlen... :kugel:

schlappen.PNG
 

Anhänge

  • schlappen.PNG
    schlappen.PNG
    168,6 KB · Aufrufe: 954
Hi Grill_Teufel,

ich weiß zwar nicht, ob sich schon jemand gemeldet hat, aber das würde vermutlich ziemlich teuer werden, fürchte ich. Alleine das Material sind locker >100 Euro (und da hast du nicht 8 Fühler...). Von der Arbeitszeit ganz zu schweigen.
Versuche es doch mal selbst, so schwer ist das nicht. Wo hängt es denn am meisten? Löten? Software?

VG
Ich schick dir mal eine PN, dann belästige ich hier den Rest nicht
 
Hallo zusammen,

der Low-Level-MOSFET ist gekommen und funktioniert auf Anhieb.
PWM-Eingang des Lüfters an GPIO4, Gate des MOSFET an GPIO17, GND vom Lüfter wird über den MOSFET geschaltet. Hier mal eine etwas ausführlichere Demo, die den Lüfter steuern kann per PWM und per GPIO die Stromversorgung an-/ausschalten kann. GPIO-Pins und PWM funktionieren also problemlos gleichzeitig.

--> 25kHz PWM-Lüfter direkt am RPi? Kein Problem. :-D

Wäre schön, wenn wir das die nächsten Tage/Wochen mal in eine neue Version einbauen können. Kann man ja schön kapseln und als 3. Option anbieten. Da müsste man sich nur auf eine Skala einigen (0-1, 0-39, 0-255,...). (Der MOSFET könnte eigentlich auch das Relais ersetzen. Laut Datenblatt geht da noch einiges. ;-))

Viele Grüße und viel Spaß beim Ausprobieren
 

Anhänge

  • fanpwm.zip
    1,5 KB · Aufrufe: 164
@Clayburn The Cremator da die bisherige Wertekurve und auch mein Entwurf eines PID Reglers in %, also 0 bis 100% Ausgangsleistung arbeiten fände ich es praktisch wenn man das beim direkten PWM auch so machen würde. Somit kann dann idealerweise irgendwann jeder Regler mit jedem Ausgang verwendet werden.

Viele Grüße,
Martin
 
Zurück
Oben Unten