Simuler un Lever de Soleil, avec une Carte Arduino

Simuler un Lever de Soleil, avec une Carte Arduino

Dans cet article je vais m’intéresser à un projet qui mélange électronique et programmation, puisqu’il est basé sur la carte Arduino. Il s’agit d’un réveil assez particulier car il ne fonctionne pas avec du son mais avec de la lumière. Cela peut sembler étonnant, mais en réalité après l’avoir testé j’ai été impressionnée par son efficacité. Avant tout, j’aimerais remercier le blog “projet-du-dimanche”, car j’utilise les composants qu’ils ont proposés dans leur propre simulateur d’aube. Afin de remplir sa fonction, le réveil possède des led qui s’allument progressivement à une heure précise, qu’on peut définir via bluetooth avec une application mobile (qui fait elle aussi partie du projet). Je vais vous expliquer comment le réaliser vous-même. Alors sans plus attendre, commençons !

Cahier des charges

Tout d’abord, commençons par cerner le projet dans son ensemble. L’objectif est de créer un réveil lumineux avec connexion bluetooth ainsi qu’une application mobile pour communiquer via cette connexion. La lumière doit être assez puissante pour éclairer entièrement une chambre et réveiller son utilisateur (et ça, faut quand même pas l’oublier :). Ensuite, le réveil doit pouvoir compter le temps ! cela peut paraître évident mais on verra plus tard qu’en réalité, c’est plus compliqué. Enfin, l’application mobile permet de définir l’heure actuelle et l’heure d’enclenchement et du réveil. Cependant, pour avoir un effet de “lever de soleil”, il ne faut pas 1 heure d’enclenchement, mais 3 : la première désigne le moment où le réveil va commencer à s’allumer. A partir de là, l’intensité lumineuse augmente proportionnellement au temps, jusqu’à la 2ème heure définie à partir de laquelle l’intensité lumineuse est maximale. Enfin, la 3ème heure qui indique le moment où le réveil s’éteint. N.B: Par “heure”, je veux dire “moment” : on définit évidemment l’heure et les minutes

Composants

A partir des objectifs que nous avons fixés, il nous faut choisir des composants. Tout d’abord, le rôle de la lampe est rempli par un set de 64 led RGB sur une grille 8x8. On peut en trouver facilement sur des sites de vente, spécialisés ou non. Le tout est de choisir des LED assez puissantes : ici chacune peut consommer jusqu’à 06 mA pour 5V. Ensuite, il nous faut un émetteur/récepteur bluetooth, et j’ai choisi un module HC-05 car il est compatible Arduino. En parlant d’Arduino, j’ai choisi le modèle Uno pour contrôler le tout, mais globalement n’importe quel microcontrôleur peut fonctionner ici. Pour que le réveil compte le temps, le contrôleur seul ne suffit pas : en effet le temps est réinitialisé quand on le met hors tension et même quand il est allumé, on n’est pas à l’abris d’un décalage progressif. C’est pour cela que je vous conseille de vous procurer un module Temps Réel qui est plus fiable grâce à son cristal de quartz et sa pile. Enfin, pour alimenter notre réveil, si vous faites le calcul de l’intensité nécessaire à l’alimentation des LED, vous obtiendrez plus de 3,8 A (ce qui est d’ailleurs assez conséquent), il nous faut un transformateur délivrant du 5v pour environ 4A.

Assemblage

Pour l’assemblage, tout d’abord connectez le pin de contrôle de l’écran à un des pins PWM de l’Arduino, ici j’ai choisi le 6. Ensuite, connectez les pins SDA et SCL de l’arduino au module RTC, ici pas d’erreur possible car ils ont le même nom sur les deux cartes. Puis connectez les pins RXD et TXD du module bluetooth à deux autres pin PWM, en l’occurrence les 10 et 11. Faites attention à ne pas le brancher lorsque vous faites des transferts via USB sur la carte, car elle ne peut pas gérer l’ordinateur et le module en même temps. Connectez les masses à chaque composant, puis la borne 5V au module bluetooth et 3.3V au module RTC. L’écran de LED sera alimenté directement par le transfo. Enfin, vous pouvez utiliser des ports de type Jack pour faciliter le branchement/débranchement. Faites seulement attention à ne pas alimenter l’Arduino en USB et en Jack en même temps pour ne pas la surcharger. Pour ce qui est du support, le mien n’est pas terminé car je me laisse la possibilité de rajouter des éléments. Il est constitué de 2 rectangles de bois compacté, et d’une feuille de calque sur les LED pour une meilleure diffusion lumineuse. Comme vous pouvez le constater, il n’y a rien de bien compliqué pour ce qui est du câblage. A présent, passons au plus compliqué : la programmation.

Temps

Pour enregistrer le temps j’ai créé 6 variables : année, mois, jour, heure, minute, seconde. Ce sont tous des unsigned int 8 bits, sauf l’année qui est en 16 bits. Ces informations sont données dans le constructeur d’un objet DateTime qui stocke l’heure actuelle tout au long du programme. Les heures et minutes de démarrage, intensité maximale et d’arrêt sont chacune stockées dans une paire de unsigned int 8 bits, une pour l’heure et l’autre pour la minute. Le module RTC est représenté par un objet du type RTC_DS1307 qui nécessite les bibliothèques Wire et RTClib. Après l’avoir initialisé en liaison I2C, on récupère l’heure toutes les secondes, ce qui nous permettra de savoir quand allumer la matrice.

Lumière

Maintenant passons à la matrice de led. Il vous faut définir la couleur correspondant à l’intensité maximale de lumière, personnellement j’ai choisi R=100, G=100 et B = 40, puis importer la bibliothèque Adafruit_NeoPixel (qui fonctionne avec la plupart des matrices de pixels, même ceux qui ne sont pas vendus par Adafruit). Pour l’allumage, on transforme l’heure actuelle en nombre de minutes après minuit, pour obtenir un nombre qu’on peut comparer aux heures définies d’allumage, elles aussi transformées. Si on est dans la période d’augmentation de la lumière, on calcule le ratio d’intensité (0 étant une intensité nulle et 1 une intensité maximale). En multipliant ce ratio par les valeurs RGB de la couleur correspondant à l’intensité maximale, on obtient la couleur actuelle. Ensuite, la couleur de chaque pixel est définie. Une fois que le ratio atteint 1, la couleur des pixels correspond à la couleur maximale, jusqu’à l’heure d’arrêt où ils sont éteints.

Bluetooth

Dernier point de programmation sur la carte, la liaison bluetooth. Le module sera représenté par un objet SoftwareSerial, qui nécessite la bibliothèque du même nom. On l’initialise avec les pin RX et TX qu’on a branchés précédemment. L’application va donc envoyer un message de ce type : *2020,4,10,14,36,59,7,10,7,20,7,70. D’abord, le message commence toujours par une étoile “*” qui indique que le message reçu est une commande pour l’arduino. Après l’avoir retirée, on peut commencer à lire le message. De gauche à droite on a l’année, le mois, jour, heure, minute, seconde, l’heure et la minute d’allumage, l’heure et minute d’intensité maximale et enfin l’heure et minute d’arrêt, tous séparés par une virgule. Je ne vais pas m’attarder là dessus, mais grâce à une fonction qui navigue dans la chaîne de caractères, on peut enregistrer chacune de ces valeurs. Mais pas d’inquiétude, le code est disponible au dépôt Github.

Application mobile

Concernant l’application mobile, il n’y a pas de langage particulier. Tant que vous pouvez faire des communications par Bluetooth, tout peut fonctionner : Java, Swift, Flutter, React Native. Il suffit de se connecter via bluetooth au module HC-05 et envoyer la commande (sans oublier l’étoile “*” au début). J’ai choisi de la créer avec Flutter, un framework open source et multiplateforme basé sur le langage Dart permettnt de créer des apps sur Android comme iOS. Le code est open source : dépot Github. Malheureusement, étant donné des politiques assez fermées de Apple, impossible d’établir une communication Serial en bluetooth : l’application ne peut donc fonctionner que sur Android. Si vous tenez à résoudre ce problème, je vous conseille de vous intéresser à des modèles similaires au HC-05 mais compatibles Bluetooth Low Energy.

Améliorations possibles

Et voilà, le projet est fonctionnel, on a atteint l’objectif qui était de fabriquer un réveil lumineux, contrôlable via bluetooth. Si le simulateur d’aube fonctionne très bien, il est loin d’être terminé ! En effet il est possible de lui apporter de nombreuses améliorations, par exemple la possibilité de personnaliser la couleur, développer la compatibilité avec iOS, améliorer le boîtier, ou même afficher l’heure sur la matrice de LED. Les capacités de l’Arduino et des modules qu’on utilise dans ce projet sont énormes, et avec un peu d’imagination vous pouvez fabriquer beaucoup plus qu’un simple réveil lumineux.

C’est ici que se termine cet article, j’espère qu’elle vous a plu. Et si vous avez créé votre propre simulateur d’aube, ou bien un projet similaire, n’hésitez pas à me contacter, ça m’intéresse !

Dans la même catégorie : 💡 Projets & réalisations

Tous les projets
Star Wars : La quête du Jedi

La quête du Jedi

Premier jeu vidéo

Projet réalisé en quatrième dans le cadre d'un EPI techno/maths

Le Blog de tidann : un blog écrit en HTML, CSS, Js, Php et MySQL

Blog de tidann

Ancien site personnel

Un projet complet avec les technologies front et back end du web

Phos - un jeu d'arcade minimaliste

Phos

4,9 ⭐️ iOS ; 4,8 ⭐️ Android

Jeu mobile d'arcade : relevez les Défis, obtenez les Avatars et atteignez le meilleur score !