//CODING SOLAR TRACKING SYSTEM MENGGUNAKAN ARDUINO UNO
//HEADER---------------------------------
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//---------------------------------------
//DEFINISI VARIABEL----------------------
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;
int Ldr1 = A0;
int Ldr2 = A1;
int Ldr3 = A2;
int Ldr4 = A3;
int LED1 = 6;
int LED2 = 5;
int LED3 = 4;
int LED4 = 3;
int LED5 = 2;
//----------------------------------------
//VOID SETUP------------------------------
void setup() {
Serial.begin(9600);
pinMode(Ldr1, INPUT);
pinMode(Ldr2, INPUT);
pinMode(Ldr3, INPUT);
pinMode(Ldr4, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
myservo.attach(11);
myservo.write(90);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("SOLAR TRACKING");
lcd.setCursor(0, 1);
lcd.print("FT-UM SUMBAR");
delay(1000);
lcd.clear();
}
//----------------------------------------
//VOID LOOP---------------------------------------
void loop() {
String statusLed;
int Aldr1 = analogRead(Ldr1);
int Aldr2 = analogRead(Ldr2);
int Aldr3 = analogRead(Ldr3);
int Aldr4 = analogRead(Ldr4);
int Map1 = map(Aldr1, 8, 1015, 90, 0);
int Map2 = map(Aldr2, 8, 1015, 90, 0);
int Map3 = map(Aldr3, 8, 1015, 90, 0);
int Map4 = map(Aldr4, 8, 1015, 90, 0);
int sudut = ((Map1 + Map2)-(Map3 + Map4)) + 90;
// MEMASTIKAN SUDUT KURANG DARI 0
if (sudut < 0) {
sudut = 0;
}
// MEMASTIKAN SUDUT TIDAK LEBIH DARI 180
if (sudut > 180) {
sudut = 180;
}
digitalWrite(LED5, sudut >= 0 && sudut < 36);
digitalWrite(LED4, sudut >= 36 && sudut < 72);
digitalWrite(LED3, sudut >= 72 && sudut < 108);
digitalWrite(LED2, sudut >= 108 && sudut < 144);
digitalWrite(LED1, sudut >= 144 && sudut <= 180);
lcd.setCursor(0, 0);
lcd.print("Sudut: " + String(sudut) + " ");
lcd.setCursor(0, 1);
lcd.print("LED: ");
if (digitalRead(LED1)) lcd.print("1 ");
if (digitalRead(LED2)) lcd.print("2 ");
if (digitalRead(LED3)) lcd.print("3 ");
if (digitalRead(LED4)) lcd.print("4 ");
if (digitalRead(LED5)) lcd.print("5 ");
delay(100);
myservo.write(sudut);
delay(100);
}
//-----------------------------------------------