Annuncio pubblicitario

Gli umani sono naturalmente programmati per svegliarsi con l'alba; la vita tristemente moderna è dettata da un orologio arbitrario, che spesso ci obbliga a svegliarci quando non c'è luce naturale. Oggi faremo una sveglia all'alba, che ti sveglierà dolcemente e lentamente senza ricorrere a una macchina offensiva che produce rumore.

Se creare una sveglia all'alba è un po 'troppo per te, dai un'occhiata a questi iPhone e App Android Usa queste app per aiutarti a dormire meglio [Android e iOS]Dopo una giornata frenetica, la cosa migliore che puoi fare è dormire bene. Ci sono sempre nuovi studi che dimostrano quanto sia importante il sonno per una persona, migliorando ... Leggi di più che rileva quando è meglio svegliarti con i movimenti del corpo Un'app può davvero aiutarti a dormire meglio?Sono sempre stato un po 'uno sperimentatore del sonno, avendo tenuto per gran parte della mia vita un diario dei sogni meticoloso e studiato il più possibile sul dormire nel processo. Ci sono... Leggi di più

instagram viewer
, assicurandoti di non essere allontanato da quel fantastico sogno ma, invece, svegliati sentendoti luminoso e rinfrescato: funzionano davvero.

Schema del progetto

La parte principale del progetto sarà una striscia di LED a 5 metri disposta intorno al letto. Li alimenteremo con un'alimentazione esterna a 12 volt, commutata usando alcuni transistor MOSFET N. L'impostazione per questa parte sarà identica a sistema di illuminazione dinamica Crea la tua illuminazione ambientale dinamica per un Media CenterSe guardi molti film sul tuo PC o media center, sono sicuro che hai affrontato il dilemma dell'illuminazione; spegni completamente tutte le luci? Li tieni al massimo? O... Leggi di più Ho costruito prima.

Il tempismo sarà un problema: poiché si tratta di un prototipo, imposterò Arduino per il conto alla rovescia ogni volta che viene ripristinato. In teoria, dovremmo perdere solo un secondo o due ogni giorno, ma idealmente dovremmo includere un chip "real time clock" per farlo in modo più affidabile. L'allarme alba si avvia 30 minuti prima dell'orario di sveglia e aumenta lentamente il livello di uscita fino a quando non raggiunge il 100% di luminosità, questo dovrebbe bastare a svegliarci, anche se è una buona idea continuare a usare la normale sveglia fino a quando il tuo corpo non è abituato esso.

In questo progetto includerò anche una luce notturna, che rileva i movimenti e attiva un livello basso discreto luce sotto il letto con un timeout di 3 minuti, separata dalle luci a LED in quanto quelle avrebbero fatto svegliare sia io che mia moglie su. L'illuminazione sotto il letto sarà un'unità di rete commerciale, quindi inserirò un relè all'interno di una presa per accenderlo e spegnerlo. Se non ti senti a tuo agio a lavorare con l'alimentazione di rete 110-240 V CA in qualsiasi circostanza (e questo è generalmente una buona regola da avere), quindi collegare un trasmettitore wireless a 433 MHz con prese di commutazione, come indicato sul Progetto di automazione domestica Raspberry Pi Arduino Guida alla domotica con Raspberry Pi e ArduinoIl mercato dell'automazione domestica è invaso da costosi sistemi di consumo, incompatibili tra loro e costosi da installare. Se hai un Raspberry Pi e un Arduino, puoi praticamente ottenere la stessa cosa a ... Leggi di più .

Elenco delle parti e schema

  • Arduino
  • Set di luci a LED RGB
  • Alimentazione a 12 volt
  • 3 transistor MOSFET N (utilizzo tipo STP16NF06FP)
  • Relè e presa di corrente, o prese controllate senza fili e trasmettitore adatto
  • La tua scelta di luce notturna (la normale alimentazione di rete con spina va bene)
  • Sensore di movimento PIR (HC-SR501) o un sonar SC-04 (non altrettanto efficace)
  • Sensore di luce
  • Codice del progetto - ma continua a leggere per assicurarti di capire come personalizzare tutto.

Ecco lo schema completo.

alba-allarme-circuito

Cablaggio di un relè

Nota: Saltare questa sezione se si desidera utilizzare anche le luci RGB come luce notturna - questo è specifico per l'accensione di una luce di alimentazione separata.

Per commutare l'alimentazione di rete, il relè dovrà essere valutato per la tensione - 110V o 240 V CA. a seconda di dove vivi - e più dell'amperaggio totale passerai. Quello che ho usato da questo pacchetto di sensori (dichiarazione di non responsabilità: quello è il mio negozio) è 250 V CA / 10 A., quindi dovremmo essere al sicuro. I relè hanno a com porta, solitamente al centro, che dovrebbe essere collegata al filo sotto tensione che entra nella spina; quindi collegare il terminale live della presa al NO (normalmente aperto). Non dovrei dirti di non farlo mentre è collegato a una presa, o morirai. Se hai paura di scherzare con l'alimentazione di rete, utilizza invece le prese wireless.

relè cablaggio

I cavi di terra e neutro devono andare direttamente alla presa e non toccheranno il relè. Potresti non avere una linea di terra negli Stati Uniti. È tua responsabilità conoscere la codifica a colori dei fili nella tua zona - se non potessi altrimenti collegare una presa normale a casa o ricollegare una spina, non provare a incorporare un relè in uno!

Per eseguire il test, collegare il pin del segnale del relè a 12, quindi eseguire un semplice programma di lampeggiamento modificato per funzionare sul pin 12, non 13 come predefinito. La presa dovrebbe accendersi e spegnersi ogni pochi secondi. Il motivo per cui non sto usando il pin 13 è perché durante il processo di caricamento, il LED di bordo si accende in rapida successione per indicare l'attività seriale, che causerebbe l'attivazione anche del relè.

Tempistica corretta

Le funzioni di temporizzazione e orologio sono difficili senza accesso a una connessione di rete o dedicate Orologio in tempo reale (questi includono le proprie batterie per far funzionare l'orologio anche quando l'Arduino principale non ha energia). Per mantenere bassi i costi, ho intenzione di imbrogliare. Sarò hardcoding un orario di inizio affinché Arduino inizi il suo conto alla rovescia; i tempi saranno quindi relativi a questo orario di inizio. Ogni 24 ore, l'orologio verrà ripristinato. Il codice della funzione orologio che segue assicura le variabili globali currentMillis e currentMinutes sono corretti ogni giorno. L'Arduino non dovrebbe perdere più di qualche secondo ogni 45 giorni; tuttavia, questo stile di temporizzazione codificato è piuttosto limitato in quanto un'interruzione di corrente o un ripristino accidentale interromperà tutto, quindi questa è sicuramente un'area su cui è possibile migliorare. Se la sincronizzazione non viene sincronizzata, è sufficiente reimpostare Arduino all'ora di inizio impostata.

Il codice dovrebbe essere facile da capire.

void clock () {if (millis ()> = previousMillis + 86400000) {// è trascorso un giorno intero, azzerare l'orologio; previousMillis + = 86400000; } currentMillis = millis () - previousMillis; // Questo mantiene i nostri currentMillis gli stessi ogni giorno currentMinutes = (currentMillis / 1000) / 60; }

Funzione luce notturna

Ho separato i loop principali in funzioni distinte in modo che sia più facile da leggere, rimuovere o regolare. Il luce notturna() La funzione è attiva solo tra le ore in cui Arduino è stato ripristinato (suppongo che probabilmente lo farai all'ora di coricarsi o nei dintorni di andare a letto, quando è buio) e fino a quando non deve iniziare l'allarme alba. Inizialmente avevo provato a utilizzare un resistore dipendente dalla luce, ma non sono molto sensibili alla luce blu (che sembra essere il colore che sto usando per la luce notturna) e difficile da calibrare correttamente. L'uso dell'orologio ha comunque più senso. Useremo il globale currentMinutes variabile, che viene ripristinata ogni giorno.

Il sensore PIR può essere un po 'bizzarro se non ne hai mai usato uno prima, anche se non è difficile collegarlo VCC, GND, e SU chiaramente etichettato sul retro. Ci sono anche due resistori variabili; quello con l'etichetta RX determina l'intervallo (fino a circa 7 m) e un altro con l'etichetta TX determina il ritardo. Il ritardo è di 5 secondi all'impostazione più bassa (completamente in senso antiorario) e significa che qualsiasi movimento momentaneo attiverà almeno 5 secondi di stato "on" dal sensore. Tuttavia, determina anche il ritardo tra gli stati attivi, quindi se trascorrono 5 secondi e non c'è movimento rilevato, il sensore invierà un segnale basso per almeno 5 secondi anche se durante tale movimento si verifica un movimento periodo. Se il ritardo è impostato su un valore molto alto a circa 30 secondi, può sembrare che il sensore sia rotto.

pir sensore

Se dormi da solo e non ti dispiace usare le stesse strisce RGB sia per l'allarme dell'alba che per la luce notturna, dovresti essere in grado di regolare il codice abbastanza facilmente.

void nightlight () {// Funziona solo tra le ore di ripristino -> alba. if (currentMinutes 

Sunrise Alarm

Per semplicità, userò il valore di colore RGB 255.255,0 per un'alba giallo intenso, in questo modo l'incremento su entrambi i canali di colore sarà lo stesso. Se trovi che ti sta svegliando troppo presto, considera di iniziare con un rosso intenso e sfumando verso il giallo o il bianco. Il ramp up che ho usato in modo lineare: potresti voler investigare usando una curva più naturale per i valori di luminosità.

La funzione è semplice: determina la quantità di luce che deve essere incrementata di ogni secondo in modo che sia alla massima luminosità dopo un periodo di 30 minuti; quindi moltiplica il fatto che per molti secondi è attualmente all'alba. Se è già alla massima luminosità, rimane acceso per altri 10 minuti per essere sicuro che tu sia attivo (e se non sei ancora attivo, probabilmente dovresti avere un allarme di backup in atto).

void sunrisealarm () {// ogni secondo durante il periodo di 30 miniti dovrebbe aumentare il valore del colore di: float increment = (float) 255 / (30 * 60); // rosso 255, verde 255 ci dà piena luminosità giallo se (currentMinutes> = minutesUntilSunrise) {// sunrise inizia! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * incremento; Serial.print ("Valore attuale per sunrise:"); Serial.println (currentVal); // durante l'accelerazione, scrivere il valore corrente dei minuti di incremento della luminosità X se (currentVal <255) {analogWrite (RED, currentVal); analogWrite (GREEN, currentVal); } else if (currentMinutes - minutesUntilSunrise <40) {// quando siamo a piena luminosità, tieni le luci accese per 10 minuti più a lungo analogWrite (RED, 255); analogWrite (VERDE, 255); } else {// dopo ciò, li stiamo riportando allo stato off analogWrite (RED, 0); analogWrite (VERDE, 0); } } }

Insidie ​​e futuri aggiornamenti

Lo sto usando da alcune settimane e mi sta davvero aiutando a svegliarmi sentendomi più riposato e in un momento decente; anche la luce notturna funziona davvero bene. Non è perfetto, quindi ecco alcune cose che richiedono lavoro e lezioni apprese durante la costruzione.

alba-allarme

Durante la realizzazione di questo progetto, ho riscontrato molti problemi relativi alla gestione di grandi numeri, quindi se hai intenzione di modificare il codice, ti preghiamo di tenerlo presente. In linguaggio C, il la digitazione delle variabili è molto importante - un numero non è sempre solo un numero. Per esempio, non firmato a lungo le variabili dovrebbero essere utilizzate per memorizzare numeri molto grandi come quelli di cui ci occupiamo quando si parla di millisecondi, ma anche un numero piccolo come 60.000 non può essere memorizzato come un intero normale (un int senza firma sarebbe stato accettabile fino a 68.000). Il punto è, leggi i tuoi tipi di variabili quando usi numeri grandi e se trovi bug strani, probabilmente è perché una delle tue variabili non ha abbastanza bit!

Ho anche riscontrato un problema con perdite di tensione a luminosità molto bassa, che portano alla più piccola quantità di luce emessa anche quando un digitalWrite (ROSSO, 0) viene emesso il segnale - non credo che sia un problema hardware con le strisce poiché funzionano bene con i controller ufficiali. Se qualcuno può risolvere questo problema, nella foto sotto, sarei molto grato. Ho provato a tirare giù le resistenze e a limitare la tensione di uscita dai pin di Arduino. Potrebbe essere necessario aggiungere un semplice circuito di commutazione dell'alimentazione per fornire tensione alla striscia LED solo quando effettivamente necessario; oppure potrebbero essere MOSFET difettosi.

light-perdita

Per lavori futuri, spero di aggiungere un ricevitore IR e duplicare alcune delle funzionalità del controller originale - su almeno la possibilità di cambiare i colori come una luce di uso generale, poiché in questo momento questo progetto trasforma la striscia in una notte dedicata luce. Potrei anche aggiungere una funzione di timeout automatica di 30 minuti.

Hai provato questo, apportato miglioramenti o hai altre idee? Fatemi sapere nei commenti!

James ha una laurea in Intelligenza Artificiale ed è certificato CompTIA A + e Network +. È lo sviluppatore principale di MakeUseOf e trascorre il suo tempo libero giocando a paintball e giochi da tavolo VR. Costruisce PC da quando era un bambino.