Robotics / Embedded systems

Autonomous Solar Panel Cleaning Robot

Role
Main control board PCB and embedded firmware
Period
Apr. 2025 — Present
Outcome
TODO(berk): replace with a real, defensible number — e.g. cleans a <N>-panel row autonomously; <X>% reduction in manual cleaning time.
  • STM32
  • Embedded C/C++
  • CAN bus
  • Wi-Fi
  • BLE
  • Motor control
  • Altium / KiCad

Developed as part of professional work. Architecture is described at a high level; proprietary schematics, source code and client details are omitted.

The problem

Solar arrays lose output to dust buildup, and manual cleaning doesn’t scale across a large industrial installation. TODO(berk): add the specific constraint that made a robot necessary here — array size, access, cleaning frequency required.

My role

I own the main control board: the hardware (PCB) and embedded firmware that runs the robot. This includes drive and brush motor control, electronic water-valve and lighting management, IMU-assisted driving, battery monitoring, non-volatile data storage, and the LED/buzzer warning system — all on a single platform. TODO(berk): note which parts of the system (mechanical design, mobile app, etc.) were owned by other engineers.

Constraints

  • ESD and EMI protection required for outdoor industrial deployment
  • TODO(berk): power budget, temperature range, cost per unit, safety requirements, timeline

System architecture

Single main control board handling drive motors, brush motors, water valve, lighting, IMU, battery monitoring and non-volatile storage. TODO(berk): block diagram (SVG) and a short walkthrough of how the subsystems talk to each other.

Firmware design

TODO(berk): task structure, scheduling, priorities, the state machine for the cleaning cycle, and how watchdog / fault recovery / safe-stop are handled.

Communication

2.4 GHz Wi-Fi and BLE for connectivity. TODO(berk): why these over a wired link for this platform, and how the robot integrates with the rest of the site (if applicable).

Hardest problem

TODO(berk): pick the single most interesting failure — what you observed, how you narrowed it down, root cause, what you changed.

Result

TODO(berk): measured outcome — uptime, cycle time, current draw, units built.

What I’d do differently

TODO(berk)