Arduino lumière de nuit et projet d`alarme lever du soleil

Les humains sont naturellement programmés pour se réveiller avec la vie moderne malheureusement sunrise- est dictée par une horloge arbitraire, nous obligeant souvent à se réveiller quand il n`y a pas de lumière naturelle. Aujourd`hui, nous allons faire un réveil au lever du soleil, qui doucement et lentement vous réveiller sans avoir recours à une machine à faire du bruit offensif.

Si vous faites un réveil au lever du soleil est un peu trop pour vous, consultez ces iPhone les applications Android qui détectent le meilleur moment pour vous réveiller par les mouvements du corps, assurer que vous n`êtes pas loin de ce tiré rêve impressionnant, mais plutôt, réveiller le sentiment lumineux et rafraîchi - ils fonctionnent vraiment.Utilisez ces applications pour vous aider à mieux dormir [Android & iOS]Utilisez ces applications pour vous aider à mieux dormir [Android & iOS]Après une journée bien remplie, la meilleure chose que vous pouvez faire est d`obtenir une quantité de sommeil bénéfique. Il y a toujours de nouvelles études apparaissent qui montrent à quel point le sommeil est important vraiment une personne, l`amélioration ...Lire la suite

Grandes lignes du projet

La partie principale du projet sera un peu de lumière de bande de LED 5 mètres prévue autour de la chambre. Nous allons les alimenter avec une alimentation externe de 12 volts, des transistors commutées à l`aide de N MOSFET. La configuration de cette partie sera identique à la Système d`éclairage dynamique Je construit avant.

Le chronométrage sera un problème - puisque c`est un prototype, je vais Réglage de l`Arduino compte à rebours de chaque fois qu`il est remis à zéro. En théorie, nous ne devons perdre une seconde ou deux chaque jour, mais idéalement nous inclure une puce « d`horloge en temps réel » pour le faire de façon plus fiable. L`alarme du lever du soleil commencera 30 minutes avant l`heure de réveil et d`augmenter lentement le niveau de sortie jusqu`à ce qu`il soit à 100% de luminosité - cela devrait être suffisant pour nous réveiller, mais il est une bonne idée de continuer à utiliser votre réveil régulière jusqu`à ce que votre corps est habitué.

J`intégrerons également une lumière de nuit dans ce projet, qui détecte le mouvement et active une lumière faible niveau discret sous le lit avec un temps de 3 minutes sur, séparé les lumières LED comme celles causerait ma femme et moi pour se réveiller . L`éclairage sous le lit sera une unité de réseau commercial, donc je vais pirater un relais à l`intérieur d`une prise de courant pour allumer et éteindre que. Si vous n`êtes pas à l`aise avec 110-240V alimentation secteur en aucun cas (et qui est généralement une bonne règle d`avoir), le fil, puis un émetteur sans fil 433 MHz avec des prises de commutation, comme indiqué sur la Raspberry Pi Arduino projet domotique.DOMOTIQUE avec Raspberry Pi et ArduinoDOMOTIQUE avec Raspberry Pi et ArduinoLe marché de la domotique est inondé avec des systèmes de consommation coûteux, incompatibles entre eux et coûteux à installer. Si vous avez un Raspberry Pi et un Arduino, vous pouvez en principe obtenir la même chose ...Lire la suite

Liste des pièces et le schéma

  • Arduino
  • Ensemble de bande LED RGB
  • alimentation de 12 volts
  • 3 x transistors MOSFET N (I Type d`utilisation STP16NF06FP)
  • De relais et de prise de courant, ou douilles à commande sans fil et un émetteur approprié
  • Votre choix de lumière de nuit (secteur alimenté régulièrement avec prise est très bien)
  • Capteur de mouvement PIR (HC-SR501), ou un sonar SC-04 (pas aussi efficace)
  • Capteur de lumière
  • Code du projet - mais lisez-le pour vous assurer que vous comprenez comment tout personnaliser.

Voici le schéma complet.

sunrise-alarme-circuit

Câblage d`un relais

Remarque: Passer cette section si vous souhaitez utiliser les lumières RVB comme une lumière de nuit aussi bien - ce qui est spécifiquement pour la mise sous tension d`un réseau séparé alimenté la lumière.

Pour la commutation de l`alimentation secteur, votre relais devra tension nominale de - 110V ou 240V AC selon l`endroit où vous vivez - et plus que l`ampérage total que vous serez commutation. Celui que je l`ai utilisé de ce pack capteur (Avertissement: c`est ma boutique) est 250VAC / 10A, donc nous devrions être en sécurité. Les relais ont une com port, généralement au centre, qui doit être connecté au fil direct entrant dans le plug puis connecter le terminal direct de courant à la NON (normalement ouvert). Je ne devrais pas vous dire de ne pas faire Wile il est branché sur une prise, ou vous allez mourir. Si vous avez peur de vous embêter avec alimentation secteur, l`utilisation des prises sans fil mis à la place.

relais-câblage

La terre et les câbles neutres doivent aller directement à la prise et ne touchent pas le relais. Vous ne pouvez pas avoir une 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 câbler une autre prise régulière dans votre maison ou recâbler un bouchon, ne pas essayer de l`intégration d`un relais en un seul!

Pour tester, le fil broche de signal de relais à 12, puis exécutez un programme simple de clignotement modifié pour fonctionner sur la broche 12, et non 13 comme cela est par défaut. Votre prise doit allumer et éteindre toutes les quelques secondes. La raison pour laquelle je ne suis pas en utilisant la broche 13 est parce que pendant le processus de téléchargement, les feux LED à bord en succession rapide pour indiquer une activité série, qui provoquerait le relais pour activer aussi.

Video: TRONIK AVENTUR 115 - ARDUINO ALARME VARIABLE SELON LUMIERE

Obtenir timing

fonctions de synchronisation et d`horloge sont difficiles sans avoir accès à une connexion réseau ou dédié Horloge en temps réel (Ceux-ci comprennent leurs propres batteries pour maintenir l`horloge allant même lorsque la principale Arduino n`a pas de pouvoir). Pour réduire les coûts, je vais tricher. Je vais hardcoding un temps de démarrage de l`Arduino pour commencer, il est timings countdown- sera donc par rapport à cette période de démarrage. Toutes les 24 heures, l`horloge réinitialiser. Le code de fonction d`horloge ci-dessous vérifie que les variables globales currentMillis et currentMinutes sont corrects chaque jour. L`Arduino ne doit pas perdre plus de quelques secondes toutes les 45 jours- cependant, ce style codé en dur du timing est assez limité en ce qu`une coupure de courant ou réinitialisation accidentelle casseront tout, donc c`est certainement un domaine qui pourrait être amélioré . Si le calendrier ne se désynchroniser, il suffit de réinitialiser l`Arduino à votre temps défini.

Video: Arduino lever/coucher du soleil avec commande tactile +APP

Le code doit être facile à comprendre.

vide l`horloge(){si(Millis() gt; = previousMillis+86400000){// une journée complète se soit écoulée, réinitialiser le sens des aiguillespreviousMillis +=86400000-}currentMillis = Millis() - previousMillis- // ce qui maintient nos currentMillis même chaque jourcurrentMinutes = (currentMillis/1000)/60-}

Fonction Night Light

J`ai séparés les principales boucles en fonctions distinctes de sorte qu`il est plus facile à lire et à supprimer ou modifier. le veilleuse() fonction fonctionne uniquement entre les heures de lorsque l`Arduino a été remis à zéro (je suppose que vous allez probablement faire cela sur ou autour de l`heure du coucher, quand il fait noir), et jusqu`à ce que l`alarme du lever du soleil doit commencer. J`avais d`abord essayé d`utiliser une résistance dépendant de la lumière, mais ils ne sont pas très sensibles à la lumière bleue (qui se trouve être la couleur que je utilise la lumière de nuit), et difficile à calibrer à droite. Utilisation de l`horloge est plus logique, de toute façon. Nous allons utiliser le monde currentMinutes variable, qui se réinitialiser chaque jour.

Le capteur PIR peut être être un peu bizarre si vous ne l`avez jamais utilisé un avant, mais le câblage vers le haut est pas difficile - vous trouverez CCV, GND, et EN DEHORS clairement marqué sur le dos. Il existe deux résistances variables toi des trop- celui marqué RX détermine gamme (jusqu`à environ 7 m), et un autre TX marqué détermine retard. Le délai est de 5 secondes à son réglage le plus bas (entièrement anti-horaire), et signifie que tout mouvement momentané déclenche au moins 5 secondes d`état « marche » du capteur. Cependant, il détermine également le délai entre les états actifs - donc si 5 secondes et aucun mouvement écoulé est détecté, le capteur envoie un signal basse pendant au moins 5 secondes, même s`il y a du mouvement au cours de cette période. Si vous avez le délai fixé très élevé à environ 30 secondes, il peut sembler le capteur est cassé.

pir-capteur

Si vous êtes dormir seul et ne me dérange pas en utilisant les mêmes lumières de bande RVB pour les deux l`alarme du lever du soleil et de la lumière de nuit, vous devriez être en mesure de régler le code assez facilement.

vide veilleuse(){// Seul le travail entre les heures de remise à zéro -gt; lever du soleil. si(currentMinutes lt; minutesUntilSunrise){si(digitalRead(gâchette) == 1){nightLightTimeOff = Millis()+nightLightTimeOut- // activer ou prolonger le délai jusqu`à éteindre la lumièreEn série.println("activation nightlight")-}}// allumer la lumière si nécessairesi(Millis() lt; nightLightTimeOff){digitalWrite(veilleuse,HAUTE)-}autre{digitalWrite(veilleuse,FAIBLE)-}}

alarme Sunrise

Pour simplifier, je vais utiliser la valeur de couleur RVB 255,255,0 pour un lever de soleil jaune profond - de cette façon l`incrément sur les deux canaux de couleur sera le même. Si vous trouvez qu`il est vous réveiller trop tôt, envisager de commencer par un rouge profond et à la décoloration vers le jaune ou blanc. La montée en puissance que je l`ai utilisé en linéaire tout - vous pouvez étudier en utilisant une courbe plus naturelle pour les valeurs de luminosité.

Video: Robot suiveur de ligne basé sur photo résistance LDR et arduino

La fonction est simple - il fonctionne à quel point la lumière doit être incrémenté de chaque seconde comme il est à pleine luminosité après 30 minutes de multiplie alors que liés à la période par le nombre de secondes mais il est actuellement dans le lever du soleil. Si elle est déjà à pleine luminosité, il reste allumé pendant 10 minutes supplémentaires pour vous assurer que vous êtes vers le haut (et si vous n`êtes toujours pas, vous devriez probablement avoir une alarme de sauvegarde en place).

vide sunrisealarm(){// chaque seconde au cours de la période 30 minite devrait augmenter la valeur de couleur par:flotte incrément = (flotte) 255/(30*60)-// 255 rouge, vert 255 nous donne la pleine luminosité jaune si(currentMinutes gt; = minutesUntilSunrise){// commence le lever du soleil! flotte currentVal = (flotte)((currentMillis/1000) - (minutesUntilSunrise*60)) * incrément-En série.impression("Valeur actuelle pour le lever du soleil:")-En série.println(currentVal)-// rampe lors de la mise, écrire la valeur actuelle de minutes incrément de luminosité Xsi(currentVal lt; 255){analogWrite(ROUGE,currentVal)-analogWrite(VERT,currentVal)-}autre si(currentMinutes - minutesUntilSunrise lt; 40){// une fois que nous sommes à pleine luminosité, garder les lumières allumées pendant 10 minutes de plusanalogWrite(ROUGE,255)-analogWrite(VERT,255)-}autre{// après cela, nous les nuking revenir à l`état deanalogWrite(ROUGE,0)-analogWrite(VERT,0)-}}}

Et mises à niveau futures Pitfalls

Je me sers de ce depuis quelques semaines maintenant et il est vraiment aider à se réveiller se sentir plus reposés et à une vie décente de temps le fonctionne vraiment bien nightlight aussi. Ce n`est pas parfait, donc voici quelques petites choses qui ont besoin de travail et les leçons apprises lors de la construction.

Alarme lever du soleil

Tout en faisant de ce projet, j`ai rencontré beaucoup de problèmes de traiter avec un grand nombre, donc si vous prévoyez de modifier le code s`il vous plaît garder cela à l`esprit. Dans le langage C, la votre typage est très important - un nombre est pas toujours juste un nombre. Par exemple, unsigned long variables doivent être utilisées pour stocker des nombres super grands comme nous traitons quand on parle de millisecondes, mais même un nombre aussi faible que 60 000 ne peuvent pas être stockées sous la forme d`un nombre entier régulier (E unsigned int aurait été acceptable pour un maximum de 68 000). Le point est, lire sur vos types de variables lors de l`utilisation de grands nombres, et si vous trouvez des bugs bizarres, il est probablement parce que l`un de vos variables n`a pas assez de bits!

Je l`ai aussi trouvé un problème très basse tension fuites de luminosité - conduisant à la plus petite quantité de lumière émise même lorsqu`une digitalWrite (RED, 0) signal est émis - Je ne pense pas que ce problème matériel avec les bandes car ils fonctionnent très bien avec les contrôleurs officiels. Si quelqu`un peut résoudre ce problème, illustré ci-dessous, je vous serais très reconnaissant. J`ai essayé des résistances de traction vers le bas, et de limiter la tension de sortie des broches Arduino. Je besoin d`ajouter un simple circuit de commutation de puissance à tension d`alimentation uniquement à la bande LED en fait besoin- ou il pourrait être défectueux MOSFETs.

fuite de lumière

Pour les travaux futurs, j`espère ajouter dans un récepteur IR et dupliquer certaines des caractéristiques du contrôleur d`origine - au moins la possibilité de changer les couleurs comme la lumière d`usage général, comme 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 obtenu d`autres idées? Faites-moi savoir dans les commentaires!

Articles connexes