İçindekiler:

Uyandırma Işığı: 7 Adım (Resimlerle)
Uyandırma Işığı: 7 Adım (Resimlerle)

Video: Uyandırma Işığı: 7 Adım (Resimlerle)

Video: Uyandırma Işığı: 7 Adım (Resimlerle)
Video: KARDEŞİME UYANDIRMA SERVİSİ ! ( 4 Gün Boyunca Ağır Şakalarla Uyandırdım ) 2024, Temmuz
Anonim
Uyandırma Işığı
Uyandırma Işığı

Bu talimatı yazarken kuzey yarımkürede kış ortası ve bu da kısa günler ve uzun geceler anlamına geliyor. Saat 06:00'da kalkmaya alışkınım ve yazın güneş o zamana kadar parlayacak. Ancak kışın bulutlu olmadığı bir gün geçirdiğimiz için şanslıysak (ki bu pek sık olmaz).

Bir süre önce, güneşli bir sabahı simüle etmek için Norveç'te kullanılan Philips tarafından yapılan bir "uyandırma ışığı" hakkında bir şeyler okumuştum. Hiç satın almadım ama yapmayı düşündüm çünkü kendin yapmak, satın almaktan daha eğlenceli.

Gereçler:

Resim çerçevesi "Ribba" 50 x 40 cm IKEA'dan

hırdavatçıdan delikli sunta

Ebay veya diğerleri aracılığıyla STM8S103 geliştirme kartı

DS1307 Gerçek Zamanlı Saat (Mouser, Farnell, Conrad, vb.)

32768 Hz saat kristali (Mouser, Farnell, Conrad, vb.)

3V lityum madeni para hücresi + madeni para hücresi tutucusu

BUZ11 veya IRLZ34N N-kanallı MOSFET'ler (3x)

BC549 (veya başka herhangi bir NPN transistörü)

istediğiniz kadar beyaz, kırmızı, mavi, yeşil vb ledler

bazı dirençler ve kapasitörler (şemaya bakın)

Powerbrick, 12V - 20V, 3A veya daha fazlası (örn. eski dizüstü bilgisayar güç kaynağı)

Adım 1: Kalkmayı (Biraz) Kolaylaştırmak

Kalkmayı (Biraz) Kolaylaştırmak
Kalkmayı (Biraz) Kolaylaştırmak

Buradaki fikir, sabah hala karanlıkken yataktan çıkmanın zor olmasıdır. Ve eğer kutup dairesinin yakınında veya üzerinde yaşıyorsanız, çok uzun süre karanlık olacaktır. Norveç'te Tromsö gibi yerlerde hiç ışık almayacak, çünkü orada güneş sadece Kasım ayının yarısını batıyor ve Januari'nin yarısında yeniden ortaya çıkıyor.

Philips'in yaptığı, güneşin doğuşunu simüle etmekti.

Philips, muhtemelen birkaç led ile yapılmış ancak tek bir difüzörün arkasına gizlenmiş bir lambanın parlaklığını yavaşça artırır. Kapalıdan tam parlaklığa kadar geçen süre 30 dakika sürer.

Philips uyandırma lambaları o kadar pahalı değil ama tek rengi var ve biraz küçük görünüyor. Daha iyisini yapabileceğimi düşünüyorum.

2. Adım: Daha Fazla Renk

Daha Fazla Renk
Daha Fazla Renk

Uyandırma ışığım beyaz, kırmızı, mavi ve yeşil olmak üzere dört renk kullanır. Önce beyaz ledler, sonra kırmızı ledler ve birkaç mavi ve yeşil led gelir. Benim fikrim, biraz beyazla başlayıp biraz sonra kırmızı ekleyerek ve sonunda mavi ve yeşili karıştırarak, yalnızca parlaklığın artmasını değil, aynı zamanda sabah ışık renginin değişimini de simüle edebilmemdi. Gerçek sabah ışığına gerçekten benzediğinden emin değilim, ama şimdi olduğu gibi renkli ekranı seviyorum.

Benimki de Philips uyandırma ışığından daha hızlı, 30 dakikalık Philips ışığı yerine, benimki 5 dakikadan daha kısa sürede %0'dan %100'e çıkıyor. Yani güneşim çok daha hızlı doğuyor.

NOT:

Uyandırma ışığımın fotoğraflarını çekmek ÇOK zor, birkaç kamera ve akıllı telefonla denedim ama yaptığım tüm resimler gerçek olanı adalet yapmıyor.

Adım 3: Sigmoid Eğrisi, Titreme ve "çözünürlük"

Sigmoid Eğri, Titreme ve
Sigmoid Eğri, Titreme ve

Tabii ki parlaklığı olabildiğince pürüzsüz hale getirmek istedim. İnsan gözünün duyarlılığı logaritmiktir, yani zifiri karanlıkta tam gün ışığında olduğundan daha hassastır. Seviyeler düşükken parlaklıktaki çok küçük bir artış, ışık %40 parlaklıktayken çok daha büyük bir adımla aynı "hissediyor". Bunu başarmak için Sigmoid (veya S-eğrisi) adı verilen özel bir eğri kullandım, bu eğri üstel bir eğri olarak başlar ve yarıya kadar tekrar düzleşir. Yoğunluğu arttırmanın (ve azaltmanın) çok güzel bir yolu olduğunu buldum.

Mikrodenetleyicinin (ve zamanlayıcıların) saat frekansı 16 MHz'dir ve üç darbe genişliği sinyali (PWM) oluşturmak için maksimum TIMER2 (65536) çözünürlüğünü kullanıyorum. Bu nedenle darbeler saniyede 16000000 / 65536 = 244 kez gelir. Bu, herhangi bir titreme görmek için gözlerin sınırının çok üzerindedir.

Böylece ledler, STM8S103 mikrodenetleyicinin bu 16 bittimeri ile yapılan bir PWM sinyali ile beslenir. Minimumda bu PWM sinyali AÇIK olabilir, 1 darbe uzunluğu uzunluğunda ve kalan 65535 darbe uzunluğu kapalıdır.

Böylece o PM sinyaline bağlı ledler zamanın 1/65536'sında AÇIK olacaktır: %0,0015

Maksimumda, zamanın 65536/65536'sında AÇIK durumdalar: %100.

Adım 4: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik

mikrodenetleyici

Uyandırma ışığının beyni, STMicroelectronics'in bir STM8S103 mikro denetleyicisidir. Bir iş için yeterli kapasiteye sahip parçaları kullanmayı seviyorum. Bunun gibi basit bir iş için STM32 mikrodenetleyici kullanmak gerekli değil (diğer favorilerim) ancak Arduino UNO yeterli değildi çünkü 16 bit çözünürlüklü üç PWM sinyali istedim ve bir UNO'da üç çıkış kanallı zamanlayıcı yok.

Gerçek Zamanlı Saat

Saat, 32768 Hz kristal ile çalışan ve 3V yedek pile sahip bir DS1307 gerçek zamanlı saatten okunur.

Güncel saat, gün ve uyanma zamanının ayarlanması iki buton ile yapılır ve 16 x 2 LCD karakter ekran ile gösterilir. Yatak odamı geceleri gerçekten karanlık tutmak için, LCD ekranın arka ışığı yalnızca ledler arka ışıktan daha parlak olduğunda ve saati, günü ve uyanma saatini ayarlarken açılır.

Güç

Güç eski bir dizüstü bilgisayar güç kaynağından geliyor, benimki 12V üretiyor ve 3A sağlayabilir. Başka bir güç kaynağınız olduğunda, dirençleri led dizileriyle seri olarak ayarlamak gerekebilir. (Aşağıya bakınız)

Ledler

Ledler 12V kaynağına bağlı, elektronik parçaların geri kalanı 5V üzerinde 7805 lineer regülatör ile yapılmıştır. Şematikte, mikrodenetleyici, ekran ve gerçek zamanlı saat sadece birkaç miliamper kullandığı için gerekli olmayan bir TO220 regülatörü kullandığımı söylüyor. Saatim, 7805'in 150mA sağlayabilen daha küçük bir TO92 sürümünü kullanıyor.

Led dizilerinin anahtarlanması N-kanallı MOSFET'ler ile yapılır. Yine şemada benim kullandığımdan başka cihazları gösteriyor. Daha yeni IRLZ34N MOSFET'ler yerine tam olarak üç çok eski BUZ11 MOSFET'im oldu. iyi çalışıyorlar

Tabii ki MOSFET'ler ve güç kaynağı akımı kaldırabildiği sürece istediğiniz kadar led koyabilirsiniz. Şemada herhangi bir rengin sadece bir dizisini çizdim, gerçekte her rengin o rengin diğer dizilerine paralel birkaç tane var.

Adım 5: Dirençler (Ledler için)

Dirençler (Ledler için)
Dirençler (Ledler için)

Led dizilerindeki dirençler hakkında. Beyaz ve mavi ledler genellikle tam parlaklıkta olduklarında üzerlerinde 2.8V voltaj bulunur.

Kırmızı ledlerde sadece 1.8V var, yeşil ledlerde tam parlaklıkta 2V var.

Başka bir şey, tam parlaklıklarının aynı olmamasıdır. Bu yüzden onları eşit derecede parlak hale getirmek (gözlerime) biraz deneme aldı. Ledleri tam parlaklıkta eşit parlak hale getirerek, daha düşük seviyelerde de eşit parlak görüneceklerdir, darbe genişliği sinyali onları her zaman tam parlaklıkta açar, ancak daha uzun ve daha kısa sürelerde ortalamayı gözleriniz halleder.

Böyle bir hesaplama ile başlayın. Güç kaynağı (benim durumumda) 12V sağlar.

Serideki dört beyaz led, 4 x 2.8V = 11.2V'ye ihtiyaç duyar, bu direnç için 0.8V bırakır.

30mA'da yeterince parlak olduklarını bulmuştum, bu yüzden direncin olması gerekiyor:

0,8 / 0,03 = 26,6 ohm. Şemada 22 ohm'luk bir direnç koyduğumu görüyorsunuz, bu da ledleri biraz daha parlak hale getiriyor.

Mavi ledler 30mA'da çok parlaktı, ancak 15 mA'daki beyaz ledlere kıyasla güzel, ayrıca 15mA'da 2.8V üzerindeydiler, bu nedenle hesaplama 4 x 2.8V = 11.2V idi ve yine 0.8V kaldı

0.8 / 0.015 = 53,3 ohm bu yüzden 47 ohm'luk bir direnç seçtim.

Kırmızı ledlerimin de diğerleri kadar parlak olması için yaklaşık 15 mA te'ye ihtiyacı var, ancak o akımda üzerlerinde sadece 1.8V var. Böylece daha fazla seri bağlayabilir ve direnç için hala biraz "boşluk" bırakabilirim.

Altı kırmızı led bana 6 x 1.8 = 10.8V verdi, yani direnç üzerinden 12 – 10.8 = 1.2V oldu

1.2 / 0.015 = 80 ohm, 68 ohm yaptım. Tıpkı diğerleri gibi, biraz daha parlak.

Kullandığım yeşil ledler yaklaşık 20mA'da diğerleri kadar parlak. Sadece birkaçına ihtiyacım vardı (tıpkı mavi olanlar gibi) ve dördünü seri olarak koymayı seçtim. 20mA'da üzerlerinde 2, 1V var ve 3 x 2.1 = 8.4V veriyor

Direnç için 12 – 8.4 = 3.6V. Ve 3.6 / 0.02 = 180 ohm.

Bu uyandırma ışığını kurarsanız, aynı güç kaynağına sahip olmanız pek olası değildir, serideki led sayısını ve gereken dirençleri ayarlamanız gerekecektir.

Küçük bir örnek. 20V veren bir güç kaynağınız olduğunu varsayalım. Direnç için 6 x 3V = 18V, yani 2V olmak üzere 6 mavi (ve beyaz) led'i seri olarak ayarlamayı seçerdim. Diyelim ki 40mA'daki parlaklığı beğendiniz. Direnç daha sonra 2V / 0.04 = 50 ohm olmalıdır, 47 ohm'luk bir direnç iyi olacaktır.

Sıradan (5mm) ledler ile 50mA'dan daha yükseğe çıkmamanızı tavsiye ederim. Bazıları daha fazlasını kaldırabilir ama ben güvenli tarafta olmayı seviyorum.

6. Adım: Yazılım

Tüm kod şuradan indirilebilir:

gitlab.com/WilkoL/wakeup_light_stm8s103

Açıklamayı takip etmek istiyorsanız, bu talimatın geri kalanının yanında kaynak kodunu açık tutun.

ana.c

Main.c önce saati, zamanlayıcıları ve diğer çevre birimlerini kurar. STMicroelectronics'in Standart Kütüphanesini kullanarak yazdığım “sürücülerin” çoğu ve bunlar hakkında herhangi bir sorunuz varsa, talimat tablosunun altına bir yorum yazın.

Eeprom

STM8S103'ün eeprom'una metinleri koymak için kullandığım “görüntülenecek metin” kodunu yorum olarak bıraktım. Tüm kodum için yeterli flash belleğe sahip olduğumdan emin değildim, bu yüzden eeprom'a program için tamamen flash olması için mümkün olduğunca çok şey koymaya çalıştım. Sonunda bunun gerekli olmadığı anlaşıldı ve metni flaşa taşıdım. Ama bunu main.c dosyasında yorumlanmış metin olarak bıraktım. Daha sonra benzer bir şey yapmam gerektiğinde buna sahip olmak güzel (başka bir projede)

Eeprom hala kullanılıyor, ancak yalnızca uyanma zamanını saklamak için.

saniyede bir

Çevre birimlerini kurduktan sonra kod, bir saniyenin geçip geçmediğini kontrol eder (bir zamanlayıcı ile yapılır).

Menü

Bu durumda herhangi bir tuşa basılıp basılmadığını kontrol eder, basılmışsa mevcut saati, haftanın gününü ve uyanma saatini ayarlayabileceğiniz menüye girer. Kapalı durumdan tam parlaklığa geçmenin yaklaşık 5 dakika sürdüğünü unutmayın, bu nedenle uyanma saatini biraz daha erkene ayarlayın.

Uyanma zamanı eeprom'da saklanır, böylece elektrik kesintisinden sonra bile sizi ne zaman uyandıracağını "bilir". Geçerli saat, elbette gerçek zaman saatinde saklanır.

Karşılaştırma akımı ve uyanma zamanı

Hiçbir düğmeye basılmadığında, geçerli saati kontrol eder ve uyanma saati ve hafta içi ile karşılaştırır. Hafta sonu beni uyandırmasını istemiyorum:-)

Çoğu zaman hiçbir şey yapılması gerekmez, bu nedenle “ledler” değişkenini KAPALI, diğer yandan AÇIK olarak ayarlar. Bu değişken, yine bir zamanlayıcıdan gelen ve saniyede 244 kez aktif olan “change_intensity” sinyali ile birlikte kontrol edilir. Yani “ledler” değişkeni AÇIK olduğunda yoğunluk saniyede 244 kez artar ve KAPALI olduğunda saniyede 244 kez azalır. Ancak artış tek adımda gerçekleşir ve düşüş 16'lık adımlarla gerçekleşir, yani uyandırma ışığı umarım işini yaptığında 16 kat daha hızlı ama yine de sorunsuz kapanır.

Pürüzsüzlük ve HAFIZA DIŞI

Düzgünlük, Sigmoid eğrisi hesaplamasından gelir. Hesaplama oldukça basittir ancak exp() işlevi nedeniyle kayan noktalı değişkenlerde (double) yapılması gerekir, sigmoid.c dosyasına bakın.

Standart durumda, Kozmik derleyici/bağlayıcı kayan nokta değişkenlerini desteklemez. Açmak kolaydır (bir kez bulduktan sonra), ancak kod boyutunda bir artış ile birlikte gelir. Bu artış, sprintf() işleviyle birleştirildiğinde kodu flash belleğe sığdırmak için çok fazlaydı. Ve bu işlev, sayıları ekran için metne dönüştürmek için gereklidir.

itoa()

Bu sorunu çözmek için itoa() işlevini yarattım. Bu, oldukça yaygın olan, ancak STMicroelectronics standart kitaplığına veya Kozmik kitaplıklara dahil edilmeyen bir Tam Sayıdan Ascii'ye işlevidir.

7. Adım: IKEA (Onlar Olmasa Ne Yapardık)

IKEA (Onlar Olmasa Ne Yapardık)
IKEA (Onlar Olmasa Ne Yapardık)
IKEA (Onlar Olmasa Ne Yapardık)
IKEA (Onlar Olmasa Ne Yapardık)
IKEA (Onlar Olmasa Ne Yapardık)
IKEA (Onlar Olmasa Ne Yapardık)

Resim IKEA'dan alınmıştır. 50 x 40 cm Ribba çerçevedir. Bu çerçeve oldukça kalındır ve bu, elektronik aksamları arkasına saklamak için harikadır. Poster ya da resim yerine bir parça delikli sunta koydum. Bazen "yatak tahtası" olarak adlandırılan hırdavatçıdan satın alabilirsiniz. İçinde ledleri yerleştirmek için ideal kılan küçük delikler vardır. Maalesef panomdaki delikler 5 mm'den biraz daha büyüktü, bu yüzden ledleri "montaj" için sıcak tutkal kullanmak zorunda kaldım.

16x2 ekran için kartonun ortasına dikdörtgen bir delik açtım ve içeri bastırdım. Tüm elektronik aksamlı PCB bu ekranda asılı kalıyor, başka bir şeye monte edilmiyor.

Delikli sunta, spreyle siyaha boyanmıştı ve matın arkasındaydı. Saat ve tarihi ayarlamak için çerçeveye iki delik açtım, çerçeve oldukça kalın olduğu için düğmelerin yeterince dışarı çıkması için çerçevenin içindeki delikleri genişletmek zorunda kaldım.

Önerilen: