Dans le circuit BJT, le transistor de commutation doit être PNP avec un deuxième transistor NPN pour lui fournir le courant d'attaque.
Mon circuit ci-dessous est remarquablement similaire à celui publié par Russel et il a été testé avec un Arduino UNO. Il commute le pré-régulateur d'alimentation de douze volts.
Le bouton poussoir injecte du courant dans le transistor NPN qui à son tour injecte du courant dans le transistor PNP qui alimente l'Arduino. Avec l'UNO, le condensateur est nécessaire car il faut beaucoup de temps à l'UNO pour démarrer et pour mettre ON_PIN à un niveau élevé. Le condensateur qui se décharge à travers la résistance 5k6 maintient la base du NPN alimentée en courant jusqu'à ce que l'ON_PIN prenne le relais.
Le circuit à gauche avec les diodes permet de détecter d'autres pressions sur les boutons-poussoirs afin que vous puissiez signaler d'autres fonctions au code ou, comme je le fais, l'utiliser comme un abandon.
J'ai utilisé des variantes de ce circuit avec des batteries pour alimenter des télécommandes IR et WiFi en utilisant d'autres MCU, par exemple Adafruit ItsyBitsy. Lorsque le circuit est éteint, le courant de fuite est inférieur à 1 micro ampère, ce qui fait que les batteries durent des mois entre les charges. Les valeurs du circuit doivent être ajustées pour les autres tensions d'alimentation.
Ce qui précède est une solution à votre problème initial mais, pour répondre à certaines de vos questions:
Pour le circuit BJT, il s'allume lorsque le bouton est enfoncé car le courant peut circuler dans la base du transistor à partir de l'alimentation qui est à une tension plus élevée que l'émetteur du transistor. Cependant, cela ne fonctionne pas lorsque la sortie CPU D2 doit prendre le relais car, pour faire tourner le transistor sur la base, il doit être d'environ 0,6 volts plus haut que l'émetteur. La broche de sortie ne peut jamais fournir plus que le Vin du CPU mais Vin est fourni par l'émetteur du transistor. Il s'agit d'un cercle vicieux et le courant ne peut jamais circuler dans la base du transistor car la tension de base n'est jamais assez élevée. Ajoutez la baisse de 0,6 volts de la tension directe de la diode et la situation est aggravée. C'est pourquoi j'utilise un PNP pour la commutation. Si l'émetteur est connecté à l'alimentation, il vous suffit de connecter la base à la terre via une résistance pour l'allumer.
Pour le FET, la réponse est similaire mais, comme d'autres l'ont dit, le courant nécessaire à la porte du FET est minime et la charge sur la porte du FET le maintiendra jusqu'à ce qu'il fuit. Il n'y a pas de mécanisme dans le circuit pour décharger activement la porte lorsque la sortie D2 est tirée vers le bas et c'est pourquoi elle ne s'éteint pas sous le contrôle D2.
Vous dites: "Cela est probablement dû au condensateur de 100 uF", exactement. Le condensateur se charge presque instantanément à partir du bouton-poussoir et se décharge à une vitesse contrôlée par la résistance 5k6. Avec d'autres cartes (ItsyBitsy et Feather), je n'avais pas besoin du condensateur mais, avec l'UNO, je l'ai fait. Le temps de démarrage que j'ai vu était d'environ 1,5 seconde.
Une autre caractéristique de mon circuit que j'aime est que, bien qu'il soit démarré par un bouton ici, il peut être déclenché par n'importe quel capteur capable de fournir suffisamment de courant pour allumer la base du BC547, par exemple. un interrupteur de porte, un capteur de température ou de lumière dépassant un seuil, etc.