Projet d'alarme de veilleuse et de lever de soleil Arduino

Projet d'alarme de veilleuse et de lever de soleil Arduino / DIY

Les humains sont naturellement programmés pour se réveiller au lever du soleil; Malheureusement, la vie moderne est dictée par une horloge arbitraire, nous obligeant souvent à nous réveiller lorsqu'il n'y a pas de lumière naturelle. Aujourd'hui, nous allons fabriquer un réveil sunrise, qui vous réveillera doucement et lentement sans recourir à une machine à bruit offensante..

Si faire un réveil sunrise est un peu trop pour vous, découvrez ces applications pour iPhone et Android. 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 mouvementée jour, la meilleure chose à faire est de dormir suffisamment. Il y a toujours de nouvelles études qui prouvent à quel point le sommeil est important pour une personne,… Lire la suite qui détecte le meilleur moment pour vous réveiller en effectuant des mouvements corporels Une application mobile peut-elle vraiment vous aider à mieux dormir? Une application peut-elle vraiment vous aider à mieux dormir? J'ai toujours été un peu expérimentateur en sommeil, ayant gardé un journal de rêves méticuleux et étudié autant que possible au sujet de mon sommeil. Il y a… Lire la suite, pour vous assurer de ne pas être éloigné de ce rêve fantastique, mais plutôt de vous réveiller avec une sensation de fraîcheur et de fraîcheur - ils fonctionnent vraiment.

Grandes lignes du projet

La partie principale du projet consistera en une bande lumineuse à LED de 5 mètres posée autour du lit. Nous les alimenterons avec une alimentation externe de 12 volts, commutée à l'aide de transistors MOSFET N. La configuration de cette partie sera identique à celle du système d’éclairage dynamique. Créez votre propre éclairage ambiant dynamique pour un centre multimédia Créez votre propre éclairage ambiant dynamique pour un centre multimédia Si vous regardez beaucoup de films sur votre PC ou dans votre centre multimédia, bien 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 seconde ou deux par jour, mais idéalement, nous inclurions un “horloge temps réel” puce pour le faire de manière plus fiable. L’alarme au lever du soleil commence 30 minutes avant l’heure de réveil et augmente lentement le niveau de sortie jusqu’à atteindre une luminosité de 100%. Cela devrait suffire à nous réveiller, même si c’est une bonne idée de continuer à utiliser votre réveil normal jusqu’à ce que votre corps soit en état. habitué.

Je vais également intégrer une veilleuse à ce projet, qui détecte les mouvements et active une discrète lumière de niveau bas sous le lit avec une pause de 3 minutes, séparée des lumières LED, car celles-ci provoqueraient le réveil de ma femme. . L’éclairage sous le lit sera un bloc secteur commercial, je vais donc pirater un relais dans une prise pour l’allumer et l’éteindre. Si vous n'êtes pas à l'aise avec le secteur 110-240v, quelles que soient les circonstances (et que c'est généralement une bonne règle), connectez un émetteur sans fil 433 MHz avec des prises de commutation, comme indiqué dans le projet de domotique Arduino Raspberry Pi. Guide de la domotique avec Raspberry Pi et Arduino Guide de la domotique avec Raspberry Pi et Arduino Le marché de la domotique est inondé de systèmes grand public coûteux, incompatibles les uns des autres et coûteux à installer. Si vous avez un Raspberry Pi et un Arduino, vous pouvez pratiquement obtenir la même chose à… Read More .

Liste de pièces et schéma

  • Arduino
  • Ensemble de bandes lumineuses à LED RVB
  • Alimentation 12 volts
  • 3 x transistors MOSFET N (j'utilise le type STP16NF06FP)
  • Prise de relais et d'alimentation, ou prises de commande sans fil et émetteur approprié
  • Votre choix de veilleuse (alimentation secteur normale avec fiche convenable)
  • Capteur de mouvement PIR (HC-SR501) ou sonar SC-04 (moins efficace)
  • Capteur de lumière
  • Code de projet - mais continuez à lire pour vous assurer de comprendre comment tout personnaliser.

Voici le schéma complet.

Câblage d'un relais

Remarque: Ignorez cette section si vous souhaitez également utiliser les lumières RVB comme veilleuses - ceci est spécifiquement destiné à allumer une lumière séparée alimentée par le secteur.

Pour la commutation de l'alimentation secteur, votre relais devra être adapté à la tension - 110V ou 240V AC selon l'endroit où vous vivez - et plus que l'ampérage total que vous allez changer. Celui que j'ai utilisé dans ce pack de capteurs (disclaimer: c'est ma boutique) est 250VAC / 10A, alors nous devrions ê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 fiche; puis connectez le terminal de prise de courant à la NON (normalement ouvert). Je ne devrais pas avoir à vous dire de ne pas faire ça tant que c'est branché dans une prise ou vous allez mourir. Si vous avez peur de jouer avec l'alimentation secteur, utilisez plutôt des prises commutées sans fil..

Les câbles de terre et de neutre doivent aller directement à la prise et ne toucheront pas le relais. Vous ne pouvez pas avoir une ligne de terre aux États-Unis. Il est de votre responsabilité de connaître le code couleur des fils dans votre région. - si vous ne pouviez pas autrement brancher une prise de courant dans votre maison ou rebrancher une prise, n'essayez pas d'intégrer un relais dans une!

Pour tester, câblez la broche du signal du relais à 12, puis exécutez un programme de clignotement simple modifié pour fonctionner sur la broche 12, et non sur 13 comme indiqué 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 parce qu'au cours du processus de téléchargement, la DEL intégrée se déclenche rapidement pour indiquer une activité en série, ce qui entraînerait l'activation du relais également..

Obtenir le bon timing

Les fonctions de chronométrage et d’horloge sont difficiles sans accès à une connexion réseau ou dédiée. Horloge temps réel (ceux-ci incluent leurs propres piles pour garder l’horloge allumée même lorsque l’Arduino principal n’est pas alimenté). 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épart. Toutes les 24 heures, l'horloge se réinitialisera. Le code de fonction d'horloge ci-dessous permet de s'assurer 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 qu'une coupure de courant ou une réinitialisation accidentelle va tout casser, alors c'est certainement un domaine qui pourrait être amélioré. Si le chronométrage n'est plus synchronisé, réinitialisez simplement l'Arduino à l'heure de début définie.

Le code doit être facile à comprendre.

void clock () if (millis ()> = previousMillis + 86400000) // un jour complet s'est écoulé, réinitialisez l'horloge; previousMillis + = 86400000;  currentMillis = millis () - previousMillis; // cela maintient notre currentMillis le même chaque jour currentMinutes = (currentMillis / 1000) / 60;  

Fonction veilleuse

J'ai séparé les boucles principales en fonctions distinctes pour faciliter la lecture, la suppression et l'ajustement. le veilleuse() Cette fonction ne fonctionne qu'entre les heures au cours desquelles l'Arduino a été réinitialisé (je suppose que vous le ferez probablement vers l'heure du coucher ou à l'heure du coucher, à la tombée de la nuit) et jusqu'à ce que l'alarme du lever du soleil commence. J'avais initialement essayé d'utiliser une résistance dépendante de la lumière, mais celle-ci n'était pas très sensible à la lumière bleue (qui est la couleur que j'utilise pour la veilleuse) et difficile à calibrer correctement. De toute façon, utiliser l'horloge est plus logique. Nous allons utiliser le global currentMinutes variable, qui est réinitialisé chaque jour.

Le capteur PIR peut être un peu bizarre si vous n'en avez jamais utilisé un auparavant, bien que son câblage ne soit pas difficile - vous y trouverez VCC, GND, et EN DEHORS clairement étiqueté au dos. Il y a deux résistances variables toi aussi; celui qui est étiqueté RX détermine la plage (jusqu’à environ 7 m), et un autre étiqueté TX détermine le retard. Le délai est de 5 secondes à son réglage le plus bas (complètement dans le sens anti-horaire), ce qui signifie que tout mouvement momentané déclenchera au moins 5 secondes de “sur” état du capteur. Cependant, il détermine également le délai entre les états actifs. Ainsi, si 5 secondes s'écoulent sans qu'aucun mouvement ne soit détecté, le capteur envoie un signal bas pendant au moins 5 secondes, même s'il se produit un mouvement pendant cette période. Si le délai est très élevé, environ 30 secondes, le capteur semble défectueux..

Si vous dormez seul et que vous utilisez les mêmes bandes lumineuses RVB pour l’alarme sunrise et la veilleuse, vous devriez pouvoir ajuster le code assez facilement..

void nightlight () // Ne fonctionne qu'entre les heures de réinitialisation -> sunrise. si (currentMinutes < minutesUntilSunrise) if(digitalRead(trigger) == 1) nightLightTimeOff = millis()+nightLightTimeOut; // activate, or extend the time until turning off the light Serial.println("Activating nightlight");   //Turn light on if needed if(millis() < nightLightTimeOff) digitalWrite(nightLight,HIGH);  else digitalWrite(nightLight,LOW);   

Alarme au lever du soleil

Pour des raisons de simplicité, j'utiliserai la valeur de couleur RVB 255,255,0 pour un lever de soleil jaune foncé. Ainsi, l'incrément des deux canaux de couleur sera identique. Si vous constatez que cela vous réveille trop tôt, envisagez de commencer avec un rouge profond et de passer ensuite au jaune ou au blanc. La montée en puissance que j’ai utilisée est tout simplement linéaire - vous voudrez peut-être utiliser une courbe plus naturelle pour les valeurs de luminosité..

La fonction est simple: elle détermine le degré d’incrémentation de la lumière par seconde pour une luminosité maximale après une période de 30 minutes; multiplie ensuite le nombre de secondes écoulées entre le lever du soleil et le nombre de secondes. Si la luminosité est déjà maximale, il reste allumé pendant 10 minutes supplémentaires pour vous assurer que vous êtes levé (et si vous n'êtes toujours pas levé, vous devriez probablement avoir une alarme de secours en place)..

void sunrisealarm () // chaque seconde au cours de la période de 30 minutes doit augmenter la valeur de la couleur de la manière suivante: incrémentation de flottement = (float) 255 / (30 * 60); // red 255, green 255 nous donne la pleine luminosité jaune si (currentMinutes> = minutesUntilSunrise) // le lever du soleil commence! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * incrémentation; Serial.print ("Valeur actuelle pour sunrise:"); Serial.println (currentVal); // pendant la montée en puissance, écrit la valeur actuelle en minutes X incrément de luminosité si (currentVal < 255) analogWrite(RED,currentVal); analogWrite(GREEN,currentVal);  else if(currentMinutes - minutesUntilSunrise < 40) // once we're at full brightness, keep the lights on for 10 minutes longer analogWrite(RED,255); analogWrite(GREEN,255);  else //after that, we're nuking them back to off state analogWrite(RED,0); analogWrite(GREEN,0);    

Pièges et mises à niveau futures

Je l'utilise depuis quelques semaines maintenant et cela aide vraiment à me réveiller avec une sensation de fraîcheur et de fraîcheur; la veilleuse fonctionne très bien aussi. Ce n'est pas parfait cependant, alors voici quelques points qui nécessitent du travail et les leçons apprises pendant la construction.

Lors de la réalisation de ce projet, j’ai rencontré de nombreuses difficultés pour traiter les grands nombres. Par conséquent, si vous envisagez de modifier le code, n’oubliez pas cela. 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é longtemps les variables doivent être utilisées pour stocker des nombres très grands comme nous le faisons lorsque nous parlons de millisecondes, mais même un nombre aussi petit que 60 000 ne peut pas être stocké sous la forme d'un entier normal (un int non signé aurait été acceptable pour un maximum de 68 000). Le fait est que vous devez lire vos types de variables lorsque vous utilisez de grands nombres, et si vous trouvez des bugs bizarres, c'est probablement parce que l'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é - entraînant 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 vous en serais très reconnaissant. J'ai essayé de tirer des résistances et de limiter la tension de sortie des broches Arduino. Il se peut que je devrais ajouter un simple circuit de commutation d’alimentation afin d’alimenter la bande de LED uniquement lorsque cela est nécessaire; ou il pourrait être MOSFET défectueux.

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

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

En savoir plus sur: Arduino.