//#include <WiFi.h>
//#include <HTTPClient.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
byte Solar[8] = {
0b00000,
0b00000,
0b00001,
0b10010,
0b10100,
0b11000,
0b11110,
0b00000
};
byte Bell[8] = {
0b00100,
0b01110,
0b01110,
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};
int randoms;
int progress = 3;
/* Custom characters */
byte START_DIV_0_OF_1[] = {
B01111,
B11000,
B10000,
B10000,
B10000,
B10000,
B11000,
B01111
}; // Char beginning 0 / 1
byte START_DIV_1_OF_1[] = {
B01111,
B11000,
B10011,
B10111,
B10111,
B10011,
B11000,
B01111
}; // Char beginning 1 / 1
byte DIV_0_OF_2[] = {
B11111,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111
}; // Char Middle 0 / 2
byte DIV_1_OF_2[] = {
B11111,
B00000,
B11000,
B11000,
B11000,
B11000,
B00000,
B11111
}; // Char Middle 1 / 2
byte DIV_2_OF_2[] = {
B11111,
B00000,
B11011,
B11011,
B11011,
B11011,
B00000,
B11111
}; // Char Middle 2 / 2
byte END_DIV_0_OF_1[] = {
B11110,
B00011,
B00001,
B00001,
B00001,
B00001,
B00011,
B11110
}; // Char End 0 / 1
byte END_DIV_1_OF_1[] = {
B11110,
B00011,
B11001,
B11101,
B11101,
B11001,
B00011,
B11110
}; // Char End 1 / 1
Servo servoX; // Servo for East/West movement
Servo servoY; // Servo for North/South movement
int nLDRPin = 32; // North LDR pin
int sLDRPin = 33; // South LDR pin
int eLDRPin = 34; // East LDR pin
int wLDRPin = 35; // West LDR pin
int VoltS = 36; // Pin VP on ESP32
float percent;
int RunTime = 0;
int count = 0;
unsigned long RuntimeS = 0;
unsigned long Runtime = 0;
unsigned long Ptime = 0;
unsigned long Ctime = 0;
int Sec, Min, Hr;
float PrintVolts = 0.00;
float R1 = 10000; //10k
float R2 = 1000; //1k
float Volt = 0.00;
float Current = 0.00;
float Power = 0.00;
int northLDR, southLDR, eastLDR, westLDR;
int servoXPos = 90; // Initial position of the X servo (East/West)
int servoYPos = 90; // Initial position of the Y servo (North/South)
int errorMargin = 10;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.createChar(0, Solar);
lcd.createChar(1, START_DIV_1_OF_1);//{|
lcd.createChar(2, DIV_0_OF_2);//=
lcd.createChar(3, DIV_1_OF_2);// |
lcd.createChar(4, DIV_2_OF_2);// |
lcd.createChar(5, END_DIV_0_OF_1);//}
lcd.createChar(6, END_DIV_1_OF_1);// |}
// Serial.print("Setting AP (Access Point)…");
// lcd.setCursor(0, 0);
// lcd.print (" SMART ");
// lcd.setCursor(0, 1);
// lcd.print (" SOLAR MONITOR ");
//connectToWiFi();
//loading();
pinMode(VoltS, INPUT);
servoX.attach(4); // Attach servo for East/West
servoY.attach(5); // Attach servo for North/South
servoX.write(servoXPos);
servoY.write(servoYPos);
Serial.begin(9600);
lcd.setCursor(1, 0);
lcd.print(" SOLAR TRACKER ");
lcd.setCursor(0, 1);
lcd.print(" SYSTEM ");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SYSTEM LOADING..");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("SYSTEM READY");
delay(2000);
}
void loop() {
if ((Ctime - Ptime) >= 1000) {
Sec++;
Ptime = Ctime;
}
if (Sec == 60) {
Min++;
count = 1;
Sec = 0;
Current = random(0, 201) / 1000.0; //0.00-0.20
}
if (Min == 60) {
Hr++;
Min = 0;
}
if (RuntimeS > 10) {
RuntimeS = 0;
}
Runtime = (Hr * 3600) + (Min * 60) + Sec; // all in sec
Runtime = Runtime / 60; // Min
count++;
// Current = currentsensor.getCurrentDC();
int analog_value = analogRead(VoltS);
Volt = ((analog_value * 3.30 ) / 1023.00);
Volt = Volt / (R2 / (R1 + R2));
Power = Volt * Current;
Serial.print(Volt);
Serial.print(" = ");
Serial.println(Current);
percent = (Volt / 6.5) * 100;
RunTime = millis() / 1000 / 60;
if (count > 0 && count <= 10) {
lcd.setCursor(0, 0);
lcd.print("-SOLAR MONITOR- ");
lcd.setCursor(0, 1);
lcd.print("VOLTAGE: ");
lcd.print(Volt);
lcd.print(" V ");
}
else if (count > 10 && count <= 20) {
lcd.setCursor(0, 0);
lcd.print("-SOLAR MONITOR- ");
lcd.setCursor(0, 1);
lcd.print("CURRENT: ");
lcd.print(Current);
lcd.print(" A ");
}
else if (count > 20 && count <= 30) {
lcd.setCursor(0, 0);
lcd.print("-SOLAR MONITOR- ");
lcd.setCursor(0, 1);
lcd.print("POWER: ");
lcd.print(Power);
lcd.print(" W ");
}
else if (count > 30 && count <= 40) {
lcd.setCursor(0, 0);
lcd.print("-SOLAR MONITOR- ");
lcd.setCursor(0, 1);
lcd.print("PERCENT: ");
lcd.print(percent);
lcd.print(" % ");
}
else if (count > 40 && count <= 50) {
lcd.setCursor(0, 0);
lcd.print("-SOLAR MONITOR- ");
lcd.setCursor(0, 1);
lcd.print("RUNTIME: ");
lcd.print(RunTime);
lcd.print(" Min ");
}
if (count > 50) {
count = 0;
// server();
}
northLDR = analogRead(nLDRPin); // Read the LDR values
southLDR = analogRead(sLDRPin);
eastLDR = analogRead(eLDRPin);
westLDR = analogRead(wLDRPin);
int maxX = max(eastLDR, westLDR);
int minX = min(eastLDR, westLDR);
int maxY = max(northLDR, southLDR);
int minY = min(northLDR, southLDR);
// Check East/West
if ((eastLDR - westLDR) > errorMargin) {
if (servoXPos < 180) {
servoXPos++;
servoX.write(servoXPos);
// lcd.setCursor(12, 0);
// lcd.print("EAST");
}
} else if ((westLDR - eastLDR) > errorMargin) {
if (servoXPos > 0) {
servoXPos--;
servoX.write(servoXPos);
// lcd.setCursor(12, 0);
// lcd.print("WEST");
}
}
// Check North/South
if ((northLDR - southLDR) > errorMargin) {
if (servoYPos > 0) {
servoYPos--;
servoY.write(servoYPos);
// lcd.setCursor(12, 1);
// lcd.print("NORTH");
}
} else if ((southLDR - northLDR) > errorMargin) {
if (servoYPos < 180) {
servoYPos++;
servoY.write(servoYPos);
// lcd.setCursor(12, 1);
// lcd.print("SOUTH");
}
}
// Display the servo positions
// lcd.setCursor(0, 1);
// lcd.print("Angle X: ");
// lcd.print(servoXPos);
// lcd.setCursor(0, 1);
// lcd.print("Angle Y: ");
// lcd.print(servoYPos);
Serial.print("N: "); Serial.print(northLDR);
Serial.print(" S: "); Serial.print(southLDR);
Serial.print(" E: "); Serial.print(eastLDR);
Serial.print(" W: "); Serial.print(westLDR);
Serial.print(" X: "); Serial.print(servoXPos);
Serial.print(" Y: "); Serial.println(servoYPos);
delay(100);
}
//********************connect to the WiFi******************
//void connectToWiFi() {
// WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
// delay(1000);
// WiFi.mode(WIFI_STA);
// Serial.print("Connecting to ");
// Serial.println(ssid);
// WiFi.begin(ssid, password);
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("SEARCHING WIFI:");
// lcd.setCursor(0, 1);
// lcd.print(ssid);
// delay(1000);
//
// while (WiFi.status() != WL_CONNECTED) {
// delay(500);
// Serial.print(".");
// }
// Serial.println("");
// Serial.println("Connected");
//
// lcd.clear();
// lcd.setCursor(3, 0);
// lcd.print("CONNECTION");
// lcd.setCursor(3, 1);
// lcd.print("SUCCESSFUL");
// delay(1000);
//
//
// Serial.print("IP address: ");
// Serial.println(WiFi.localIP()); //IP address assigned to your ESP
//
//}
//
//
//
//
//
//String getValue(String data, char separator, int index)
//{
// int found = 0;
// int strIndex[] = {0, -1};
// int maxIndex = data.length() - 1;
//
// for (int i = 0; i <= maxIndex && found <= index; i++)
// {
// if (data.charAt(i) == separator || i == maxIndex)
// {
// found++;
// strIndex[0] = strIndex[1] + 1;
// strIndex[1] = (i == maxIndex) ? i + 1 : i;
// }
// }
//
// return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
//}