Power-trip

[Raspberry PI] Ajouter un Bouton POWER avancé sur RPi B rév. 2

Cet article a été rédigé il y a 4 années ! Il commence à dater, mais n'est pas forcément obsolète.. Lisez-le en gardant cela en tête !
Le raspberry étant un système minimal, il n’y a pas de bouton power préinstallé ! C’est pourquoi il est bien dommage, lorsque l’on réalise une petite console de salon par exemple, de ne pas pouvoir redémarrer le système proprement et simplement en appuyant sur un bouton ! Réalisons ensemble notre bouton power propre avec pas grand chose et un bon fer à souder ! C’est le moment d’appliquer ce que nous avons réalisé durant l’article précédent. En effet, vous avez le choix pour réaliser ce bouton power avancé :
  • de réaliser un circuit complet avec système anti-rebond + tempo et portes logiques
  • ou d’utiliser les avr.
Pour vous donner un exemple d’application et vous apprendre les rudiments de la programmation avr. (En effet, dans le dernier article on a appris seulement à communiquer avec lui)  

I) Circuit théorique

Nous allons ici réaliser un système employant à la fois le raspberry et l’avr pour réaliser ce bouton avancé.
  • Le raspberry servira d’alimentation à l’AVR
  • Le pin header P6 servira à faire un hard shutdown
  • L’AVR traitera les différents cas possibles pour arrêter ou redémarrer le système !
  Ce qu’il faut savoir avant de commencer, c’est que les GPIO sont lancés à partir du moment où vous alimentez votre Raspberry. Cependant, pourquoi doit-on passer par l’utilisation d’un AVR ? En effet les GPIO sont actifs au branchement, cependant le Raspberry n’est pas capable de traiter d’infos avant d’avoir démarré et puis lorsque l’on demande l’arrêt du raspberry comment traité le redémarrage alors qu’il est éteint ? Encore une fois seul un système secondaire peut le faire, un système dédié comme l’AVR. Enfin quand je parle de bouton power propre, cela signifie que l’on ne va pas faire de hardreset lorsque le système est allumé par exemple. C’est pourquoi le Raspberry aura aussi sa part du boulot à faire : Lancer la commande shutdown -h now si le bouton d’extinction est appuyé. Voici les différents cas de figure résumés. Le circuit électrique final se trouve ci-dessous.
  1. Lors du branchement, on veut que par défaut le raspberry soit éteint.
  2. Lorsque le raspberry est éteint, on veut qu’un appui sur le bouton de démarrage lance le démarrage du raspberry
  3. Lorsque le raspberry est allumé, on veut qu’un appui long (~3s) provoque le lancement du script d’extinction s’il est lancé.
  4. Si le raspberry est allumé et que le script n’existe pas, on éteint le raspberry. (Sale !)
  Tout cela se résume par le circuit suivant : btn_power Où Rc = 100Ω ; Rb = 47 kΩ ; R = 150 Ω et T correspond à un transistor 2N2222. btnPower Ce circuit ne correspond pas à la version finale, mais c’est celle que j’ai sur mon raspberry actuellement. Note : Les problèmes rencontrés était que les soudures que j’ai dû faire n’était pas très propres du coup, je vais me renseigner pour pouvoir réaliser un circuit avec une machine, tel que des imprimantes 2D. Histoire que le bouton rentre dans la boite !  

II) Le Raspberry

Côté raspberry, si vous n’avez pas encore soudé les pins header 6 et 5 il est grand temps de le faire, pour pouvoir commander ce dernier sans monopoliser le support GPIO. De plus, ajoutez le script raspi-shutdown à votre raspberry en lançant les commandes suivantes, pour pouvoir commander l’extinction propre de votre raspberry si le gpio 28 (wiringPi 18) est activé :
cd /etc/init.d && wget http://partage.gauss-it.net/raspberrypi/atmel/raspi-shutdown chmod 755 raspi-shutdown && update-rc.d raspi-shutdown defaults # Lancement automatique
Attention : actuellement problème d’initialisation des gpio au lancement de la machine lors du lancement du programme raspi-shutdown. Une révision sera publiée très rapidement corrigeant le problème. Il s’agit d’initialiser les gpio manuellement et non en passant par le programme wiringPi..  

III) Programmation de l’AVR

Quand au programme à mettre sur l’avr, il vous suffit d’exécuter les lignes suivantes depuis votre raspberry, une fois l’avr branché :
wget http://partage.gauss-it.net/raspberrypi/atmel/btn_power.c chmod 755 btn_power.c && raspi-attiny btn_power.c
  Si vous avez du mal à déchiffrer, n’hésitez pas à me poser des questions 🙂 Enfin posez l’AVR sur le support du circuit soudé et voilà le travail !  

Conclusion,

Vous disposez à présent de votre bouton power avancé. Vous n’avez plus de raison de planter un filesystem doréavant ! 🙂

5 réponses à “[Raspberry PI] Ajouter un Bouton POWER avancé sur RPi B rév. 2

  1. Bonjour,

    Je trouve ce site très intéressant, mais pourriez vous rajouter des détails, notamment sur le schéma électronique…

    En effet, je ne comprends pas les "pins" p5-2, p5-4, p5-6, p5-8, p6-1 et p6-2…Je les vois sur l’image, mais à quoi doit on les raccorder? Aux pins du Rpi, 2,4,6,8,1 et 2?

    A quelle niveau ce situe la connexion entre le schéma électronique et le RPi?

    Pour le transistor 2N2222, j’en ai vu plusieurs…il y a t il des contraintes dans le choix de ce composant? C’est du NPN, 30v, 800mA?

    Merci pour votre aide!

  2. Bonjour,

    Concernant les pins, je vous conseille de lire l’article concernant les GPIO, accessible ici : http://blog.gauss-it.net/?p=841 ! J’ai un peu écrit les articles dans la continuité de mes petites expériences alors c’est vrai que si l’on vient lire juste un article ce n’est pas forcement évident à suivre.
    Du coup la connexion rpi-pcb se fait à l’aide des pins, donc tout est expliqué dans l’article ci-dessus.

    Concernant le transistor, c’est vrai qu’il en existe plusieurs variantes selon le fournisseur, et si on les recherches en passant par Google.
    Néanmoins il a comme caractéristique les suivantes : transistor NPN, Imax=600mA, Ueb=5V et hfe=100. Bon après faut pas se cantonner juste à celui là, le tout c’est qu’il puisse commuter.
    Ceux que j’utilise ont été achetés sur eBay et les trouver ne pose pas trop de problème quand on tape sur eBay : "2N2222″. Généralement mes composants je les achète soit sur eBay ou Amazon, c’est pas cher.

    Si vous avez d’autres questions n’hésitez pas! 🙂

  3. Bonjour,
    Je reviens vers cet article car j’essaye de remplacer le bouton poussoir par un bouton pression :). Le circuit est alors ouvert seulement lors de la pression sur le bouton. Je ne vois pas comment gérer ce transitoire.
    Faut-il passer par une variable intermédiaire dans le code avr pour compter le nombre de fois où l’on a ouvert le circuit?
    Merci pour les pistes éventuelles

Répondre à KZL Annuler la réponse.

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