Ventilateur commandé par GPIO

Bonjour,

Je cherche pour mon projet un transistor npn TO-92 ou autre fonctionnant en 3V sur la base. Et l’émetteur récepteur en 5v pour le ventilateur.

C’est à dire que la pin « Base » du transistor se ferme lorsqu’elle reçois le courant d’une GPIO.

J’ai déjà épluché de nombreux tutoriel, en anglais également et venant de la suisse, il m’est difficile de trouver un transistor égal dans nos commerces comme.https://www.conrad.ch

Le dernier que j’ai utilisé est un BC547C TO-92.
j’ai fait mon montage à vide avec une alim USB 5v et pour simuler la gpio une pile 9v
Tout fonctionne bien mais une fois le montage posé sur le RPI 3b+ rien ne tourne.

Ne connaissant pas bien tout les termes utilisés dans les datasheets je vous met donc le pdf du datasheet pour que vous puissiez m’aiguiller.

Si une bonne âme arrive à me donner un lien sur conrad avec le bon transistor c’est un cadeau de Noël :slight_smile:

fiche technique BC547C

Bonjour,

Ce qu’il faudrait comme information, c’est la consommation en courant du ventilateur.
Par approximation, il faudrait essayer de changer la valeur de la résistance de base en alimentant la base en 3,3V.

A+

C’est un tout petit ventilateur qui fait 3x3 en 5v il ne doit pas dépasser 0,3A. L’étiquette est effacée…
qu’entends-tu par changer la valeur de la résistance de base ?

Mais si on part sur un 5v 0.27 W est-ce un bon début ?

Bonjour,

Un transistor à un gain de 100 environ, don pour piloter ton transistor il faut diviser le courant collecteur émetteur ,
0,3 Ampère par 100 mais pour un bonne puissance restituée tu divisés par 50.
Donc 0.3 divisé par 50 = 0,006 A
Donc ta tentions de service 5v divisé par 0.006 = 833 ohms
Un résistance de 470 ohms ira bien.
Peux tu me dessiner ton montage ?
JC

Bonjour,

Pour activer le ventilateur il faut que le transistor travaille en mode de saturation. C’est à dire en langage courant, qu’il faut envoyer la pêche sur sa patte Base. Pour cela il faut calculer la valeur de la résistance R1 qui est entre la sortie du GPIO et la base (voir schéma).
Mais il faut aussi qu’il puisse supporter suffisamment de de courant dans son Collecteur c’est pour ça que je demande quel est le courant passant dans le ventilo. Si effectivement le ventilateur demande 300mA pour fonctionner c’est un peu short pour un BC547 qui d’après un le datasheet à un Peak Collector Current de 200 mA. MAis si le ventilo fait 0,27W, ça fait 50mA et là c’est bon.

Dans le schéma ci-dessous, il faut donc déterminer la valeur de R1.
https://i.imgur.com/h1YEGtzm.jpg

Selon le forum dont est ici le schéma, ils recommandent une résistance de 1kohm.
https://www.raspberrypi.org/forums/viewtopic.php?t=203978

A+

Le schéma est bon , et doit fonctionner, à la place du ventilateur, un led avec un résistance de 100 ohms en série attachée au 5 volts pour un essai .
Pour le ventilateur quand il sera enclenché il faut voir si le transistor chauffe ou pas.de toutes façons au pire il y aura 0.7 volt entre collecteur et émetteur , donc pas beaucoup de dissipation de chaleur.
Si tout va bien il faudrait mettre 2 petit condensateurs pour absorber les pics du ventilateur, 2 fois 100 nano un entre les broches du Ventilo, et l’autre entre base et émetteur, pour éviter de perturber le Pi.
Bonne soirée
JC

Bonjour,

Merci pour vos réponse.

Voulant faire les choses correctement, je me suis baser sur ce modèle de ventilateur Avec une tension normial de 5v, il consomme 138 mA et 0.68W de puissance.

Si je comprend bien on doit appliquer la loi d’ohm ici.

Donc si j’ai U=R*I pour avoir R nous avons R=U/I. Ce qui donne finalement 3.3/0.138 =23.91 ohm pour R1 est-ce correct ou je ne comprend rien du tout ^^

Donc si je prend le même transistor ça devrait marcher ?

Parce que mon montage est similaire sauf la R1 que je n’ai pas mis. Avec l’alim 5v et la pile 9V pour le GPIO ça fonctionnait nickel mais quand j’ai branché en 3.3v(GPIO) sur le PI ça n’a pas fonctionné.

Edit: et si je passais par une petite carte relais mono canal ça ne serait pas plus simple au lieu de se casser les dents la dessus.
sans alimentation externe bien sur. Tension de fonctionnement à 5v et tension de commutation à 3v c’est tout à fait possible non ? j’ai un peux regarder mais sans trouver de carte avec une tension de commutation a 3v c’est toujours du 5v… quelqu’une à déjà bossé avec ça

Bonjour,

Heu, comment dire,… c’est pas trop beaucoup ça.

On va se baser sur ce datasheet où il y a une belle courbe nommée « Figure 3. Collector Saturation Region ».
On a dit que le ventillo consommait 138 mA, donc pour Ic. Il y a 2 courbes, une de 100mA et une de 200mA, on se situe donc entre les 2, donc on imagine grosso modo une courbe qui passe entre les 2.
Si le transistor est saturé, on est dans le bas de la courbe (partie horizontale, plate). Dans cette courbe imaginaire on va avoir environ 15mA à fournir en Ib pour une chute de tensions entre le Collecteur C et l’Emetteur E de 0,8V.
Sachant que la tension Base Emetteur avoisine les 0.7V et que on alimente le montage en 3,3V et que l’on souhaite faire passer 15mA, là on va donc appliquer la loi d’ohm R1=(3,3-0,7)/0.015=170ohm.

Bon à la louche, si je me suis pas moi aussi lamentablement planté dans mes calculs, une résistance entre 150 ohm et 180 ohm devrait faire l’affaire,mais c’est pas courant. D’autant plus que je trouve qu’on est quand même en limite de l’utilisation d’un BC547. Pas sûr à 100% que ça fasse décoller le ventilateur.

Sinon, effectivement une carte module relais fera aussi l’affaire.

N.B.: J’espère ne pas t&voir perdu dans la lecture de la courbe de saturation du transistor.
Quand j’aurai 10mn je ferais le test d’un montage similaire pour voir ce qui passe.

A+

Bonsoir à vous deux,
Je n’aurai pas le temps demain mais je vais essayer mercredi de faire un montage , j’ai commandé un boîtier avec ventilateur pour un pi4 mais je ne l’aurais pas encore, mais je vais essayer un plus gros…
Il faut qu je certifie mais je ne suis pas sur que le gpio n’a soit pas en niveau 1 à l’arrêt , il me semble qu’il fallait l’inverser pour utiliser les relais que j’avais .
A voir.
Bon courage pour les essais.
JC

C’est fait,
J’ai testé avec un ventilateur de processeur 12 v, pour le déclencher j’ai pris le 5v du pi et un 2n2222 en transistor , boîtier métallique, un résistance de 470 ohms et c’est bon :slightly_smiling_face:,
Le 3,3 v n’était pas suffisant pour le déclancher, il ne faut pas non plus exagérer !!
A+
Il ne restera que le programme à faire…

bonjour à tous,

j’ai décider finalement d’utiliser un relais compatible RPI avec une diode de roue libre .
je vous ferrai un retour une fois l’ensemble monté et fonctionnel.

merci à tous

Bonjour,
Juste un question avant de terminer , avec quoi et comment fais tu le programme de mise en route du ventilateur ?
Bon courage
A+
JC

bonjour,

J’ai fait une esquisse en pyton.

Bonjour,

Vous pouvez utiliser deux petits programmes Python pour allumer / éteindre votre ventilateur.

Pour cela, vérifiez dans un premier temps, que « remote GPIO » est activé (enable) dans raspi-config.
Ensuite, il faut installer les librairies nécessaires pour le programme Python.
Dans un terminal, tapez : $ sudo apt-get install python-rpi.gpio

Créez deux fichiers, allume.py et eteint.py

Le code pour allumer le ventilo :

import RPi.GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
# il faudra modifier le numéro en fonction de votre câblage 
FAN_PIN = 23
 # on configure le PIN en sortie
GPIO.setup(FAN_PIN, GPIO.OUT)
# on active la sortie 
GPIO.output(FAN_PIN, True)

Celui pour éteindre le ventilo :

import RPi.GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
# il faudra modifier le numéro en fonction de votre câblage 
FAN_PIN = 23
 # on configure le PIN en sortie
GPIO.setup(FAN_PIN, GPIO.OUT)
# on désactive la sortie 
GPIO.output(FAN_PIN, False)

Ça c’est pour les essais.
Maintenant, vous pouvez asservir le ventilateur en fonction de la température du CPU et cerise sur le gâteau, la vitesse est variable suivant les infos reçues du CPU.

Créez un fichier temp_ventilo.py et insérer le code suivant :

    import RPi.GPIO as IO
    from gpio import CPUTemperature
    import time

# Précisez le PIN concernée 
    minspin = 10


    IO.setwarnings(False)
    IO.setmode(IO.BCM)
    IO.setup(14,IO.OUT)
    fan = IO.PWM(14, 100)

    cpu = CPUTemperature()

    fan.start(0)

    oldtemp = cpu.temperature

    while True:
        temp = cpu.temperature
        if abs(temp - oldtemp) < 1.5:
            time.sleep(1)
            print(str(temp)+"  skipped")
            continue
        oldtemp = temp
        if temp > 50:
            speed = ((temp - 45)*4)+minspin
            if speed > 100:
                speed = 100
            fan.ChangeDutyCycle(speed)
            print(str(temp)+"  "+str(speed)+"  marche ventilateur ")
        else:
            fan.ChangeDutyCycle(0)
            print(str(temp)+"  arret ventilateur ")
        time.sleep(1)
    fan.stop()
    IO.cleanup()
    print("done")

@++

Bonjour à tous,

Voilà donc mon montage final. Tout fonctionne correctement :grinning:
Merci à tous ceux qui ont participé au réponse.

Je vous laisse découvrir le build final.

je vous souhaite d’ores et déjà de merveilleuse fête de fin d’année et un bon cap.

Joli LEGO ,
Très bien …

Bonne fête à toi aussi :slight_smile:

Bonjour,

Même si la solution retenue est un module à relais, j’ai fait 3 tests avec des transistors pour voir si il est effectivement possible de commander un ventilateur en 5V à partir d’une commande GPIO en 3,3V.

J’ai utilisé comme charge une résistance de puissance qui consomme 132 mA lorsque je la connecte en direct entre le 5V et la masse.

Test 1: Transistor NPN BC547
Avec le schéma vu plus haut dans le sujet, et une résistance de base de R1=180 ohm.
On a 127 mA de courant dans le collecteur.

Test 2: Transistor NPN 2N2222
Avec le schéma vu plus haut dans le sujet, et une résistance de base de R1=180 ohm.
On a 129 mA de courant dans le collecteur.

Test 3: Transistor MOSFET Canal N 2N7000
Avec le schéma vu plus haut dans le sujet, et une résistance de base de R1=180 ohm, plus et une résistance entre la base et la masse. La Gate à la place de la base, le Drain à la place du collecteur, et la Source à la place de l’Emetteur.
On a 118 mA de courant dans le collecteur.

Il aurait fallu faire le test avec d’autres MOSFET de puissance, mais j’en avais pas sous la main.

En conclusion le 2N2222 ou à la rigueur le BC547 devrait faire tourner le ventilateur avec une résistance de base de 180 ohm. PAr contre le MOSFET utilisé, (2N7000) n’est pas conseillé.

A+

Bonjour,
donc tu n’arrive toujours pas à faire tourner le ventilateur ?
personnellement j’avais mis une résistance de 470 ohms à la base et pilotée par le 3,3 v
et le 2n2222 qui fonctionne bien .
le mosfet est très bien , le seul avantage est qu’il n’a pas de courant de base ou gate
pour le piloter , une mouche qui passe dans le coin pourrait le faire fonctionner !

question, tu te branche sur le 5v ou le 3,3v du gpio?

A+
JC