Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
public:recalbox [06.05.2018 14:54] se [Kühlung] |
public:recalbox [15.05.2018 09:31] (aktuell) se |
||
|---|---|---|---|
| Zeile 11: | Zeile 11: | ||
| * Welcher Emulator auf welcher Plattform: [[https:// | * Welcher Emulator auf welcher Plattform: [[https:// | ||
| \\ | \\ | ||
| - | :!: **Offene Punkte:** | ||
| - | * [[# | ||
| - | * -> siehe unten | ||
| - | * < | ||
| - | * läuft 1A mit originalen PS3 Controller | ||
| ===== Teileliste ===== | ===== Teileliste ===== | ||
| Zeile 26: | Zeile 21: | ||
| |:?: Offizielles Raspberry Gehäuse|7, | |:?: Offizielles Raspberry Gehäuse|7, | ||
| |:?: NES Retro-Case / Lüftung mies|21,99 €|[[https:// | |:?: NES Retro-Case / Lüftung mies|21,99 €|[[https:// | ||
| - | |:?: NES LEGO Case| ??? €|[[https:// | + | |:?: NES LEGO Case| 15-20 €|[[https:// |
| ===== Software-Liste ===== | ===== Software-Liste ===== | ||
| * **Recalbox** Image: [[https:// | * **Recalbox** Image: [[https:// | ||
| Zeile 207: | Zeile 202: | ||
| ===== Kühlung | ===== Kühlung | ||
| :!: In Arbeit\\ | :!: In Arbeit\\ | ||
| - | Aktuell läuft Recalbox bei mir auf einem Raspberry Pi 2. Raspi 3 kommt demnächst.\\ | + | Auf dem SoC (" |
| - | Auf dem SoC (" | + | |
| \\ | \\ | ||
| - | Zu Untersuchen ist: | + | Status: |
| - | * SoC Temperatur über LINUX auslesen | + | * 5 V Lüfter mit 3,3 Ohm Vorwiderstand |
| - | * < | + | * Zweipunkt-Regelung über Python-Script |
| - | * Kühlkörper Temperatur mit Thermometer gegenchecken | + | * Luftkanal 3D-gedruckt: |
| - | * Taugt der Wärmekleber? | + | * {{:public:rpi_fan.jpg|}} |
| - | | + | * {{:public:rpi_fan_assembled.jpg|}} |
| - | * Idee (theorie) | + | * Beobachtungen: |
| - | * 30x30x10 Lüfter (günstig) | + | * Kein wahrnehmbarer Unterschied zwischen "ohne Kühlung" |
| - | * Lüftermotor mit Flügeln aus alten Kühler extrahieren | + | |
| - | | + | |
| - | * {{:public:fanduct.png? | + | |
| - | * Luftkanal Druckfreundlicher (kein Überhang -> kein Support) | + | |
| - | | + | |
| - | * positioniert zwischen USB-Buchsen und SoC | + | |
| - | * pustet innenluft über den SoC Kühler nach außen | + | |
| - | * Lüfter an 5 V mit Vorwiderstand von ca. 27 - 51 Ohm | + | |
| - | * Temperaturgeregelt | + | |
| - | * [[https:// | + | |
| - | * Script auf richtige (Zweipunkt-) Regelung umbauen | + | |
| - | * Temp_on = 75°C | + | |
| - | * Temp_off = 60 °C | + | |
| - | * -> Aufwand: ca. 30 min HW + SW | + | |
| - | * -> Nutzen: Leise und im Zweifelsfall sicher | + | |
| - | * Untersuchungen: | + | |
| - | * Kein wahrnehmbarer Unterschied zwischen "ohne Kühlung" | + | |
| * Tempunterschied zwischen CPU-Sensor (Anzeige im Frontend) und Temp-Messgerät beträgt immer ca. 10 °C | * Tempunterschied zwischen CPU-Sensor (Anzeige im Frontend) und Temp-Messgerät beträgt immer ca. 10 °C | ||
| - | | + | * Interessanterweise verursacht das Spielemenü die meiste Abwärme |
| - | * Worms auf PSX: < 60 °C | + | * wechselt man zurück ins Hauptmenü sinkt sofort die Temperatur |
| - | * Recalbox Menü etwa 70 °C | + | |
| - | | + | |
| * Maximale Temps lagen schon bei fast 78°C | * Maximale Temps lagen schon bei fast 78°C | ||
| + | * Die Temperaturanzeige im Web-Frontend wird ab 75°C orange (warnung) | ||
| + | Temp-Untersuchung: | ||
| + | Netzwerk über RJ45 mit USB Funkempfänger für Tastatur. Bedienung nur über Bluetooth Pad.\\ | ||
| + | Auslesen der CPU-Temp alle 5 s. Zeitachse in Sekunden. | ||
| {{: | {{: | ||
| + | **Scripte auf dem Raspi ablegen**\\ | ||
| + | Medium schreibbar machen und Pfad zu den scripten: | ||
| < | < | ||
| mount -o remount rw, / | mount -o remount rw, / | ||
| - | / | + | cd / |
| + | </ | ||
| + | Dort eines der fan_ctrl...py scripte hinkopieren (pscp) oder neu anlegen und abtippen.\\ | ||
| + | Mit pscp (putty secure copy) wenn das script " | ||
| + | < | ||
| + | pscp d: | ||
| </ | </ | ||
| - | Startup-Script anlegen: | + | **Startup-Script anlegen** |
| + | Aktuelle Scripte mit " | ||
| < | < | ||
| mount -o remount rw, / | mount -o remount rw, / | ||
| Zeile 257: | Zeile 244: | ||
| </ | </ | ||
| - | Im Script eintragen: | + | **Im Script eintragen:** |
| - | < | + | < |
| # | # | ||
| Zeile 264: | Zeile 251: | ||
| try: | try: | ||
| - | subprocess.Popen([" | + | |
| except KeyboardInterrupt: | except KeyboardInterrupt: | ||
| - | print " | + | |
| </ | </ | ||
| - | Danach noch: | + | **Danach noch die Datei ausführbar machen:** |
| < | < | ||
| chmod +x S33StartTempCtrl.py | chmod +x S33StartTempCtrl.py | ||
| - | Test: | + | </ |
| + | Bei Bedarf testen: | ||
| + | < | ||
| / | / | ||
| </ | </ | ||
| - | Script | + | **Anschluss an den Raspi: |
| + | (Mit vorwiderstand | ||
| + | {{ : | ||
| + | |||
| + | ===== Bekannte Probleme | ||
| + | ==== Mauszeiger träge ==== | ||
| + | Standardmäßig läuft der Mauszeiger sehr träge beim Raspberry Pi. Um dies abzustellen wieder eine [[# | ||
| + | < | ||
| + | nano / | ||
| + | Die Datei besteht aus nur einer Zeile. Das muss so bleiben!\\ | ||
| + | Am Ende dieser Zeile mit einem Leerzeichen getrennt das hier eintippen: | ||
| + | < | ||
| + | Dann wieder Speichern (STRG+O), NANO beenden (STRG+X) und neustarten: | ||
| + | < | ||
| + | |||
| + | ==== DVI-Monitor zeigt kein Bild ==== | ||
| + | Sondereinstellung für Anschluss eines DVI Displays ([[https:// | ||
| + | Über [[# | ||
| + | < | ||
| + | nano / | ||
| + | Nano ist ein minimalistischer Editor unter LINUX. Dort dann das hier auskommentieren: | ||
| + | < | ||
| + | Speichern mit STRG+O und beenden mit STRG+X. Anschließend den RPI neustarten: | ||
| + | < | ||
| + | Am Fernseher hat diese Einstellung keine auswirkungen. | ||
| + | |||
| + | ==== Boot-Video austauschen ==== | ||
| + | //**ALT!** -> aktuelle Versionen haben ein zufälliges Bootvideo.// | ||
| + | Im release (Stand 4.3.2018) wurde ein Weihnachts-Start-Video eingeführt. Etwas spät für Februar ...\\ | ||
| + | Infos aus dem [[https:// | ||
| + | Als erstes das Filesystem umstellen, Standard ist read-only. Und die Animation löschen/ | ||
| + | < | ||
| + | mount -o remount rw / | ||
| + | cd / | ||
| + | cp recalboxintro.mp4 recalboxintro_alt.mp4 | ||
| + | </ | ||
| + | |||
| + | Das neue Video dann von Youtube runterladen, | ||
| + | < | ||
| + | pscp d: | ||
| + | </ | ||
| + | Dann des Raspi neustarten. (Der Scheibzugriff wird wieder umgestellt!) | ||
| + | |||
| + | ===== Eigene Scripte ===== | ||
| + | ==== Temperatur-Logging | ||
| + | Dieses Script liest alle X (hier: 5) sekunden die CPU Temperatur aus und schreibt diese mit einem Zeitstempel in eine txt-Datei im csv Format. Bei Excel einfach über " | ||
| <file python temp_log.py> | <file python temp_log.py> | ||
| # Templogging Script | # Templogging Script | ||
| Zeile 314: | Zeile 348: | ||
| </ | </ | ||
| - | Script für Lüftersteuerung: | + | ==== Lüfterregelung ==== |
| + | Die super einfache Zweipunkt-Regelung schaltet den Lüfter an Pin X bei überschreiten der Temperatur Y ein und bei unterschreiten der Temperatur Z wieder aus.\\ | ||
| + | Der Pin X schaltet natürlich einen Transistor durch, welcher den Lüfter schaltet... | ||
| <file python fan_ctrl.py> | <file python fan_ctrl.py> | ||
| # Fan bang-bang control | # Fan bang-bang control | ||
| Zeile 359: | Zeile 396: | ||
| </ | </ | ||
| - | Anschluss an den Raspi: | ||
| - | {{ : | ||
| - | ===== Bekannte Probleme | ||
| - | ==== Mauszeiger träge ==== | ||
| - | Standardmäßig läuft der Mauszeiger sehr träge beim Raspberry Pi. Um dies abzustellen wieder eine [[# | ||
| - | < | ||
| - | nano / | ||
| - | Die Datei besteht aus nur einer Zeile. Das muss so bleiben!\\ | ||
| - | Am Ende dieser Zeile mit einem Leerzeichen getrennt das hier eintippen: | ||
| - | < | ||
| - | Dann wieder Speichern (STRG+O), NANO beenden (STRG+X) und neustarten: | ||
| - | < | ||
| - | ==== DVI-Monitor zeigt kein Bild ==== | + | ==== Lüfterregelung mit PWM==== |
| - | Sondereinstellung für Anschluss eines DVI Displays ([[https:// | + | Gleicher Ablauf wie oben, jedoch kann die Lüftergeschwindigkeit im ON-Zustand über den Parameter " |
| - | Über [[# | + | Getestet: funktioniert prinzipiell, macht aber Geräusche unabhängig von der Frequenz. Glättung für Lüfter nötig -> mehr Teile -> mehr Bauraum nötig. Aufwand für den Nutzen nicht sinnvoll. |
| - | < | + | |
| - | nano / | + | |
| - | Nano ist ein minimalistischer Editor unter LINUX. Dort dann das hier auskommentieren: | + | |
| - | <code>hdmi_drive=2</ | + | |
| - | Speichern mit STRG+O und beenden mit STRG+X. Anschließend | + | |
| - | < | + | |
| - | Am Fernseher hat diese Einstellung keine auswirkungen. | + | |
| - | ==== Boot-Video austauschen ==== | + | <file python fan_ctrl_pwm.py> |
| - | Im letzten release (Stand 4.3.2018) wurde ein Weihnachts-Start-Video eingeführt. Etwas spät für Februar ...\\ | + | # Fan bang-bang control with pwm |
| - | Infos aus dem [[https:// | + | import os |
| - | Als erstes das Filesystem umstellen, Standard ist read-only. Und die Animation löschen/ | + | import time |
| - | < | + | import RPi.GPIO as GPIO |
| - | mount -o remount rw / | + | |
| - | cd / | + | |
| - | cp recalboxintro.mp4 recalboxintro_alt.mp4 | + | |
| - | </ | + | |
| - | Das neue Video dann von Youtube runterladen, umbenennen nach "recalboxintro.mp4" | + | # Settings |
| - | <code> | + | M_TIME = 5 # Measure time interval |
| - | pscp d:\pfad\recalboxintro.mp4 root@recalbox:/ | + | ON_TEMP = 70 # upper temp value -> Fan turned on |
| - | </ | + | OFF_TEMP = 60 # lower temp value -> Fan turned off |
| - | Dann des Raspi neustarten. (Der Scheibzugriff wird wieder umgestellt!) | + | FAN_PIN = 14 # Transistor for the cooling fan is connected to pin 14 |
| + | PWM_F = 1000 # PWM frequency in kHz. Change only when fan makes fancy noises | ||
| + | DC = 50 # PWM duty cycle for the FAN (0 ... 100, where 100 is the maximum) | ||
| + | |||
| + | # setup GPIO | ||
| + | GPIO.setwarnings(False) | ||
| + | GPIO.setmode(GPIO.BCM) | ||
| + | GPIO.setup(FAN_PIN, | ||
| + | |||
| + | # Activate PWM on the FAN_PIN | ||
| + | p = GPIO.PWM(FAN_PIN, | ||
| + | |||
| + | # funtion for reading the cpu temperatur and return it as float | ||
| + | def getCPUtemp(): | ||
| + | res = os.popen(' | ||
| + | return (res.replace("temp=", | ||
| + | |||
| + | # main loop for the bang-bang control | ||
| + | while True: | ||
| + | # get temperature | ||
| + | temp_float = float(getCPUtemp()) | ||
| + | |||
| + | try: | ||
| + | # if actual temp axceeded the upper value, turn fan on | ||
| + | if (temp_float | ||
| + | | ||
| + | # if actual temp drop below the lower value, turn fan off | ||
| + | elif (temp_float < OFF_TEMP): | ||
| + | p.stop() | ||
| + | |||
| + | except: | ||
| + | # for debugging | ||
| + | print " | ||
| + | |||
| + | # cycle time of the control. for temperature it dont have to be fast | ||
| + | time.sleep(M_TIME) | ||
| + | </ | ||