Published: July 27, 2026
This Year 2 team engineering project involved designing, building, and testing a self-contained outdoor lighting system powered by solar energy. The system generates energy during the day, stores it in a rechargeable battery, and automatically provides lighting when ambient light falls.
The complete design brings together photovoltaic generation, battery charging and protection, voltage regulation, Arduino-based sensing, load switching, and an outdoor enclosure. It was developed as a practical proof-of-concept for pathway, garden, and off-grid lighting applications.
My role: Systems & Electronics Lead. My work focused on circuit design, engineering calculations, electronic component integration, and connecting the theoretical system design to the physical hardware.
The project was developed in two connected stages: a full 12V outdoor lighting system and a compact Arduino, LDR, and NeoPixel demonstrator used to refine the sensing and gradual-brightness control. The sections below explain how each stage contributed to the final prototype.
| Component | Specification | Purpose |
|---|---|---|
| Photovoltaic panel | 20W, 12V nominal | Generates electrical energy from daylight |
| Solar charge controller | 10A PWM | Regulates charging and protects the battery from overcharge |
| Prototype battery | 12V, 7Ah sealed lead-acid | Stores energy for night-time operation |
| Arduino Nano | 5V microcontroller | Reads the sensor and executes the automatic lighting logic |
| LM2596 buck converter | 12V to regulated 5V | Provides a safe supply for the Arduino and sensing circuit |
| LDR sensor module | Analogue output | Measures ambient light for day/night detection |
| N-channel MOSFET | Logic-level, low-side switch | Allows the Arduino to control the higher-current lighting load |
| LED floodlight | 10W, 12-24V DC | Provides the main outdoor illumination |
| Outdoor enclosure | IP65 with cable glands | Protects the electronics from dust and water ingress |
The engineering calculations initially identified a 20Ah SLA battery for greater autonomy. A smaller 7Ah battery was selected for the scaled prototype because of cost, size, and component availability.
| From | To | Purpose |
|---|---|---|
| Solar panel | Solar charge controller input | Transfers generated solar energy |
| Charge controller | 12V battery | Provides regulated battery charging |
| 12V battery | LM2596 input | Supplies the control-power regulator |
| LM2596 regulated output | Arduino Nano 5V supply | Powers the microcontroller and sensing circuit |
| LDR analogue output | Arduino analogue input | Provides the ambient-light reading |
| Arduino control output | MOSFET gate | Controls the lighting load using PWM |
| Battery, MOSFET stage, and LED | 12V lighting circuit | Delivers switched power to the floodlight |
| Connection | Arduino Pin |
|---|---|
| 12-pixel NeoPixel data input | D6 |
| LDR analogue signal | A0 |
Critical connections were soldered and insulated with heat-shrink tubing. Terminal blocks were used where appropriate, and 22 AWG wiring was selected for the low-voltage prototype. Power, control, and load wiring were routed separately inside the enclosure to simplify testing and maintenance.
| Test | Measured Result | Outcome |
|---|---|---|
| Solar charging | Battery increased from approximately 12.2V to 13.5-14.0V; sustained charging was approximately 13.8V | Charge controller operated within the expected SLA charging range |
| Night-time runtime | Approximately 6-8 hours, averaging about 6.6 hours across seven nights | Met the scaled prototype target |
| Day/night switching | Approximately 4.5V in bright light, 0.45V in low light, and a 2.5V transition region | Stable automatic switching after threshold tuning |
| Lighting output | Stable brightness with no visible flicker during the runtime test | Power delivery and switching remained stable |
| Outdoor enclosure | No internal moisture, condensation, cable damage, or visible degradation during winter testing | IP65 enclosure and cable sealing passed the test |
Initial false triggering from brief shadows was reduced by refining the light threshold, adding a short control delay, and improving the physical position of the sensor.
| Library | Purpose |
|---|---|
| Adafruit NeoPixel | Controls the 12 addressable LEDs |
This compact control sketch demonstrates how the LDR reading is converted into a smooth brightness level for the 12-pixel NeoPixel light. The full outdoor system uses the same sensing principle with a MOSFET switching stage for its 12V lighting load.
#include <Adafruit_NeoPixel.h>
#define LED_PIN 6
#define NUM_LEDS 12
#define LDR_PIN A0
Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int currentBrightness = 0;
void setup() {
strip.begin();
strip.show();
Serial.begin(9600);
}
void loop() {
int ldrValue = analogRead(LDR_PIN);
Serial.println(ldrValue);
int targetBrightness = map(ldrValue, 500, 1000, 0, 255);
targetBrightness = constrain(targetBrightness, 0, 255);
if (currentBrightness < targetBrightness) {
currentBrightness += 3;
} else if (currentBrightness > targetBrightness) {
currentBrightness -= 3;
}
strip.setBrightness(currentBrightness);
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255));
}
strip.show();
delay(30);
}
As Systems & Electronics Lead, I was responsible for designing and integrating the circuit components, supporting the engineering calculations, and helping translate the planned architecture into a working physical system. This included:
The software and wider project work were completed collaboratively, with responsibilities shared across the team.