DSC_0441.jpg

 

 

Difficulté:  

Avec bouton on-off ,et au choix : watchdog (chien de garde) ,ou redémarrage à intervalle régulier

 


 


Ce projet a pris naissance , pendant les vacances , lors de mes connections au PI à distance. Suite à un bug, fausse manipe, trop d’infos…………? enfin une cause inconnue, le PI bug , plus de connexion, et bien sûr pas de possibilités de reset logiciel ou matériel.
J’ai décidé donc d’équiper ma framboise d’un chien de garde qui couperait l’alim du PI en cas d’absence de signe de vie de celui-ci depuis un certain temps.
Aprés je me suis dit que si je pouvais couper l’alim du PI , je pourrais couper l’alim total du montage , le bouton on-off (avec un peu d’électronique) sera la solution.
Puis sur différent forum , j’ai remarqué des demandes sur un système de redémarrage du PI à intervalle régulier.
j’ai donc décidé de tout intégré dans un montage externe au Pi avec le minimum de liaison avec la framboise : l’alim (bah oui! faut bien…..) et une pin pour l’échange des infos entre les deux.


 

 

 

Matériel

Budget:

20 €

-un microcontrôleur microchip pic 12f1840 (j’ai aussi crée une source des programmes générique ,pour l ‘utilisation d’ autre µp)
-deux mosfet canalp IRFR5305 (ou équivalent)
-2 diodes 1n4148
-1 diode zener 3.3v
-6 résistances de 10k ohms
-1resistance de 270 ohms
-un câble de récup mini usb mal
-un chargeur 5v 2A(mini micro usb,jack…) avec une prise femelle qui va avec
-un bouton poussoir
-un câble avec une pin femelle (pour connecter au gpio du pi)

http://blog.ouiaremakers.com/wp-content/uploads/formidable/tuto2.zip

 

 

 

Etape 1 : Budget: 20€

 

 

 

Etape 2 : Principe

 

En bas de l’étape vous pourrez télécharger un dossier zip, contenant les différent projets et fichiers utilisés pour le tuto.

En premier , je vais décrire le fonctionnement du watchdog:
c’est un compteur qui , si il n’est pas réinitialisé à intervalle régulier , coupe et rétablissement de l’alim du pi , pour forcer un redémarrage . Le pi devra donc envoyer toutes les 30s un créneau de niveau haut de 3s sur la pin de liaison avec le contoleur.

Deuxièmement le bouton ON-OFF:
Le ON, on appui sur le bouton poussoir , il commute un mosfet qui alimente le contrôleur , qui à son tour commute un transistor pour l’alimentation du PI.
Le OFF , l’appui sur le même bouton pendant 4s indique au PI une demande d’arrêt , le PI lance ces commandes de halt et accuse réception au contrôleur. Après une tempo , le contrôleur coupe toute les alimentations (µc+rpi) de ce fait plus rien n’est alimenté et il n’y a pas de consommation de courant.
Tout est prêt pour un nouveau cycle.

http://blog.ouiaremakers.com/wp-content/uploads/formidable/tuto1.zip

 

Etape 3 : Le contrôleur , schéma électronique, circuit imprimé

 

Comme cité plus haut , le contrôleur s’articule autour d’une puce microchip 12f1840.

Je vais maintenant décrire le schéma électronique:
il s’articule autour de deux mosfet canal P et d’un µc. A l’état initial l’alimentation est connectée sur P1 tout à gauche , les mosfet sont bloqués et le µc n’est pas alimenté , il n’y a pas de tension sur le connecteur P2 chargé d’alimenter le PI.
Pour allumer tout ça : on appui sur le switch , celui-ci met à la masse la gate du mosfet Q1 au travers de D2 , il devient conducteur et aliment le µc.
le 12f1840 lance sont programme et met sa sortie gp4 à la masse , bloquant à l’état passant , à travers d3, Q1. Le switch peut être relâché l ‘alim n’est pas interrompue, ensuite le µc commute à la masse gp2 rendant également Q2 passant , alimentant de ce fait le raspberry.

La pin gp5 sert d’acquérir les créneaux de niveau bas provenant du switch , ces créneaux serviront à lancer les commandes d’arrêt au PI.

La pin gp1 sert à la communication avec le pi ,D1 R4 R7 ,permettent une adaptation de niveau entre le pic (5v) et le PI (3.3v).

La pin gp0 quant à elle , est une entrée analogique qui mesure la tension issue du pont diviseur formé par R2 et R5 , cette tension sera convertie en temps pour le mode redémarrage régulier du PI . Pour choisir ce mode (par defaut le mode watchdog est activer) il faut que r5 soit présente est d’une valeur inf à 100k ohms.

Dans le répertoire “circuit imprimé” il y a un pdf pour le dessin du circuit avec l implantation des composants en page 2 ainsi qu’un répertoire contenant le projet kicad qui m’a servi pour le dessin du circuit. pour la fabrication du CI :
http://ouiaremakers.com/fabrication-de-circuits-imprimes-facile-2/
(Et oui un peu de pub……)

 

Etape 4 : le controleur , le programme

 

Le programme est réalisé avec mplax , comme toujours, je fournis les sources du projets microchip.

Pour ceux qui ne sont pas fan de microchip ,ou tout simplement ont les outils pour d’autre µc (arduino,stm , atmel ……..)vous trouverez dans le dossier µp un fichier main.c qui est un générique du projet microchip. Bien-sûr il n’est pas fonctionnel en l’état , vous devrez ajouter les header pour vos µc et compléter certaines fonctions pour le hardware, mais j’ai essayé de commenter suffisamment le fichier pour rendre le travail aussi simple que possible. Je détaillerai plus bas le fonctionnement du programme (générique et 12f1840)

Je fait un résumé du programme , mais pour les questions plus pointues, j’ai essayé de commenter le programme le plus possible et bien-sure je tenterai de répondre à vos questions.
Allez on commence!
tout le programme s’articule autour d’un timer (timer1) qui incrémente toutes les secondes un compteur . Celui-ci sert pour définir le temps du watchdog , la durée des différent créneaux et en mode redémarrage , le temps entre 2 alimentation du PI.
J’utilise aussi les interruptions pour détecter les fronts montants et descendants sur la pin de communication avec le PI .

Dés la mise sous tension ,il y a une phase d’initialisation (timer , gpio, interuption , adc) puis les GP4 et 2 sont mises à la masse pour verrouiller Q1 et alimenter le PI .
Le programme effectue ensuite une conversion a/n sur gp0, si celle-ci est inférieur à 50 la variable timer_mode est laissée à 0 indiquant ainsi au programme le mode de fonctionnement watchdog.
la boucle principale démarre alors. Elle surveille les différent flags positionnés par les interruptions . Toute les 30 s le Pi envoi sur gp1 un front haut de 0.5s ,cela génère une interruption qui remet le compteur à 0. si le compteur dépasse la valeur de 60(s) il y de forte chances que le PI soit bloqué, donc le programme passe gp2 à 1 puis après 1s à 0, ce qui a pour effet de couper l’alim du pi et de forcer un redémarrage.
Un appui sur le switch a pour effet de passer gp5 à 0 , cela déclenche une interruption qui passe à sont tour gp1 à 1 ,si cela dur plus de 4s ca signale au pi une demande d’arrêt.

 

Etape 5 : les programmes dans le PI

 

les programmes se trouvent dans le répertoire fichier pi. les deux sous-répertoires correspondent au projets code::blocks qui mon servit à créer les fichiers binaires qui seront exécutés par le PI. Je les ai ecrits et compilés directement sur le Pi , pour éviter des problèmes de compilation croisé. Comme pour le 12f1840, j’ai commenté au maximum, mais les programmes sont beaucoup plus simples. Vous pouvez lire les fichiers main.cpp ou directement ouvrir les projets code::blocks (si vous l’avez) pour en étudier le fonctionnement.

Le programme bt_onoff a la charge d’envoyer toutes les 30s un niveau de 0.5s sur une pin du pin reliée au contrôleur, vous l’aurez deviné, pour reseter le chien de garde.
Il surveille aussi cette même pin pour intercepter une demande d’arrêt (niveau haut supérieur à 4s) et lancer la commande ” sudo halt”.

Le programme halt est appelé par le raspbian lors de sa fermeture , il passe , pendant 3s , la pin de communication au niveau haut.

 

Etape 6 : Instalation des programmes sur le pi

 

La première chose à faire :Copier ensuite les 4 fichiers ,joints à la fin de la partie 4 ,dans un répertoire de votre choix dans votre pi (/home/pi/ par exemple).Vous pouvez utiliser plusieurs méthode: samba , ftp , carte sd…

Ensuite installer la librairie bcm2835 , si vous ne la posséder pas encore.
Ouvrez une fenêtre de terminal ,si vous utiliser le bureau de raspbian , ou restez dans la console le cas échéant, vous pouvez aussi utiliser une connexion ssh.
Entrée les commandes suivantes:
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.46.tar.gz
tar zxvf bcm2835-1.47.tar.gz
cd bcm2835-1.47
./configure
make
sudo make check
sudo make install

Retournez dans le répertoire des 4 fichiers ,
pour moi:
cd /home/pi

puis executez le fichier d’instal:
sudo ./instal

l’installation vous demande de saisir le numéro de la pin pour le dialogue pi µc , le numéro correspond au numérot de pin du processeur du pi et pas de la pin du gpio du pi , saisissez juste le numéro , par exemple: 4 , cela correspond au gpio4 du bcm ou à la pin 7 du gpio du pi.

Si tout ce passe bien vous devrez voir une ligne sur la mise à jour du fichier rc.d ,puis la ligne “install successfull!”
On peut arréter le pi pour effectuer les banchements:
sudo halt

Voilas pour la partie logiciel.

http://blog.ouiaremakers.com/wp-content/uploads/formidable/instalation.zip

 

Etape 7 : branchements et fin.

 

DSC_0442.jpg

 

Houf!!! on y arrive !!!
Reliez tout d’abord la sortie de communication du contrôleur à la pin du pin choisie pendant l’instal, et la sortie alimentation du contrôleur au port mini usb d’alim du Pi.
branchez l’entrée alim du contrôleur à un adaptateur 5v 2a .
Pressez 1s le bouton poussoir , le PI doit s’allumer, pour l ‘arrêter, pressez le bouton 5s , et au bout d’une minute environ les alims vont se couper.

Voilas j ‘ai fini , merci de m’avoir lu jusqu’à la fin, j’espère avoir été intéressant et clair dans mes explications , n’hésitez pas à posez des questions.
A plus pour de nouvelles aventures. Et votez pour moi !