Sommario:

Wakeup Light: 7 passaggi (con immagini)
Wakeup Light: 7 passaggi (con immagini)

Video: Wakeup Light: 7 passaggi (con immagini)

Video: Wakeup Light: 7 passaggi (con immagini)
Video: Sleep Deeper and Wake Up Refreshed: 7 Intriguing Tips for a Peaceful Night's Sleep 2024, Novembre
Anonim
Luce del risveglio
Luce del risveglio

Mentre scrivo questo istruibile è pieno inverno nell'emisfero settentrionale e questo significa giorni brevi e notti lunghe. Sono abituato ad alzarmi alle 06:00 e in estate il sole splenderà a quell'ora. In inverno, però, fa luce alle 09:00 se siamo fortunati ad avere un giorno in cui non è nuvoloso (che… non è spesso).

Tempo fa ho letto di una “sveglia luminosa” realizzata da Philips che veniva utilizzata in Norvegia per simulare una mattinata di sole. Non ne ho mai comprata una, ma ho continuato a pensare di farne una perché farne una da soli è più divertente che comprarla.

Forniture:

Cornice per foto "Ribba" 50 x 40 cm di IKEA

pannello rigido perforato dal negozio di ferramenta

Scheda di sviluppo STM8S103 tramite Ebay o altri

Orologio in tempo reale DS1307 (Mouser, Farnell, Conrad, ecc.)

Vetro dell'orologio 32768 Hz (Mouser, Farnell, Conrad, ecc.)

Batteria al litio 3V + portacellula a moneta

MOSFET a canale N BUZ11 o IRLZ34N (3x)

BC549 (o qualsiasi altro transistor NPN)

tutti i led bianchi, rossi, blu, verdi, ecc. che vuoi

alcuni resistori e condensatori (vedi schema)

Powerbrick, da 12V a 20V, 3A o più (es. vecchio alimentatore per laptop)

Passaggio 1: alzarsi (un po') più facilmente

Rendere (un po') più facile alzarsi
Rendere (un po') più facile alzarsi

L'idea è che è difficile alzarsi dal letto la mattina quando è ancora buio. E se vivi vicino o addirittura al di sopra del circolo polare artico, sarà buio molto a lungo. In posti come Tromsö in Norvegia non ci sarà affatto luce perché lì il sole tramonta a metà novembre per poi riapparire a metà gennaio.

Quindi quello che ha fatto Philips è stato simulare il sorgere del sole.

Philips aumenta lentamente la luminosità di una lampada, che probabilmente è realizzata con più led ma nascosti dietro un unico diffusore. Il loro tempo da spento a piena luminosità richiede 30 minuti.

Le luci sveglia Philips non sono così costose ma hanno un solo colore e sembrano un po' piccole. Penso di poter fare di meglio.

Passaggio 2: più colore

Più colore
Più colore

La mia luce del risveglio utilizza quattro colori, bianco, rosso, blu e verde. Prima vengono i led bianchi, poi quelli rossi, e per ultimi alcuni led blu e verdi. La mia idea era che avrei potuto simulare non solo l'aumento della luminosità ma anche lo spostamento del colore della luce del mattino, iniziando con un po' di bianco, aggiungendo il rosso un po' più tardi e mescolando alla fine il blu e il verde. Non sono sicuro che assomigli effettivamente alla luce del mattino, ma mi piace il display colorato così com'è ora.

Il mio è anche più veloce della luce di risveglio Philips, invece dei 30 minuti della luce Philips, il mio passa dallo 0% al 100% di luminosità in meno di 5 minuti. Quindi il mio sole sorge molto più velocemente.

NOTA:

È MOLTO difficile fare foto della mia luce del risveglio, ho provato con diverse fotocamere e smartphone ma tutte le foto che ho fatto non rendono giustizia alla cosa reale.

Passaggio 3: curva sigmoide, sfarfallio e "risoluzione"

Curva sigmoide, sfarfallio e
Curva sigmoide, sfarfallio e

Ovviamente volevo rendere la schiaritura il più uniforme possibile. Gli occhi umani hanno una sensibilità logaritmica, il che significa che nell'oscurità totale sono più sensibili di quanto non lo siano in pieno giorno. Un aumento molto piccolo della luminosità quando i livelli sono bassi "sembra" lo stesso di un passo molto più grande quando la luce ha una luminosità, diciamo, del 40%. Per ottenere questo ho usato una curva speciale chiamata Sigmoid (o S-curve) questa curva inizia come una curva esponenziale che si livella di nuovo a metà. Ho scoperto che è un modo molto carino per aumentare (e diminuire) l'intensità.

La frequenza di clock del microcontrollore (e dei timer) è di 16 MHz e utilizzo la risoluzione massima di TIMER2 (65536) per creare tre segnali di larghezza di impulso (PWM). Pertanto gli impulsi arrivano 16000000 / 65536 = 244 volte al secondo. Questo è molto al di sopra del limite degli occhi per vedere qualsiasi sfarfallio.

Quindi i led vengono alimentati con un segnale PWM che viene realizzato con questo timer a 16 bit del microcontrollore STM8S103. Almeno questo segnale PWM può essere ON è lungo 1 impulso e le restanti 65535 lunghezze di impulso sono spente.

Quindi i led collegati a quel segnale PM saranno accesi 1/65536-esimo delle volte: 0,0015%

Al massimo sono ON 65536/65536-esimo del tempo: 100%.

Passaggio 4: elettronica

Elettronica
Elettronica
Elettronica
Elettronica
Elettronica
Elettronica
Elettronica
Elettronica

Microcontrollore

Il cervello della luce di risveglio è un microcontrollore STM8S103 di STMicroelectronics. Mi piace usare parti che hanno capacità appena sufficienti per un lavoro. Per un compito semplice come questo non è necessario utilizzare microcontrollori STM32 (i miei altri preferiti) ma un Arduino UNO non era sufficiente perché volevo tre segnali PWM con risoluzione a 16 bit e non c'è un timer con tre canali di uscita su un UNO.

Orologio in tempo reale

L'ora viene letta da un orologio in tempo reale DS1307 che funziona con un cristallo a 32768 Hz e dispone di una batteria di backup da 3V.

L'impostazione dell'ora corrente, del giorno e dell'ora della sveglia viene eseguita con due pulsanti e visualizzata su un display LCD a 16 x 2 caratteri. Per mantenere la mia camera da letto davvero buia di notte, la retroilluminazione del display LCD si accende solo quando i led sono più luminosi della retroilluminazione e quando si impostano l'ora, il giorno e l'ora della sveglia.

Potenza

L'alimentazione proviene da un vecchio alimentatore per laptop, il mio produce 12V e può fornire 3A. Quando si dispone di un altro alimentatore potrebbe essere necessario regolare le resistenze in serie con le stringhe di led. (Vedi sotto)

LED

I led sono collegati all'alimentazione a 12V, il resto dell'elettronica lavora a 5V realizzata con un regolatore lineare 7805. Nello schema c'è scritto che uso un regolatore TO220, che non è necessario in quanto il microcontrollore, il display e l'orologio in tempo reale usano solo pochi milliampere. Il mio orologio utilizza una versione TO92 più piccola del 7805 in grado di fornire 150 mA.

La commutazione delle stringhe di led avviene con MOSFET a canale N. Di nuovo, nello schema mostra altri dispositivi rispetto a quelli che ho usato. Mi è capitato di avere esattamente tre MOSFET BUZ11 molto vecchi invece dei più recenti MOSFET IRLZ34N. Funzionano bene

Ovviamente puoi inserire tutti i led che vuoi, purché i MOSFET e l'alimentatore siano in grado di gestire la corrente. Nello schema ho disegnato solo un filo di qualsiasi colore, in realtà ce ne sono diversi di ogni colore paralleli agli altri fili di quel colore.

Passaggio 5: resistori (per i LED)

Resistenze (per i Led)
Resistenze (per i Led)

Informazioni sui resistori nelle stringhe di led. I LED bianchi e blu di solito hanno una tensione di 2,8 V su di essi quando sono a piena luminosità.

I led rossi hanno solo 1,8V, i miei led verdi hanno 2V su di loro a piena luminosità.

Un'altra cosa è che la loro piena luminosità non è la stessa. Quindi ci sono voluti alcuni esperimenti per renderli ugualmente luminosi (ai miei occhi). Rendendo i led ugualmente luminosi a piena luminosità, appariranno ugualmente luminosi anche a livelli più bassi, il segnale della larghezza di impulso li accende sempre a piena luminosità ma durante tempi più lunghi e più brevi, i tuoi occhi si occupano della media.

Inizia con un calcolo come questo. L'alimentatore eroga (nel mio caso) 12V.

Quattro led bianchi in serie richiedono 4 x 2.8V = 11.2V, questo lascia 0.8V per il resistore.

Avevo scoperto che erano abbastanza luminosi a 30 mA, quindi il resistore deve essere:

0,8 / 0,03 = 26,6 ohm. Nello schema vedi che ho inserito una resistenza da 22 ohm, rendendo i led solo un po' più luminosi.

I led blu erano troppo luminosi a 30 mA, ma rispetto ai led bianchi a 15 mA, avevano anche circa 2,8 V su di essi a 15 mA, quindi il calcolo era 4 x 2,8 V = 11,2 V lasciando di nuovo 0,8 V

0,8 / 0,015 = 53,3 ohm quindi ho scelto un resistore da 47 ohm.

Anche i miei led rossi hanno bisogno di circa 15 mA per essere ugualmente luminosi degli altri, ma hanno solo 1,8 V su di loro a quella corrente. Quindi potrei metterne di più in serie e avere ancora un po' di "spazio" per il resistore.

Sei led rossi mi davano 6 x 1,8 = 10,8 V, quindi il resistore era 12 – 10,8 = 1,2 V

1,2 / 0,015 = 80 ohm, l'ho trasformato in 68 ohm. Proprio come gli altri, un po' più luminosi.

I led verdi che ho usato sono luminosi come gli altri a circa 20mA. Ne avevo bisogno solo alcuni (proprio come quelli blu) e ho scelto di metterne quattro in serie. A 20 mA hanno 2, 1 V su di loro, dando 3 x 2,1 = 8,4 V

12 – 8.4 = 3.6V per il resistore. E 3,6 / 0,02 = 180 ohm.

Se costruisci questa luce di risveglio è improbabile che tu abbia lo stesso alimentatore, dovrai regolare il numero di led in serie e le resistenze necessarie.

Un piccolo esempio. Supponi di avere un alimentatore che fornisce 20V. Avrei scelto di impostare 6 led blu (e bianchi) in serie, 6 x 3V = 18V quindi 2V per il resistore. E diciamo che ti piace la luminosità a 40 mA. Il resistore deve quindi essere 2V / 0,04 = 50 ohm, un resistore da 47 ohm andrà bene.

Consiglio di non superare i 50mA con i normali led (5mm). Alcuni possono gestire di più, ma mi piace essere al sicuro.

Passaggio 6: software

Tutto il codice è scaricabile da:

gitlab.com/WilkoL/wakeup_light_stm8s103

mantieni il codice sorgente aperto, accanto al resto di questo istruibile se vuoi seguire la spiegazione.

Main.c

Main.c imposta prima l'orologio, i timer e le altre periferiche. La maggior parte dei "driver" che ho scritto utilizzando la libreria standard di STMicroelectronics e se hai domande su di loro, scrivilo in un commento sotto l'istruzione.

Eeprom

Ho lasciato il codice “text to display” che usavo per inserire i testi nella eeprom dell'STM8S103 come commenti. Non ero sicuro di avere abbastanza memoria flash per tutto il mio codice, quindi ho provato a mettere il più possibile in eeprom per avere tutta la flash per il programma. Alla fine ciò non si è rivelato necessario e ho spostato il testo in flash. Ma l'ho lasciato come testo commentato nel file main.c. È bello averlo, quando ho bisogno di fare qualcosa di simile in seguito (in un altro progetto)

La eeprom è ancora utilizzata, ma solo per memorizzare l'ora di sveglia.

Una volta al secondo

Dopo aver configurato le periferiche il codice verifica se è trascorso un secondo (fatto con un timer).

Menù

In tal caso controlla se è stato premuto un pulsante, in caso affermativo entra nel menu dove è possibile impostare l'ora corrente, il giorno della settimana e l'ora della sveglia. Ricorda che ci vogliono circa 5 minuti per passare da spento a piena luminosità, quindi imposta l'orario di sveglia un po' prima.

Il tempo di sveglia è memorizzato in eeprom in modo che anche dopo un'interruzione di corrente "sarà" quando svegliarti. L'ora corrente è naturalmente memorizzata nell'orologio in tempo reale.

Confronto tra corrente e ora di sveglia

Quando non è stato premuto alcun pulsante, controlla l'ora corrente e la confronta con l'ora della sveglia e il giorno della settimana. Non voglio che mi svegli nel fine settimana:-)

Il più delle volte non è necessario fare nulla, quindi imposta la variabile “leds” su OFF altrimenti su ON. Questa variabile viene verificata insieme al segnale “change_intensity”, anch'esso proveniente da un timer ed è attivo 244 volte al secondo. Quindi quando la variabile “leds” è accesa l'intensità viene aumentata di 244 volte al secondo e quando è spenta diminuisce di 244 volte al secondo. Ma l'aumento avviene in singoli passaggi in cui la diminuzione è in passaggi di 16, il che significa che quando si spera che la luce della sveglia abbia fatto il suo lavoro, si spegne 16 volte più velocemente ma senza intoppi.

Morbidezza e FUORI MEMORIA

La levigatezza deriva dal calcolo della curva sigmoide. Il calcolo è abbastanza semplice ma deve essere eseguito in variabili in virgola mobile (doppi) a causa della funzione exp(), vedere il file sigmoid.c.

Nella situazione standard il compilatore/linker Cosmic non supporta le variabili in virgola mobile. Accenderlo è facile (una volta trovato) ma comporta un aumento della dimensione del codice. Questo aumento era eccessivo per adattare il codice alla memoria flash quando combinato con la funzione sprintf(). E quella funzione è necessaria per convertire i numeri in testo per il display.

Itoa()

Per rimediare a questo problema ho creato la funzione itoa(). Questa è una funzione Integer To Ascii piuttosto comune, ma non inclusa nella libreria standard di STMicroelectronics, né nelle librerie Cosmic.

Passaggio 7: IKEA (cosa faremmo senza di loro)

IKEA (cosa faremmo senza di loro)
IKEA (cosa faremmo senza di loro)
IKEA (cosa faremmo senza di loro)
IKEA (cosa faremmo senza di loro)
IKEA (cosa faremmo senza di loro)
IKEA (cosa faremmo senza di loro)

La foto di è stata acquistata da IKEA. È una cornice Ribba di 50 x 40 cm. Questo telaio è piuttosto spesso e questo lo rende ottimo per nascondere l'elettronica dietro di esso. Invece di un poster o di un'immagine ho inserito un pezzo di pannello rigido perforato. Puoi acquistarlo presso il negozio di ferramenta dove a volte viene chiamato "bordo del letto". Ha dei piccoli fori che lo hanno reso ideale per l'inserimento dei led. Sfortunatamente i fori sulla mia scheda erano un po' più grandi di 5 mm quindi ho dovuto usare la colla a caldo per "montare" i led.

Ho fatto un foro rettangolare al centro della scheda rigida per il display 16x2 e l'ho premuto. Il PCB con tutta l'elettronica è appeso a questo display, non è montato su nient'altro.

Il pannello rigido perforato è stato verniciato a spruzzo di nero e dietro il tappetino. Ho praticato due fori nella cornice per i pulsanti per impostare l'ora e la data, poiché la cornice è piuttosto spessa ho dovuto allargare i fori all'interno della cornice per far sporgere abbastanza i pulsanti.

Consigliato: