AI Assistant
Detail Karya Portofolio

Auto Shutdown PC Server (UPS)

Sha'Bani Septriansyah Oleh: Sha'Bani Septriansyah

Ringkasan Portofolio

Sistem ini menggunakan mikrokontroler wemos d1 mini (esp8266) yang terhubung dengan relay untuk menjadikannya saklar otomatis. Sistem ini bertujuan untuk melakukan shutdown server secara otomatis terjadi mati listrik.

Deskripsi & Detail Proyek

Alat Dan Bahan
Wemos D1 Mini
Relay 1 Channel 5V yang terhubung ke GPIO


Sistem ini menggunakan mikrokontroler wemos d1 mini (esp8266) yang terhubung dengan relay untuk menjadikannya saklar otomatis. Sistem ini bertujuan untuk melakukan shutdown server secara otomatis terjadi mati listrik.
Sistem ini akan mendekteksi mati listrik jika modul esp8266 nya tidak konek ke wifi, wemos d1 mini akan mengaktifkan relay -+ 300ms jika wifi tidak terdeteksi, relay akan terhubung ke pin power_btn motherboard server. Jika tidak menggunakan sistem ini maka komputer server akan mati mendadak jika baterai ups habis (-+ 15 menit ) maka dari itu sistem ini bertujuan untuk melakukan softshutdown jika terjadi pemadaman listrik.

 

 


1. Rangkaian Sistem 

2. Menyiapkan Program untuk Wemos D1 Mini

#include <ESP8266WiFi.h>

const char* ssid = "SSID_WIFImu";
const char* password = "pwnyadisini";
const int relayPin = 4;  
bool isDisconnected = false;
bool initialized = false;  // Variabel untuk menandai inisialisasi selesai

void setup() {
 delay(2000);  
 pinMode(relayPin, OUTPUT);
 digitalWrite(relayPin, HIGH);  // Pastikan relay mati (active low)
 
 connectToWiFi(); // Mencoba koneksi WiFi awal
}

void connectToWiFi() {
 WiFi.begin(ssid, password);
 
 // Mencoba menghubungkan ke WiFi selama 5 detik (10 kali)
 for (int attempts = 0; attempts < 10 && WiFi.status() != WL_CONNECTED; attempts++) {
   delay(500);  
 }
 
 // Jika terhubung, tandai sebagai terinisialisasi
 if (WiFi.status() == WL_CONNECTED) {
   initialized = true; 
   digitalWrite(relayPin, HIGH);  // Pastikan relay tetap mati
 }
}

void loop() {
 // Jika sudah terinisialisasi, periksa status WiFi
 if (initialized) {
   if (WiFi.status() != WL_CONNECTED) {
     if (!isDisconnected) {
       // Jika terputus, aktifkan relay sekali
       digitalWrite(relayPin, LOW);  // Nyalakan relay
       delay(300);                   // Tunggu 0,3 detik
       digitalWrite(relayPin, HIGH); // Matikan relay
       
       isDisconnected = true;  // Tandai sebagai terputus
     }
   } else {
     // Reset status disconnection jika terhubung
     isDisconnected = false;  
   }
 } else {
   // Jika belum terinisialisasi, coba sambungkan ke WiFi
   connectToWiFi(); // Panggil fungsi untuk mencoba sambungan
 }

 delay(1000);  // Cek status WiFi setiap detik
}