Skip to Content

← All project packs

Two-axis solar tracker with CANopen

Astronomical positioning without light sensors: ephemeris + CANopen drive + inclinometers, with on-site configuration over WiFi.

Runs on: Raspberry PLC 21 — Python 3 scripts (Linux PLC).

The application

A photovoltaic plant with two-axis trackers needed robust, maintainable control. Each Raspberry PLC computes the sun position from ephemeris data (no light sensors that get dirty), drives the LOVATO variable frequency drive over CANopen, adjusting frequency and ramps according to the distance to the target, and closes the loop with two CANopen inclinometers. A physical button raises a WiFi access point for 15 minutes for on-site configuration, and the local Node-RED dashboard allows manual control and calibration.

Architecture

  • Astronomical elevation/azimuth calculation (PyEphem) every 300 s
  • LOVATO VLB3 drive over CANopen SDO (run, frequency, ramps, diagnostics)
  • 2× CANopen inclinometer as position feedback
  • Night stow position with automatic resume at sunrise
  • Push-button WiFi AP (15 min) + Node-RED dashboard + systemd services

Bill of materials

  • Raspberry PLC 21 — Industrial Shields controller
  • LOVATO VLB3 drive — motors for both axes
  • 2× TY7953 CANopen inclinometer — actual position
  • Central Mosquitto broker — plant-wide supervision

What is in the pack

  • canopen-encoder-inclinometer-reading.py
  • central-mosquitto-broker.sh
  • lovato-vlb3-vfd-canopen-sdo.py
  • solar-tracker.service
  • solar-tracking-pyephem.py
  • tcp-socket-node-red.py
  • wifi-access-point-button.py
  • Bill of materials + README

Get the pack by email — free

Fill in the form and we will send the complete pack to your inbox within minutes.

We send the pack to this address.
Optional.
I agree that Industrial Shields will process my data to send me the requested files, as described in the privacy policy.
I would also like to receive occasional technical content and product news from Industrial Shields (optional — unsubscribe anytime).