Aide script ajout ventilateur pour boitier Kintaro
-
@substring d'accord merci.
Maintenant je n'ai plus qu'à mettre les mains dans le cambouis ce soirMerci à tous les deux en tout cas
-
@substring voila le message que j'ai quand j'ai lancé pcb.py ( que j'ai renommé en kintaro.py)
Traceback (most recent call last): File "kintaro.py", line 8, in <module> import http.server ImportError: No module named http.server
si je supprime cette ligne j'ai droit au meme message sur l'import suivant
-
@Dragu
j'essais ton script, j'ai modifier le pin 18 en pin 8. pour l'instant c'est en cours de test mais le ventilo ne pas se déclenche pas quand j'arrive à 60°C voir plus.edit: c'est bon j'ai trouvé la solution, il faut modifier la ligne :
GPIO.setmode(GPIO.BCM)
en
GPIO.setmode(GPIO.BOARD)
En tout cas merci @Dragu et @Substring pour votre aide
voila les scripts pour gerer les boitiers Kintaro.
Faudrait peut être l'intergrer dans une future mise a jour de Recalbox @Substring ?https://drive.google.com/file/d/1bieEzZX1-UMLcyDKqZ66_SH7UGHGIhoW/view?usp=sharing
-
@mikefly script python3 ...
Essaie de remplacer configpa**er par ConfigPa**er. Mais ca risque d'a oir des conséquences ailleurs -
@Substring ok mais ça bloque déjà avant avec le http.server
Apres le script de @Dragu fait le job, le ventilo s'enclenche à 60°C et s’éteint à 55°C.
le script de retropie fait la meme chose non ? démarre à 60 et s’arrête à 55
-
@mikefly me.semblait pas que le script de Dragu gérait 2 temps, tant mieux alors
-
@substring si si. C'est ce qu'il essayait de te dire plus haut.
maxTMP = 60 # Over put on fan minTMP = 55 # Under put off fan
-
Donc en fait, le Pin 8 est le Gpio 14, le fil rouge sur le bouton...
Tout ça n'est parfois pas évident. -
@dragu pourtant la carte électronique est branché sur les 10 premiers pin du raspberry
-
@Mikefly
Oui, et tu vois sur cet schéma la différence entre board et BCMEn tout cas, on peut vraiement recommander cet boîtier, premier qui contient déjà l'électronique pour la commande du ventilateur.
-
@dragu ah oui ok je comprends mieux.
Oui ce boitier c'est de la bombe. Super qualité de fabrication et super fidèle à la SNES Pal -
Donc au finale voila les fichiers scripts pour les boîtiers Kintaro :
https://drive.google.com/file/d/1bieEzZX1-UMLcyDKqZ66_SH7UGHGIhoW/view?usp=sharing
Tuto :
j'ai utiliser ce logiciel WinSCP
se connecter en mode root sur le pi3 et autoriser l’écriture sur les dossier avec la commande :
mount -o remount,rw /
copier le dossier Kintaro dans le repertoire /opt folder
puis le fichier S100kintaro.sh dans le repertoire /etc/init.d/
lancer la commande (pour autoriser le fichier) :
chmod +x /etc/init.d/S100kintaro.sh
et enfin lancer le script avec la commande suivante :
/etc/init.d/S100kintaro.sh start
normalement le message suivant apparait : Starting Kintaro.
-
@Mikefly
@Substring
Juste comme info. Le boîtier "Kintaro Super Ursus" est épuisé partout, aussi en Allemagne. Bon, j'ai trouvé une source en Angleterre et vient de recevoir la case aujourd'hui. Quand j'avais commandé, j'avais aussi publié le site sur mon forum.
Depuis leur stock a passé de 43 à 26. Il ne coûte que 5 Euro en plus pour le transport. Alors dernière occasion.
https://www.modmypi.com/raspberry-pi/cases-183/raspberry-pi-b-plus2-and-3-cases-1122/raspberry-pi-3b-snes-case-super-ursus -
Salut,
Ca y est le dev de Kintaro a sorti sa nouvelle version du script pour leur boitier qui prend en charge le ventilateur via hysterisis. on le trouve ici :
https://github.com/MichaelKirsch/Kintaro-Recalbox
il y a du grand changement dans le script :
#!/usr/bin/python -u #Copyright 2017 Michael Kirsch try: import time import os import RPi.GPIO as GPIO import subprocess except ImportError: raise ImportError('spidev or gpio not installed') class SNES: def __init__(self): #GPIOs self.led_pin=7 self.fan_pin=8 self.reset_pin=3 self.power_pin=5 self.check_pin=10 #vars self.fan_hysteresis = 5 self.fan_starttemp = 60 self.debounce_time = 0.1 #path self.temp_command = 'vcgencmd measure_temp' #Set the GPIOs GPIO.setmode(GPIO.BOARD) # Use the same layout as the pins GPIO.setwarnings(False) GPIO.setup(self.led_pin, GPIO.OUT) # LED Output GPIO.setup(self.fan_pin, GPIO.OUT) # FAN Output GPIO.setup(self.power_pin, GPIO.IN) # set pin as input GPIO.setup(self.reset_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # set pin as input and switch on internal pull up resistor GPIO.setup(self.check_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) def power_interrupt(self, channel): time.sleep(self.debounce_time) # debounce if GPIO.input(self.power_pin) == GPIO.HIGH and GPIO.input( self.check_pin) == GPIO.LOW: # shutdown function if the powerswitch is toggled self.led(0) # led and fan off self.fan(0) os.system("shutdown -h now") def reset_interrupt(self, channel): if GPIO.input(self.reset_pin) == GPIO.LOW: # reset function time.sleep(self.debounce_time) # debounce time while GPIO.input(self.reset_pin) == GPIO.LOW: # while the button is hold the counter counts up self.blink(15, 0.1) os.system("reboot") def pcb_interrupt(self, channel): GPIO.cleanup() # when the pcb is pulled clean all the used GPIO pins def temp(self): #returns the gpu temoperature res = os.popen(self.temp_command).readline() return float((res.replace("temp=", "").replace("'C\n", ""))) def led(self,status): #toggle the led on of off if status == 0: #the led is inverted GPIO.output(self.led_pin, GPIO.LOW) if status == 1: GPIO.output(self.led_pin, GPIO.HIGH) def blink(self,amount,interval): #blink the led for x in range(amount): self.led(1) time.sleep(interval) self.led(0) time.sleep(interval) def fan(self,status): #switch the fan on or off if status == 1: GPIO.output(self.fan_pin, GPIO.HIGH) if status == 0: GPIO.output(self.fan_pin, GPIO.LOW) def fancontrol(self,hysteresis,starttemp): #read the temp and have a buildin hysteresis if self.temp() > starttemp: self.fan(1) if self.temp() < starttemp-hysteresis: self.fan(0) def check_fan(self): self.fancontrol(self.fan_hysteresis,self.fan_starttemp) # fan starts at 60 degrees and has a 5 degree hysteresis def attach_interrupts(self): if GPIO.input(self.check_pin) == GPIO.LOW: # check if there is an pcb and if so attach the interrupts GPIO.add_event_detect(self.check_pin, GPIO.RISING,callback=self.pcb_interrupt) # if not the interrupt gets attached if GPIO.input(self.power_pin) == GPIO.HIGH: #when the system gets startet in the on position it gets shutdown os.system("shutdown -h now") else: self.led(1) GPIO.add_event_detect(self.reset_pin, GPIO.FALLING, callback=self.reset_interrupt) GPIO.add_event_detect(self.power_pin, GPIO.RISING, callback=self.power_interrupt) else: #no pcb attached so lets exit GPIO.cleanup() exit() snes = SNES() snes.attach_interrupts() while True: time.sleep(5) snes.led(1) snes.check_fan()
-
@mikefly tu as testé ?
-
@Substring Je l'ai installé, mais je suis parti manger. Je vais le tester de suite.
-
@substring après avoir testé. Tout fonctionne, le ventilateur se déclenche à 60°C et s'arrête à 55°C.
Il (le dev) m'a aussi dit qu'il va bientôt implanter le pwm dans le script.
-
@Substring
@Mikefly
Très bien d'avoir tout ensemble. Ce que tu pourrais encore faire, c'est insérér pour tester la ligne print. Tu verras alors les lectures de température et l'espace entre les lectures directement dans putty. Dans la version originale la température était lu tout le temps. Un core ne faisait que ça et le script augmentait considérablement la température de la CPU
Bon, je pense que 5-10 secondes sont ok.def fancontrol(self,hysteresis,starttemp): #read the temp and have a buildin hysteresis #print("temp is {0}".format(self.temp)) #Uncomment here for testing if self.temp() > starttemp: self.fan(1) if self.temp() < starttemp-hysteresis: self.fan(0)
Autre chose, du parles de PWM. Ca ne va pas marcher, peu importe ce qu'il essaie.
Parceque ça va bouffer horriblement dans les ressources des émulateurs, étant actif tout le temps. Seule solution, intercaler un attiny et le contrôler tous les X secondes. -
@dragu tu parles dans le nouveau script, la température est relevé tout le temps ? Le mieux c'est de mettre 5-10s ?
C'est où que tu change ça ?
-
@Mikefly
Non, je ne sais pas. Mais tu vois que les instructions font part du nouveau script ?
L'ancien script avait cet défaut, avant que je le modifie. Le print, c'est un moyen supplémentaire pour voir que tout est en règle.