Tentang proyek ini
Menjadi Hijau
Saya telah bekerja di industri energi terbarukan di Australia dan bermain-main dengan Arduinos untuk beberapa waktu sekarang, tetapi tidak sampai proyek ini akhirnya saya memutuskan untuk menggabungkan keduanya dan membangun perangkat surya kecil saya sendiri. Satu catatan kecil di depan, proyek ini jelas membutuhkan 5V untuk memberi daya pada Arduino dan servo, yang digunakan untuk memaksimalkan output panel surya yang paling baik menghasilkan 3.4V. Jadi itu tidak benar-benar membayar sendiri. Namun konsepnya dapat diskalakan, jadi jika, misalnya, Anda menggunakan konsep ini pada susunan 8 panel, menghasilkan 12V, maka Anda dapat memberi daya pada arduino dan mengisi daya ponsel Anda tanpa sumber daya eksternal. Saya berencana untuk melakukan ini suatu hari nanti, dan akan menambahkan tautan di sini ketika itu terjadi.
Sementara saya di sini, saya lebih baik memberikan kredit ke sumber saya...
Kehidupan DIY - http://www.the-diy-life.com/arduino-solar-tracker/
Gadget Anjing Coklat - http://www.instructables.com/id/Solar-Altoids-USB-Charger/
Keduanya adalah sumber info yang bagus tentang subjek ini, dan dari mana saya mendapatkan konsepnya.
MEMULAI
Jadi, hal pertama yang pertama, Anda memerlukan beberapa panel surya. Saya menggunakan dua, meskipun Anda dapat menggunakan sebanyak yang Anda inginkan, pikirkan saja berapa banyak servo 9gram akan dapat mengangkat/menurunkan (jangan membuatnya terlalu berat). Panel yang saya temukan diberi peringkat pada output 1.5V, 0.75W yang ada di ujung bawah yang tersedia hari ini. Tapi mereka ringan dan murah dan mengingat ini adalah bukti proyek konsep bagi saya, hasilnya tidak terlalu penting.
Saya menggabungkan dua panel saya di sepanjang tepi dengan epoksi. Untuk menyambungkan panel menjadi seutas tali, cukup solder ujung positif dari satu panel ke ujung negatif yang lain, yang akan meninggalkan Anda dengan sisa kabel positif dan negatif. Pasang dua LDR Anda ke setiap sisi panel surya (Timur dan Barat), dan solder salah satu ujung kabel jumper ke masing-masing ujungnya. Lebih mudah untuk menyolder kabel jumper jika Anda memotong ujungnya dari satu sisi, dan mengupas kabelnya sekitar 5mm untuk mengekspos kabelnya .
Agar Arduino dapat membaca LDR, kita memerlukan rangkaian pembagi tegangan untuk masing-masing LDR. Lihat di sini untuk pembagi tegangan. Di sirkuit ini, LDR adalah R1, dan kami menggunakan resistor 10kohm untuk R2, dan menghubungkan kabel jumper ke arduino tempat kedua resistor bertemu. Jika Anda membangun proyek ini di atas papan tempat memotong roti, satu kabel LDR akan menuju ke pembagi tegangan, yang lain menuju ke rel daya positif. Lihat diagram Fritzing di bawah ini.
Struktur Pelacak
Hal berikutnya yang perlu Anda bangun adalah struktur penyangga putar untuk dudukan panel. Desain saya pada dasarnya adalah baja pegas panjang yang didukung oleh dua bingkai A. Bagian bawah susunan panel memiliki penyangga kayu kecil, dengan lubang untuk baja pegas. Saya membuat semuanya dari kayu balsa agar tetap murah, mudah dan ringan, tetapi jika ini adalah perlengkapan permanen, Anda akan menginginkannya dari baja tipis atau kayu lapis yang dirawat. Saya tidak mendokumentasikan pembuatan dukungan putar dengan baik, tetapi video di bawah ini akan menunjukkan kepada Anda bagaimana hal itu dilakukan, serta lokasi servo. Saya membangun tambang dengan panel pada sudut ke bawah, sehingga dapat menghadap dasar struktur ke utara, jadi ke mana pun panel berayun saat melacak matahari, panel akan selalu dimiringkan sedikit ke utara untuk memaksimalkan output. (Saya di belahan bumi selatan)
Memasang Servo
Servo duduk di salah satu balok penopang struktur rangka A, dan mengangkat/menurunkan satu sisi panel. Saya melipat beberapa baja pegas dengan tang untuk mendapatkan ujung yang bengkok Anda dapat melingkarkannya melalui penyangga panel dan lengan servo Anda, Anda mungkin harus memperlebar lubang di lengan servo agar sesuai dengan baja, saya menggunakan mata bor terkecil yang bisa saya temukan. Jangan rekatkan baja ke lengan servo atau penyangga panel, karena harus dapat berputar di dalam lubang agar panel terangkat dengan lancar. Setelah terpasang, lepas panel dari struktur, sehingga hanya servo yang tersisa sehingga Anda dapat melakukan kalibrasi.
Mengkalibrasi Servo
Buka sketsa baru dan masukkan kode berikut.
#include Servo myservo1; // Buat objek servo untuk mengontrol servoint pos =10;void setup() { myservo1.attach(9); //melekatkan objek servo ke pin PWM 9}void loop() { myservo1.write(pos);}
Unggah ke arduino Anda, dan lihat ke mana servo bergerak. Terus ubah nilai 'pos' antara 0 dan 180 di sketsa dan unggah ulang sketsa, hingga Anda menemukan posisi di mana lengan servo mengarah lurus ke atas dan ke bawah. Itu adalah nilai maks dan min Anda. Bagi saya, itu adalah 15 dan 140. Jika nilainya entah bagaimana tumpang tindih dari 180-kembali ke 0, lepaskan lengan servo dan posisikan ulang sehingga dapat disejajarkan dengan benar.
Menempatkan di bersama
Silakan dan hubungkan semuanya, dan masukkan sketsa berikut.
//Sun Tracker Sketch ////Sketsa ini dirancang untuk digunakan dengan servo 9gram, dapat//diberi daya langsung dari Arduinio tanpa //sumber daya eksternal. Untuk diagram fritzing, lihat repositori Github //https://github.com/nickalanf/Arduino--Projects//Bagian Monitor serial adalah untuk keperluan debugging, atau untuk kepentingan umum,//satu setelah perangkat berfungsi dengan benar, dapat dinonaktifkan////Sketsa oleh FIELDING - 8/2/18#termasuk Servo servo; // Buat objek servo untuk mengontrol servoint eLDRPin =A0; // Tetapkan pin ke LDR'sint wLDRPin =A1;int eastLDR =0; //Buat variabel untuk disimpan ke LDR readingsint westLDR =0;int difference =0; //Buat variabel untuk membandingkan dua kesalahan LDR'sint =10; // Variabel untuk apakah ada perbedaan mencolok antara servoSet LDR'sint derek =130; //Variabel untuk posisi servo - akan berbeda untuk setiap pengaturan devicevoid() { servo.attach(9); //melampirkan objek servo ke PWM pin 9 Serial.begin(9600); }void loop() { eastLDR =analogRead(eLDRPin); //Baca nilai LDR westLDR =analogRead(wLDRPin); if (eastLDR <400 &&westLDR <400) { //Periksa apakah ada cahaya redup pada kedua LDR while (servoSet <=140 &&>=15) { // jika demikian, kirim panel kembali ke timur untuk servoSet matahari terbit ++; servo.write(servoSet); penundaan(100); } } perbedaan =eastLDR - westLDR; //Cek selisih if (difference> 10) { //Kirim panel ke arah LDR dengan pembacaan yang lebih tinggi if (servoSet <=140) { servoSet++; servo.write(servoSet); } } else if (selisih <-10) { if (servoSet>=15) { servoSet --; servo.write(servoSet); } } Serial.print(eastLDR); //Monitor serial dapat berguna untuk men-debug/mengatur Serial.print(" - "); //Gunakan untuk melihat apakah LDR Anda sangat berbeda ketika Serial.print(westLDR); //Mereka memiliki cahaya yang sama bersinar pada mereka, jika demikian, perbaiki dengan nilai kesalahan Serial.print(" - "); Serial.print(perbedaan); Serial.print(" - "); Serial.print(servoSet); //Sesuaikan pengaturan servo, untuk memaksimalkan ayunan yang tersedia Serial.print(" - "); Serial.println("."); delay(100);}
Buka Serial Monitor, dan sorotkan cahaya ke LDR. Coba dan usapkan secara merata pada keduanya, dan periksa perbedaan nilai yang tercetak pada serial monitor tersebut. Jika ada yang lebih besar dari sekitar 25, atau kurang dari -25, Anda perlu menambahkan kalibrasi kesalahan. Tambahkan nilai error yang relevan ke dalam kode, lalu tambahkan atau kurangi nilai tersebut dari LDR yang relevan. Jika nilai perbedaannya dekat, sebaiknya dibiarkan apa adanya.
Anda siap untuk mencobanya! yang paling mudah adalah pergi ke ruangan gelap dan dengan obor/lampu. ayunkan lampu dari satu LDR perlahan ke yang lain dan perhatikan panel bergerak. Anda juga dapat menutupi satu LDR dan panel harus menjauh dari yang itu.
BONUS- PENGISI DAYA TELEPON
Jika Anda ingin benar-benar memanfaatkan output panel, Anda dapat memasang konverter boost 2.5V-5 V DC-DC langsung ke kabel yang keluar dari panel. Ini adalah sirkuit yang sepenuhnya terpisah dari arduino/papan tempat memotong roti. Perhatikan bahwa telepon standar mengisi daya pada 5V, dan panel Anda mungkin mengeluarkan 5 V tetapi arus rendah, jadi jika baterai Anda penuh atau sinar matahari rendah, Anda tidak akan memiliki output yang cukup untuk diisi. Cara termudah untuk mengatasinya adalah dengan menambahkan lebih banyak panel!
Kode
Pelacak MatahariMemproses
//Sun Tracker Sketch ////Sketsa ini dirancang untuk digunakan dengan servo 9gram, dapat//diberi daya langsung dari Arduinio tanpa //sumber daya eksternal. Untuk diagram fritzing, lihat repositori Github //https://github.com/nickalanf/Arduino--Projects//Bagian Monitor serial adalah untuk keperluan debugging, atau untuk kepentingan umum,//satu setelah perangkat berfungsi dengan benar, dapat dinonaktifkan////Sketsa oleh FIELDING - 8/2/18#termasuk Servo servo; // Buat objek servo untuk mengontrol servoint eLDRPin =A0; // Tetapkan pin ke LDR'sint wLDRPin =A1;int eastLDR =0; //Buat variabel untuk disimpan ke LDR readingsint westLDR =0;int difference =0; //Buat variabel untuk membandingkan dua kesalahan LDR'sint =10; // Variabel untuk apakah ada perbedaan mencolok antara servoSet LDR'sint derek =130; //Variabel untuk posisi servo - akan berbeda untuk setiap pengaturan devicevoid() { servo.attach(9); //melampirkan objek servo ke PWM pin 9 Serial.begin(9600); }void loop() { eastLDR =analogRead(eLDRPin); //Baca nilai LDR westLDR =analogRead(wLDRPin); if (eastLDR <400 &&westLDR <400) { //Periksa apakah ada cahaya redup pada kedua LDR while (servoSet <=140 &&>=15) { // jika demikian, kirim panel kembali ke timur untuk servoSet matahari terbit ++; servo.write(servoSet); penundaan(100); } } perbedaan =eastLDR - westLDR; //Cek selisih if (difference> 10) { //Kirim panel ke arah LDR dengan pembacaan yang lebih tinggi if (servoSet <=140) { servoSet++; servo.write(servoSet); } } else if (selisih <-10) { if (servoSet>=15) { servoSet --; servo.write(servoSet); } } Serial.print(eastLDR); //Monitor serial dapat berguna untuk men-debug/mengatur Serial.print(" - "); //Gunakan untuk melihat apakah LDR Anda sangat berbeda ketika Serial.print(westLDR); //Mereka memiliki cahaya yang sama bersinar pada mereka, jika demikian, perbaiki dengan nilai kesalahan Serial.print(" - "); Serial.print(perbedaan); Serial.print(" - "); Serial.print(servoSet); //Sesuaikan pengaturan servo, untuk memaksimalkan ayunan yang tersedia Serial.print(" - "); Serial.println("."); delay(100);}
Skema