. Automatic Power Source Selector (Mains / Solar / Generator) using Arduino ~ SmartElectronicsDIY

Automatic Power Source Selector (Mains / Solar / Generator) using Arduino

 

🎯 Project Objective

To automatically switch the load to the available power source in the following priority order:

  1. Mains Power (Highest Priority)

  2. Solar Inverter

  3. Generator (Backup)

No manual switching required.


🧠 Working Principle (Simple)

  • Arduino continuously checks voltage availability of:

    • Mains

    • Solar Inverter

    • Generator

  • Based on priority:

    • If Mains ON → Load connects to Mains

    • Else if Solar ON → Load connects to Solar

    • Else if Generator ON → Load connects to Generator

  • Switching is done using relay modules







🧩 Required Components

ComponentQuantity
Arduino UNO / Nano1
5V Relay Module (3-Channel)1
AC Voltage Sensor / Optocoupler (PC817)3
Resistors (1k, 10k)As needed
Diodes (1N4007)3
LED Indicators3
Buzzer (Optional)1
AC Sources (Mains, Solar, Generator)
Load (Bulb/Fan)1

🔄 System Block Diagram

MAINS AC ──┐ │ SOLAR AC ──┼──> Voltage Sensors ──> Arduino UNO │ GENERATOR ─┘ Arduino Outputs │ ├── Relay 1 → Mains ├── Relay 2 → Solar └── Relay 3 → Generator Selected Source ──> LOAD

⚡ Circuit Diagram (Text Representation)

MAINS AC ----[Optocoupler]---- D2 (Arduino) SOLAR AC ----[Optocoupler]---- D3 (Arduino) GEN AC ----[Optocoupler]---- D4 (Arduino) Arduino D8 ---- Relay 1 (Mains) Arduino D9 ---- Relay 2 (Solar) Arduino D10 --- Relay 3 (Generator) Relay COM → Load Relay NO → Respective Power Source

Important:
Never connect AC directly to Arduino. Use Optocouplers / Voltage Sensors only.


🧑‍💻 Arduino Code (Working)

// Auto Power Source Switching System int mainsPin = 2; int solarPin = 3; int genPin = 4; int relayMains = 8; int relaySolar = 9; int relayGen = 10; void setup() { pinMode(mainsPin, INPUT); pinMode(solarPin, INPUT); pinMode(genPin, INPUT); pinMode(relayMains, OUTPUT); pinMode(relaySolar, OUTPUT); pinMode(relayGen, OUTPUT); digitalWrite(relayMains, LOW); digitalWrite(relaySolar, LOW); digitalWrite(relayGen, LOW); } void loop() { int mains = digitalRead(mainsPin); int solar = digitalRead(solarPin); int gen = digitalRead(genPin); if (mains == HIGH) { switchMains(); } else if (solar == HIGH) { switchSolar(); } else if (gen == HIGH) { switchGenerator(); } else { allOff(); } } void switchMains() { digitalWrite(relayMains, HIGH); digitalWrite(relaySolar, LOW); digitalWrite(relayGen, LOW); } void switchSolar() { digitalWrite(relayMains, LOW); digitalWrite(relaySolar, HIGH); digitalWrite(relayGen, LOW); } void switchGenerator() { digitalWrite(relayMains, LOW); digitalWrite(relaySolar, LOW); digitalWrite(relayGen, HIGH); } void allOff() { digitalWrite(relayMains, LOW); digitalWrite(relaySolar, LOW); digitalWrite(relayGen, LOW); }



 Example Scenario

MainsSolarGeneratorOutput
ONONONMains
OFFONONSolar
OFFOFFONGenerator
OFFOFFOFFPower OFF

📌 Applications

  • Home UPS systems

  • Solar power systems

  • Industries & factories

  • Hospitals

  • Rural electrification

0 comments:

Post a Comment