Daftar Isi:

Lampu Tenaga Surya Isi Ulang bertenaga XOD: 9 Langkah (dengan Gambar)
Lampu Tenaga Surya Isi Ulang bertenaga XOD: 9 Langkah (dengan Gambar)

Video: Lampu Tenaga Surya Isi Ulang bertenaga XOD: 9 Langkah (dengan Gambar)

Video: Lampu Tenaga Surya Isi Ulang bertenaga XOD: 9 Langkah (dengan Gambar)
Video: Orang kesetrum 2024, November
Anonim
Lampu Tenaga Surya Isi Ulang bertenaga XOD
Lampu Tenaga Surya Isi Ulang bertenaga XOD

Ada lampu taman/jalan surya murah yang tersedia di sebagian besar barang rumah tangga dan toko perangkat keras. Tapi seperti pepatah lama, Anda biasanya mendapatkan apa yang Anda bayar. Sirkuit pengisian dan penerangan biasa yang mereka gunakan sederhana dan murah, tetapi output cahaya yang Anda dapatkan sama sekali tidak mengesankan (dan hampir tidak cukup bagi siapa pun yang menggunakan jalan Anda untuk melihat ke mana mereka pergi!)

Ini adalah upaya saya merancang modul pencahayaan off-grid yang merupakan peningkatan signifikan, sementara masih relatif murah untuk dibuat. Dengan memberinya beberapa "otak". XOD.io adalah IDE baru yang kompatibel dengan platform pengembangan tertanam Arduino, di mana Anda dapat "menulis" kode secara grafis. Lingkungan mentranspilasikan sketsa grafis Anda ke C++ modern, yang sangat efisien dalam menghasilkan kode ringkas, dan menghasilkan sumber yang sepenuhnya kompatibel dengan stok Arduino IDE tanpa memerlukan ketergantungan eksternal lebih lanjut. Dengan cara itu, bahkan mikrokontroler kecil dan murah dengan program terbatas dan sumber daya penyimpanan data dapat digunakan untuk melakukan tugas-tugas kompleks.

Proyek ini menunjukkan bagaimana dua mikrokontroler ATTiny85 yang kompatibel dengan Arduino yang bekerja bersama dapat digunakan untuk mengelola kebutuhan daya lampu. Prosesor pertama menangani penginderaan data lingkungan dari perangkat keras eksternal, dan prosesor kedua mencoba memanen energi matahari sebanyak mungkin di siang hari, dan kemudian mengontrol penerangan LED daya tinggi saat baterai penyimpanan habis di malam hari. Prosesor kedua menyelesaikan tugasnya melalui implementasi kontrol "logika fuzzy" yang ringkas. Perangkat lunak untuk kedua chip dikembangkan secara eksklusif dalam lingkungan XOD.

Langkah 1: Bahan yang Diperlukan

Arduino IDE, versi terbaru, dengan ekstensi ATTinyCore diinstal dari manajer "Papan"

Sparkfun USBTinyISP ATTiny programmer, 11801 atau halaman produk Sparkfun yang setara

Konverter boost tegangan rendah Pololu yang dapat disesuaikan dengan input shutdown, U1V11A atau halaman produk Pololu yang setara

LED putih atau RGB daya tinggi dengan heatsink, anoda umum, Adafruit 2524 atau halaman produk Adafruit yang setara

Microchip ATTiny85 dalam paket DIP 8-pin, 2 halaman produk Mouser

Soket IC DIP 8 pin, 2

Kapasitor penyimpanan massal, 16 v 220 uF

Kapasitor keluaran, 6.3v 47uF

Resistor pembatas arus, 50 ohm 1/4 watt

resistor pull-up i2c, 4.7k, 2

Resistor pembagi tegangan panel, 1/4 watt, 100k, 470k

Resistor sensor arus, toleransi 10 ohm 1/2 watt 1%

Bypass kapasitor, keramik 0.1uF, 2

2 baterai isi ulang lithium-ion 3,7 v 100mAh, PKCELL LP401 atau setara

Jack input steker barel untuk panel, 1

Terminal mini memblokir papan solder-pad 3”x3”, dan kawat inti padat tipis untuk membuat sambungan

Osiloskop, multimeter, dan catu daya bangku hampir pasti diperlukan untuk pengujian

Langkah 2: Pengaturan Lingkungan

Pengaturan Lingkungan
Pengaturan Lingkungan

Lingkungan XOD tidak mendukung seri prosesor ATTiny, tetapi menggunakan beberapa perpustakaan pihak ketiga dari alam semesta Arduino, sangat mudah untuk menambahkan dukungan untuk seri AVR ini. Langkah pertama adalah menginstal library “ATTinyCore” dari menu dropdown “Tools → Board → Board Manager” Arduino IDE. Pastikan pengaturan seperti yang ditunjukkan pada gambar yang disertakan sudah benar - ingat bahwa Anda harus menekan "Bakar bootloader" untuk mengubah sekering pengaturan tegangan dan kecepatan jam sebelum mengunggah kode apa pun!

Kode sumber untuk perpustakaan ini tersedia di:

Pustaka bermanfaat lainnya yang dapat diperoleh dari repositori adalah “FixedPoints”, yang merupakan implementasi waktu kompilasi matematika titik tetap untuk prosesor yang didukung Arduino. ATTiny memiliki SRAM dan memori program yang terbatas, dan sangat membantu dalam mengecilkan ukuran sketsa akhir untuk menggunakan bilangan bulat 2 byte untuk penyimpanan data umum, daripada tipe titik mengambang, yang membutuhkan 4 byte pada AVR. Kecepatan eksekusi juga harus ditingkatkan karena ATTiny tidak memiliki unit penggandaan perangkat keras, apalagi floating point perangkat keras!

Kode sumber tersedia di:

Tutorial tentang cara membuat, transpile, dan menyebarkan sketsa grafis XOD di: https://github.com/Pharap/FixedPointsArduino akan banyak membantu dalam memahami bagaimana file sumber yang disertakan dibuat.

Langkah 3: Ikhtisar Desain

Ikhtisar Desain
Ikhtisar Desain
Ikhtisar Desain
Ikhtisar Desain

Di papan dua prosesor ATTiny85 terhubung melalui antarmuka i2c, dan digunakan bekerja sama untuk mengelola penginderaan tegangan panel surya, arus yang mengalir ke baterai dari konverter boost saat panel menyala, tegangan baterai, dan baterai suhu.

Boost converter adalah modul off-the-shelf berdasarkan Texas Instruments TPS6120 IC, yang dapat mengambil tegangan input serendah 0,5 volt dan meningkatkannya ke mana saja dari 2 volt hingga 5 volt. Inti sensor terdiri dari beberapa blok fungsional. Jam master mulai berjalan segera setelah daya diterapkan ke konverter boost dari input panel surya. Ini memulai eksekusi sketsa, dan hal pertama adalah menentukan apakah panel cukup menyala untuk memberikan arus pengisian ke baterai.

Tegangan panel surya dilewatkan melalui dua filter digital, dan jika berada di atas ambang batas tertentu, sistem menentukan bahwa panel menyala dan memasukkan jam master ke monitor sensor arus. Ini adalah saluran konverter analog ke digital dari chip, dikonfigurasi secara berbeda, yang mendeteksi tegangan pada resistor toleransi 10 ohm 1% yang dihubungkan secara seri antara output konverter boost dan input baterai. Saat panel tidak menyala, ATTiny ini mengirimkan sinyal ke ATTiny kedua yang memerintahkannya untuk memantau daya LED alih-alih mengisi daya, dan mematikan konverter boost dan mengisolasi input sehingga baterai tidak mengirim arus kembali melalui panel.

Inti ATTiny kedua adalah tempat pengontrol LED dan sistem pemantauan pengisian daya baterai dijalankan. Tegangan panel, tegangan baterai, dan data arus pengisian baterai dikirim ke inti ini untuk diproses melalui jaringan logika fuzzy, yang mencoba menghasilkan sinyal PWM yang sesuai untuk diterapkan ke pin SHTDN, sehingga mengontrol jumlah arus yang dikirim ke baterai untuk mengisi daya saat diterangi – bentuk dasar pelacakan titik daya maksimum (MPPT.) Ia juga menerima sinyal dari inti sensor yang memberi tahu apakah LED harus dihidupkan atau dimatikan, tergantung pada output hari inti sensor/ sandal jepit malam.

Saat LED aktif di malam hari, ATTiny ini memantau data tegangan baterai yang dikirim dari sobatnya, dan sensor suhu on-chipnya sendiri, untuk mendapatkan perkiraan kasar tentang berapa banyak daya yang didorong ke LED (tegangan baterai menurun dan suhu chip meningkat dengan arus yang keluar dari pinnya.) Jaringan logika fuzzy yang terkait dengan patch LED PWM mencoba membuat penilaian tentang berapa banyak daya baterai yang masih tersedia, dan mengurangi intensitas LED saat baterai habis.

Langkah 4: Membuat Patch Kustom Dari Pustaka Inti XOD

Membuat Patch Kustom Dari Pustaka Inti XOD
Membuat Patch Kustom Dari Pustaka Inti XOD
Membuat Patch Kustom Dari Pustaka Inti XOD
Membuat Patch Kustom Dari Pustaka Inti XOD

Beberapa node patch kustom digunakan untuk desain ini, beberapa di antaranya dapat dengan mudah dibangun seluruhnya dari node XOD yang disertakan, dan beberapa di antaranya diimplementasikan dalam C++.

Yang pertama dari dua simpul tambalan khusus dalam gambar merupakan implementasi dari filter rata-rata bergerak eksponensial. Ini adalah filter digital low-pass low-overhead yang digunakan secara seri dalam sketsa, sekali untuk menyaring tegangan panel surya yang masuk untuk inti logika, dan sekali lagi untuk memberi makan pemicu yang menentukan penerangan sekitar jangka panjang. Lihat entri Wikipedia tentang pemulusan eksponensial.

Struktur simpul pada gambar hanyalah representasi grafis langsung dari fungsi transfer dalam artikel, dihubungkan bersama menggunakan tautan dari input yang sesuai ke output. Ada node penangguhan dari perpustakaan yang memungkinkan loop umpan balik dibuat (XOD akan memperingatkan Anda jika Anda membuat loop umpan balik tanpa memasukkan penundaan dalam loop, seperti yang dijelaskan dalam model eksekusi XOD.) Dengan detail itu diurus patch bekerja dengan baik, itu sederhana.

Node tambalan khusus kedua adalah variasi pada flip-flop stok yang disertakan dengan XOD, yang diumpankan dengan tegangan panel yang difilter. Ini mengunci tinggi atau rendah tergantung pada apakah sinyal input di atas atau di bawah ambang batas tertentu. Node cor digunakan untuk mengubah nilai keluaran Boolean ke tipe data pulsa untuk memicu flip flop, karena transisi status dari rendah ke tinggi. Desain simpul tambalan ini diharapkan cukup jelas dari tangkapan layar.

Langkah 5: Membuat Patch Kustom Menggunakan C++

Membuat Patch Kustom Menggunakan C++
Membuat Patch Kustom Menggunakan C++

Untuk persyaratan khusus di mana fungsionalitas node yang dibutuhkan akan terlalu rumit untuk digambarkan secara grafis dengan mudah, atau yang bergantung pada perpustakaan Arduino yang tidak asli dari lingkungan Arduino, XOD memudahkan mereka yang memiliki pengetahuan C/C++ untuk menulis potongan bit-size dari kode yang kemudian dapat diintegrasikan ke dalam tambalan sama seperti simpul yang dibuat pengguna atau stok lainnya. Memilih "buat tambalan baru" dari menu file membuat lembar kosong untuk digunakan, dan simpul masukan dan keluaran dapat diseret dari bagian "simpul" perpustakaan inti. Kemudian node "not-implemented-in-xod" dapat diseret, dan ketika diklik akan memunculkan editor teks di mana fungsionalitas yang diperlukan dapat diimplementasikan dalam C++. Cara menangani keadaan internal dan mengakses port input dan output dari kode C++ dibahas di sini.

Sebagai contoh penerapan tambalan khusus di C++, dua tambalan khusus lebih lanjut untuk inti driver digunakan untuk mengeluarkan perkiraan tegangan suplai dan suhu inti inti driver. Seiring dengan jaringan fuzzynya, ini memungkinkan perkiraan kasar dari sisa daya baterai yang tersedia untuk menyalakan LED saat gelap.

Patch sensor suhu juga diumpankan dengan output dari sensor tegangan suplai untuk mendapatkan perkiraan yang lebih baik – suhu inti penginderaan memungkinkan kita untuk mendapatkan perkiraan kasar tentang berapa banyak daya yang dibakar di LED, dan dikombinasikan dengan pembacaan tegangan suplai saat kehabisan baterai perkiraan kasar lebih lanjut tentang berapa banyak daya baterai yang tersisa. Tidak harus super akurat; jika inti "tahu" bahwa LED menarik banyak arus tetapi tegangan baterai turun dengan cepat, mungkin aman untuk mengatakan bahwa daya baterai tidak akan bertahan lebih lama, dan inilah saatnya untuk mematikan lampu.

Langkah 6: Konstruksi

Konstruksi
Konstruksi
Konstruksi
Konstruksi
Konstruksi
Konstruksi

Saya membangun proyek di atas sepotong kecil papan prototipe dengan bantalan tembaga untuk bagian lubang. Menggunakan soket untuk IC sangat membantu untuk pemrograman/modifikasi/pengujian; ISP USBTiny dari Sparkfun memiliki soket yang sama di papannya sehingga memprogram dua chip hanya terdiri dari mencolokkan programmer ke port USB PC, mengunggah kode XOD yang ditranspilasikan dari file Arduino yang disertakan dengan papan dan pengaturan programmer yang sesuai, dan kemudian dengan lembut lepaskan chip dari soket programmer dan masukkan ke dalam soket protoboard.

Modul boost converter berbasis Pololu TPS6120 hadir pada riser board yang disolder ke protoboard pada pin header, sehingga memungkinkan untuk menghemat ruang dengan memasang beberapa komponen di bawahnya. Pada prototipe saya, saya meletakkan dua resistor pullup 4.7k di bawahnya. Ini diperlukan agar bus i2c di antara chip dapat beroperasi dengan benar - komunikasi tidak akan berfungsi dengan baik tanpanya! Di sisi kanan papan adalah jack input untuk steker panel surya dan kapasitor penyimpanan input. Yang terbaik adalah mencoba menghubungkan jack dan tutup ini secara langsung melalui "jalan" solder, bukan kawat hookup, untuk mendapatkan jalur dengan resistansi serendah mungkin. Jalur solder padat kemudian digunakan untuk menghubungkan terminal positif kapasitor penyimpanan langsung ke terminal tegangan input modul boost, dan pin ground modul boost langsung ke pin ground jack.

Di sebelah kanan dan kiri soket untuk kedua ATTiny adalah kapasitor despike/deglitching 0,1uF. Komponen-komponen ini juga penting untuk tidak ditinggalkan, dan harus dihubungkan ke pin daya dan ground IC melalui jalur yang sesingkat dan searah mungkin. Resistor penginderaan arus 10 ohm ada di sebelah kiri, ini terhubung sesuai dengan output dari konverter boost dan setiap sisi terhubung ke pin input inti sensor - pin ini diatur untuk berfungsi sebagai ADC diferensial untuk secara tidak langsung mengukur arus ke dalam baterai. Sambungan antara pin IC untuk bus i2c dan ke pin penonaktifan konverter boost, dll. dapat dibuat menggunakan kawat pengait di bagian bawah protoboard, kawat pengait inti padat yang sangat tipis sangat cocok untuk ini. Itu membuat perubahan lebih mudah dan juga terlihat jauh lebih rapi daripada menjalankan jumper di antara lubang di bagian atas.

Modul LED yang saya gunakan adalah unit RGB tiga warna, rencana saya adalah mengaktifkan ketiga LED untuk menghasilkan warna putih ketika baterai hampir terisi penuh, dan perlahan-lahan memudarkan LED biru menjadi kuning saat pengisian daya habis. Tapi fitur ini belum diimplementasikan. Satu LED putih dengan satu resistor pembatas arus juga akan berfungsi dengan baik.

Langkah 7: Pengujian, Bagian 1

Pengujian, Bagian 1
Pengujian, Bagian 1

Setelah memprogram kedua IC ATTiny dengan file sketsa yang disertakan melalui pemrogram USB dari lingkungan Arduino, ada baiknya untuk menguji bahwa dua inti pada prototipe berfungsi dengan baik sebelum mencoba mengisi baterai dari panel surya. Idealnya ini membutuhkan osiloskop dasar, multimeter, dan catu daya bangku.

Hal pertama yang harus diperiksa adalah tidak ada korsleting di mana pun di papan sebelum mencolokkan IC, baterai, dan panel ke soketnya untuk menghindari kemungkinan kerusakan! Cara termudah untuk melakukannya adalah dengan menggunakan catu daya bangku yang dapat membatasi arus keluarannya ke nilai yang aman jika terjadi situasi itu. Saya menggunakan set suplai bangku saya pada batas 3 volt dan 100 mA yang terhubung ke terminal jack input panel surya ke kabel catu daya positif dan negatif. Dengan tidak ada apa pun selain komponen pasif yang terpasang, pada dasarnya tidak ada penarikan arus yang terdaftar pada monitor catu daya saat ini untuk dibicarakan. Jika ada aliran arus yang signifikan, atau suplai masuk ke pembatasan arus, ada yang tidak beres dan papan harus diperiksa untuk memastikan tidak ada koneksi yang salah kabel atau kapasitor dengan polaritas terbalik.

Langkah selanjutnya adalah memastikan konverter boost berfungsi dengan benar. Ada potensiometer sekrup di papan, dengan catu daya masih terhubung dan empat pin konverter terhubung dengan benar, potensiometer harus diputar dengan ujung obeng kecil sampai tegangan pada terminal output modul membaca sekitar 3,8 hingga 3,9 volt. Nilai DC ini tidak akan berubah selama operasi, inti driver akan mengontrol tegangan output rata-rata melalui pulsa pin shutdown modul.

Langkah 8: Pengujian, Bagian 2

Pengujian, Bagian 2
Pengujian, Bagian 2
Pengujian, Bagian 2
Pengujian, Bagian 2

Hal berikutnya yang harus diperiksa adalah komunikasi i2c berfungsi dengan baik, dengan board yang kehabisan daya, IC inti sensor dapat dipasang. Pada osiloskop harus ada sinyal berdenyut pada pin 5 dan pin 7 dari chip fisik, driver i2c pada chip ini mencoba mengirim data ke temannya. Setelah mematikan inti driver dapat dipasang dan koneksi diperiksa dengan osiloskop lagi, harus ada urutan pulsa yang lebih besar yang terlihat di kedua jalur. Ini berarti bahwa chip berkomunikasi dengan benar.

Ini membantu untuk memiliki baterai sedikit terisi untuk tes penuh akhir. Pasokan bangku juga dapat digunakan untuk mencapai hal ini, dengan batas arus yang disetel ke sekitar 50 mA dan tegangan masih pada 3,8 volt, membiarkan baterai LiPo terhubung langsung selama beberapa menit.

Langkah terakhir adalah menguji sistem lengkap - dengan semua yang terhubung jika panel tertutup selama sepuluh atau 15 detik, lampu akan menyala didorong melalui output PWM inti driver. Dengan panel di bawah sinar matahari yang cerah, baterai harus diisi dari output konverter boost. Jaringan logika fuzzy dapat diperiksa secara tidak langsung untuk melihat apakah itu bekerja dengan benar dengan melihat garis PWM yang menggerakkan pin shutdown konverter boost; saat penerangan meningkat dengan baterai dengan status pengisian rendah, lebar pulsa akan meningkat, menunjukkan bahwa semakin banyak daya yang tersedia dari sinar matahari, inti driver menandakan bahwa lebih banyak daya yang harus dikirim ke baterai!

Langkah 9: Lampiran pada Logika Fuzzy

Lampiran pada Logika Fuzzy
Lampiran pada Logika Fuzzy

Logika fuzzy adalah teknik pembelajaran mesin yang dapat digunakan dalam kontrol sistem perangkat keras di mana ada ketidakpastian dalam banyak parameter sistem yang dikontrol, membuat solusi kontrol input ke output eksplisit untuk tujuan sulit untuk ditulis secara matematis. Hal ini dicapai dengan menggunakan nilai logika yang berada di antara 0 (salah) dan 1 (benar), mengekspresikan ketidakpastian dalam nilai yang lebih seperti yang dilakukan manusia ("sebagian besar benar" atau "tidak benar-benar benar") dan memungkinkan area abu-abu antara pernyataan yang 100% benar dan 100% salah. Cara ini dicapai adalah melalui pengambilan sampel pertama dari variabel input yang menjadi dasar keputusan dan "mengkaburkan" mereka.

Inti dari setiap sistem logika fuzzy adalah "memori asosiatif kabur." Ini mengingatkan pada matriks, di mana dalam kasus sirkuit pengisian baterai, set 3x3 nilai berkisar antara 0 dan 1 disimpan. Nilai dalam matriks dapat secara kasar dikaitkan dengan bagaimana manusia akan bernalar tentang faktor PWM yang mengendalikan pin SHTDN dari konverter boost, tergantung pada bagaimana fungsi keanggotaan di atas memenuhi syarat serangkaian input yang diberikan. Misalnya, jika tegangan input panel tinggi, tetapi arus yang ditarik ke baterai rendah, itu mungkin berarti lebih banyak daya yang dapat ditarik dan pengaturan PWM tidak optimal dan harus ditingkatkan. Sebaliknya, jika tegangan panel menjadi rendah tetapi pengisi daya masih berusaha untuk mendorong arus besar ke dalam daya baterai juga akan sia-sia, jadi akan lebih baik untuk menurunkan sinyal PWM ke konverter boost. Setelah sinyal input "difuzzifikasi" menjadi himpunan fuzzy, sinyal tersebut dikalikan dengan nilai-nilai ini, mirip dengan cara vektor dikalikan dengan matriks, untuk menghasilkan himpunan yang ditransformasi yang mewakili seberapa banyak "pengetahuan" yang terkandung dalam sel. matriks harus difaktorkan ke dalam fungsi kombinasi akhir.

Menggunakan node “not-implemented-in-xod” yang memungkinkan node XOD yang mengimplementasikan fungsionalitas kustom terlalu rumit untuk dibuat dari blok penyusun stok, dan sedikit C++ bergaya Arduino, memori asosiatif, fungsi pembobotan, dan " fuzzifier" mirip dengan blok yang dijelaskan dalam referensi ini: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 mudah dibuat, dan lebih mudah untuk bereksperimen.

Direkomendasikan: