Publicité

Les humains sont naturellement programmés pour se réveiller avec le lever du soleil; malheureusement, la vie moderne est dictée par une horloge arbitraire, nous obligeant souvent à nous réveiller en l'absence de lumière naturelle. Aujourd'hui, nous allons fabriquer un réveil au lever du soleil, qui vous réveillera doucement et lentement sans avoir recours à une machine à bruit offensante.

Si faire un réveil au lever du soleil est un peu trop pour vous, consultez ces iPhone et Applications Android Utilisez ces applications pour vous aider à mieux dormir [Android et iOS]Après une journée mouvementée, la meilleure chose que vous puissiez faire est de dormir suffisamment. Il y a toujours de nouvelles études qui montrent à quel point le sommeil est important pour une personne, s'améliorant ... Lire la suite qui détectent quand il est préférable de vous réveiller par les mouvements du corps Une application peut-elle vraiment vous aider à mieux dormir?J'ai toujours été un peu un expérimentateur du sommeil, ayant pendant une grande partie de ma vie tenu un journal de rêve méticuleux et étudié autant que possible sur le sommeil pendant le processus. Il y a un...

Lire la suite , en vous assurant que vous n'êtes pas éloigné de ce rêve génial, mais au lieu de cela, réveillez-vous en vous sentant brillant et rafraîchi - ils fonctionnent vraiment.

Grandes lignes du projet

La partie principale du projet sera une bande de LED de 5 mètres disposée autour du lit. Nous les alimenterons avec une alimentation externe de 12 volts, commutée à l'aide de certains transistors MOSFET N. La configuration de cette partie sera identique à la système d'éclairage dynamique Créez votre propre éclairage ambiant dynamique pour un centre multimédiaSi vous regardez beaucoup de films sur votre PC ou votre centre multimédia, je suis sûr que vous avez fait face au dilemme de l'éclairage; éteignez-vous complètement toutes les lumières? Les gardez-vous à fond? Ou... Lire la suite J'ai construit avant.

Le timing sera un problème - puisqu'il s'agit d'un prototype, je vais configurer l'Arduino pour qu'il compte à rebours à chaque fois qu'il est réinitialisé. En théorie, nous ne devrions perdre qu'une ou deux secondes par jour, mais idéalement, nous inclurions une puce «horloge en temps réel» pour le faire de manière plus fiable. L'alarme de lever de soleil commencera 30 minutes avant l'heure de réveil et augmentera lentement le niveau de sortie jusqu'à ce qu'il atteigne une luminosité de 100% - cela devrait être suffisant pour nous réveiller, bien que ce soit une bonne idée de continuer à utiliser votre réveil normal jusqu'à ce que votre corps soit habitué à il.

Je vais également incorporer une veilleuse dans ce projet, qui détecte les mouvements et active un niveau bas discret la lumière sous le lit avec un délai de 3 minutes, distincte des lumières LED car celles-ci provoqueraient le réveil de ma femme et de moi vers le haut. L’éclairage sous le lit sera un bloc secteur commercial, donc je vais pirater un relais à l’intérieur d’une prise pour allumer et éteindre cela. Si vous n'êtes pas à l'aise de travailler avec une alimentation secteur 110-240 V CA en aucune circonstance (et c'est généralement une bonne règle à avoir), puis câblez un émetteur sans fil 433 MHz avec des prises de commutation, comme indiqué sur le Projet domotique Raspberry Pi Arduino Guide domotique avec Raspberry Pi et ArduinoLe marché de la domotique est inondé de systèmes grand public coûteux, incompatibles entre eux et coûteux à installer. Si vous avez un Raspberry Pi et un Arduino, vous pouvez essentiellement réaliser la même chose à ... Lire la suite .

Liste des pièces et schéma

  • Arduino
  • Ensemble de bandes lumineuses LED RGB
  • Alimentation 12 volts
  • 3 x transistors MOSFET N (j'utilise le type STP16NF06FP)
  • Relais et prise de courant, ou prises contrôlées sans fil et émetteur approprié
  • Votre choix de veilleuse (alimentation secteur régulière avec prise est très bien)
  • Capteur de mouvement PIR (HC-SR501) ou sonar SC-04 (moins efficace)
  • Capteur de lumière
  • Code de projet - mais lisez la suite pour vous assurer de comprendre comment tout personnaliser.

Voici le schéma complet.

sunrise-alarm-circuit

Câblage d'un relais

Remarque: Ignorez cette section si vous souhaitez également utiliser les lumières RVB comme veilleuse - c'est spécifiquement pour allumer une lumière séparée.

Pour commuter l'alimentation secteur, votre relais devra être évalué pour la tension - 110V ou 240V AC en fonction de l'endroit où vous vivez - et plus que l'ampérage total que vous changerez. Celui que j'ai utilisé dans ce pack de capteurs (Avertissement: c'est ma boutique) est 250VAC / 10A, nous devons donc être en sécurité. Les relais ont un com port, généralement au centre, qui doit être connecté au fil sous tension entrant dans la prise; puis connectez le terminal de prise en direct à la NON (normalement ouvert). Je ne devrais pas avoir à vous dire de ne pas faire cela alors qu'il est branché sur une prise, ou vous allez mourir. Si vous avez peur de jouer avec le secteur, utilisez plutôt des prises commutées sans fil.

câblage de relais

Les câbles de terre et de neutre doivent aller directement à la prise et ne toucheront pas le relais. Il se peut que vous n'ayez pas de ligne de terre aux États-Unis. Il est de votre responsabilité de connaître le codage couleur des fils dans votre région - si vous ne pouviez pas autrement brancher une prise ordinaire dans votre maison ou recâbler une prise, n'essayez pas d'intégrer un relais dans une seule!

Pour tester, câblez la broche du signal de relais à 12, puis exécutez un programme de clignotement simple modifié pour fonctionner sur la broche 12, pas 13 comme par défaut. Votre prise doit s'allumer et s'éteindre toutes les quelques secondes. La raison pour laquelle je n'utilise pas la broche 13 est que pendant le processus de téléchargement, la LED intégrée se déclenche rapidement pour indiquer une activité série, ce qui entraînerait l'activation du relais également.

Bien synchroniser

Les fonctions de synchronisation et d'horloge sont difficiles sans accès à une connexion réseau ou dédiée Horloge en temps réel (Ceux-ci incluent leurs propres batteries pour garder l'horloge en marche même lorsque l'Arduino principal n'a pas de puissance) Pour garder les coûts bas, je vais tricher. Je vais coder en dur une heure de début pour que l'Arduino commence son compte à rebours; les horaires seront donc relatifs à cette heure de début. Toutes les 24 heures, l'horloge se réinitialise. Le code de fonction d'horloge ci-dessous garantit que les variables globales currentMillis et currentMinutes sont corrects chaque jour. L'Arduino ne devrait pas perdre plus de quelques secondes tous les 45 jours; Cependant, ce style de synchronisation codé en dur est assez limité en ce sens qu'une coupure de courant ou une réinitialisation accidentelle cassera tout, c'est donc certainement un domaine qui pourrait être amélioré. Si la synchronisation ne se désynchronise pas, réinitialisez simplement l'Arduino à l'heure de début que vous avez définie.

Le code doit être facile à comprendre.

void clock () {if (millis ()> = previousMillis + 86400000) {// une journée complète s'est écoulée, réinitialiser l'horloge; previousMillis + = 86400000; } currentMillis = millis () - previousMillis; // ceci maintient nos currentMillis les mêmes chaque jour currentMinutes = (currentMillis / 1000) / 60; }

Fonction veilleuse

J'ai séparé les boucles principales en fonctions distinctes afin qu'il soit plus facile à lire et à supprimer ou à ajuster. le veilleuse() La fonction ne fonctionne qu'entre les heures de réinitialisation de l'Arduino (je suppose que vous le ferez probablement le soir ou vers l'heure du coucher, lorsqu'il fait sombre) et jusqu'à ce que l'alarme de lever de soleil commence. J'avais d'abord essayé d'utiliser une résistance dépendante de la lumière, mais elles ne sont pas très sensibles à la lumière bleue (qui se trouve être la couleur que j'utilise pour la veilleuse) et difficiles à calibrer correctement. De toute façon, utiliser l'horloge a plus de sens. Nous utiliserons le global currentMinutes variable, qui est réinitialisée chaque jour.

Le capteur PIR peut être un peu excentrique si vous n'en avez jamais utilisé auparavant, bien que le câbler ne soit pas difficile - vous trouverez VCC, GND, et EN DEHORS clairement étiqueté au dos. Il y a aussi deux résistances variables; celui étiqueté RX détermine la portée (jusqu'à environ 7 m) et un autre étiqueté TX détermine le retard. Le retard est de 5 secondes à son réglage le plus bas (complètement dans le sens inverse des aiguilles d'une montre), et signifie que tout mouvement momentané déclenchera au moins 5 secondes de l'état "marche" du capteur. Cependant, il détermine également le délai entre les états actifs - donc si 5 secondes s'écoulent et qu'aucun mouvement n'est détecté, le capteur enverra un signal faible pendant au moins 5 secondes même s'il y a du mouvement pendant période. Si le retard est vraiment élevé à environ 30 secondes, il peut sembler que le capteur est cassé.

pir-sensor

Si vous dormez seul et que cela ne vous dérange pas d'utiliser les mêmes bandes lumineuses RVB pour l'alarme de lever du soleil et la veilleuse, vous devriez pouvoir ajuster le code assez facilement.

void nightlight () {// Ne fonctionne qu'entre les heures de réinitialisation -> lever de soleil. if (currentMinutes 

Sunrise Alarm

Pour plus de simplicité, j'utiliserai la valeur de couleur RVB 255,255,0 pour un lever de soleil jaune foncé - de cette façon, l'incrément sur les deux canaux de couleur sera le même. Si vous trouvez que cela vous réveille trop tôt, envisagez de commencer par un rouge foncé et de passer au jaune ou au blanc. La montée en puissance que j'ai utilisée est juste linéaire - vous voudrez peut-être étudier l'utilisation d'une courbe plus naturelle pour les valeurs de luminosité.

La fonction est simple - elle détermine combien la lumière doit être incrémentée par seconde, de sorte qu’elle soit à pleine luminosité après une période de 30 minutes; multiplie ensuite par combien de secondes il est actuellement au lever du soleil. S'il est déjà à pleine luminosité, il reste allumé pendant 10 minutes supplémentaires pour vous assurer que vous êtes en place (et si vous n'êtes pas encore en place, vous devriez probablement avoir une alarme de sauvegarde en place).

void sunrisealarm () {// chaque seconde pendant la période de 30 minutes devrait augmenter la valeur de la couleur de: float increment = (float) 255 / (30 * 60); // rouge 255, vert 255 nous donne une pleine luminosité jaune si (currentMinutes> = minutesUntilSunrise) {// le lever du soleil commence! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * increment; Serial.print ("Valeur actuelle pour le lever du soleil:"); Serial.println (currentVal); // pendant la montée en puissance, écrire la valeur actuelle des minutes X incrément de luminosité if (currentVal <255) {analogWrite (RED, currentVal); analogWrite (GREEN, currentVal); } else if (currentMinutes - minutesUntilSunrise <40) {// une fois que nous sommes en pleine luminosité, garder les lumières allumées pendant 10 minutes de plus analogWrite (RED, 255); analogWrite (VERT, 255); } else {// après cela, nous les renvoyons à l'état off analogWrite (RED, 0); analogWrite (VERT, 0); } } }

Pièges et améliorations futures

J'utilise cela depuis quelques semaines maintenant et ça aide vraiment à se réveiller plus frais et à une heure décente; la veilleuse fonctionne très bien aussi. Ce n'est pas parfait, alors voici quelques éléments qui nécessitent des travaux et des leçons apprises pendant la construction.

sunrise-alarm

Lors de la réalisation de ce projet, j'ai rencontré de nombreux problèmes de traitement des grands nombres, donc si vous prévoyez de modifier le code, gardez cela à l'esprit. En langage C, le la saisie de vos variables est très importante - un nombre n'est pas toujours juste un nombre. Par exemple, non signé long les variables doivent être utilisées pour stocker de très grands nombres comme nous traitons lorsque nous parlons de millisecondes, mais même un nombre aussi petit que 60 000 ne peut pas être stocké comme un entier régulier (un entier non signé aurait été acceptable pour un maximum de 68 000). Le fait est, lire sur vos types de variables lorsque vous utilisez de grands nombres, et si vous trouvez des bugs bizarres, c'est probablement parce qu'une de vos variables n'a pas assez de bits!

J'ai également trouvé un problème avec des fuites de tension de très faible luminosité - conduisant à la plus petite quantité de lumière émise même lorsqu'un digitalWrite (RED, 0) le signal est émis - je ne pense pas que ce soit un problème matériel avec les bandes car elles fonctionnent bien avec les contrôleurs officiels. Si quelqu'un peut résoudre ce problème, illustré ci-dessous, je serais très reconnaissant. J'ai essayé de retirer les résistances et de limiter la tension de sortie des broches Arduino. Je devrais peut-être ajouter un simple circuit de commutation de puissance pour fournir la tension à la bande LED uniquement lorsque cela est réellement nécessaire; ou il pourrait s'agir de MOSFET défectueux.

fuite de lumière

Pour les travaux futurs, j'espère ajouter un récepteur IR et dupliquer certaines des fonctionnalités du contrôleur d'origine - à moins la possibilité de changer les couleurs comme une lumière à usage général, car en ce moment, ce projet transforme la bande en une nuit dédiée lumière. Je peux même ajouter une fonction de temporisation automatique de 30 minutes.

Avez-vous essayé cela, apporté des améliorations ou avez-vous d'autres idées? Faites-moi savoir dans les commentaires!

James est titulaire d'un BSc en intelligence artificielle et est certifié CompTIA A + et Network +. Il est le développeur principal de MakeUseOf et passe son temps libre à jouer au paintball VR et aux jeux de société. Il construit des PC depuis qu'il est enfant.