Pelacak Matahari Dual-Axis dengan Kontrol Otomatis & Manual – Sistem Pelacak Matahari Efisien
Komponen dan Perlengkapan
| Arduino UNO |
1 |
| Potensiometer rotasi (generik) |
2 |
| LED (generik) |
2 |
| Tombol saklar SparkFun 12mm |
1 |
| Servo (Tower Pro MG996R) |
2 |
| Photo resistor |
4 |
| Resistor 10k ohm |
5 |
| Resistor 221 ohm |
2 |
Alat dan Mesin yang Diperlukan
Aplikasi dan Layanan Online
| Autodesk Tinkercad |
| Arduino IDE |
Tentang Proyek Ini
Ini adalah proyek yang diterapkan siswa saya selama klub malam 2017-2018 Young Hackers. Ini adalah proyek yang menuntut untuk siswa sekolah dasar dan memakan banyak pertemuan untuk menyelesaikannya. Ini berisi panel surya kecil 5V yang dapat berputar di dua sumbu untuk memanen daya maksimum dari matahari. Proyek ini didasari oleh Proyek Pelacak Matahari Dual Axis dari OpenSourceClassroom.
Kami ingin menerapkan dua mode dalam produk akhir.
- Mode manual – dikontrol oleh dua potensiometer.
- Mode otomatis – dikontrol dengan empat sensor cahaya.
Untuk mencapai itu kami memprogram perangkat untuk berubah antara mode dengan bantuan tombol saklar dan dua indikator LED. Saat perangkat dalam mode manual, lampu merah menyala dan kita dapat mengontrol rotasi panel di dua sumbu dengan bantuan dua potensiometer. Saat perangkat dalam mode otomatis, lampu biru menyala dan rotasi panel ditentukan oleh cahaya yang dikumpulkan dari empat LDR. Pemrograman dilakukan di Tinkercad.
Siswa bekerja dalam kelompok dalam gaya garis produksi untuk menyelesaikan tugas. (soldering kabel, isolasi kabel, memasang sekrup bagian, dll.).
Kode
Kode panel surya berputar
#include <Servo.h> //Inisialisasi variabel int mode = 0; int buttonState = 0; int prevButtonState = 0; int topLeftLight = 0; int topRightLight = 0; int bottomLeftLight = 0; int bottomRightLight = 0; int LeftLight = 0; int RightLight = 0; int TopLight = 0; int BottomLight = 0; //Deklarasi dua servo Servo servo_9; Servo servo_10; void setup() { pinMode(7, INPUT); //Tombol Mode pinMode(12, OUTPUT); //Indikator LED untuk mode manual pinMode(11, OUTPUT); //Indikator LED untuk mode otomatis pinMode(A0, INPUT); //Potensiometer untuk gerakan kanan-kiri pinMode(A1, INPUT); //Potensiometer untuk gerakan atas-bawah pinMode(A2, INPUT); //Sensor cahaya atas - kiri pinMode(A3, INPUT); //Sensor cahaya atas - kanan pinMode(A4, INPUT); //Sensor cahaya bawah - kiri pinMode(A5, INPUT); //Sensor cahaya bawah - kanan servo_9.attach(9); //Motor servo gerakan kanan - kiri servo_10.attach(10); //Motor servo gerakan atas - bawah } void loop() { buttonState = digitalRead(7); if (buttonState != prevButtonState) { if (buttonState == HIGH) { //Ubah mode dan nyalakan indikator yang benar if (mode == 1) { mode = 0; digitalWrite(12, HIGH); digitalWrite(11, LOW); } else { mode = 1; digitalWrite(11, HIGH); digitalWrite(12, LOW); } } } prevButtonState = buttonState; delay(50); // Tunggu 50 milidetik if (mode == 0) { //Jika mode manual, map nilai potensiometer ke derajat rotasi servo_9.write(map(analogRead(A0), 0, 1023, 0, 180)); servo_10.write(map(analogRead(A1), 0, 1023, 0, 180)); } else { //Jika mode otomatis, map nilai sensor ke intensitas cahaya 0-100. //Setiap sensor cahaya memiliki sensitivitas yang berbeda dan harus diuji terlebih dahulu //untuk nilai tinggi dan rendahnya topLeftLight = map(analogRead(A2),50,980,0,100); topRightLight = map(analogRead(A3),200,990,0,100); bottomLeftLight = map(analogRead(A4),170,970,0,100); bottomRightLight = map(analogRead(A5),250,1000,0,100); //Hitung kondisi cahaya rata-rata TopLight = ((topRightLight + topLeftLight) / 2); BottomLight = ((bottomRightLight + bottomLeftLight) / 2); LeftLight = ((topLeftLight + bottomLeftLight) / 2); RightLight = ((topRightLight + bottomRightLight) / 2); //Putar servo jika diperlukan if (abs((RightLight - LeftLight)) > 4) { //Ubah posisi hanya jika perbedaan cahaya lebih besar dari 4% if (RightLight < LeftLight) { if (servo_9.read() < 180) { servo_9.write((servo_9.read() + 1)); } } if (RightLight > LeftLight) { if (servo_9.read() > 0) { servo_9.write((servo_9.read() - 1)); } } } if (abs((TopLight - BottomLight)) > 4) { //Ubah posisi hanya jika perbedaan cahaya lebih besar dari 4% if (TopLight < BottomLight) { if (servo_10.read() < 180) { servo_10.write((servo_10.read() - 1)); } } if (TopLight > BottomLight) { if (servo_10.read() > 0) { servo_10.write((servo_10.read() + 1)); } } } } }
Skematis
Skematis pemasangan