Programmateur pour four – Prototype

L’histoire

Le four de ma cuisine a quelques ratés. Il chauffe bien, mais le programmateur ne fonctionne plus. Il est toujours capable d’afficher l’heure ou la minuterie, et de sonner lorsque cette dernière arrive à 0, mais il n’est plus capable d’arrêter la chauffe et une fois la minuterie arrivée à 0, il n’est plus possible d’arrêter la sonnerie ! Heureusement, couper le courant au niveau du tableau électrique le remet en mode horloge, mais c’est quand même assez peu pratique.

J’ai donc décidé de remplacer le programmateur, et au passage, de rajouter quelques fonctionnalités sympathiques.

Préparation du circuit

A priori, rien de bien compliquer: un relais pour contrôler la chauffe, un buzzer, un afficheur LCD et 3 boutons, le tout géré par un Arduino. Le prototype ne devrait pas poser de problème, c’est lorsqu’il faudra faire tenir tout ça dans le four que ça se compliquera. Et il faut y penser dès maintenant. L’écran du four fait environ 95 mm x 25 mm. J’opte pour un afficheur LCD 4×20 caractères DEM 20485 SYH qui est peu onéreux et offre pas mal de possibilités. Avec 4 lignes de 20 caractères, on peut en afficher des informations ! Seul bémol, les caractères sont petits comparés à l’afficheur actuel qui a juste 4 chiffres (pour l’heure) et quelques symboles autour. L’idéal aurait été un module graphique mais je n’en ai trouvé aucun à un prix raisonnable dont les dimensions convienne.

Il faudra aussi que le four connaisse l’heure. L’Arduino peut mesurer le temps, la fonction millis renvoyant le nombre de millisecondes écoulées depuis son démarrage, et une fois l’heure réglée par l’utilisateur, on pourrait l’utiliser pour la maintenir à jour. Il faudrait tenir compte de l’overflow (la fonction millis renvoi un entier sur 32 bits et revient donc à 0 au bout de 2^32 ms, c’est à dire 49 jours, 17 heures, 2 minutes, 47 secondes et 296 millisecondes) mais c’est tout à fait faisable. La librairie Time fait même tout cela pour nous et fournit des fonctions permettant d’accéder directement à la date et à l’heure. Cependant, en cas de coupure de courant, il faudrait régler l’heure de nouveau. La libraire Time supporte d’autres sources de temps comme le DS 1307. C’est un composant qui doit être connecté à un quartz, qui supporte une alimentation de secours par une pile de 3V et qui est capable de fournir la date. En cas de coupure de courant, l’alimentation de secours lui permet de conserver la date et de continuer de la maintenir à jour.

Pour le prototype, le programmateur ne sera pas relié au four et n’utilisera pas de relais. Pour l’instant, je me contenterai d’une LED qui servira de témoin. En guise de buzzer, un simple disque piézoélectrique DP024 de récupération devrait faire l’affaire (à voir si le volume sonore sera suffisant une fois dans le four !).

Enfin, mon four a la place pour 3 boutons poussoirs. Étant donnée la taille des orifices pour les boutons, des boutons poussoirs miniatures de type KRS32N feront l’affaire.

Le câblage du prototype est le suivant:

Schema du prototype

Schema du prototype

On notera que la LED est connecté sur la borne 13 qui est connecté à une résistance de 1kOhms sur l’Arduino, ce qui permet de ne pas avoir à rajouter de résistance en série de la LED. Si l’on utilisait une autre borne, une telle résistance serait nécessaire.

On remarquera aussi le câblage utilisé pour les interrupteurs. Plutôt que d’utiliser une entrée numérique par interrupteur, et donc de mobiliser 3 entrées, j’ai fait un pont diviseur de tension dont la résistance supérieure varie en fonction du bouton pressé. La tension résultante est récupérée en entrée A0 du Arduino et est lue comme le serait celle d’un potentiomètre. Un calcul permet d’estimer la tension obtenue selon le bouton pressé et d’en déduire les valeurs que l’on devrait lire. Dans mon cas, j’ai utilisé 3 résistances de 10 kOhms. Les valeurs de tension correspondantes sont donc de 5 V, 2.5 V et 1,67 V (et 0 V si aucun bouton n’est pressé), ce qui donne des valeurs lues par l’entrée numérique de 1024, 512 et 341. Dans le code, bien sûr, il faut prendre de la marge. Je regarde donc si la valeur lue est supérieure à 1000, sinon supérieure à 400, sinon supérieure à 200.

À noter qu’utiliser des résistances identiques n’est pas le meilleur choix si l’on veut pouvoir placer un grand nombre d’interrupteurs. En effet, la première résistance va diviser la tension par deux, gaspillant la moitié de la résolution de l’entrée analogique. Il est donc plus malin de prendre des résistances croissantes pour la partie haute du diviseur.

La résistance de sortie du diviseur de tension doit être assez grande car lorsque le premier poussoir est fermé, le courant que doit fournir l’Arduino est déterminée par celle-ci. Dans mon cas, le courant maximal est: I = U/R = 5 V / 10 kOhms = 0.5 mA ce qui est largement bon. Le courant maximal que l’Arduino Uno peut débiter sur une broche est de 40 mA, ce qui impose de choisir une résistance d’au moins 125 Ohms. Cependant le courant total qu’il peut débiter (toutes broches cumulées) est limité à 200 mA il est donc préférable de se limiter à ~10 mA et de choisir une résistance d’au moins 500 Ohms.

Bien sûr, une limitation d’un tel montage est qu’il n’est pas possible de presser plusieurs boutons simultanément.

Prototype du programmateur

Prototype du programmateur

Programmation

Voici le code source: ProgrammateurFour.ino

Il n’est pas commenté et pas très propre, mais devrait être compréhensible. La boucle principale aurait besoin d’un nettoyage car elle fait presque 300 lignes. Une bonne partie du code devrait être bougée dans des fonctions.

Les choses à savoir sont les suivantes:

J’ai utilisé une machine à état pour gérer la logique. Les états sont listés dans l’enum etats. Chaque élément du menu (il y en a 7) est considéré comme un état, et lorsque l’on clique sur le bouton « OK », on accède a l’état correspondant. Il y a donc 14 états auxquels s’ajoutent l’état VEILLE et l’état HEURE qui affichent tous les deux la date et l’heure, la différence étant qu’en VEILLE, le rétro-éclairage de l’écran est éteint.

Le programmateur gère plusieurs programmes (maximum 10) dans un tableau statique. Un programme est défini par une heure de début et une durée. L’ajout ou la suppression de programme est assez trivial. La saisie de l’heure par l’utilisateur pour donner l’heure de début d’un programme est réutilisée pour la configuration de l’heure.

Il existe une fonction « programme rapide » qui lance le four immédiatement pour une durée entrée par l’utilisateur. Il existe également un mode marche forcée permettant de faire fonctionner le four jusqu’à ce qu’on lui demande explicitement de s’arrêter.

Lorsque le four chauffe (programme en cours ou marche forcée) il reste possible de sortir du minuteur et de retourner dans le menu. On peut ensuite revenir au minuteur en utilisant le menu « programme courant » qui n’est disponible que si le four chauffe.

Enfin, le programmateur gère plusieurs sonneries. Ces sonneries sont définies dans des tableau dans le code. Un tableau contient la mélodie elle même (suite de fréquences des notes), terminée par un -1. Un deuxième tableau de la même taille contient la durée relative de chaque note.

Suite dans l’article Programmateur pour four – Version finale

Cette entrée a été publiée dans Projets. Vous pouvez la mettre en favoris avec ce permalien.

2 réponses à Programmateur pour four – Prototype

  1. Nicolas dit :

    Hey super ce projet mais on ne voit pas le final, une vidéo serait la bienvenue ! 🙂

Répondre à Nicolas Annuler la réponse

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

thirteen − = six