Horloge HSV : Un Garde-Temps Vibrant et Personnalisable pour Passionnés d'Arduino
Composants et fournitures
| Arduino UNO | × | 1 |
| Seeed Shield TFT Tactile 2,8" (V1.0) | × | 1 |
À propos de ce projet
Horloge HSV
Lors d'un voyage aux États-Unis, j'ai acheté un shield Seeed TFT Tactile 2,8" (V1.0) chez RadioShack. Je l'ai utilisé pour créer une horloge colorée pour l'anniversaire des 80 ans de mon père.
Points clés du projet :
- Cadran de l'horloge : Basé sur une grille de cellules rectangulaires. Les coins des cellules sont déformés aléatoirement, chaque cellule est divisée par une diagonale aléatoire. Une gamme de couleurs aléatoires est appliquée sur les cellules, chaque triangle étant ombré pour un effet 3D. Les couleurs sont représentées en interne en HSV (Teinte, Saturation, Valeur) puis converties en RGB pour l'écran LCD. L'heure est affichée avec une police simple en coloriant certaines cellules avec des couleurs complémentaires.
- Boîtier : Découpé au laser dans du bambou, conçu sous Inkscape, fabriqué par Ponoko.
- Fixation du shield : Malheureusement, le shield ne possède pas de trous de fixation. Je le maintiens donc dans le boîtier en le serrant contre la face avant. Un Arduino Uno se connecte par-dessus via les broches d'en-tête.
- Accès I2C à un RTC externe (DS3232) : Le shield n'expose pas les broches inutilisées. J'ai utilisé un Uno qui dispose de broches SDA/SCL supplémentaires. J'ai réalisé un connecteur d'en-tête bas profil pour ces broches, placé sous le shield. L'alimentation et la masse proviennent d'un connecteur similaire sur les broches ICSP, également sous le shield.
- Gestion de l'heure d'été : J'ai ajouté une prise en charge simple dans le code (une horloge de moins à régler deux fois par an !). Au lieu de gérer une logique du type « le dernier dimanche de septembre », le système s'appuie sur un petit tableau de dates de début et de fin précises pour les années futures (pour la Nouvelle-Zélande dans mon cas).
- Écran tactile : J'ai simplifié le code de la bibliothèque tactile pour n'en faire qu'une grille 4x4 de boutons débouncés. Par exemple, l'heure se règle en touchant les coins bas gauche et haut droit.
- Optimisation du rendu : J'ai fait des efforts considérables pour accélérer l'affichage : un rafraîchissement des cellules prend environ un quart de seconde. Le rendu repose sur l'écriture de lignes horizontales de pixels d'une couleur donnée. J'utilise un algorithme de Bresenham modifié pour calculer les étendues horizontales d'une série de paires de lignes formant les triangles d'une cellule. Le code d'envoi des pixels au LCD est basé sur la bibliothèque mais intégré, déroulé, simplifié et optimisé. Comme les données de couleur des pixels sont écrites sur plusieurs registres PORTx, toutes les valeurs sont précalculées lors de la sélection de la couleur, ce qui accélère l'affichage de N pixels en ligne.
- Orientation paysage : L'écran LCD est utilisé en mode paysage. J'ai longtemps peiné pour que l'écran se mette à jour par lignes horizontales. La datasheet du contrôleur est confuse. Il existe des commandes pour positionner le « curseur » (DRAM Horizontal/Vertical Address Set R20h, R21h). Les données de pixel sont écrites à l'emplacement du curseur qui se met à jour, passant à la ligne suivante si nécessaire. Il y a aussi une commande pour changer l'orientation de l'écran, « Entry Mode (R03h) », qui parle d'ajuster les incréments de ligne et de colonne du curseur. Cependant, changer l'orientation en paysage puis positionner le curseur ne fonctionnait pas. La solution trouvée (peut-être cachée dans la datasheet) est d'utiliser la commande « fenêtre » au lieu de la commande curseur : « Horizontal and Vertical RAM Address Position (R50h, R51h, R52h, R53h) ». Définir les coordonnées du coin supérieur gauche de la fenêtre fait démarrer les données de pixel à cet endroit et les met à jour horizontalement (en paysage).
Circuit
Le circuit est simple :
- Le shield TFT monté sur l'Uno.
- +5V, Masse, SDA et SCL vont des broches correspondantes de l'Uno vers le module RTC. Visible sur les trois premières photos ci-dessous (shield retiré). Notez que pour des raisons d'accès, l'alimentation/la masse proviennent du connecteur ICSP1.
Photos et schémas Fritzing disponibles dans le projet original.
Processus de fabrication
- Le Kazoo : Du Mirliton Ancestral au Jouet Plastique Moderne — Histoire, Fabrication et Avenir
- La Harpe : Des Racines Anciennes aux Chefs-d'Œuvre Modernes
- Polystyrène Expansé (PSE) : Production, Propriétés et Durabilité
- Maîtriser les capteurs Raspberry Pi : Guide pratique d'électronique et protocoles de communication
- Construire un robot intelligent avec le Bridge Shield – Intégration Raspberry Pi & Arduino
- Comprendre les coupe-fils : types, utilisations et applications
- Comprendre les carrières : types, utilisations et distribution mondiale
- Comprendre les clés passe-partout : types, utilisations et signification historique
- Génération d'azote sur site : Améliorer la sécurité et la fiabilité en laboratoire