Jelora.fr

Circuit reset automatique en cas de plantage pour Raspberry

J’ai quelques RaspberryPi qui fonctionnement 24h/24 depuis quelques années maintenant et il arrive parfois qu’ils plantent ou se bloquent.
J’ai essayé de filtrer l’alimentation, rien à faire, ça plante de façon aléatoire.
Il peut arriver que l’origine de la panne soit un composant défaillant (adaptateur USB-IDE chinois), un sensibilité au champs électromagnétiques ou un bug, mais c’est dommage qu’il ne redémarre pas automatiquement en cas de freeze.
Si je m’en rend compte dans la journée, c’est pas trop grave. Mais si c’est au bout de 2 ou 3 semaines après, là c’est assez pénible, surtout les RaspberryPi concernés servent comme station météo ou relevé de consommation électrique.

J’ai donc réfléchi à une alimentation qui provoquerait un reset (coupure de quelques secondes puis ré-allumage) si le RaspberryPi ne donnait plus de signe de vie.


Après quelques recherches, j’ai réalisé un prototype :

20170813_004320.jpg

schema_circuit_reset_automatique_en_cas_de_plantage_de_raspberryPi.jpg

Cliquez pour agrandir ou version PDF

C’est un circuit simple basé sur le NE555 utilisé ici en temporisateur monostable.
Un condensateur de 470µF (C4 sur le schéma) se décharge au fil du temps.
Au bout de 5 minutes environ (temps définit par le potentiomètre R2, environ à 730kΩ pour 5 minutes), un NE555 (IC2) déclenche un relais qui coupe l’alimentation qui va vers un RaspberryPi, disque dur ou autre ... pendant 5 secondes (définit par R3 et C3).
Le courant est alors redirigé vers porte NOR qui transmet à un autre NE555 (IC4) l’ordre de recharger le condensateur de 470µF (C4) suffisamment longtemps (pendant 2 secondes, définit par R5 et C5) pour qu’il soit à nouveau plein.
Mais le Raspberry ne va pas passer son temps à redémarrer ! Un impulsion est envoyée chaque minute par le Raspberry à la porte NOR puis au NE555 IC4 qui va recharger à fond le condensateur C4 et empêcher le redémarrage. Dès que le RaspberryPi n’envoie plus d’impulsion depuis 5 minutes à cause d’un plantage quelconque, le circuit coupe l’alimentation et redémarre le tout. Basique mais efficace.


Pour envoyer, l’impulsion toutes les minutes, une tache cron a été mise en place pour lancer un script qui va initialiser un port GPIO et provoquer l’impulsion.

Code script "impulsion_alim.sh":1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#!/bin/sh

# Initialisation port
if [ ! -d /sys/class/gpio/gpio4 ]; then
    sudo echo 4 > /sys/class/gpio/export
sudo echo out > /sys/class/gpio/gpio4/direction sudo chmod 777 /sys/class/gpio/gpio4/value fi # Impulsion echo 1 > /sys/class/gpio/gpio4/value sleep 0.2 echo 0 > /sys/class/gpio/gpio4/value

Passage du script en exécutable :
Code:1.
chmod +x impulsion_alim.sh

Configuration de la tache cron avec crontab -e :
Code:1.
* * * * * /bin/sh ~/impulsion_alim.sh

Il est important d’utiliser une tache cron qui charge le script toutes les minutes ou pas un script chargé en mémoire au démarrage et qui continu de fonctionner en boucle. Cela permet de tester l’accès au disque dur (si vous en utilisez pour l’OS).



Exemple de mise en application :

20170813_004144.jpg
Circuit reset avec régulateurs 7805 pour un RaspberryPi, un disque dur USB et un autre circuit.



Au final, ce circuit ne se limite pas qu'au RaspberryPi. Il peut très bien être utilisé avec un autre type d’ordinateur mono-carte ou un microcontrôleur. L’entrée d’impulsion accepte aussi bien les 5V TTL classiques qu’une impulsion à 3,3V.

Je pense m’en servir dans mes futurs réalisations. Bon après, ça ne fait pas tout. Ça règle juste le problème du freeze "ordinaire". Si le RaspberryPi ne donne plus de signe de vie parce qu’il a cramé ou explosé, c’est autre chose !

Ajouter un commentaire

Nom/Pseudo :

Email (optionnel) :

Site web (optionnel) :

Commentaire :

Vérification: