Pengukuran Radiasi Matahari Akurat dengan Arduino UNO dan Ethernet Shield
Bahan dan Komponen
- Arduino UNO × 1
- Arduino Ethernet Shield 2 × 1
- Sel surya × 1
- Resistor 10k ohm × 1
Alat dan Mesin yang Diperlukan
Tentang Proyek
Tentang
Tersedia banyak sensor untuk mengukur berbagai kondisi cuaca seperti suhu, kelembaban, intensitas cahaya, dll., tetapi tidak ada sensor yang mudah tersedia untuk mengukur jumlah radiasi matahari. Ini karena radiasi matahari dapat sulit diukur, meskipun kita merasakannya setiap hari di kulit kita.
Iradiansi surya adalah daya per satuan luas yang diterima dari Matahari dalam bentuk radiasi elektromagnetik dalam rentang panjang gelombang instrumen pengukur. Rentang panjang gelombang Matahari yang luas adalah faktor lain yang membuatnya sulit diukur.
Instrumen untuk mengukur radiasi matahari disebut Piranometer. Piranometer dapat berkisar dari $200 -$800, bahkan dari pemasok China, membuatnya tidak terjangkau bagi hobiwan rata-rata. Anda dapat membaca lebih lanjut tentangnya di sini: https://en.wikipedia.org/wiki/Pyranometer
Saya baru-baru ini sedang mencari pembelian panel surya untuk rumah saya dan ingin tahu apakah itu akan berharga dan jadi ingin memperkirakan jumlah energi surya yang tersedia di tempat saya tinggal.
Saya tidak tertarik untuk membeli Piranometer jadi saya pikir saya dapat menghemat beberapa uang dan bersenang-senang saat bersamaan dengan membuat sendiri.
Inilah cara saya datang untuk membuat gadget keren saya yang jauh lebih murah dan dapat membantu memperkirakan jumlah Radiasi Surya. Ini menggunakan beberapa komponen yang mudah diakses dan Arduino untuk perhitungan. Saya mendapat sebagian besar komponen saya dari Chinavasion tetapi ada banyak tempat lain tempat Anda dapat mencari alat dan peralatan karena semuanya umum tersedia.
Pengaturan
1. Sel surya Anda harus memiliki 2 kabel, satu ground (hitam) dan yang lainnya live (merah). Jika Anda memiliki kode warna yang berbeda atau tidak dapat membedakannya, periksa dengan multimeter Anda. Sambungkan probe multimeter Anda ke kedua kabel, jika tegangan yang ditampilkan positif, maka kabel yang probe hitam multimeter Anda terhubung adalah ground, sementara yang merah adalah live, jika tegangan negatif, itu sebaliknya.
2. Sambungkan kabel ground sel surya Anda ke ground Arduino dan kabel VCC ke pin analog manapun melalui resistor yang kami pilih. Untuk proyek ini kita akan menggunakan pin analog A0. Resistor sangat penting untuk perhitungan kami karena kami harap ia jauh lebih besar dari resistensi internal sel.
Itu saja yang kita butuhkan untuk saat ini. Pindah ke bagian kode. Sel surya menghasilkan energi dengan mengonversi energi surya dari Matahari menjadi energi listrik, semakin tinggi energi (radiasi dan energi cahaya) dari Matahari. Semakin tinggi tegangan yang dihasilkan akan menjadi. Kita akan menggunakan hubungan sebanding langsung ini untuk memperkirakan Radiasi Surya.
Parameter berikut akan dibutuhkan:
- Referensi Analog Arduino = 5V (Mungkin berbeda pada Board Anda)
- Tegangan keluaran Maksimum sel surya Anda (Ini akan bervariasi tergantung pada panel surya yang Anda gunakan, Anda harus memeriksa untuk mengonfirmasi ini karena sangat penting untuk perhitungan kami, untuk sel surya kalkulator rata-rata ini sekitar 5V).
- Dimensi sel surya. Anda dapat mengukur ini menggunakan penggaris (panjang dan lebar atau parameter apa pun yang Anda butuhkan untuk menemukan luas).
Jadi kita akan memperkirakan radiasi surya kita dengan menghitung daya dari sel surya dan membaginya dengan luasnya.
- Daya = pow (analogRead(A0), 2) / Resistansi
- Luas = panjang * lebar (asumsi persegi panjang)
- radiasi surya = daya / luas
Berikut adalah kode contoh di bawah ini:
/*------------------------------------------------------------------------------------------------------------------------*/ #define ANALOG_PIN A0 // Pin analog #define RESISTANCE 10 // Resistansi dalam ribuan ohm #define PANEL_LENGTH 60 // Panjang sel surya dalam mm #define PANEL_WIDTH 20 // Lebar sel surya dalam mm volatile float Area; volatile float Power; volatile float Radiation; /* * Fungsi Setup utama */ void setup() { // Mulai komunikasi serial Serial.begin(9600); while(!Serial); delay(100); } /* * Fungsi Setup utama */ void loop() { Area = PANEL_LENGTH * PANEL_WIDTH / (100*100); // kita membagi dengan 10000 untuk mendapatkan luas dalam meter persegi Power = pow(analogRead( ANALOG_PIN ), 2) / RESISTANCE ; // Menghitung daya Radiation = Power / Area; char *msg; sprintf(msg, " The Solar Radiation is %f W/M2 ", Radiation); // Membuat pesan yang akan dicetak Serial.println(msg); delay(1000); } /*----------------------------------------------------------------------------------------------------------------------------*/
Nilai Iradiansi Rata-rata untuk hari normal dapat berkisar dari 150 hingga 300 W/M2. Namun ini akan bervariasi sangat tergantung pada lokasi Anda. Ini dapat mencapai 900 pada hari yang cerah atau di daerah sekitar khatulistiwa.
Untuk menambahkan fungsionalitas internet, kita dapat menggunakan Ethernet shield. Kita tidak perlu membuat koneksi baru apa pun, cukup pasang shield pada Arduino dan letakkan pin pada posisi yang sesuai pada shield (misalnya pin 1 pada Arduino tetap pin 1 pada shield)
Kode
- kode contoh untuk Piranometer
- kode fungsi Ethernet
kode contoh untuk PiranometerArduino
#define ANALOG_PIN A0 // Pin analog
#define RESISTANCE 10 // Resistansi dalam ribuan ohm
#define PANEL_LENGTH 60 // Panjang sel surya dalam mm
#define PANEL_WIDTH 20 // Lebar sel surya dalam mm
volatile float Area;
volatile float Power;
volatile float Radiation;
/*
* Fungsi Setup utama
*/
void setup() {
// Mulai komunikasi serial
Serial.begin(9600);
while(!Serial);
delay(100);
}
/*
* Fungsi Setup utama
*/
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / (100*100); // kita membagi dengan 10000 untuk mendapatkan luas dalam meter persegi
Power = pow(analogRead( ANALOG_PIN ), 2) / RESISTANCE ; // Menghitung daya
Radiation = Power / Area;
char *msg;
sprintf(msg, " The Solar Radiation is %f W/M2 ", Radiation); // Membuat pesan yang akan dicetak
Serial.println(msg);
delay(1000);
}
Tidak ada pratinjau (hanya unduhan).
kode fungsi EthernetArduino
#include <SPI.h>
#include <Ethernet.h>
#define ANALOG_PIN A0 // Pin analog
#define RESISTANCE 10 // Resistansi dalam ribuan ohm
#define PANEL_LENGTH 60 // Panjang sel surya dalam mm
#define PANEL_WIDTH 20 // Lebar sel surya dalam mm
volatile float Area;
volatile float Power;
volatile float Radiation;
// Masukkan alamat MAC dan alamat IP untuk pengontrol Anda di bawah.
// Alamat IP akan tergantung pada jaringan lokal Anda:
byte mac[] = {
0xDE, 0x0D, 0x8E, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
// Inisialisasi pustaka server Ethernet
// dengan alamat IP dan port yang ingin Anda gunakan
// (port 80 adalah default untuk HTTP):
EthernetServer server(80);
void setup() {
// Buka komunikasi serial dan tunggu port terbuka:
Serial.begin(9600);
while (!Serial) {
; // tunggu port serial untuk terhubung. Diperlukan untuk port USB asli saja
}
// mulai koneksi Ethernet dan server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server di ");
Serial.println(Ethernet.localIP());
}
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / (100*100); // kita membagi dengan 10000 untuk mendapatkan luas dalam meter persegi
Power = pow(analogRead( ANALOG_PIN ), 2) / RESISTANCE ; // Menghitung daya
Radiation = Power / Area;
char *msg;
sprintf(msg, " The Solar Radiation is %f W/M2 ", Radiation); // Membuat pesan yang akan dicetak
// dengarkan klien yang masuk
EthernetClient client = server.available();
if (client) {
Serial.println("klien baru");
// permintaan http diakhiri dengan baris kosong
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// jika Anda sudah sampai akhir baris (menerima karakter newline
// karakter) dan baris kosong, permintaan http telah berakhir,
// jadi Anda dapat mengirim balasan
if (c == '\n' && currentLineIsBlank) {
// kirim header respons http standar
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // koneksi akan ditutup setelah selesai respons
client.println("Refresh: 5"); // segarkan halaman secara otomatis setiap 5 detik
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
/*
* Kirim pesan ke klien
*/
client.print(msg);
client.println("<br />");
client.println("</html>");
break;
}
if (c == '\n') {
// Anda memulai baris baru
currentLineIsBlank = true;
} else if (c != '\r') {
// Anda telah mendapatkan karakter pada baris saat ini
currentLineIsBlank = false;
}
}
}
// beri waktu browser web untuk menerima data
delay(1);
// tutup koneksi:
client.stop();
Serial.println("klien terputus");
}
}
Tidak ada pratinjau (hanya unduhan).
Skematik
Skematik panel surya, resistor, dan koneksi