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

  • Harry James
  • 0
  • 862
  • 128
Publicité

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 et qui s'améliorent… qui détectent le meilleur moment pour vous réveiller en mouvements de corps. Une application peut-elle vraiment vous aider à mieux dormir? J'ai toujours été un peu expérimentateur en sommeil, ayant, pendant la plus grande partie de ma vie, tenu un journal de rêve méticuleux et étudié autant que je pouvais le faire pour dormir. Il existe un…, vous assurant de ne pas être éloigné de ce rêve fantastique, mais 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 de lumière 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… 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 du lever du soleil commence 30 minutes avant l'heure du 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 habitué.

Je vais également incorporer 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 elles provoqueraient le réveil de ma femme et de moi-même. . L'éclairage sous le lit sera un bloc secteur commercial, je vais donc pirater un relais à l'intérieur d'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), connectez un émetteur sans fil 433 MHz avec prises de commutation, comme indiqué dans le projet de domotique Arduino Raspberry Pi. Guide de domotique avec Raspberry Pi et Arduino Guide de domotique avec Raspberry Pi et Arduino Le 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 pratiquement obtenir la même chose à… .

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 à te dire de ne pas faire ça tant que c'est branché dans une prise ou tu vas 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'incorporer 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 valeur par défaut. Votre prise devrait 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; // ceci maintient notre currentMillis le même 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, à supprimer ou à ajuster. 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 étiqueté RX détermine la plage (jusqu’à environ 7 m), et un autre étiqueté TX détermine le délai. Le délai est de 5 secondes au 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 du 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 -> 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 d'un jaune profond. 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 par un rouge profond et une décoloration en jaune ou en blanc. La montée en puissance que j’ai utilisée est tout simplement linéaire - vous pouvez envisager d’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 afin qu’elle soit à son maximum après 30 minutes; multiplie ensuite par le nombre de secondes écoulées entre le lever du soleil et l'heure actuelle. Si la luminosité est déjà maximale, il reste allumé pendant 10 minutes supplémentaires pour vous assurer que vous êtes opérationnel (et si vous n'êtes toujours pas opérationnel, 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ément 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, 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 (ROUGE, 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 infrarouge et dupliquer certaines des fonctionnalités du contrôleur d'origine - au moins la possibilité de changer les couleurs en tant que lumière à 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!




Personne n'a encore commenté ce post.

De la technologie moderne, simple et abordable.
Votre guide dans le monde de la technologie moderne. Apprenez à utiliser les technologies et les gadgets qui nous entourent chaque jour et à découvrir des choses intéressantes sur Internet.