La dernière génération de LED RVB adressables ouvre tout un monde de possibilités pour les projets. Ce projet vous guidera dans la création d'une lumière d'ambiance contrôlée par Arduino qui vous permettra de changer de couleur, de luminosité et même de passer à un effet de balayage des couleurs rappelant la lampe à lave bien-aimée du passé..
Dans ce tutoriel, je vais vous montrer comment construire une lampe à LED à trois niveaux, utiliser les interruptions de changement de broche sur la plate-forme Arduino et stocker les valeurs persistantes hors tension dans la mémoire de l'Arduino..
Téléchargez les bibliothèques Aduino suivantes, démarrez l’IDE Arduino et installez-les avec le Esquisse> Importer une bibliothèque> Ajouter une bibliothèque menu.
Avec cette méthode, vous n'avez plus besoin de rechercher manuellement le Bibliothèque répertoire et décompressez. L'IDE se chargera de cette étape pour vous. Après avoir importé les bibliothèques, quittez l'IDE Arduino..
Les instructions ci-dessous vous montreront comment assembler la lampe et le circuit sur le circuit imprimé et comment programmer l'Arduino. La fonction de la lampe est assez simple: chaque bouton déclenchera une interruption dans l’Arduino qui, à son tour, déclenchera un changement de comportement..
Les boutons de droite à gauche (parce que je suis difficile) sont les suivants: bascule marche / arrêt, mode de préréglage des couleurs, niveau de préréglage de la luminosité, mode effet. Lorsque la lampe est éteinte, le voyant sonne et les paramètres actuels sont enregistrés dans la mémoire permanente. Lorsque la lampe s'allume, elle lit les réglages et est prête à redémarrer là où vous l'avez laissée..
Vous utiliserez les trois anneaux de LED pour construire une tour de LED qui constitue la partie lampe de la lampe..
A la fin de ce processus, vérifiez à nouveau que le fil de terre passe du bas au sommet de la tour à anneau à travers tous les trous nommés au sol et que le courant est identique pour les trous nommés à la puissance.
Il y a un petit écart dans la convention de nommage de la sérigraphie sur les anneaux, mais vous voyez l'idée. Vérifiez que le fil de sortie de données de chaque anneau entre dans le trou de données situé dans l'anneau suivant. Cela créera une bande unique de lumières adressables en ce qui concerne la bibliothèque Neopixel.
Aussi difficile que j'ai essayé de garder les fils même, j'ai découvert que je devais les plier un peu après la soudure pour niveler les anneaux sur la tour. Vous devrez peut-être faire la même chose. Cela devrait ressembler à l'image suivante.
Utilisez l'image du diagramme ci-dessous pour câbler les circuits. Chacun des composants doit s'intégrer facilement dans le tableau et vous souhaiterez peut-être couper sur mesure le fil de raccordement de calibre 22 pour l'acheminement sur la planche à pain pour un ajustement plus fini. Quelques petites choses à payer sur le circuit.
Une fois la carte assemblée, placez la tour DEL sur la carte de façon à ce que le fil de terre se connecte à un bus de terre, le fil d’alimentation au bus d’alimentation non régulé (le bus d’alimentation rouge situé en haut dans le diagramme) et le fil de signal au D10 épingler sur l’Arduino. Enfin, appliquez quatre petits pieds en caoutchouc au bas de la planche à pain pour l'empêcher de glisser.
Lampe assembléeLe matériel est maintenant construit et l'étape suivante consiste à le programmer. Téléchargez le zip fourni avec ce tutoriel ou consultez le référentiel github pour la lumière..
RGB Mood light V1.0: Prêt Lecture de l'EEPROM: État: 1 Préréglage clair: 1 Préréglage couleur: 1 Effet Niveau: 9 État: 1 La configuration est terminée. En mode éteint. slewdelay = 20 climbdelay = 200 In Effet d'initialisation de fonction avec préréglage: 1
L'Arduino dispose d'une certaine quantité d'EEPROM sur laquelle il est possible d'écrire et de lire, ce qui permet de conserver les valeurs sur toute alimentation hors tension de l'Arduino. Le programme de lampe comprend le fichier EEPROM.h qui expose les fonctions EEPROM.read () et EEPROM.write () qui lisent et écrivent des octets dans la mémoire EEPROM.
En tant que programmeur, vous êtes responsable de savoir quelle adresse lire et écrire et le code inclus le fait en utilisant #définir pour spécifier l'adresse qu'un réglage spécifique tiendra en écriture et en lecture.
#define STATEADDR 1 #define BRIGHTADDR 2 #define COLORADDR 3 #define EFFECTADDR 4
// lit les variables de la mémoire EPROM et configure l'état du système = EEPROM.read (STATEADDR); currentBrightLevel = EEPROM.read (BRIGHTADDR); currentColorPreset = EEPROM.read (COLORADDR); currentEffectLevel = EEPROM.read (EFFECTADDR);
La mémoire de l'EEPROM a une limite au nombre de fois qu'il est possible de l'écrire avant de se dégrader, mais ce nombre est de l'ordre de 10 000. Il n'y a donc pas de quoi s'inquiéter de l'usure de votre EEPROM avec cette application au cours des prochaines décennies. Notez simplement que ce n’est pas une bonne idée d’écrire dans l’EEPROM environ toutes les secondes dans une application..
Le programme utilise des interruptions pour détecter quand les boutons sont enfoncés au lieu d’interroger lorsque la broche est haute. Dans le code suivant de la installer() routage, la fonction fobHandler () est assigné pour être appelé quand on appuie sur l'un des quatre boutons.
// configure l'interruption sur chacune des broches PCintPort :: attachInterrupt (FOBPINA, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINB, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINC, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPIND, & fobHandler, RISING);
La méthode d'interruption fournit une détection beaucoup plus précise de la pression sur un bouton. L'Arduino n'a que deux interruptions matérielles génériques intégrées, mais il prend également en charge un PinChangeInterrupt sur chaque broche..
La puce Atmel peut détecter les modes de changement, croissant ou décroissant sur chaque broche. Lorsque l'interruption est déclenchée, la fonction spécifiée précédemment dans le programme fobHandler () interrompt le code d'exécution et prend le relais. Lorsque le gestionnaire d'interruption est terminé, l'exécution retourne au programme où elle s'est arrêtée. Pour en savoir plus sur les interruptions de changement d'épingles, voir la page du projet sur le sujet..
Le programme utilise une interruption pour détecter quelle broche a été changée et la fonction fobHandler () définit la variable globale last_interrupted_pin au numéro de la broche qui a changé. La puce est configurée pour détecter un EN HAUSSE changement de tension, ce qui signifie qu'il se déclenchera lorsque le bouton est enfoncé plutôt que lorsqu'il est relâché.
La boucle principale du programme recherche un changement de last_interrupted_pin variable et décide quoi faire. La lourde tâche de savoir quoi faire lorsque le bouton est enfoncé est laissée à la position principale. boucle() parce que l'exécution de certaines fonctions à l'intérieur de la fonction d'interruption peut causer des erreurs, telles que Serial.print (), millis (), retard(), et tout ce qui nécessite l'utilisation supplémentaire d'interruptions.
Dans ce programme, le routage de traitement des interruptions modifie simplement une variable et permet à la boucle principale d'effectuer le travail compliqué pour éviter les erreurs.
Vous venez de construire une nouvelle lampe d'ambiance alimentée par un Arduino. Dans la configuration de base, vous pouvez modifier la couleur, la luminosité et l'effet de la lampe en appuyant sur un bouton..
Je vous ai montré comment enchaîner des unités Neopixel en créant une seule bande adressable. Au cours de cette construction, vous avez également appris à utiliser des interruptions de changement de broche pour lire les modifications matérielles et à stocker des données dans la mémoire permanente de votre Arduino afin de créer des paramètres persistants malgré les pannes de courant..
Si vous souhaitez modifier ce projet au-delà de la nouveauté, cette sculpture lumineuse au fil électro à thème électro-orienté qu’elle est aujourd’hui, vous propose de nombreuses possibilités. Parmi les améliorations que vous pourriez essayer d'inclure, citons l'ajout de préréglages de couleurs, un effet différent lorsque la lampe est en mode effet ou même une nuance en velum translucide..