Daftar Isi:

Lampu Bangun: 7 Langkah (dengan Gambar)
Lampu Bangun: 7 Langkah (dengan Gambar)

Video: Lampu Bangun: 7 Langkah (dengan Gambar)

Video: Lampu Bangun: 7 Langkah (dengan Gambar)
Video: Ini cara bisa lihat hantu, bukan magic! #Shorts Nasya kaila nazifah 2024, November
Anonim
Cahaya Bangun
Cahaya Bangun

Saat saya menulis instruksi ini, ini adalah pertengahan musim dingin di belahan bumi utara dan itu berarti siang yang pendek dan malam yang panjang. Saya terbiasa bangun jam 06:00 dan di musim panas matahari akan bersinar saat itu. Namun, di Musim Dingin, cuaca terang pada pukul 09:00 jika kita beruntung memiliki hari yang tidak berawan (yang…tidak sering).

Beberapa waktu lalu saya membaca tentang “lampu bangun” buatan Philips yang digunakan di Norwegia untuk mensimulasikan pagi yang cerah. Saya tidak pernah membelinya, tetapi saya terus berpikir untuk membuatnya karena membuat sendiri lebih menyenangkan daripada hanya membelinya.

Perlengkapan:

Bingkai foto "Ribba" 50 x 40 cm dari IKEA

hardboard berlubang dari toko perangkat keras

Papan pengembangan STM8S103 melalui Ebay atau lainnya

DS1307 Jam Waktu Nyata (Mouser, Farnell, Conrad, dll)

32768 Hz kristal jam (Mouser, Farnell, Conrad, dll)

3V lithium coincell + pemegang coincell

BUZ11 atau IRLZ34N N-channel MOSFET (3x)

BC549 (atau transistor NPN lainnya)

LED putih, merah, biru, hijau, dll sebanyak yang Anda inginkan

beberapa resistor dan kapasitor (lihat skema)

Powerbrick, 12V hingga 20V, 3A atau lebih (mis. catu daya laptop lama)

Langkah 1: Membuatnya (Sedikit) Lebih Mudah untuk Bangun

Membuatnya (Sedikit) Lebih Mudah untuk Bangun
Membuatnya (Sedikit) Lebih Mudah untuk Bangun

Idenya adalah sulit untuk bangun dari tempat tidur di pagi hari ketika hari masih gelap. Dan jika Anda tinggal dekat atau bahkan di atas lingkaran Arktik, kegelapan akan sangat panjang. Di tempat-tempat seperti Tromsö di Norwegia tidak akan mendapatkan cahaya sama sekali karena di sana matahari terbenam setengah November hanya untuk muncul kembali di pertengahan Januari.

Jadi yang dilakukan Philips adalah mensimulasikan terbitnya matahari.

Philips perlahan meningkatkan kecerahan lampu, yang mungkin dibuat dengan beberapa led tetapi tersembunyi di balik satu diffuser. Waktu mereka dari mati ke kecerahan penuh membutuhkan waktu 30 menit.

Lampu bangun Philips tidak terlalu mahal tetapi hanya memiliki satu warna dan terlihat agak kecil. Saya pikir saya bisa melakukan yang lebih baik.

Langkah 2: Lebih Banyak Warna

Lebih Banyak Warna
Lebih Banyak Warna

Lampu bangun saya menggunakan empat warna, putih, merah, biru, dan hijau. Pertama datang led putih, kemudian merah, dan terakhir beberapa led biru dan hijau. Ide saya adalah bahwa saya dapat mensimulasikan tidak hanya peningkatan kecerahan tetapi juga pergeseran warna cahaya pagi, dengan memulai dengan sedikit putih, menambahkan merah sedikit kemudian dan mencampur biru dan hijau pada akhirnya. Saya tidak yakin apakah itu benar-benar menyerupai cahaya pagi yang sebenarnya, tetapi saya menyukai tampilan warna-warni seperti sekarang.

Milik saya juga lebih cepat daripada lampu bangun Philips, alih-alih lampu Philips selama 30 menit, kecerahan saya berubah dari 0% menjadi 100% dalam waktu kurang dari 5 menit. Jadi matahari saya terbit lebih cepat.

CATATAN:

SANGAT sulit untuk membuat gambar cahaya bangun tidur saya, saya mencoba dengan beberapa kamera dan smartphone tetapi semua gambar yang saya buat tidak sesuai dengan aslinya.

Langkah 3: Kurva Sigmoid, Berkedip dan "resolusi"

Kurva Sigmoid, Berkedip dan
Kurva Sigmoid, Berkedip dan

Tentu saja saya ingin membuat pencerahannya sehalus mungkin. Mata manusia memiliki sensitivitas logaritmik, yang berarti bahwa dalam kegelapan total mereka lebih sensitif daripada di siang hari penuh. Peningkatan kecerahan yang sangat kecil ketika levelnya rendah "terasa" sama dengan langkah yang jauh lebih besar ketika cahaya berada pada kecerahan katakanlah 40%. Untuk mencapai ini, saya menggunakan kurva khusus yang disebut Sigmoid (atau kurva S) kurva ini dimulai sebagai kurva eksponensial yang setengahnya turun lagi. Saya menemukan bahwa ini adalah cara yang sangat bagus untuk meningkatkan (dan mengurangi) intensitas.

Frekuensi clock mikrokontroler (dan timer) adalah 16 MHzdan saya menggunakan resolusi maksimum TIMER2 (65536) untuk membuat tiga sinyal lebar pulsa (PWM). Oleh karena itu pulsa datang 16000000 / 65536 = 244 kali per detik. Itu jauh di atas batas mata untuk melihat kedipan apapun.

Jadi led diumpankan dengan sinyal PWM yang dibuat dengan 16 bittimer mikrokontroler STM8S103 ini. Minimal sinyal PWM ini bisa ON adalah panjang pulsa 1 panjang dan sisanya 65535 panjang pulsa off.

Jadi led yang terhubung ke sinyal PM itu akan ON 1/65536-th dari waktu: 0,0015%

Maksimum mereka ON 65536/65536-th: 100%.

Langkah 4: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik

Mikrokontroler

Otak dari wakeup light adalah mikrokontroler STM8S103 dari STMicroelectronics. Saya suka menggunakan suku cadang yang memiliki kemampuan yang cukup untuk suatu pekerjaan. Untuk tugas sederhana seperti ini, tidak perlu menggunakan mikrokontroler STM32 (favorit saya yang lain) tetapi Arduino UNO tidak cukup karena saya menginginkan tiga sinyal PWM dengan resolusi 16 bit dan tidak ada pengatur waktu dengan tiga saluran keluaran pada UNO.

Jam Waktu Nyata

Waktu dibaca dari jam waktu nyata DS1307 yang bekerja dengan kristal 32768 Hz dan memiliki baterai cadangan 3V.

Pengaturan waktu sekarang, hari dan waktu bangun dilakukan dengan dua tombol dan ditampilkan layar karakter LCD 16 x 2. Untuk menjaga agar kamar tidur saya benar-benar gelap di malam hari, lampu latar layar LCD dinyalakan hanya saat lampu led lebih terang dari lampu latar dan saat Anda menyetel waktu, hari, dan waktu bangun.

Kekuasaan

Daya berasal dari catu daya laptop lama, milik saya menghasilkan 12V dan dapat mengirimkan 3A. Bila Anda memiliki catu daya lain, Anda mungkin perlu menyesuaikan resistor secara seri dengan senar led. (Lihat di bawah)

LED

Led terhubung ke suplai 12V, sisa elektronik bekerja pada 5V dibuat dengan regulator linier 7805. Dalam skema dikatakan bahwa saya menggunakan regulator TO220, yang tidak diperlukan karena mikrokontroler, tampilan, dan jam waktu nyata hanya menggunakan beberapa miliampere. Jam saya menggunakan versi TO92 yang lebih kecil dari 7805 yang mampu memasok 150mA.

Pergantian led-string dilakukan dengan N-channel MOSFET. Sekali lagi, dalam skema ini menunjukkan perangkat lain selain yang saya gunakan. Saya kebetulan memiliki tiga MOSFET BUZ11 yang sangat tua, bukan MOSFET IRLZ34N yang lebih baru. Mereka bekerja dengan baik

Tentu saja Anda dapat memasang led sebanyak yang Anda suka, selama MOSFET dan catu daya dapat menangani arus. Dalam skema saya telah menggambar hanya satu string warna apapun, pada kenyataannya ada beberapa warna masing-masing sejajar dengan string lain dari warna itu.

Langkah 5: Resistor (untuk Led)

Resistor (untuk LED)
Resistor (untuk LED)

Tentang resistor di string yang dipimpin. LED putih dan biru biasanya memiliki tegangan 2.8V di atasnya ketika mereka berada pada kecerahan penuh.

LED merah hanya memiliki 1,8V, led hijau saya memiliki 2V di atasnya dengan kecerahan penuh.

Hal lain adalah kecerahan penuhnya tidak sama. Jadi butuh beberapa percobaan untuk membuatnya sama cerahnya (di mata saya). Dengan membuat led sama terangnya pada kecerahan penuh, mereka juga akan terlihat sama terangnya pada tingkat yang lebih rendah, sinyal lebar pulsa selalu menyalakannya pada kecerahan penuh tetapi selama waktu yang lebih lama dan lebih pendek, mata Anda memperhatikan rata-rata.

Mulailah dengan perhitungan seperti ini. Catu daya memberikan (dalam kasus saya) 12V.

Empat led putih secara seri membutuhkan 4 x 2.8V = 11.2V, ini menyisakan 0.8V untuk resistor.

Saya telah menemukan bahwa mereka cukup terang pada 30mA sehingga resistor harus:

0,8 / 0,03 = 26,6 ohm. Dalam skema Anda melihat bahwa saya memasang resistor 22 ohm, membuat led sedikit lebih terang.

LED biru terlalu terang pada 30mA, tetapi dibandingkan bagus dengan led putih pada 15 mA, mereka juga memiliki sekitar 2.8V di atasnya pada 15mA sehingga perhitungannya adalah 4 x 2.8V = 11.2V lagi menyisakan 0.8V

0,8 / 0,015 = 53,3 ohm jadi saya memilih resistor 47 ohm.

LED merah saya juga membutuhkan sekitar 15 mA te sama terangnya dengan yang lain, tetapi mereka hanya memiliki 1,8V di atasnya pada saat itu. Jadi saya bisa memasang lebih banyak seri dan masih memiliki "ruang" untuk resistor.

Enam led merah memberi saya 6 x 1,8 = 10.8V, jadi resistornya adalah 12 – 10.8 = 1.2V

1,2 / 0,015 = 80 ohm, saya membuatnya menjadi 68 ohm. Sama seperti yang lain, sedikit lebih cerah.

LED hijau yang saya gunakan seterang yang lain sekitar 20mA. Saya hanya membutuhkan beberapa (seperti yang biru) dan saya memilih untuk menempatkan empat seri. Pada 20mA mereka memiliki 2, 1V di atasnya, memberikan 3 x 2,1 = 8,4V

12 – 8.4 = 3.6V untuk resistor. Dan 3,6 / 0,02 = 180 ohm.

Jika Anda membangun lampu bangun ini, kecil kemungkinan Anda memiliki catu daya yang sama, Anda harus menyesuaikan jumlah led secara seri dan resistor yang dibutuhkan.

Contoh kecil. Katakanlah Anda memiliki catu daya yang memberi 20V. Saya akan memilih untuk mengatur 6 led biru (dan putih) secara seri, 6 x 3V = 18V jadi 2V untuk resistor. Dan katakanlah Anda menyukai kecerahan pada 40mA. Resistor kemudian harus 2V / 0,04 = 50 ohm, resistor 47 ohm akan baik-baik saja.

Saya menyarankan untuk tidak lebih tinggi dari 50mA dengan led biasa (5mm). Beberapa dapat menangani lebih banyak, tetapi saya suka berada di sisi yang aman.

Langkah 6: Perangkat Lunak

Semua kode dapat diunduh dari:

gitlab.com/WilkoL/wakeup_light_stm8s103

biarkan kode sumber tetap terbuka, di sebelah sisa instruksi ini jika Anda ingin mengikuti penjelasannya.

Main.c

Main.c pertama-tama mengatur jam, timer, dan periferal lainnya. Sebagian besar "driver" yang saya tulis menggunakan Perpustakaan Standar dari STMicroelectronics dan jika Anda memiliki pertanyaan tentangnya, tulis di komentar di bawah instruksi.

Eeprom

Saya meninggalkan kode "teks untuk ditampilkan" yang saya gunakan untuk meletakkan teks di eeprom STM8S103 sebagai komentar. Saya tidak yakin bahwa saya memiliki memori flash yang cukup untuk semua kode saya, jadi saya mencoba memasukkan sebanyak mungkin ke eeprom untuk memiliki semua flash untuk program tersebut. Pada akhirnya itu terbukti tidak perlu dan saya memindahkan teks ke flash. Tapi saya meninggalkannya sebagai teks komentar di file main.c. Sangat menyenangkan memilikinya, ketika saya perlu melakukan sesuatu yang serupa nanti (di proyek lain)

Eeprom masih digunakan, tetapi hanya untuk menyimpan waktu bangun.

Sekali sedetik

Setelah mengatur periferal, kode memeriksa apakah satu detik telah berlalu (dilakukan dengan pengatur waktu).

Tidak bisa

Jika demikian, ia akan memeriksa apakah sebuah tombol ditekan, jika demikian ia memasuki menu di mana Anda dapat mengatur waktu saat ini, hari dalam seminggu, dan waktu bangun. Ingatlah bahwa dibutuhkan sekitar 5 menit untuk beralih dari kecerahan penuh, jadi atur waktu bangun sedikit lebih awal.

Waktu bangun disimpan di eeprom sehingga bahkan setelah pemadaman listrik akan "tahu" kapan harus membangunkan Anda. Waktu saat ini disimpan dalam jam waktu nyata tentu saja.

Perbandingan saat ini & waktu bangun

Ketika tidak ada tombol yang ditekan, ia memeriksa waktu saat ini dan membandingkannya dengan waktu bangun dan hari kerja. Saya tidak ingin membangunkan saya di akhir pekan:-)

Sebagian besar waktu tidak ada yang perlu dilakukan sehingga mengatur variabel "leds" ke OFF yang lain ke ON. Variabel ini diperiksa bersama dengan sinyal “change_intensity”, yang juga berasal dari timer dan aktif 244 kali per detik. Jadi ketika variabel "led" ON intensitasnya meningkat 244 kali per detik dan ketika OFF berkurang 244 kali per detik. Tetapi peningkatannya terjadi dalam satu langkah di mana penurunannya adalah dalam langkah 16 yang berarti bahwa ketika lampu bangun diharapkan melakukan tugasnya, itu mati 16 kali lebih cepat tetapi masih lancar.

Kelancaran dan OUT OF MEMORY

Kehalusan berasal dari perhitungan kurva Sigmoid. Perhitungannya cukup sederhana tetapi perlu dilakukan pada variabel floating point (ganda) karena fungsi exp(), lihat file sigmoid.c.

Dalam situasi standar, compiler/linker Cosmic tidak memiliki dukungan untuk variabel floating point. Mengaktifkannya mudah (setelah Anda menemukannya) tetapi disertai dengan peningkatan ukuran kode. Peningkatan ini terlalu banyak untuk membuat kode muat di memori flash saat digabungkan dengan fungsi sprintf(). Dan fungsi itu diperlukan untuk mengubah angka menjadi teks untuk tampilan.

Itoa()

Untuk mengatasi masalah ini saya membuat fungsi itoa(). Ini adalah fungsi Integer To Ascii yang agak umum, tetapi tidak disertakan dengan perpustakaan standar STMicroelectronics, atau dengan perpustakaan Cosmic.

Langkah 7: IKEA (Apa yang Akan Kami Lakukan Tanpa Mereka)

IKEA (Apa yang Akan Kami Lakukan Tanpa Mereka)
IKEA (Apa yang Akan Kami Lakukan Tanpa Mereka)
IKEA (Apa yang Akan Kami Lakukan Tanpa Mereka)
IKEA (Apa yang Akan Kami Lakukan Tanpa Mereka)
IKEA (Apa yang Akan Kami Lakukan Tanpa Mereka)
IKEA (Apa yang Akan Kami Lakukan Tanpa Mereka)

Gambar dari dibeli dari IKEA. Ini adalah bingkai Ribba berukuran 50 x 40 cm. Bingkai ini cukup tebal dan membuatnya bagus untuk menyembunyikan barang elektronik di belakangnya. Alih-alih poster atau gambar, saya memasukkan sepotong papan berlubang. Anda dapat membelinya di toko perangkat keras di mana kadang-kadang disebut "papan tempat tidur" Ini memiliki lubang kecil di dalamnya yang membuatnya ideal untuk memasang led. Sayangnya lubang di papan saya sedikit lebih besar dari 5 mm jadi saya harus menggunakan lem panas untuk "memasang" led.

Saya membuat lubang persegi panjang di tengah papan keras untuk layar 16x2 dan menekannya. PCB dengan semua elektronik menggantung pada layar ini, tidak dipasang ke hal lain.

Hardboard berlubang itu dicat hitam dan tetapi di belakang tikar. Saya mengebor dua lubang di bingkai untuk tombol untuk mengatur waktu dan tanggal, karena bingkai agak tebal saya harus memperlebar lubang di bagian dalam bingkai untuk membuat tombol cukup menonjol.

Direkomendasikan: