Horloge Arduino avec indicateur LED. Horloge LED bricolage
La photo montre un prototype que j'ai assemblé pour déboguer le programme qui gérera l'ensemble de cette installation. Le deuxième arduino nano dans le coin supérieur droit de la planche à pain n'appartient pas au projet et dépasse comme ça, vous n'avez pas besoin d'y prêter attention.
Un peu sur le principe de fonctionnement : Arduino prend les données de la minuterie DS323, les traite, détermine le niveau de lumière à l'aide d'une photorésistance, puis envoie le tout au MAX7219, et celui-ci, à son tour, éclaire les segments requis avec la luminosité requise. De plus, à l’aide de trois boutons, vous pouvez régler l’année, le mois, le jour et l’heure comme vous le souhaitez. Sur la photo, les indicateurs affichent l'heure et la température, qui proviennent d'un capteur de température numérique.
La principale difficulté dans mon cas est que les indicateurs de 2,7 pouces ont une anode commune et qu'ils ont dû, d'une part, se lier d'amitié avec le max7219, qui est conçu pour les indicateurs avec une cathode commune, et d'autre part, résoudre le problème avec leur alimentation, car ils ont besoin de 7,2 volts pour la lueur, ce que le max7219 seul ne peut pas fournir. Après avoir demandé de l'aide sur un forum, j'ai reçu une réponse.
Solution dans la capture d'écran :
Un microcircuit est attaché aux sorties des segments du max7219, qui inverse le signal, et un circuit de trois transistors est attaché à chaque sortie, qui doit être connecté à la cathode commune de l'écran, qui inverse également son signal et augmente le tension. Ainsi, nous avons la possibilité de connecter des écrans avec une anode commune et une tension d'alimentation supérieure à 5 volts au max7219
J'ai branché un indicateur pour le test, tout fonctionne, rien ne fume
Commençons à collectionner.
J'ai décidé de diviser le circuit en 2 parties en raison du grand nombre de cavaliers dans la version séparée par mes pattes tordues, où tout était sur une seule carte. L'horloge sera composée d'une unité d'affichage et d'une unité d'alimentation et de contrôle. Il a été décidé de récupérer ces derniers en premier. Je demande aux esthètes et aux radioamateurs expérimentés de ne pas s'évanouir à cause du traitement cruel des pièces. Je n'ai aucune envie d'acheter une imprimante pour le bien de LUT, donc je le fais à l'ancienne - je m'entraîne sur un morceau de papier, je perce des trous selon un modèle, je trace des chemins avec un marqueur, puis je grave.Le principe de fixation des indicateurs est resté le même que sur.
Nous marquons la position des indicateurs et des composants à l'aide d'un gabarit en plexiglas conçu pour plus de commodité.
Processus de balisage
Ensuite, à l'aide d'un gabarit, nous perçons des trous aux bons endroits et essayons tous les composants. Tout s'adapte parfaitement.
Nous dessinons des chemins et gravons.
se baigner dans du chlorure ferrique
Prêt!
tableau de contrôle:
panneau d'indication :
Le tableau de commande s'est avéré excellent, la piste sur le tableau d'affichage n'a pas été rongée de manière critique, elle peut être réparée, il est temps de souder. Cette fois, j'ai perdu ma virginité SMD et inclus des composants 0805 dans le circuit. Au minimum, les premières résistances et condensateurs ont été soudés. Je pense que je vais m'améliorer, ce sera plus facile.
Pour la soudure, j'ai utilisé le flux que j'ai acheté. Souder avec est un plaisir, maintenant j'utilise de la colophane alcoolisée uniquement pour l'étamage.
Voici les planches terminées. La carte de commande dispose d'un siège pour un Arduino nano, d'une horloge, ainsi que de sorties pour la connexion à la carte d'affichage et aux capteurs (une photorésistance pour la luminosité automatique et un thermomètre numérique ds18s20) et une alimentation avec tension de sortie réglable (pour les grands appareils à sept segments) et pour alimenter l'horloge et l'Arduino, sur la carte d'affichage se trouvent des prises de montage pour les écrans, des prises pour max2719 et uln2003a, une solution pour alimenter quatre grands appareils à sept segments et un tas de cavaliers.
tableau de commande arrière
Tableau d'affichage arrière :
Installation smd épouvantable :
Lancement
Après avoir soudé tous les câbles, boutons et capteurs, il est temps de tout allumer. Le premier lancement a révélé plusieurs problèmes. Le dernier grand indicateur ne s'allumait pas et le reste brillait faiblement. J'ai résolu le premier problème en soudant la patte du transistor SMD et le second en ajustant la tension produite par le LM317.C'EST VIVANT!
Après avoir réalisé de nombreux prototypes Arduino sur une maquette, j'ai décidé de créer quelque chose d'utile que je pourrais utiliser à la maison. Et quoi de plus utile qu'une montre lumineuse, qui, pour une raison quelconque, n'est plus produite depuis 2010 ? J'ai commencé à assembler une montre numérique en recherchant les pièces nécessaires. L'un des critères permettant de collecter rapidement les composants nécessaires était la disponibilité des pièces dans les magasins locaux et auprès des fabricants de Chine et de Malaisie.
Horloge temps réel Arduino (RTC) avec affichages à 7 segments
Lors de l'assemblage de la montre, plusieurs options sont apparues pour régler l'heure exacte. D'abord: régler l'heure sur Arduino , en le gardant alimenté tout le temps. Mais cette méthode n'est pas très pratique, car à chaque fois que vous aurez besoin de régler l'heure, vous devrez mettre l'Arduino sous tension.
La deuxième option était l'idée connexion de 7 segments DIRIGÉ - indicateurs pour le module GPS . Étant donné que le signal GPS donne une heure très précise, cette option devrait résoudre le problème et ne nécessiterait pas de régler l'horloge à chaque fois qu'elle était allumée. J'ai pris mon navigateur de poche Garmin GPS 60 C, je l'ai sérialisé dans l'Arduino et j'ai chargé plusieurs bibliothèques GPS, obtenant ainsi un signal horaire très précis.
Le problème avec la méthode GPS s'est avéré être que comme j'habite au centre de la ville, une jungle de béton avec des immeubles de grande hauteur impénétrables entoure ma maison, et il serait nécessaire de placer une antenne GPS externe à l'extérieur de la fenêtre pour pouvoir pour recevoir un signal GPS d'un ciel clair. Sans couverture satellite, aucun appareil GPS n'est capable de recevoir un signal temporisé. Soit l'horloge devait être sur la fenêtre, soit il fallait retirer l'antenne GPS et y poser un câble de 7 mètres.
La troisième méthode de réglage de l’horloge s’est avérée la meilleure. Cela réside dans le travail Arduino avec horloge temps réel DS1307 (RTC). Ils sont alimentés par une pile bouton de 3 volts, qui conserve les paramètres lorsque l'appareil est éteint et lorsque le microcontrôleur est déconnecté.
Je me suis rendu au "paradis de l'électronique" local situé au centre-ville pour tenter ma chance et trouver les composants nécessaires. À ma grande surprise, j'y ai trouvé toutes les pièces nécessaires pour assembler une montre numérique.
Les pièces requises sont :
- Carte Arduino pour le prototypage et le chargement du croquis dans le microcontrôleur ;
- Microcontrôleur ATmega328P pour le fonctionnement de l'horloge ;
- quatre indicateurs LED rouges à 7 segments (ou d'autres couleurs plus froides que vous pouvez trouver sur votre marché local) ;
- horloge temps réel DS1307 ;
- résonateur à quartz à 32,768 kHz ;
- support pour pile bouton CR2025 ou CR2032 ;
- quatre puces de registre à décalage 74HC595 pour piloter des indicateurs LED à 7 segments ;
- résistances 220 Ohm 0,25 W chacune ;
- connecteurs à broches à une rangée ;
- supports pour circuits intégrés (CI);
- fils de connexion.
Si vous n'avez pas les compétences nécessaires pour fabriquer des circuits imprimés, je vous recommande d'utiliser planche à pain soudée (plaque de textolite avec de nombreux trous pour y fixer des composants par soudure, appelée à tort circuit imprimé) et soudez-y toutes les prises IC des microcircuits et les connecteurs à broches. Grâce à ces contacts à dégagement rapide, toutes les LED et CI à 7 segments peuvent être facilement remplacés si nécessaire.
La taille de la carte de prototypage étant très limitée, nous n'avons pu y placer que des indicateurs LED de 35 mm, car il devait encore y avoir de la place pour un support de pile bouton. J'aimerais installer des indicateurs à 7 segments beaucoup plus gros, mais les plus gros nécessitent une tension accrue, supérieure à 5 V, et il fallait déjà compliquer le circuit avec des circuits à double puissance. Je ne veux pas avoir affaire à un stabilisateur pour deux tensions de sortie, il vaut mieux se concentrer sur une version plus simple d'une horloge numérique.
Condensateurs de blocage en céramique 100 nF sur la broche d'alimentation Vcc de chaque registre 74HC595 sont ajoutés pour éviter tout problème d'interférence basse fréquence.
L'horloge numérique assemblée utilise seulement 5 broches Arduino :
- 3 sorties numériques pour registres à décalage 74HC595 ;
- 2 sorties analogiques pour horloge en temps réel connectées via une connexion I2C.
L'avantage d'une horloge numérique assemblée sur Arduino par rapport à une horloge d'usine est que vous pouvez facilement ajouter toutes les fonctions qui peuvent leur être utiles.
Voici quelques idées pour modifier votre montre :
- Affichage alterné des heures/minutes et des minutes/secondes ;
- Jouer une mélodie toutes les heures ;
- Installation du capteur LM35 et utilisation de la montre comme thermomètre ;
- Fonction réveil matinal ;
- Même le contrôle d'autres appareils électriques à l'aide d'un relais électromécanique qui s'allume en fonction d'événements définis dans le temps ou de lectures de capteurs connectés.
Étant donné que les quatre indicateurs sont assez grands et lumineux, ils peuvent également être utilisés pour afficher des informations sur les lettres.
Après avoir soudé le premier chiffre de la LED à cathode commune à 7 segments au registre à décalage 74HC595, le premier problème est apparu. J'ai utilisé une seule résistance de 220 ohms connectée à la cathode commune de la LED pour économiser les résistances, et j'ai constaté que lorsque le chiffre 8 était allumé, tous les segments s'éclairaient très faiblement. C'est bien pour un prototype, mais ne convient pas pour une montre numérique en direct. Ce serait très ennuyeux d'avoir une montre avec des chiffres qui brillent différemment. J'ai donc dû couper des fils individuels et obtenir davantage de résistances de 220 ohms pour les connecter à chacun des sept segments LED.
Le deuxième problème était que j'avais oublié d'allouer de l'espace pour que deux LED de 5 mm fassent office d'indicateur clignotant des secondes. Et l'indicateur du troisième chiffre était déjà soudé.
Comme cela demande trop de travail de souder un indicateur et de fixer toutes les résistances aux fils, j'ai décidé de créer une carte distante avec deux LED comme indicateurs de secondes. Je vais trouver un moyen de placer deux points entre les chiffres des heures et des minutes ! Sur la photo ci-dessous, je photographie simplement la LED de la broche 13 qui clignote à intervalles de 500 ms.
- Il y a des codes .
- Esquisse finale
Voici quelques photos de l'appareil assemblé et fonctionnel. Maintenant, j'ai juste besoin de quelque chose comme de l'acrylique pour sécuriser la planche à pain et cacher l'horloge Arduino dans le boîtier global.
Cette horloge est alimentée par une carte déportée Arduino dans la version avec câble FTDI et prise DC.
L'assemblage de l'horloge Arduino est terminé après l'installation du capteur d'humidité et de température DHT11.
Capteur de température et d'humidité fait maison DHT11 et DHT22 - connexion à Arduino Horloge GPS sur Arduino
Il existe de nombreuses façons d'assembler une montre électronique de vos propres mains : les schémas sont largement présentés dans la littérature et sur Internet. La plupart des implémentations modernes sont basées sur des microcontrôleurs. La mise en œuvre de tels projets nécessite souvent des compétences pratiques approfondies et des connaissances théoriques dans le domaine de l'électronique : la capacité d'utiliser des logiciels spécialisés, de créer des circuits imprimés à la maison à l'aide d'une gravure au chlorure ferrique et d'une bonne soudure. Vous devez également disposer d’une variété d’outils et de fournitures.
Cependant, il existe un moyen simple et abordable d'assembler une montre électronique de vos propres mains à la maison : utiliser la plateforme Arduino. Il s'agit d'un complexe logiciel et matériel spécialement conçu pour enseigner les bases de la programmation et de l'électronique. Avec l'aide d'Arduino, n'importe qui, même sans formation préalable particulière, peut construire une horloge électronique de ses propres mains : des schémas de circuit, des programmes d'ingénierie et même un fer à souder ne sont pas nécessaires !
La connexion de tous les composants électroniques est effectuée sur une planche à pain à contact spécial (« sans soudure »), ce qui élimine le risque de brûlures, coupures et autres blessures. Vous pouvez donc travailler avec le concepteur Arduino avec des enfants. Une manière visuelle de présenter un schéma de circuit vous aidera à éviter de commettre des erreurs lors de l'assemblage de l'appareil.
Étape 1. Liste des composants
Pour assembler une montre simple sur des matrices LED vous n'aurez besoin que de quelques composants bon marché :
- Plateforme Arduino. Les modèles les plus simples feront l'affaire - ou Micro ;
- planche à pain de contact ;
- fils de connexion pour planche à pain;
- Module d'horloge en temps réel Adafruit DS3231 ;
- Module matriciel LED 32x8 MAX7219 ;
- deux boutons.
Vous aurez également besoin d'un ordinateur personnel et d'un câble USB-mini-USB pour charger le programme de contrôle en mémoire. C'est tout : un fer à souder, des décapants, des couteaux de montage et autres outils professionnels ne sont pas nécessaires : toutes les opérations sont effectuées à la main. Peut-être que dans certains cas, il est plus pratique d'utiliser une pince à épiler, mais vous pouvez vous en passer.
Étape 2. Assemblage du circuit électronique
Le circuit d'une horloge électronique avec affichage LED utilisant Arduino semblera assez simple même pour les radioamateurs inexpérimentés. Seuls quelques fils sont nécessaires pour l'assemblage. Tableau de connexion :
Module Arduino → Matrice LED 32x8 MAX7219
Module Arduino → Horloge temps réel Adafruit DS3231
Module Arduino → boutons
D2 - bouton 1
D3 - bouton 2
La deuxième broche des boutons est connectée à GND.
Il vous suffit de faire attention et de vous rappeler comment les trous de contact sur la planche à pain sont connectés les uns aux autres. Le schéma suivant illustre la méthode de connexion interne des trous de contact :
Deux rangées (1 et 4) des deux côtés sont connectées horizontalement - elles sont généralement utilisées comme ligne électrique +5 V et masse GND. Tous les contacts internes (2 et 3) sont fermés verticalement. Dans ce cas, le circuit imprimé est divisé verticalement et horizontalement en deux parties symétriques indépendantes l'une de l'autre. Cela permet, par exemple, d'assembler deux appareils différents sur une même carte.
Le schéma d'une horloge électronique avec indication LED, ainsi que la disposition des éléments sur le circuit imprimé, sont présentés dans l'illustration :
Vérifiez soigneusement que toutes les connexions sont conformes au schéma présenté. Assurez-vous également que les conducteurs sont bien fixés dans les trous de contact du circuit imprimé.
Étape 3. Micrologiciel Arduino
Une fois l'assemblage et le test du circuit terminés, vous pouvez commencer à charger le programme de contrôle (ou « firmware ») dans la mémoire Arduino.
Pour ce faire, vous devez installer l'environnement de développement officiel gratuit - . Vous aurez également besoin du code source du projet, que vous pouvez télécharger ci-dessous dans l'archive avec toutes les bibliothèques et un croquis, et si vous avez juste besoin d'un croquis, vous pouvez le copier séparément :
//include les bibliothèques : #include "LedControl.h" #includeDésormais, pour terminer les travaux sur l'appareil, il vous suffit d'effectuer un certain nombre d'opérations simples :
La compilation du code du programme et son chargement ultérieur dans la mémoire du microcontrôleur prendront un certain temps, généralement pas plus d'une minute. La réussite de l'opération sera signalée dans la console Arduino IDE. Après quoi il ne reste plus qu'à redémarrer l'Arduino à l'aide du bouton Reset de l'appareil - une simple horloge sur matrices LED est prête !
Horloge prête sur Arduino
L'horloge est réglée à l'aide de deux boutons. L'appareil prend en charge les formats horaires 12 et 24 heures, affiche la date et le jour de la semaine et affiche l'heure avec ou sans secondes. Il est également possible de modifier la luminosité des LED.
Vous souhaiterez probablement ajouter plus de fonctionnalités à l'avenir (par exemple, un thermomètre) ou installer l'appareil dans un corps de votre propre conception - de bons résultats peuvent être obtenus en fabriquant sur des machines de découpe laser. Mais maintenant, vous pouvez dire en toute sécurité que vous avez assemblé de vos propres mains une montre électronique à part entière !
Ainsi, après une courte pause technique, nous poursuivons notre connaissance de la famille ARDUINO MK. Dans cette leçon, nous allons essayer de réaliser une horloge qui fonctionne à partir du générateur interne du MK (avec un générateur externe il y aura l'une des leçons suivantes) et affiche des informations sur l'indicateur LCD de type 1602 (ce qui signifie 16 caractères en 2 lignes, il existe aussi le type 1604 - 16 caractères sur 4 lignes, vous avez déjà compris que les 2 premiers chiffres indiquent le nombre de caractères indicateurs et les seconds indiquent le nombre de lignes). Ne retardons pas l'introduction, mettons-nous au travail.
Pour le projet nous aurons besoin de :
- Arduino Uno
- Indicateur LCD 1602
- Planche à pain
- Fils
- Résistance ajustable 10 kOhm
Pour ceux qui sont particulièrement paresseux, je vous conseille d'aller en bas de page et de télécharger le croquis fini ; pour ceux qui veulent apprendre à réaliser des croquis par eux-mêmes, je décrirai plus en détail toutes les étapes du projet . Pour travailler correctement et rapidement sur un projet, un algorithme de travail est nécessaire. Il est préférable d’esquisser presque n’importe quel projet sur papier, puis de suivre l’algorithme étape par étape. Nous ferons exactement la même chose. Créons donc un algorithme. Nous avons plusieurs conditions, écrivons-les par ordre croissant :
- Les secondes fonctionnent dans la plage de 0 à 59 dans un cycle avec un intervalle de secondes (cela est compréhensible).
- Les minutes fonctionnent dans la plage de 0 à 59 dans un cycle, la commutation se produit lorsque la valeur des secondes atteint 0.
- L'horloge fonctionne dans la plage de 0 à 24 (ici, vous pouvez choisir de l'afficher dans un style étranger de 0 à 12 avec les valeurs AM et PM, selon votre préférence) dans un cycle, la commutation se produit lorsque la valeur des minutes atteint 0.
- Afficher toutes les informations nécessaires sur l'écran (par exemple, vous pouvez décider de ne pas afficher les secondes mais simplement de faire un point clignotant entre les heures et les minutes)
Nous assemblons nos montres selon ce schéma :
Connexion de l'indicateur LCD 1602 à ARDUINO
Conseils de montage. L'indicateur 1602 provient généralement de Chine sous une forme « nue », c'est-à-dire aucune broche n'est soudée, je vous conseille d'utiliser à ces fins des prises d'ordinateur à double rangée de cartes mères, une broche de la prise est insérée dans 1602, la deuxième broche est derrière le bord de la carte, soudez les deux broches à une broche - ceci augmente la résistance mécanique et électrique. Ce schéma n'indique pas le schéma de connexion du rétroéclairage ; ce sont les 2 broches suivantes à droite de D7. Vous pouvez les connecter à l'alimentation 3,3 V de l'ARDUINO, vous pouvez effectuer un allumage/décoloration en douceur si vous connectez la broche positive (elle est étiquetée comme A-anode) à la sortie ARDUINO et contrôlez l'alimentation via cette broche, ceci est une tâche secondaire, pour l'instant connectez simplement la broche Et sur 1602 à 3,3V sur ARDUINO, et la broche K 1602 à GND ARDUINO.
Commençons maintenant à concevoir la montre. Nous lançons le shell ARDUINO sur l'ordinateur. Essayons de jouer avec 1602 pour vérifier les bonnes connexions du circuit. Allons-y Fichier-Exemples-LiqidCrystal et sélectionnez l'un des fichiers. Nous téléchargeons le croquis sur ARDUINO et regardons ce qui se passe. Si à la place des symboles vous voyez des carrés noirs, resserrez la résistance de trimmer, il s'agit d'un régulateur de contraste (faites de même si rien ne s'affiche du tout). Les informations doivent être affichées correctement et il ne doit tout simplement pas y avoir de « trucs fous ». S'ils apparaissent, vérifiez le schéma de connexion, où il a été mal assemblé. Vous pouvez immédiatement voir dans les croquis comment accéder à l'indicateur LCD et être étonné de la facilité de travailler avec lui ! Si tout fonctionne correctement pour vous, passons directement à la programmation.
Décidons que notre minuterie fonctionnera sans l'opérateur de retard comme indiqué. On rentre donc le code suivant :
#inclure
// Les variables changeront :
vide installation
() {
lcd.begin(16, 2);
vide boucle
()
{
if (currentMillis - previousMillis >= intervalle) (
Ce code fonctionnera déjà mais n'affichera rien. 1 sera ajouté à la variable s chaque seconde. nous avons déjà obtenu l'intervalle exact de 1 seconde ! Maintenant, en suivant l'algorithme, nous avons besoin d'une limite de la variable entre 0 et 59. Faisons-le.
si(s>
{
}
Ajoutez ce code au programme. D'après la description, tout est clair - si la valeur de s est supérieure à 59, alors nous lui attribuons 0 et ajoutons 1 minute à la variable m. À l'heure actuelle, nous disposons d'une minuterie entièrement fonctionnelle et d'un compteur de minutes infini (jusqu'à 32 768 - la valeur maximale du type entier). Vous devez maintenant calculer les minutes de la même manière. Nous écrivons ce qui suit :
if (m>59) // si m les valeurs sont supérieures à 59
{
}
Ajoutez des lignes au programme. Cela devrait déjà ressembler à ceci :
int h, m, s ; // variables pour les heures, minutes, secondes
booléen z ; // variable pour afficher le point
// connecte la bibliothèque d'indicateurs
#inclure
// initialise la bibliothèque avec les numéros des broches de l'interface
Écran LCD LiquidCrystal (12, 11, 5, 4, 3, 2);
// Les variables changeront :
int ledState = FAIBLE ; // ledState utilisé pour définir la LED
non signé long précédentMillis = 0; // stockera la dernière fois que la LED a été mise à jour
intervalle long const = 1000 ; // intervalle auquel clignoter (millisecondes)
vide installation
() {
lcd.begin(16, 2);
vide boucle
()
{
Courant long non signéMillis = millis();
if (currentMillis - previousMillis >= intervalle) (
// enregistre la dernière fois que vous avez clignoté la LED
précédentMillis = courantMillis;
s++; // en ajoute un, équivalent à écrire s=s+1;
// section de comptage des secondes
if (s>59) // si la valeur de s est supérieure à 59
{
s=0 ; // attribue la valeur 0 à la variable s
m++; // ajoute 1 à la variable m responsable des minutes
}
// section de comptage des minutes
si(m>
{
m = 0 ; // attribue la valeur 0 à la variable m
h++; // ajoute 1 à la variable h responsable de l'horloge
}
En principe, tout est clair. Il ne reste plus qu'à traiter l'horloge. Faisons-le. Nous ajoutons après la section de décompte des minutes :
si(h>
{
}
Ça y est, la montre est prête ! Remplissez le croquis et l'horloge fonctionnera comme il se doit ! J'attire votre attention sur le fait qu'ils compteront au format 24 heures. Essayez de créer vous-même un format de 12 heures. Il ne reste plus qu'à afficher les informations sur l'indicateur LCD. Il existe 2 façons d’écrire du code pour générer des informations.
- Calculez certaines données et affichez-les immédiatement
- Calculez toutes les données et affichez-les toutes en même temps.
À ce stade, vous déciderez vous-même du chemin que vous emprunterez. Si vous suivez le premier chemin, vous devez alors écrire l'affichage des informations immédiatement dans les sections de calcul, si vous suivez le deuxième chemin, vous écrivez un bloc après tous les calculs. Prenons la deuxième voie parce que... c'est plus préférable et plus logique (même si, pour être honnête, mon croquis de test a été écrit le long du premier chemin). Ainsi, pour transférer des données vers l'indicateur 1602, seules 2 commandes sont utilisées :
lcd.setCursor(3, 0); // définit le curseur sur le 3ème caractère de la 0ème ligne (le comptage des lignes et des caractères commence à 0)
lcd.print(0); // imprimer (imprimer- imprimer, apprendre l'anglais) 0
Il existe également la commande lcd.clear ; ce qui veut dire écran clair mais nous n'avons pas besoin de l'utiliser ici.
Nous commençons à afficher des informations. Commençons par les secondes (vous pouvez commencer avec n'importe quelle valeur, faites ce qui vous convient). Placez le curseur sur la ligne 0 en position 6 et affichez la valeur des secondes. Pourquoi en 6ème position demandez-vous ? Imaginons ce qui suit : le format d'affichage de l'horloge est de 2 caractères (heures), un séparateur (disons :), 2 caractères (minutes), un séparateur (:) et, enfin, des secondes. On compte à partir de la position zéro : 0+2+1+2+1=6. Puisque le comptage commence à 0, on soustrait un des données (zéro est aussi un nombre), on obtient 6-1=5. C'est le temps qu'il faut pour afficher les heures et les minutes avec des délimiteurs, la position suivante est la deuxième position et elle est égale à 5+1=6. Un peu déroutant mais j'écrirai ce qui suit hh:mm:ss et calculez les coordonnées en commençant par 0. C'est ainsi que les coordonnées sont calculées sur les indicateurs de la famille 16xx. Dans ces conditions, l'horloge sera affichée dans le coin supérieur gauche, vous pourrez modifier l'emplacement à votre guise, vous pourrez même saisir une variable et, en la sélectionnant, sélectionner la position d'affichage dont vous avez besoin. Bon, écrivons ces lignes :
lcd.setCursor(6, 0); // définit le curseur sur le 6ème caractère de la 0ème ligne (le comptage des lignes commence à 0)
Le programme ressemblera à ceci :
int h, m, s ; // variables pour les heures, minutes, secondes
booléen z ; // variable pour afficher le point
// connecte la bibliothèque d'indicateurs
#inclure
// initialise la bibliothèque avec les numéros des broches de l'interface
Écran LCD LiquidCrystal (12, 11, 5, 4, 3, 2);
// Les variables changeront :
int ledState = FAIBLE ; // ledState utilisé pour définir la LED
non signé long précédentMillis = 0; // stockera la dernière fois que la LED a été mise à jour
intervalle long const = 1000 ; // intervalle auquel clignoter (millisecondes)
vide installation
() {
lcd.begin(16, 2);
vide boucle
()
{
Courant long non signéMillis = millis();
if (currentMillis - previousMillis >= intervalle) (
// enregistre la dernière fois que vous avez clignoté la LED
précédentMillis = courantMillis;
s++; // en ajoute un, équivalent à écrire s=s+1;
// section de comptage des secondes
if (s>59) // si la valeur de s est supérieure à 59
{
s=0 ; // attribue la valeur 0 à la variable s
m++; // ajoute 1 à la variable m responsable des minutes
}
// section de comptage des minutes
if (m>59) // si la valeur de m est supérieure à 59
{
m = 0 ; // attribue la valeur 0 à la variable m
h++; // ajoute 1 à la variable h responsable de l'horloge
}
// section de comptage des heures
if (h>23) // si la valeur de h est supérieure à 23
{
h = 0 ; // attribue la valeur 0 à la variable h
}
// section de sortie d'informations
lcd.setCursor(6, 0);
lcd.print(s); // affiche les données de la variable s
Remplissez le croquis et... les secondes ont commencé à apparaître !!! Faites juste attention, en comptant de 0 à 59, tout va bien, mais dès que la minute suivante commence, des dizaines de secondes commencent à changer au lieu d'unités de secondes, c'est-à-dire L'heure ne s'affiche pas correctement. Voyons cela. Nous avons donné au programme une position stricte 6,0 , et il affiche les données exactement à cette position sans écraser ce qui se trouve après cette position. Quittez 2. Appliquez lcd.clear ou décrivez correctement l'affichage, d'autant plus qu'avec la première option, il sera assez difficile de s'habituer aux chiffres sautants des secondes (plus tard les minutes et les heures). Écrivons un gestionnaire d'affichage correct. Quelles seront les conditions de ce traitement ? Pensons-y. Si les secondes sont inférieures à 10, alors on écrit leur valeur en 7ème position (6+1=7) et en 6ème position on écrit 0, si supérieure ou égale à 10, on écrit en 6ème position. C'est assez simple. La condition ressemblera à ceci :
si (s<10) //если секунд меньше 10
{
lcd.print(0); //imprimer 0
}
autre
{
}
Collez plutôt ce code
lcd.setCursor(6, 0); // définit le curseur sur le 7ème caractère de la 0ème ligne (le comptage des lignes commence à 0)
lcd.print(s); // affiche les données de la variable s
et nous sommes contents du résultat déjà obtenu ! Tout s'affiche correctement ! De plus, un séparateur « : » est apparu avant les secondes ! De la même manière, nous écrivons un gestionnaire pour les minutes et les heures avec les coordonnées du curseur correspondantes. Cela pourrait ressembler à ceci pendant quelques minutes :
Si (m<10)
{
lcd.setCursor(3, 0);
lcd.print(0);
lcd.setCursor(4, 0);
lcd.print(m);
}
autre
{
lcd.setCursor(3, 0);
lcd.print(m);
}
et ainsi de suite pendant des heures :
Si (h<10)
{
lcd.setCursor(0, 0);
lcd.print(0);
lcd.setCursor(1, 0);
lcd.print(h);
}
autre
{
lcd.setCursor(0, 0);
lcd.print(h);
}
Notre programme prendra la forme suivante :
int h, m, s ; // variables pour les heures, minutes, secondes
booléen z ; // variable pour afficher le point
// connecte la bibliothèque d'indicateurs
#inclure
// initialise la bibliothèque avec les numéros des broches de l'interface
Écran LCD LiquidCrystal (12, 11, 5, 4, 3, 2);
// Les variables changeront :
int ledState = FAIBLE ; // ledState utilisé pour définir la LED
non signé long précédentMillis = 0; // stockera la dernière fois que la LED a été mise à jour
intervalle long const = 1000 ; // intervalle auquel clignoter (millisecondes)
vide installation
() {
lcd.begin(16, 2);
vide boucle
()
{
Courant long non signéMillis = millis();
if (currentMillis - previousMillis >= intervalle) (
// enregistre la dernière fois que vous avez clignoté la LED
précédentMillis = courantMillis;
s++; // en ajoute un, équivalent à écrire s=s+1;
// section de comptage des secondes
if (s>59) // si la valeur de s est supérieure à 59
{
s=0 ; // attribue la valeur 0 à la variable s
m++; // ajoute 1 à la variable m responsable des minutes
}
// section de comptage des minutes
if (m>59) // si la valeur de m est supérieure à 59
{
m = 0 ; // attribue la valeur 0 à la variable m
h++; // ajoute 1 à la variable h responsable de l'horloge
}
// section de comptage des heures
if (h>23) // si la valeur de h est supérieure à 23
{
h = 0 ; // attribue la valeur 0 à la variable h
}
// section de sortie d'informations
// secondes de sortie
si (s<10) //если секунд меньше 10
{
lcd.setCursor(6, 0); // curseur en position 6, ligne 0
lcd.print(0); //imprimer 0
lcd.setCursor(7, 0); //curseur en position 7 de la ligne 0
lcd.print(s); // affiche la valeur de la variable s
}
autre
{
lcd.setCursor(6, 0); //sinon le curseur est en 6ème position de la 0ème ligne
lcd.print(s); // affiche la valeur de la variable s
}
lcd.setCursor(5, 0); // curseur en position 5, ligne 0
lcd.print(':'); // affiche le séparateur entre les secondes et les minutes
// minutes de sortie
si (m<10)
{
lcd.setCursor(3, 0);
lcd.print(0);
lcd.setCursor(4, 0);
lcd.print(m);
}
autre
{
lcd.setCursor(3, 0);
lcd.print(m);
}
lcd.setCursor(2, 0); // curseur en position 2 de la ligne 0
lcd.print(':'); // affiche le séparateur entre les minutes et les heures
// horloge de sortie
si (h<10)
{
lcd.setCursor(0, 0);
lcd.print(0);
lcd.setCursor(1, 0);
lcd.print(h);
}
autre
{
lcd.setCursor(0, 0);
lcd.print(h);
}
L’intégralité du code tient dans un peu plus de 3 kilo-octets ! La plupart d'entre eux ont été consommés par la bibliothèque pour l'indicateur LCD. Précisons d'emblée que ce code n'est que le corps du programme, il faut également ajouter une fonction de réglage de l'heure. De plus, vous pouvez ajouter une photorésistance et éclaircir le rétroéclairage de l'écran. Vous pouvez ajouter une fonction d'entrée d'alarme et travailler avec le son. Vous pouvez également afficher la température ambiante, la date, etc... De manière générale, cet indicateur doté des capteurs appropriés peut faire de cette montre un appareil unique ! Le seul inconvénient de cet appareil est qu'en cas de panne de courant, vous devrez régler à nouveau l'horloge. Par conséquent, dans un avenir proche, je décrirai comment travailler avec le module RTC. Lorsque vous travaillez avec lui, même en cas de coupure de courant, lorsque la tension est appliquée, l'horloge fonctionnera comme si de rien n'était. Pour une version moins chère de l'horloge, vous pouvez utiliser arduino pro mini, c'est le même contrôleur qui n'a pas de connecteur USB mais coûte plusieurs fois moins cher et est de très petite taille. Vous pouvez également utiliser l'arduino nano, le même pro mais avec un connecteur USB. Jusqu'au prochain cours. Merci à tous pour votre attention.
PS*. À propos, la procédure d'affichage des valeurs peut être écrite comme une fonction distincte et lui transmettre les valeurs nécessaires. Essayez ceci et comparez la quantité de mémoire occupée. Visez toujours le plus petit volume possible.