Root » Serveurs » Chauffage » Mon installation » 2020 » Imprimante
Ajout d'une imprimante
Commande par arduino et servomoteur
Electronique
Il est possible d'ajouter beaucoup de fonctions à un module Arduino Uno. Une fonction assez simple à ajouter, c'est une imprimante sérielle (puisque j'ai déjà un écran LCD à commande sérielle).
-

-

On peut ajouter beaucoup de fonctions à l'arduino, comme par exemple un serveur web simple. Ce serait en théorie suffisant pour afficher les différentes valeurs et commander le passage d'un mode de fonctionnement à un autre ou pour régler la température. Les fonctionalités du serveur web sont très limitées, mais il est possible de n'utiliser ce serveur pour des tâches spécifiques, et d'utiliser mon serveur normal pour générer les pages mêmes.

Mais l'arduino uno ne dispose pas de suffisamment de ports disponibles pour brancher un serveur web, de plus c'est assez compliqué, puisque les pages doivent être générées par mon serveur normal (celui que vous utilisez maintenant pour lire ces pages), tandis que les données variables doivent être extraites de l'arduino. C'est possible, je l'ai fait avec mon ancien serveur qui commandait mon chauffage et dont je voulais limiter les fonctionalités web (il tournait sous windows 98).

Actuellement les fonctions web ne me manquent pas tellement. La montée en température est suffisamment rapide quand je rentre pour que je ne doive plus commander la mise en route du chauffage plus de 30 minutes à l'avance.

Ce qui me manque par contre, c'est la possibilité de voir l'évolution des températures; n'y a-t-il pas d'overshoot? Est ce que la température demandée est atteinte suffisament rapidement, etc. Cela permet en fin de compte d'optimaliser les routines qui commandent le servo-moteur. Je voudrais également voir la différence quand j'utilise le mode 100% manuel (utilisation du thermostat mécanique du chauffage).

Caractéristiques de l'imprimante

Comme imprimantes, il n'y a pas beaucoup de choix. Il faut choisir un modèle à entrée sérielle (c'est pratiquement impossible de commander une imprimante à entrée Centronics (parallèle) ou USB). En plus, il faut une simple imprimante DOS (qui imprime directement les caractères ASCII). Les codes 32 à 127 sont des caractères standard, les codes inférieurs sont utilisés pour certaines commandes et les codes 128-255 produisent des symboles ou des lettres accentuées (non standardisés).

Les premières imprimantes étaient des imprimantes travaillant en mode DOS, qui transforment chaque caractère ASCII en une représentation graphique. Les imprimantes windows (imprimantes graphiques) n'ont normalement pas de police de caractères intégrée, mais reçoivent directement une représentation graphique de l'ordinateur (GDI ou graphical device interface). Ce type d'imprimante est appellé "windows only" car il n'est pas possible d'imprimer directement des caractères sans passer par leur représentation graphique.

Les imprimantes plus anciennes sont des imprimantes à impact et ruban encreur et sont toujours compatibles. On trouve encore parfois de telles imprimantes sur ebay, mais les modèles les plus connus n'ont qu'une entrée parallèle (Centronics) qui ne peut pas être utilisée.

Les imprimantes les plus récentes sont des imprimantes qui utilisent du papier thermique. Elles font moins de bruit et travaillent plus rapidement, mais il faut controler qu'il ne s'agit pas d'une imprimante purement graphique (qui ne dispose pas de police de caractères intégrée). Les imprimantes conçues pour imprimer des étiquettes autocollantes sont généralement des imprimantes purement graphiques (imprimantes point de vente Zebra: elles nécessitent un pilote windows et ne sont pas utilisables).

Mais pour compliquer le tout, certaines imprimantes Zebra peuvent fonctionner en mode DOS (Zebra appelle ce mode de fonctionnement Line Mode). Une des imprimanpes est le modèle Zebra LP 2824 Plus (qu'il faut manuellement programmer par le bouton poussoir pour passer en line mode). Le changement de mode de foctionnement est heureusement stocké en mémoire.

Ce qui nous reste, ce sont généralement les imprimantes qui sont utilisées dans les processus industriels. Ces imprimantes sont par exemple connectées à un automate programmable: dans certains cas, il faut une trace sur papier du fonctionnement d'une installation industrielle. Ces imprimantes peuvent utiliser du papier continu, ce qui est très interessant dans ce cas précis. Le ruban encreur est bon pour un million de caractères. La commande du processus se fait souvent avec un ordinateur adapté qui n'a pas d'interface graphique. Pas possible d'utiliser une imprimante moderne (qui n'accepte que les commandes graphiques et qui ne dispose plus d'une police de caractères).

Le protocole sériel est bien défini, c'est le protocole RS-232. Il a une caractéristique importante, c'est qu'il travaille avec des tensions non-standardisées (+5V et -5V au lieu de 0V et 5V). Cela permet de parcourir de plus longues distances, mais il faut ajouter un interface qui va transformer le protocole sériel TTL en RS-232. Non seulement les tensions sont différentes, mais la polarité de la ligne est également inversée.

Le protocole sériel est décrit en détail ici.

Le petit circuit à droite transforme la polarité du signal et adapte les niveaux. La led s'allume très légèrement quand il y a une communication sérielle. Par rapport à la première version, j'ai ajouté un interupteur (l'imprimante travaille en 5V et consomme au maximum 250mA) et une diode zener pour réduire le -12V à une tension de -5V pour être sûr de ne pas détruire l'imprimante. Je me suis rendu compte par après que l'imprimante pouvait très bien travailler avec des niveaux TTL, il faut simplement basculer un petit dip switch pour passer d'une polarité normale à une polarité inverse!


Si vous ne disposez que de +5V, le circuit ci-dessus peut fournir la tension négative. Le circuit composé de 6 inverseurs CMOS transforme le +5V en une tension d'environ -3V, juste suffisante pour produire la tension négative pour le port RS-232. Le schéma ne correspond pas exactement au circuit standard: c'est fait pour réduire au maximum les chutes de tension. Il est également fait usage de diodes schottky 1N5711 au lieu des diodes classiques 1N4148. L'entrée RxD du port (sur l'imprimante) est normalement relié à la masse via une résistance de 5kΩ, le circuit doit donc pouvoir fournir 3mA au minimum.

Attention: si beaucoup de périphériques sériels peuvent fonctionner avec des niveaux TTL, ce n'est pas garanti d'office, surtout si vous utilisez du matériel plus ancien. Par contre, il y a des périphériques qui sont d'origine conçus pour la communication sérielle aux niveaux TTL (écrans LCD).

L'imprimante fonctionne bien, il a simplement fallu remplacer le ruban encreur qui s'est désagrégé au fil du temps. Pour les tests, avant que le nouveau ruban n'arrive (on trouve vraiment de tout sur ebay), j'ai utilisé du papier carbone. Vous les jeunes, je parie que vous n'avez jamais utilisé du papier carbone pour faire des copies...

Nous sommes en octobre 2020. Ce qui est encore prévu, c'est le remplacement de l'imprimante matricielle par une imprimante thermique. Chaque minute, l'imprimante matricielle imprime une ligne, ce qui à la fin dérange très fort, surtout la nuit.

Et puis une adaptation finale, c'est une horloge en temps réel (real time clock). C'est un petit module qui peut facilement être ajouté. L'horloge utilise deux ports (SDA et SCL: serial data et serial clock). Quelle chance, il me reste justement deux ports arduino qui ne sont pas encore utilisés!

Et pour terminer une petite vidéo de l'imprimante. Le ruban encreur a momentanément été remplacé par des languettes de papier carbone.

L'imprimante (qui fait beaucoup de bruit) imprime successivement:
Le temps (heures et minutes,
La température actuelle,
La température demandée et le mode de fonctionnement (A = automatique),
La position du servo moteur et
La température de la buse des gaz brulés (valeur non transformée en température).

Publicités - Reklame

-