#include <ESP8266WiFi.h>
#include <NewPing.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
const char* ssid = "Kost Lusy";
const int analogPin = A0;
const float referenceVoltage = 3.3;
const float calibrationFactor = 1.150;
const int RXPin = 13; // Hubungkan D7 Ke PIN TX GPS
const int TXPin = 15; // Hubungkan D8 Ke PIN RX GPS
SoftwareSerial serial_gps(RXPin, TXPin);
TinyGPSPlus gps;
// Time zone WIB
const int timeZoneOffset = 7;
// Ultrasonik
#define TRIGGER_PIN_1 D0
#define ECHO_PIN_1 D1
#define TRIGGER_PIN_2 D3
#define ECHO_PIN_2 D4
#define TRIGGER_PIN_3 D5
#define ECHO_PIN_3 D6
#define PIN_MOTOR_VIBRASI D2
#define JARAK_MAKS 400
NewPing ultrasonik1(TRIGGER_PIN_1, ECHO_PIN_1, JARAK_MAKS);
NewPing ultrasonik2(TRIGGER_PIN_2, ECHO_PIN_2, JARAK_MAKS);
NewPing ultrasonik3(TRIGGER_PIN_3, ECHO_PIN_3, JARAK_MAKS);
void setup() {
Serial.begin(9600);
serial_gps.begin(9600);
Serial.println("GPS Mulai");
pinMode(PIN_MOTOR_VIBRASI, OUTPUT);
// Menghubungkan ke jaringan WiFi
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected to WiFi");
}
void loop() {
// Pembacaan Baterai
bacaBaterai();
// Pembacaan GPS
bacaGPS();
// Pembacaan Sensor Ultrasonik
bacaUltrasonik();
}
void bacaBaterai() {
int sensorValue = analogRead(analogPin);
float rawVoltage = sensorValue * (referenceVoltage / 1023.0) * ((220.0 + 100.0) / 100.0);
float voltage = rawVoltage * calibrationFactor;
Serial.print("Tegangan Baterai: ");
Serial.print(voltage);
Serial.print(" V, ");
if (voltage >= 8.0) {
Serial.println("Baterai Penuh");
} else if (voltage <= 6.0) {
Serial.println("Baterai Habis");
} else {
Serial.println("");
}
}
void bacaGPS() {
while (serial_gps.available()) {
gps.encode(serial_gps.read());
}
if (gps.location.isUpdated()) {
Serial.print("Latitude: ");
Serial.println(gps.location.lat(), 6);
Serial.print("Longitude: ");
Serial.println(gps.location.lng(), 6);
Serial.print("Date: ");
Serial.print(gps.date.day());
Serial.print("/");
Serial.print(gps.date.month());
Serial.print("/");
Serial.println(gps.date.year());
int hour = gps.time.hour() + timeZoneOffset;
if (hour >= 24) hour -= 24;
Serial.print("Time: ");
Serial.print(hour);
Serial.print(":");
Serial.print(gps.time.minute());
Serial.print(":");
Serial.println(gps.time.second());
}
}
void bacaUltrasonik() {
int jarak1 = ultrasonik1.ping_cm();
int jarak2 = ultrasonik2.ping_cm();
int jarak3 = ultrasonik3.ping_cm();
if (jarak1 > 0 && jarak1 <= 10) {
getarMotor(2);
Serial.println("Ultrasonik 1 mendeteksi objek dalam jarak 10cm, vibration motor bergetar dua kali.");
}
if (jarak2 > 0 && jarak2 <= 15) {
getarMotor(3);
Serial.println("Ultrasonik 2 mendeteksi objek dalam jarak 15cm, vibration motor bergetar tiga kali.");
}
if (jarak3 > 0 && jarak3 <= 15) {
getarMotor(1);
Serial.println("Ultrasonik 3 mendeteksi objek dalam jarak 15cm, vibration motor bergetar satu kali.");
}
if (jarak1 == 0 && jarak2 == 0 && jarak3 == 0) {
digitalWrite(PIN_MOTOR_VIBRASI, LOW);
}
}
void getarMotor(int kali) {
for (int i = 0; i < kali; i++) {
digitalWrite(PIN_MOTOR_VIBRASI, HIGH);
delay(300);
digitalWrite(PIN_MOTOR_VIBRASI, LOW);
delay(300);
}
}