Smart Blinds: Kontrol Cahaya Otomatis dengan Arduino & Energi Surya
Komponen dan Perlengkapan
| Komponen | Jumlah |
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | 1 |
| Arduino UNO | 1 |
| Sensor Suhu | 1 |
| Transistor PNP PN2907A | 1 |
| LDR (Resistor Terbuka Cahaya) | 1 |
| Resistor 10k ohm | 1 |
| Resistor 1k ohm | 1 |
| Panel Surya | 1 |
| DC-DC Booster | 1 |
| Konektor JST | 1 |
| Tempat Baterai 4xAA | 1 |
| Servo (Tower Pro MG996R) | 1 |
| Baterai Lithium 3.6V Rechargeable | 1 |
| Coupling Motor Servo | 1 |
| Kapasitor 100 nF | 1 |
| PCB Custom OSH Park | 1 |
| Kabel Jumper Beragam | 1 |
Alat yang Diperlukan
- Pemoleng (Soldering iron)
- Bor
- SolderWire
- Pemotong Kabel
- Pepolos Kabel
- Multimeter
- Dremel
- Papan Sirkuit/Papan Roti Solder
- Sangkat Kulit Kabel
Aplikasi dan Layanan Online
- Arduino IDE – untuk pemrograman
Tentang Proyek Ini
Halo! Proyek ini membahas perbaikan yang dibuat pada proyek asli saya, yaitu Jendela Vertikal Otomatis Tenaga Surya. Desain asli yang diposting memenuhi kebutuhan saat itu. Sistem beroperasi dengan baik selama hampir 4 bulan sebelum beberapa kekurangan desain menjadi terlihat.
Untuk meringkas, tujuan jendela vertikal adalah untuk membuka dan menutup berdasarkan tingkat cahaya, baik untuk memasuki cahaya atau menutup untuk privasi. Selain itu, jendela vertikal harus menutup ketika terlalu "panas," yang merupakan penentuan yang sepenuhnya subjektif.
Saya mengimpor proyek ini dari tempat lain, dan bagian alat/perlengkapan di sini tidak memberikan opsi yang saya inginkan, jadi Anda harus menerima daftar item seperti itulah, alih-alih dalam format Hackster.io yang rapi. Maaf.
Desain Baru Melakukan Hal Berikut:
- Membuka (putar ke 85 derajat) di pagi hari untuk memasuki cahaya
- Menutup (putar ke 0 derajat - jendela vertikal menunjuk ke bawah) di malam hari untuk memberikan privasi
- Menutup (putar ke 165 derajat - jendela vertikal menunjuk ke atas, melawan matahari) jika suhu melebihi 30 C (~86 F) - suhu ini subjektif, tingkat kenyamanan Anda mungkin berbeda.
- Melakukan semua aktivitas ini tanpa kabel eksternal, kotak, perangkat, dll. Dengan kata lain, lulus Faktor Penerimaan Istri.
- Cukup berkelanjutan sehingga saya tidak meninggalkan proyek karena harus mengganti baterai terlalu sering.
- Tidak terlalu mahal. Saya pikir hasil akhirnya adalah jendela vertikal dapat dibangun dengan sekitar $50 US. Uang yang diinvestasikan untuk alat baru, dan waktu yang dihabiskan untuk pemrograman, pengujian, solder, dan eksperimen, tentu saja, tidak dihitung.
Alasan untuk persyaratan desain ini adalah jendela yang dirancang untuk ini adalah jendela lantai 2 di atas pintu depan rumah. Jendela ini menghadap Selatan (benar-benar SSE), yang berarti ada banyak sinar matahari (dan potensi kehangatan) di musim panas dengan jendela vertikal terbuka, tetapi potensi terlalu panas di musim panas.
Seperti yang dinyatakan, jendela vertikal bekerja sempurna selama sekitar 4 bulan (pasang Januari, mereka kembali turun sekitar Juni). Kekurangan yang ditemukan adalah:
- Rumah tidak menghadap Selatan dengan tepat... Oleh karena itu di musim panas, matahari ada di jendela sebagian besar hari, hanya meninggalkan jendela petang hari. Ini memberikan banyak pengisian daya surya selama musim panas. Namun di musim panas, matahari melintasi rumah pada siang hari, yang berarti tidak cukup matahari untuk mengisi daya untuk sebagian besar jam cahaya. Dan tempat panel surya asli di jendela mendapat bayangan untuk beberapa jam pertama hari, di atasnya. Solusi: Posisi panel surya yang lebih baik.
- Motor servo yang digunakan untuk mengontrol jendela vertikal menguras 13 mA terus-menerus. Ini membuat saya terkejut. Dalam percobaan pertama saya, saya tidak mengukur arus dengan servo dipasang karena multimeter saya tidak mendukung arus besar servo dan memberikan akurasi untuk melihat saat dalam "tidur." Solusi: High-Side Switch menggunakan Transistor PNP.
- Desain asli saya panel surya 6V sebenarnya bekerja melawan modul pengisian baterai LiPo. Modul pengisian memiliki input ber-rated 4.5V hingga 5.5V. Ketika panel menerima sinar matahari penuh dan menghasilkan 6V atau lebih listrik, modul pengisian mati. Saya tidak menemukan ini sampai setelah jendela vertikal dipasang. Solusi: panel yang diukur dengan benar.
- Tidak ada pengumpulan logging/telemetri. Ini membuatnya sangat sulit untuk mendiagnosis jendela vertikal ketika mulai mengalami gangguan. Solusi: Fungsi Logging EEPROM.
- Tidak ada cara untuk menghubungkan/memutuskan untuk mendiagnosis/perbaiki. Ini berlaku untuk baik panel surya dan baterai. Solusi: Konektor JST antara baterai dan sirkuit, panel surya dan sirkuit.
- Pengukuran (suhu dan cahaya) harus berdasarkan referensi tegangan 5V yang kokoh (VCC keluar pada Arduino), BUKAN output 5V dari DC-DC booster. Tegangan itu bisa bervariasi sedikit, yang mempengaruhi pengukuran konversi Analog-to-Digital. Dalam desain pertama saya, garis "5V" yang saya gunakan sebenarnya adalah garis tidak terregulasi yang keluar dari DC-DC booster. Solusi: Sepertinya jelas, bukan? Gunakan output 5V *terregulasi* dari Arduino Pro Mini.
Jadi mari kita mulai!
Langkah 1: Daftar Komponen
Saya memilih untuk menggunakan Arduino untuk proyek ini. Itu apa yang saya tahu. Anda dapat menggunakan mikrokontroler lain, apa saja yang sesuai dengan Anda. Anda akan melihat saya membeli banyak dari SparkFun - mereka lokal bagi saya. Yang hebatnya adalah saya dapat melakukan pemesanan di pagi hari dan kemudian mengambilnya sore hari itu juga.
Tautan lain yang Anda lihat berasal dari banggood.com - mereka memiliki banyak komponen murah, dan berbagai macam bagian elektronika. Jika Anda nyaman menunggu hingga satu bulan atau lebih untuk komponen Anda, Anda dapat mendapatkan barang murah. Dan dari taydaelectronics.com. Jika Anda dapat membeli beberapa barang sekaligus, harga sangat BAIK. Pengiriman cukup wajar. Jadi beberapa komponen yang Anda lihat dalam daftar saya sebenarnya saya pesan 5, 10, atau 20 item untuk mencapai minimum pemesanan. Siapa tahu, mungkin saya akan membangun beberapa ini.
- Arduino Pro Mini ($10 - SparkFun)
- Arduino Uno, untuk memrogram Mini - Anda dapat menggunakan kabel khusus, tetapi pengaturan ini bekerja untuk saya.
- Sensor suhu LM35DZ ($1.23 - Tayda)
- Transistor PNP PN2907A ($0.05 - Tayda)
- Resistor Terbuka Cahaya (LDR) ($1.24 untuk paket 10pc dari banggood.com)
- Satu (1) Resistor 10K-Ohm ($0.01 - Tayda) - meskipun saya membeli paket resistor dari SparkFun untuk $8.
- Panel Surya 5V 1.5W ($4.07 - banggood.com)
- DC-DC Booster 5V ($1.38 - banggood.com)
- Modul Pengisian Baterai Lithium ($2.89 untuk paket 3pc dari banggood.com)
- Konektor JST ($3.33 untuk paket 60 dari banggood.com)
- Baterai Lithium 3.6V Rechargeable ($15.39 untuk paket 4 dari Amazon, termasuk charger dinding)
- Tempat Baterai 18650 ($1 - SparkFun)
- Motor servo (Saya menggunakan Hitec HS-325HB yang saya temukan di toko hobi lokal) (Ini adalah setara) Saya harus menebak jenis torsi yang diperlukan. Saya tidak dapat menemukan kunci torsi yang cukup murah untuk melakukan pengukuran.
- Coupling motor servo. Karena saya menggunakan Servo Hitec, saya membutuhkan ini. ($5 - SparkFun)
- Kapasitor 100 uF ($0.03 - Tayda)
- Kabel jumper beragam (Saya membeli kit ini - $17.79 di Amazon)
- PCB ($2.74 untuk paket 10 di Amazon)
Langkah 2: Alat
Item yang berguna untuk dimiliki:
- Dremel atau alat pemotong kecil serupa
- Papan Sirkuit/Papan Roti Solder
Langkah 3: Buat Prototipe Proyek
OK. Jadi sekarang setelah Anda memiliki semua komponen dan area kerja, saatnya untuk mencampur semuanya dan melihat apa yang terjadi.
Dalam proyek asli, hal pertama yang saya lakukan adalah menghubungkan dua baterai AA ke DC-DC booster 5V dan memverifikasi bahwa saya mendapat output 5V. Kali ini, saya melakukan hal yang sama, hanya dengan baterai aktual, baterai lithium rechargeable 3.6V. Saat penuh diisi, ia berada pada 4.1-4.2V. Menurut multimeter saya, saya mendapat 5.04V dari booster. Cukup baik.
Langkah berikutnya yang saya ambil adalah meletakkan semua komponen pada papan roti tanpa solder, untuk menulis kode untuk mengontrolnya, serta mengambil pengukuran arus dan tegangan.
- Hubungkan konektor yang sesuai dari modul pengisian baterai lithium ke baterai dan panel surya (Positif ke positif, negatif ke negatif)
- Hubungkan kabel dari terminal positif panel ke analog A0 - ini memberikan tegangan panel untuk logging.
- Baterai juga terhubung ke DC-DC booster 5V.
- Hubungkan kabel dari terminal positif baterai ke analog A1 - ini memberikan tegangan baterai untuk logging.
- Output 5V dari booster pergi ke input RAW pada Arduino.
- Ground dari booster 5V digunakan di seluruh bagian.
- Hubungkan pin VCC Arduino ke semua yang memerlukan 5V terregulasi.
- Servo dapat terhubung ke output 5V dari DC-DC booster, tetapi akan melalui transistor PNP terlebih dahulu.
- Dari LDR, hubungkan resistor 10K-Ohm ke ground. Hubungkan kabel antara LDR dan resistor ke Analog A3 - ini adalah deteksi cahaya Anda.
- Hubungkan 5V ke sisi 5V dari LM35DZ (atau sensor suhu Anda)
- Hubungkan Ground dari LM35DZ ke Ground.
- Hubungkan kabel dari pin tengah (atau Output) LM35DZ ke A2 - ini adalah deteksi suhu Anda.
- Hubungkan output 5V dari DC-DC booster ke pin E (Emitter) dari PN2907A.
- Hubungkan resistor 1K-Ohm antara pin B (Base) transistor dan pin 11 - ini adalah kontrol untuk mengizinkan arus mengalir ke motor servo.
- Hubungkan pin C (Collector) transistor ke pin daya motor servo.
- Hubungkan pin Ground motor servo ke Ground.
- Hubungkan pin sinyal servo ke pin 10 - ini adalah pin PWM yang Anda gunakan untuk mengontrol servo.
Saat membuat prototipe, Anda tidak memerlukan panel surya dan modul pengisian baterai lithium terhubung. Instruksi ada di sini untuk perakitan lengkap. Dari titik ini ke depan, semua komponen kecuali modul pengisian telah dipasang untuk semua pengukuran.
Sebelum menambahkan transistor dalam langkah 13-16, urutan berikut terjadi:
- Lihat arus idle tanpa servo.
- Sekarang tambahkan motor servo, dan catat arus.
Apa yang terjadi di sini!? Cukup dengan menghubungkan servo, kita telah menambahkan 14 mA arus idle ke sistem. Bagaimana kita dapat mengatasi ini? Sahabat kita yang baik, transistor. Pembelian kit Arduino asli saya berisi beberapa transistor NPN. Setelah membaca tentang mereka (terima kasih SparkFun!), saya memutuskan untuk mencoba konfigurasi Low Side Switch. Namun, ini tidak bekerja. Saya *masih* memiliki arus idle yang jauh lebih besar dari yang diharapkan. Saya mengukur tegangan di pin Emitter, Base, dan Collector, dan menemukan bahwa pin Base memiliki tegangan ketika saya tidak mengharapkan ada. Saya tidak 100% yakin apa yang terjadi, selain mungkin sirkuit internal servo menemukan jalur ke ground melalui pin PWM yang digunakan untuk mengontrol posisi motor? Jika ada yang punya ide, saya mendengarkan dengan baik.
Jadi cobalah transistor PNP dalam konfigurasi High Side Switch.
Sukses! Sekarang, ketika servo tidak bergerak, sepertinya tidak ada servo yang terpasang. Oleh karena penggunaan transistor dalam langkah 13-16.
Langkah 4: Pemrograman
Tentu saja, setelah Anda melakukannya, Anda harus memprogram Pro Mini untuk mengujinya. Anda AKAN mengujinya terlebih dahulu, bukan? Saya mencoba menggunakan kabel TTL ke USB SparkFun, tetapi tidak bisa membuatnya bekerja. Mungkin saya punya kabel yang salah? Jadi saya memutuskan untuk melihat apakah dapat dilakukan tanpa.
Nah, hanya di situs ini saja, ada beberapa instruksi untuk memprogram Arduino Pro Mini menggunakan Arduino Uno. Ini cukup sederhana. Bagi saya, bagian yang paling menakutkan adalah mengeluarkan IC dari Uno (ini perlu dilakukan karena Anda tidak dapat memprogram Uno sebagai Pro Mini):
- Keluarkan IC dari Uno (catat arah notch menghadap, sehingga Anda dapat meletakkannya kembali). Saya melakukannya menggunakan alat serupa pisau plastik, seperti yang mungkin Anda gunakan untuk membuka iPhone. Saya mulai dengan sedikit mencabut di bawah IC, bergantian dari kedua sisi, untuk menghindari membengkokkan pin.
- Hubungkan pin 5V Uno ke pin VCC Pro Mini.
- Hubungkan pin GND Uno ke pin GND Pro Mini.
- Hubungkan pin TX Uno ke pin TX0 Pro Mini.
- Hubungkan pin RX Uno ke pin RXI Pro Mini
- Hubungkan pin RESET Uno ke pin RST Pro Mini.
Saya membuat dua set kabel dan menghubungkannya ke papan roti. Saya melekatkan kedua ujung kabel jumper bersama-sama sehingga saya tidak perlu menghubungkan pin secara individual, setelah itu selesai. Saya tipe orang yang bilang, jika saya harus melakukan ini dua kali, saya dapat mengotomasi atau membuatnya lebih sederhana.
Sekarang ketika Anda pergi ke Arduino IDE, pilih "Arduino Pro or Pro Mini," dan Anda dapat memprogram papan langsung. Saya bahkan dapat memrogramnya ulang tanpa melepas seluruh perakitan dari jendela vertikal, jika saya menemukan perubahan yang ingin saya buat.
Ini adalah sketsa SmartBlinds yang saya gunakan untuk proyek ini. Saya pikir cukup terdokumentasi dengan baik, tetapi jika Anda memiliki pertanyaan, jangan ragu untuk bertanya. Kelas EEPROM Logging juga diperlukan, dan tersedia di perpustakaan di github saya.
Saya juga telah menambahkan upaya baik tampilan papan roti dan tampilan skematik dari proyek. Fritzing terus mengganggu saya, jadi mungkin tidak terlihat bagus.
Langkah 5: Mulai Perakitan
Sekarang setelah kita memiliki beberapa data tentang sistem kita, mari kita mulai merakitnya.
Penambahan yang saya buat kali ini adalah menggunakan konektor JST dan solder kabel inti padat ke mereka untuk memberikan sedikit jangkauan tambahan. Secara default, mereka SANGAT pendek. Menggunakan konektor memiliki manfaat tambahan untuk memberikan titik jeda yang mudah antara baterai dan sisa sirkuit.
Catat dalam proyek pertama saya saya pasti gagal dalam pengukuran kritis ini, karena saya tidak menemukan bahwa servo motor menguras 14 mA sepanjang waktu.
Ini adalah waktu yang baik juga untuk solder kabel inti padat ke panel surya. Saya menambahkan sekitar 2 kaki kabel ke konektor JST untuk menempatkan panel surya di lokasi yang tepat di jendela untuk memaksimalkan cakupan sinar matahari sepanjang tahun, tetapi meminimalkan dampak visual. Simpan konektor pendek(er) untuk solder ke PCB. Ini meminimalkan ukuran bagian yang pergi ke rel atas jendela vertikal. Selain itu, menggunakan kabel inti padat untuk solder ke PCB tampaknya (bagi saya) bekerja lebih baik daripada solder kabel berpita ke lubang. Hasil Anda mungkin berbeda.
Potong PCB ke ukuran yang Anda butuhkan untuk jendela vertikal Anda. Papan yang saya beli terlalu besar sekitar 3 baris lubang, jadi saya memotongnya sebanyak itu. Saya mencoba untuk meletakkan sirkuit sekecil mungkin, dan se rapi mungkin. Potong kabel ke ukuran yang Anda butuhkan, dan berikan sedikit lentur untuk melewati sudut, dll. Dan kemudian ke dalam (atau keluar) lubang PCB. Perhatikan tinggi pin konektor servo, dan pastikan konektor tidak akan mengganggu operasi servo di dalam jendela vertikal.
Saya juga menggaruk garis terukir pada DC-DC booster yang menuju indikator LED. Ini menghemat sekitar 1 mA sepanjang waktu. Idealmente, sensor suhu akan terpisah sendiri, untuk mengurangi dampak potensial dari servo atau komponen lain. Saya gagal melakukannya, dan itu ada di samping transistor.
Langkah 6: Selesaikan Perakitan, Satu Pemrograman Terakhir
Hal terakhir yang saya lakukan setelah menyelesaikan perakitan adalah memulihkan kelas logging EEPROM. Saya tidak ingin menulis ke EEPROM saat membuat prototipe dan mencoba hal-hal yang berbeda, jadi saya memberi komentar pada kode itu. Namun sekarang setelah kita siap untuk diterapkan, saatnya untuk mengaktifkan logging. Output log ada di sini. Ini juga dilampirkan di bawah, seperti dalam format asli.
Pro Mini memiliki 1024Kb EEPROM. Berdasarkan ukuran 22 byte per entri, plus 2 byte "pola sinkronisasi," saya seharusnya dapat mendapatkan 42 entri di EEPROM sebelum itu melingkar. Itu kurang dari sebulan data, pada 2 aktivitas per hari. Saya ingin mendapatkan lebih banyak, tetapi itu akan memerlukan kartu SD atau EEPROM yang lebih besar. Mungkin revisi berikutnya.
Saya juga melakukan satu pengukuran arus terakhir, untuk memastikan saya tidak memiliki pendek di suatu tempat. Arus yang saya ukur sekitar 1.5 mA. Dengan baterai 900 mA-hour, itu seharusnya memberikan sekitar 600 jam operasi tanpa pengisian ulang. Kurangi sedikit karena tidak selalu dalam mode tidur, dan tentu saja setiap kali bergerak, Anda menguras baterai lebih cepat. Menggunakan perpustakaan LowPower dari rocketlabs, ia tidur pada 1.5 mA. Selama eksekusi, sekitar 25 mA, dan saat memindahkan jendela vertikal, antara 200 mA hingga sekitar 500 mA, atau lebih. Saya ingin membuat baterai bertahan lebih lama, tetapi saya juga suka memiliki LED menyala saat berjalan sehingga saya tahu itu bekerja, jadi itu adalah kompromi yang saya terima.
FEF476VIRXTB0NK.txt
Langkah 7: Instalasi
OK, sekarang untuk memasang di jendela vertikal.
- Pertama, lepaskan penggerak kait sekrup untuk tali tarik (jika jendela vertikal Anda memiliki). Mereka memberikan terlalu banyak hambatan bagi motor servo untuk bekerja dengan benar. (Saya tidak memiliki gambar itu karena saya menggunakan kembali jendela vertikal asli dan tidak dapat menemukan bagian itu)
- Buat lubang kecil untuk LDR menempel keluar dari (Saya menggunakan sisi yang menghadap ke luar dari jendela vertikal)
- Sekarang gunakan Dremel atau alat pemotong lainnya untuk memotong persegi untuk ukuran motor servo Anda. Ini perlu pas erat, tetapi Anda tidak ingin menggores atau merusak servo (Saya menggunakan sisi yang menghadap ke luar lagi - saya tidak ingin melihatnya di dalam rumah, meskipun bisa ditutupi oleh hiasan penutup. Pastikan tidak mengganggu hiasan jika Anda memilih sisi itu)
- Tutupi tekas kasar dengan pita atau haluskan dengan cara lain.
- Masukkan PCB ke dalam jendela vertikal, dan pastikan sensor cahaya menempel keluar dari lubang yang Anda buat di langkah 2.
- Sekarang pasang motor servo pada poros dan rapatkan baut set. Pada titik ini, alasan tunggu 10 detik 90 derajat di awal operasi harus jelas. Saya memulai program, mengizinkan servo bergerak ke 90 derajat, dan kemudian menonaktifkan baterai. Saya kemudian menggunakan posisi itu untuk melekatkannya ke jendela vertikal, yang telah saya pindahkan secara manual ke 90 derajat untuk cocok.
- Sekarang naiki tangga dan pasang jendela vertikal.
- Saya melekatkan panel surya di sekitar tengah panel, di bagian atas ketiga jendela. Saya jalankan kabel di sepanjang pemisah panel dan melekatkan panel dan kabel di tempat untuk meminimalkan visibilitas.
- Sekarang hubungkan panel surya ke sirkuit.
- Hubungkan baterai dan segera geser jendela vertikal ke tempat. Mereka harus bergerak ke tengah, kemudian setelah jeda 10 detik, bergerak ke posisi yang sesuai. Saya meletakkan tempat baterai di dalam rel jendela vertikal sebelum menghubungkan.
- Pasang kembali hiasan penutup.
- Minum bir (atau dalam kasus saya, rum dan Coke).
Langkah 8: Santai dan Nikmati!
Nikmati operasi yang mulus dari jendela vertikal saat mereka terbuka dan tertutup secara otomatis.
Jika Anda membuat satu menggunakan desain saya, tolong beri tahu saya! Saya akan senang mendengarnya, dan jika Anda membuat perubahan atau perbaikan. Jika Anda memiliki pertanyaan, tanyakan. Situs web ini sangat membantu dalam mempelajari banyak keterampilan yang terlibat dengan proyek ini, dan saya akan senang memberikan kembali.
Update: Setelah beberapa bulan operasi, saya senang dapat mengatakan mereka berperilaku TEMPAT yang seharusnya! Satu keanehan yang kita temukan adalah jika lampu di koridor lantai atas DAN pintu masuk lantai bawah kedua menyala, jendela vertikal tetap terbuka setelah gelap - yang membuatnya sempurna untuk menunjukkan fungsinya dengan tamu. Dan pada hari-musim panas akhir di mana menjadi sangat panas, jendela vertikal tertutup karena suhu pada suhu yang sangat nyaman - jendela menjadi lebih panas dari lantai utama, jadi jendela vertikal tertutup sementara masih di 70-an (F) di dalam rumah.
Kode
Github
https://github.com/Froz3nArcher/libraries/tree/master/EEPROMLog
Github
https://github.com/Froz3nArcher/SmartBlinds
Skematik
Skematik Jendela Vertikal Pintar
https://github.com/Froz3nArcher/SmartBlinds/blob/master/SmartBlinds.fzz