Contrôle d’un dispositif basse tension via Raspberry Pi

Cet article à pour but de faire interagir le Rasp avec avec n’importe quel dispositif basse tension (230 v) de vôtre maison ou appartement. Ceci vous permettant de faire un peu de domotique comme allumer ou éteindre une ampoule, une prise de courant, un appareil électrique ou comme moi des volets roulants. Avant ça on va faire le tour du propriétaire et étudier un peu les broches de sortie du RPi que l’on appel GPIO.

Les ports GPIO

Les ports GPIO sont des petites broches que l’on trouve sur la carte comme l’indique la flèche rouge sur le schéma ci dessous. GPIO_raspberry

Le GPIO est équipé de :

  •  8 entrées / sorties numériques (GPIOx)
  • Un port série (UART)
  • Un bus I2C pour des transmission vers des composants électroniques utilisant ce protocole (I2C)
  • Un bus SPI, qui est un bus série ressemblant au bus I2C mais beaucoup plus rapide (SPI).
  • Une sortie + 5 Volts pour alimenter divers montages (maximum 500 mA pour le modèle A et 300 mA pour le modèle B)
  • Une sortie + 3.3 Volts avec un maximum de 50 mA.

Les broches sont à usage multiple :

  •  en entrée numérique tout ou rien, pour détecter un interrupteur par exemple
  •  en sortie numérique tout ou rien, pour activer un relais par exemple (justement ce qu’on va faire plus loin)
  •  en sortie numérique PWM, pour contrôler la puissance moyenne d’une led par exemple
  •  en protocole I2C, d’échanger avec une ou plusieurs puces
  • en protocole SPI, idem
  • en protocole UART, d’échanger avec une seule puce (ou un PC)

gpio_detail   Pour bidouiller tranquillement ces ports je vous conseille l’achat de ce kit permettant de ne pas abîmer les broches à force de débrancher et rebrancher.

Petit test simple avec une LED

A l’aide d’un script Python, on va passer l’état de la broche GPIO 4 (qui correspond physiquement à la broche 7 de la carte) de 0 à 1. Ce qui aura pour effet de faire passer le courant dans la diode et l’éclairer. La diode sera protégé par une résistance de 10 Ohm pour éviter quelle ne claque. Le circuit est fermé par un raccordement à la broche « ground » en position physique 6 qui représente donc la masse.

Schéma:

schema_test_rpi_del

On installe le module Python permettant le contrôle des ports GPIO. Vous pouvez le récupérer sur le site ici ou taper directement la commande suivante depuis le Rpi.

Installation du paquet deb

On va maintenant faire le petit bout de code Python qui allume la diode, attend une seconde puis éteint la diode et ceci indéfiniment.

Création d’un fichier vide

On le rend exécutable

On l’édite et on y place le code qui suit

Pour lancer le script il faut être ROOT et donc utiliser sudo sudo ./test.py Vous pouvez vous faire un notifier de mail ou encore un LED CUBE pour impressionner les filles.

Contrôle d’un dispositif basse tension à l’aide d’une carte relais

Bon les LED c’est bien sympa mais faire de la domotique et interagir avec une vrai lampe c’est encore mieux ! Avant toutes choses je tiens à dire, juste dans le cas ou les pompiers viendrais à trouver un geek mort les doigts dans une prise de courant avec son Rasp à la main, que MespotesGeek.fr et moi même ne pourrons être tenus pour responsables en cas de problème sur vôtre Raspberry Pi ou en cas d’accident corporel. La suite de l’article implique la manipulation de base tension 230v et représente donc un danger.   Pour la suite vous aurez besoin

  • d’une carte relais 5V
  • d’un mosfet de type TO-220
  • du câble

Il vous faudra évidemment quelque chose à allumer. Pour cela une vieille lampe, un vieux radio réveil ou n’importe quel appareil dont vous ne regretterez pas de couper les fils. Si vous n’avez rien de tout ça vous pouvez, pour quelques euros, vous bricoler un petit montage de test à l’aide d’une ampoule, une douille, une fiche (ce qui va dans la prise) et du câble électrique. On va commencer par quelques explications. La carte relais est  un commutateur électrique qui permet de commander un second circuit utilisant généralement une tension et un courant bien supérieur à ce que un dispositif électronique comme le Raspberry pourrait accepter  . En gros c’est un interrupteur qui se ferme quand on lui lui place un certain courant ou une certaine tension sur sa patte de commande. Dans notre cas c’est la tension de l’un des ports GPIO du Rpi (3.3V) qui déclenchera cet interrupteur. Voici une petite image pour bien identifier chaque élément.relais_broches  Le relais se compose de deux parties. Un partie commande à droite sur la photo et composée d’une broche d’alimentation de 5 v pour le relais lui même, une masse et une broche de commande pour faire basculer l’état. De l’autre coté, à gauche donc on trouve la partie basse tension. C’est cette dernière partie qui sera connectée à votre dispositif. Dans l’exemple ça sera une lampe. Se coté se compose de 3 fiches:

  • NC : signifie ‘NORMALEMENT FERME’. Cela veut dire que lorsque le relais n’a pas de signal d’entrée (0 sur la broche de commande), le circuit haute tension connecté sera actif. Si on câble comme cela il faut donc envoyer du courant à la partie commande pour faire basculer le relais.
  • NO signifie ‘NORMALEMENT OUVERT’. Cela veut dire qu’à contrario, une valeur de 5V appliqué au relais (1 sur la broche de commande) coupera le circuit haute tension et inversement.
  • COM: la masse.

Vous l’aurez compris. On ne va utiliser que deux des fiches sur les trois du relais suivant le mode de fonctionnement choisi. Le Rpi envoie un faible courant sur ses ports GPIO qu’ils soient à 1 ou à 0. Ce faible courant suffit à déclencher le relais. Ce phénomène n’a pas était rencontré chez tous les possesseur de Rpi. Certain peuvent donc directement utiliser le relais. Je vous conseil de le tester. Il vous suffit pour cela de brancher les trois broches du Rpi comme suit:

  • 5 v du Rpi -> Vcc 5V du relais
  • Ground du Rpi -> GND du relais
  • L’un des port GPIO du Rpi -> La patte de commande du relais (numéroté IN1, IN2, etc.. généralement)

Si la diode du relais s’allume quelque soit l’état du port GPIO  (LOW ou HIGH), c’est que vous êtes dans le même cas. Il vous faut alors un composant supplémentaire pour bloquer ce courant. Pour cette tache on va utiliser un MOSFET. Un MOSFET est un composant électronique permettant de faire de la commande en puissance. Le principe du fonctionnement de ce type de transistor est que lorsque la tension de la Gate atteint une valeur suffisante, le courant passe entre le Drain et la Source. Certains transistors sont commandés en courant, le Mosfet est commandé en tension.   schema_MOSFET

  • 1 = G = GATE : broche de commande. La commande ici sera le port GPIO.

  • 2 = D = DRAIN : broche qui draine le courant (la charge quoi… c’est ici que l’on va raccorder le relais pour le déclencher)

  • 3 = S = SOURCE : broche source de courant (ou le courant est collecté pour être envoyé vers la charge… dans notre cas, il s’agit de la masse)

Voila le schéma de la petite installation. J’ai utilisé ici un MOSFET modéle IRF740.

raspberry_mosfet_relay

 

Pour la tester vous pouvez réutiliser le code précédent, ce qui aura pour effet d’enclencher et de déclencher le relais toute les secondes.

Une fois que tout cela fonctionne, il ne vous reste plus qu’a interfacer de l’autre coté l’élément basse tension que vous souhaitez contrôler et bien sur écrire un bout de code qui correspond à vôtre besoin.

ampoule_relais

45 thoughts on “Contrôle d’un dispositif basse tension via Raspberry Pi”

  1. Sidney dit :

    Salut,

    Merci beaucoup pour ton tuto qui explique vraiment clairement un montage, certes très basique, mais surtout très éducatif. En revanche, je pense qu’il y a une erreur sur le descriptif du relais. En effet, tu as indiqué deux fois NO, or je pense que pour le premier il devrait y avoir « NC : signifie ‘NORMALEMENT FERME’ ».

    Encore merci pour le tuto.

    1. Sispheor dit :

      C’est juste! J’ai corrigé merci.

  2. totoph33 dit :

    Bonjour,
    Très intéressant votre tuto , ma question est sur le 5v du gpio est il possible de le couper , je vous explique mon projet en faite c’est pour monter et descendre un volet hors je n’aimerais pas que ma carte relais reste alimenter en permanence vu que j’utiliserais cette option occasionnellement, donc est il possible de mettre également un relais pour alimenter cette carte, j’ai essayer (vu que j’ai déjà la carte 8 relais) de l’alimenter avec une sortie GPIO 3,3v mais cela ne fonctionne pas.
    Encore merci

    1. Sispheor dit :

      Alors pour répondre simplement. Il ne faut en aucun cas se servir de la pâte 5v du rasp. Il n’est pas fait pour ça et vous risquez de le cramer tout simplement. Surtout si vous avez plusieurs relais il est conseillé de fournir l’alimentation par un générateur externe.

  3. Totoph33 dit :

    Merci pour la rapidité de réponse,
    Donc si je comprend il vaut mieux avoir une alim externe que je vais pouvoir contrôler par gpio (ex pin physique 7)
    En faite il était pas nécessaire de prendre une carte relais 5v , dommage si j’avais su, j’ai lu dans d’autre tuto que les personnes utilisait ce fameux 5v du raspberry.
    Encore merci je vais trouver une solution!!!

  4. Totoph33 dit :

    Bon ça y est j’ai trouvé mon bonheur un petit relais 5v qui fonctionne en 3,3v (contrôlé en boutique avec du 2,9v) donc je vais contrôler mon alim de carte par une sortie GPIO.
    Encore merci pour votre aide.

    1. Sispheor dit :

      De rien. Cependant que cela soit le 3,3 ou le 5v n’oubliez pas qu’il ne faut pas ce servir du rpi en tant que générateur. Si vous devez faire coller votre relais pendant une longue durée vous risquez d’endommager les ports gpio. Bonne continuation !

  5. totoph33 dit :

    Merci,en faite la carte serait alimenter entre 30 secondes, voir 1 minutes.le temps de monter ou descendre le volet donc on parle en secondes,en espérant que cela est faisable !!!

  6. Totoph33 dit :

    Bonjour,
    Je viens vous faire part de l’avancement de mon projet qui en faite s’avère plus difficile que je ne pensais, car mon relais 5V ne colle pas avec le 3,3v en sortie du gpio donc je pense que c’est une histoire d’intensité car en boutique avec du 2,9v cela fonctionnait.
    Avez vous une autre idée à me suggérer? serait il possible d’utiliser deux sortie du gpio sans faire des dégâts c’est peut être bête ce que je dis mais là je ne sais vraiment plus comment faire!!!
    Merci par avance.

    1. Sispheor dit :

      C’est pour cette même raison que je suis passé par le circuit avec MOSFET. De plus il protège le rpi.

  7. Totoph33 dit :

    Merci mais le mosfet je l’intègre comme votre schéma (et ma carte relais reste en permanence alimenter en 5v) ou je le met a ma sortie gpio qui gère l’alimentation 5v celle qui va a mon petit relais que j’ai rajouter par rapport a votre schéma?
    Merci et excusez moi d’être relou !!!

    1. Sispheor dit :

      Si vous suivez exactement mon schéma avec juste le 5v du Rpi sur le relais ça doitfonctionner. Laissez le relais alimenter en permanence par la pate 5v. Tant que vous ne le faite pas coller il ne tire pas sur l’alimentation du rpi et donc aucun danger pour ce dernier.

  8. Totoph33 dit :

    Ok merci beaucoup pour vos conseils et la rapiditė des réponses.

  9. rsuinux dit :

    merci pour votre page,
    cela vient de m’éclaircir les idées pour l’utilisation d’un mosfet, qui refusait obstinément de fonctionner!
    C’est le code qui merdouillait.
    Je m’en sert pour faire un « tout/rien » sur un moteur.

    Grand merci!

    1. Sispheor dit :

      Merci pour votre retour. Content de savoir que l’article aide du monde 🙂

  10. Xavier dit :

    Bonjour et merci pour cette aide précieuse.
    J’utilise un raspberry pi B+, une carte 8 relais pour faire fonctionner Domoticz et gérer chauffage et délestage. Carte relais alimentée à part.
    Je suis dans le cas où, lorsque je branche la carte relais au secteur, mon raspberry collent les relais que les gpio soient à 0 ou 1.
    J’ai donc intercalé des mosfet et ça fonctionne.
    Mon problème vient du fait que le raspberry ne tient pas assez longtemps le relais, il se coupe de façon aléatoire au bout d’un certain temps (quelquefois quelques minutes).
    Dois-je insérer un autre composant qui me permettrait de faire tenir le relais ?

    1. N.i.c.O dit :

      Si vous utilisez le RPI pour alimenter le relais il n’est pas impossible que ce dernier chauffe et se mette en sécurité. La sortie 5v du RPI ne doit être utilisée que dans le cadre de test. Pour une mise en production et pour garder collés des relais pendant un moment je vous recommande une alimentation externe.

      1. Xavier dit :

        Comme précisé dans mon message, la carte relais est alimentée à part du RPI. Je ne récupère que le GND pour boucler le circuit.

  11. N.i.c.O dit :

    Alors je ne sais pas. Peut être le script qui entre en timeout au bout d’un moment. De mon coté j’ai toujours utilisé les relais pour coller une seconde maximum le temps de donner une commande à un autre dispositif. Mais si vous trouvez je suis intéressé de savoir ou se trouvait le problème.

    1. Xavier dit :

      J’ai opté pour un autre montage qui fonctionne depuis une semaine. J’ai monté un 2N2222 NPN avec deux résistances comme proposé sur ce schéma : http://i.imgur.com/4HzhwYB.jpg. Merci d’avoir pris le temps de m’aider.

      1. N.i.c.O dit :

        Super! Merci pour le lien et pour votre retour !

  12. Damien dit :

    Bonjour,
    c’est super intéressant, mais question certainement un peu bête,
    mais le relais peut t’il gérer d’autres tension que le 220V en entrée / sortie (partie gauche de la photo) ?
    Exemple si j’envoi un 12V (générateur externe) en entrée, une fois le relais ouvert, j’ai bien du 12v en sortie ?
    Et sur les cartes à plusieurs relais, je peux gérer différemment les tensions de chacun en entrée et sortie ?
    Ex un relai pour du 220v en entrée et sortie, un relai pour du 5V en entrée / sortie, et un en 12V en entrée / sortie ? (je précise que je compte mettre des transformateurs adéquates en amont du circuit.
    merci d’avance 😉

    1. N.i.c.O dit :

      Oui , la charge sur le relais est indépendante. Vous pouvez faire passer la tension que vous voulez sur chacun des relais. Le relais agit comme un interrupteur qui s’ouvre ou se ferme. Si vous lui collé une pile de 6v ou 220v il ne voit pas la différence.

      1. Damien dit :

        Super 😉 Merci de la réponse ultra rapide.
        Je vais pouvoir continuer mon projet de jukebox piloté par un raspberri 😉

  13. yb62 dit :

    merci beaucoup pour cette astuce ,je n ai plus qu à trouver ce mosfet pour pouvoir piloter ma porte de garage!

  14. Lucas F dit :

    Bonjour,

    Etant en terminal, et ayant comme projet d’acquérir la température d’une serre et d’améliorer son chauffage avec un Rabserry pi. Pour ce faire j’ai donc déjà réussi a acquérir la température de la serre avec un capteur DS18B20 et un script python dans le Rpi qui me permet d’afficher la température de celle-ci. Enfin pour l’amélioration du chauffage j’utilise le même montage que vous et j’aimerai savoir quelle script python pourrai envoyer une tension au chauffage afin de le déclencher si la serre serait a 0 degrés et l’arrêter quand elle serait a 14 degrés par exemple. Désolé si cela semble simple mais je ne suis pas un expert en python sachant que mon prof ne l’est pas aussi :p Merci pour votre tuto et votre aide si jamais vous avez du temps pour me répondre 🙂

    1. N.i.c.O dit :

      Je ne peux pas coder pour toi malheureusement. Mais avec quelques notions de python tu devrais pouvoir t’en sortir. Je te conseil https://www.codecademy.com/fr. Si tu arrive à choper la température alors ça sera facile. UN petit if my_temp > 14 then turn_off_gpio. Tu as déja tout fait.

      1. Lucas F dit :

        Oui enfaîte ce n’est pas si compliqué merci pour votre rapidité 🙂

  15. Cedrick dit :

    Bonjour la communauté, je decouvre avec vous l’intérêt de l’usage d’un mofset en amont du pilotage d’un relais.
    Je rencontre un soucis pour ma part et je ne sais pas s’il est lié ou non au fait que je n’utilisa pas encore de mofset pour mes tests.
    Voici mon problème : j’effectue une permutation de relais lorsque j’active une entrée. Cela marche très bien mais dès lors que je branche ma partie puissance avec un commun (identique pour les deux relais) et la sortie NO, j’ai bizarrement l effet que les deux relais colle en même temps.EN bidouillant je remarque qu’il suffit que je touche avec la pin de mon testeur une des trois sorties d’un relais pour afaire coller l’autre relais!! Quelqu’un a t il deja rencontré un problème similaire. Peut etre que la carte est defaillante.? C est une carte relais 8 modules 5vdc…

    1. N.i.c.O dit :

      Il y a une différence de potentiel on dirait. Il faut bien brancher les deux relais à la même masse.

      1. badel dit :

        Salut Nico,merci pour ta réponse rapide!!(je peux as en dire autant…)
        Je commence à perdre mes cheveux!! j’utilise un alim extérieure, le 5V du rspi sur le VCC et le ground de la carte avec le ground du rspi.Par contre il est vrai que j’envoie le 0V de l’alim ext sur le 0V de rspi par l’entremise de la breadboard. Je fais cela afin de fermer le circuit comme vu sur des tutos. Par contre j’ai remarqué aussi qu’en changeant les gpio et bien sur le code j’ai des trucs bizarre qui se produisent. Je me demande s’il ne faut pas utiliser prioritairement les GPIO GEN.. Je vais continuer les expériences mais j’attends avec impatience les Mofset pour voir si c’est pas cette histoire de faible courant circulant…

  16. xhark dit :

    Merci pour ce billet clair et concis 🙂 Il manque un petit :

    dans ton script pour nettoyer l’état GPIO à la fin de l’exécution (cf : http://raspi.tv/2013/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi)

  17. Tobin dit :

    Salut, Merci pour cet excellent tutoriel. J’ai cependant un petit souci. J’ai suivi toutes les indications du tutoriel il y’a quelques mois (sauf le mofset dont je me suis passé) et tout a bien fonctionné. Ce matin par contre, j’ai décidé de tester à nouveau le dispositif et là j’ai constaté qu’il agit bizarrement. En effet , quand j’exécute le script sensé allumer ma lampe, la led du relais s’allume, la lame elle même s’allume et s’éteint aussitôt après. Mais l’état du gpio reste à 1. Quel peut être le problème à votre avis? Est-ce l’absence du mofset? Merci d’avance !

    1. N.i.c.O dit :

      Le mosfet, dans certain cas et suivant le relais, on peut effectivement s’en passer. Il n’est à utiliser seulement si le relais colle peu importe l’état de la GPIO.
      Maintenant, si votre problème vient d’apparaître sans changement logiciel ou matériel, il se peut que un des composant soit défaillant.

  18. Tobin dit :

    Merci pour cette réponse ultra rapide !! Pour ce qui est des changements que vous avez évoqués, j’ai effectivement changé de raspberry mais niveau logiciel rien n’a changé. J’ai fait un backup de mon ancien système (celui de la précédente Rpi) et l’ai installé sur la nouvelle Rpi. Soupçonnant une défaillance de ma nouvelle raspberry, j’ai testé dessus un autre capteur, le PIR Motion, exactement sur le même GPIO (le 7) et celui-ci a bien fonctionné. Le problème doit peut-être venir de mon relais (je me demande quand même comment il a pu s’abîmer parce que je l’ai plutôt bien conservé). Merci de vous être penché sur mon cas, je vais tâcher de trouver un autre relais pour voir si le problème vient effectivement de celui que j’ai en ce moment.

  19. Tobin dit :

    Salut, je reviens avec une question au sujet de l’alimentation externe du relais. J’ai en ma possession une batterie au lithium de 9V, régulée à 5V. J’ai donc 2 sorties (le + et le -). Alors comment faire pour la connecter au relais? J’ai lu quelque part que le GND de la Rpi et le moins de la batterie doivent être connecté au même endroit, alors pour être sûr de pas me tromper est-ce que la connectique suivante est exacte:
    le + de la batterie ——–> VCC du relais,
    le – de la batterie ——–> GND de la Rpi ———> GND du relais,
    data du relais ——–> GPIO 4 de la Rpi?

    1. N.i.c.O dit :

      Effectivement ça peut faire une différence de polarité si la GND du Pi n’est pas connectée. Votre connectique semble bonne.

      1. Tobin dit :

        D’accord merci. Je vais tester ça dès que possible !

  20. Nath dit :

    Salut, très bon tuto, j’avais une question pour un projet de terminale sur un problème que je rencontre avec ma carte raspberry, penses-tu pouvoir m’aider ?

    1. N.i.c.O dit :

      Désolé pour le retard. J’ai tout simplement pas vu le commentaire. Tu peux toujours poser tes questions si tu en as, j’essaye d’y répondre quand je peux.

  21. Jean-Charles dit :

    Bonjour Nico et merci pour ton tuto particulièrement clair. J’ai un petit projet sûrement ultra simple à tackler mais comme je suis nul, c’est une montagne pour moi. Je voudrais simplement piloter des lumières en faisant varier l’intensité (pas uniquement le on/off du relai). Comment faire?

  22. Robert dit :

    Bonjour Nico,

    Je débute en électronique et tu décris exactement ce qu’il ce passe avec ma carte relais.
    Existe-t-il une puce ou une carte que regroupe 16 mosfet pour contrôler une carte 16 relais ?

    D’avance merci pour ta réponse.

    1. N.i.c.O dit :

      Aucune idée. Faut demander ça à Google 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *