Home automation module that can be used as a stand-alone tracker, working autonomously.

Can also be controlled by a home automation system, like Domoticz (DomBusTracker version with DomBus protocol firmware), Home Assistant, Node-RED, OpenHAB, ... (DomBusTracker version with Modbus protocol firmware).

Dual axis solar tracker

Sun tracker is very good for photovoltaic systems because enhances the total production energy and, moreover, increases the power during the early morning and late afternoon, when energy is more expensive and less available.

The following chart shows the comparison of the energy produced in a sunny day, October 31 2024, in the Northern Italy, between a 2-axis solar tracker and a photovoltaic on the roof.

Comparison between energy produced by a 2-axis tracker and fixed photovoltaic on the roof

Comparing the two systems, we can say that in these conditions the 2-axis tracker performs almost 3 times over photovoltaic on the roof . Normally it performs almost twice a photovoltaic system on a roof oriented to South, with a normal tilt for italian houses (around 15 degrees).

This controller is based on the chinese XMYC-3 controller, using the same sun sensor, but adding some features like the automatic detection of the limit switches inside the motors (linear actuators have limit switches inside, that cut-off power), home automation system integration (you may choose between the DomBus proprietary protocol working with Domoticz, and Modbus standard protocol working with almost any domotic controller) and automatic return to night position.

 

Controller for dual-axis solar tracker, working with Domoticz, Home Assistant, NodeRED, OpenHAB, Modbus, ...

Features

  • Use a standard waterproof sun sensors made by 4 photodetectors, to determine the best tilt/azimuth even in case of clouds. 
  • 4x 10A relays permit to control 2 linear actuators with 800kg force (or similar), supplied by a 24V (preferred) or 12V power supply unit.
  • Current sensing to automatically detect the linear actuator internal limit switches.
  • Additional 6 analog/digital inputs, that can be connected to NTC, energy meters, wind speed meter, ...
  • 2x 10A additional relays, to enable/disable the power supply unit (saving energy consumption during the night) and more.
  • 1x AC optoisolated input to detect (and notify) power outages
  • Internal RS485 bus terminating resistor (150 ohm) that can be enabled by a PCB jumper (with a solder iron)
  • RS485 bus, that works with up to 500m of cable (using standard alarm cable: 2x0.50+2x0.22mm² + shield)
  • DIN rail low-profile enclosure, 115x90x40mm
  • Plugin terminal blocks for easy wiring
  • Parameters configurable by RS485 bus, to work with almost any tracking system
  • Available with 2 firmwares of your choice:
    • DomBus firmware, working with Domoticz, implementing the DomBus proprietary protocol
    • Modbus firmware, working with NodeRED, Home Assistant, OpenHAB and many other controllers supporting the standard Modbus protocol.
  • Very low power usage: 15mW with relays OFF.
  • Supplied with 2 power resistors 5W for current sensing (to detect motor internal limit switches), 2 varistors 33V to avoid overvoltages on motor coils and 27 Ohm resistor to supply the sun sensor

Sun sensor, actuators, 24V power supply unit and fuse protection have to be purchased apart.

Connection schematic

Connection diagram for 2-axis solar tracker and DomBusTracker controller

DomBusTracker ports capabilities (for the DomBus version)

Default address: 0xff38

Port# Name Capabilities Default configuration Description
1 MN OUT_DIGITAL OUT_DIGITAL SPDT 10A relay that have to be connected to the tilt linear actuator (North/South): see schematic below. Read-only: tracker position may be changed by using the Pns and Pew control bars.
2 MS OUT_DIGITAL OUT_DIGITAL SPDT 10A relay that have to be connected to the tilt linear actuator (North/South): see schematic below. Read-only: tracker position may be changed by using the Pns and Pew control bars.
3 ME OUT_DIGITAL OUT_DIGITAL SPDT 10A relay that have to be connected to the tilt linear actuator (East/West): see schematic below. Read-only: tracker position may be changed by using the Pns and Pew control bars.
4 MW OUT_DIGITAL OUT_DIGITAL SPDT 10A relay that have to be connected to the tilt linear actuator (East/West): see schematic below. Read-only: tracker position may be changed by using the Pns and Pew control bars.
5 RL5 OUT_DIGITAL OUT_DIGITAL 10A SPST relay (only NO contact), 250Vac or 30Vdc capability, that can be used for other purposes
6 RL6 OUT_DIGITAL OUT_DIGITAL 10A SPST relay (only NO contact), 250Vac or 30Vdc capability, that can be used for other purposes
7 INAC IN_AC, IN_COUNTER IN_AC Optoisolated input, that can be connected to a circuit breaker (to notify power outages, expecially useful for fridges and heat pumps), PIRs with 230V output (to monitor presence),  light and appliances (to monitor when light or devices are ON).
8 N IN_ANALOG IN_ANALOG North light sensor.
9 S IN_ANALOG IN_ANALOG South light sensor.
10 E IN_ANALOG IN_ANALOG East light sensor.
11 W IN_ANALOG IN_ANALOG West light sensor.
12 Ins IN_ANALOG IN_ANALOG North-South (tilt) motor current sensing (used to detect internal limit switches).
Domoticz devices should be configured as IN_ANALOG,A=0.00042,TypeName=Current (Single)
13 Iew IN_ANALOG IN_ANALOG North-South (tilt) motor current sensing (used to detect internal limit switches).
Domoticz devices should be configured as IN_ANALOG,A=0.00042,TypeName=Current (Single)
14 IN7 IN_DIGITAL, IN_DIGITAL_PULLDOWN, IN_ANALOG, IN_TWINBUTTON, IN_COUNTER IN_DIGITAL

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...
Have a 10k pullup resistor that can be enabled by a PCB jumper.

15 IN8 IN_DIGITAL, IN_DIGITAL_PULLDOWN, IN_ANALOG, IN_TWINBUTTON, IN_COUNTER IN_DIGITAL

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...
Have a 10k pullup resistor that can be enabled by a PCB jumper.

16 IN9 IN_DIGITAL, IN_DIGITAL_PULLDOWN, IN_ANALOG, IN_TWINBUTTON, IN_COUNTER IN_DIGITAL

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...
Have a 10k pullup resistor that can be enabled by a PCB jumper.

17 IN10 IN_DIGITAL, IN_DIGITAL_PULLDOWN, IN_ANALOG, IN_TWINBUTTON, IN_COUNTER IN_DIGITAL

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

18 IN11 IN_DIGITAL, IN_DIGITAL_PULLDOWN, IN_ANALOG, IN_COUNTER IN_DIGITAL

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

19 IN12 IN_DIGITAL, IN_DIGITAL_PULLDOWN, IN_ANALOG, IN_COUNTER IN_DIGITAL

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

20 NS CUSTOM CUSTOM

0-100% bar showing the deviation of the maximum NS radiation direction from the current tilt position

21 EW CUSTOM CUSTOM

0-100% bar showing the deviation of the maximum EW radiation direction from the current azimuth position

22

Pns

CUSTOM CUSTOM

0-100% bar showing the current tilt position

23 Pew CUSTOM CUSTOM

0-100% bar showing the current azimuth position

24 Man OUT_DIGITAL OUT_DIGITAL

If Off, tracker is in automatic tracking mode.
If On, tracker is disabled and position can be changed only by using the Pns and Pew bars.
When Pns and Pew device have been changed by the user, the tracker enters the Manual mode, disabling tracking. Set Man to Off to enable automatic solar tracking.

 

DomBusTracker Modbus RTU capabilities (for the Modbus version)

At power-on, the module shows on red LED the current Modbus slave address (register address=8192) in decimal format, on green LED the serial baudrate (reg. 8193), and finally on red LED the serial parity (reg. 8194).
If a value is zero, a long flash is emitted.

For example, if reg(8192)=56, reg(8193)=0, reg(8194)=0, at power the following led flashes will be shown:
5 red flashes, pause, 6 red flashes (slave address= 0x38 = 56 decimal), pause, 1 long green flash (reg(8193)=0 => baudrate=115200bps), pause, 1 long red flash (reg(8194)=0 => parity=None).

Device will be operative only when address/baudrate/parity parameters have been shown: then module will accept commands by Modbus RTU, and periodically shows output status for all ports, from 1 to max port: green flash means that port status is Off, red flash means that port is On.

Default slave address: 56 (0x38)

Addr Name Values Description
0 MN 0=OFF, 1=ON. Read only.
Tracker position may be changed by using the Pns and Pew control bars.
SPDT 10A relay that have to be connected to the tilt linear actuator (North/South): see schematic below. Read-only
1 MS

0=OFF, 1=ON. Read only.
Tracker position may be changed by using the Pns and Pew control bars.

SPDT 10A relay that have to be connected to the tilt linear actuator (North/South): see schematic below. Read-only
2 ME 0=OFF, 1=ON. Read only.
Tracker position may be changed by using the Pns and Pew control bars.
SPDT 10A relay that have to be connected to the tilt linear actuator (East/West): see schematic below. Read-only
3 MW 0=OFF, 1=ON. Read only.
Tracker position may be changed by using the Pns and Pew control bars.
SPDT 10A relay that have to be connected to the tilt linear actuator (East/West): see schematic below. Read-only
4 RL5 0=OFF, 1 or 65280=ON, 2-65279=ON for specified time.
Logic can be inverted specifying the INVERTED option (on address 512+port)
SPST 10A, that can be used for other purposes
5 RL6 0=OFF, 1 or 65280=ON, 2-65279=ON for specified time.
Logic can be inverted specifying the INVERTED option (on address 512+port)
SPST 10A, that can be used for other purposes
6 INAC 0=OFF (floating), 1=ON (100-250V signal detected) Optoisolated input, that can be connected to a circuit breaker (to notify power outages, expecially for fridges and heat pumps), PIRs with 230V output (to monitor presence),  light and appliances (to monitor when light or devices are ON).
7 N 0-65520 depending by the solar radiation received by this sensor. North light sensor.
8 S 0-65520 depending by the solar radiation received by this sensor. South light sensor.
9 E 0-65520 depending by the solar radiation received by this sensor. East light sensor.
10 W 0-65520 depending by the solar radiation received by this sensor. West light sensor.
11 Ins 0=OFF, >0 = 16-65520 if motor current is detected.
Ins = value*0.00042 [A] in case that sensing resistor is 0.12Ohm

North-South (tilt) motor current sensing (used to detect internal limit switches).
Domoticz devices should be configured as IN_ANALOG,A=0.00042,TypeName=Current (Single)
12 Iew 0=OFF, >0 = 16-65520 if motor current is detected.
Ins = value*0.00042 [A] in case that sensing resistor is 0.12Ohm
North-South (tilt) motor current sensing (used to detect internal limit switches).
Domoticz devices should be configured as IN_ANALOG,A=0.00042,TypeName=Current (Single)
13 IN7 0=OFF, 1=ON, or 0-65535 if port is configured as analog.
See below for more information.
Digital input or analog input, with internal pullup enabled by hardware, or internal pulldown enabled by software (configuring as IN_DIGITAL_PULLDOWN).
14 IN8 0=OFF (input externally pulled/shorted to GND), 1=ON (input externally disconnected, with internal pullup to 3.3V). Logic can be inverted with the INVERTED option (to be set on address 512+port)

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

15 IN9 0=OFF, 1 or 65280=ON, 2-65279=ON for specified time.
Logic can be inverted specifying the INVERTED option (on address 512+port)

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

16 IN10

0=OFF, 1 or 65280=ON, 2-65279=ON for specified time.Logic can be inverted specifying the INVERTED option (on address 512+port)

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

17 IN11 0=OFF, 1 or 65280=ON, 2-65279=ON for specified time.
Logic can be inverted specifying the INVERTED option (on address 512+port)

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

18 IN12 0=OFF, 1=ON, or 0-65535 if port is configured as analog.
See below for more information.

Analog or digital input, with optional 10k pullup (pcb jumper) and optional internal pulldown (activated when configured as IN_DIGITAL_PULLDOWN).
Common terminal block is GND: pushbutton, switch, alarm sensor, NTC, meter, ... should be connected to this input and to GND.
Can be connected to external NTC thermistor (air or water temperature sensor), energy / water / gas meters with pulsed output, switches, pushbuttons, alarm sensors, ...

19 NS 0=max radiation from the "North" side (minimum tilt).
100=max radiation from the "South" side (maximum tilt).

0-100% bar showing the deviation of the maximum NS radiation direction from the current tilt position

20 EW 0=max radiation from East side.
100=max radiation from West side.

0-100% bar showing the deviation of the maximum EW radiation direction from the current azimuth position

21

Pns

0=minimum tilt. 100=maximum tilt

0-100% bar showing the current tilt position

22 Pew 0=minimum azimuth (East). 100=maximum azimuth (West)

0-100% bar showing the current azimuth position

23 Man 0=Automatic mode.
1=Manual mode.

If Off, tracker is in automatic tracking mode.
If On, tracker is disabled and position can be changed only by using the Pns and Pew bars.
When Pns and Pew device have been changed by the user, the tracker enters the Manual mode, disabling tracking. Set Man to Off to enable automatic solar tracking.

255 All input ports bitmask: 1=> MN, 2=>MS, 4=>ME ...

This address is used to check input state in one command
if Value=0 all inputs are OFF
if Value=48 (0b0000000000110000, in binary), port5 and port6 are ON

256-273 Port config 1=OUT_DIGITAL, 2=OUT_RELAY_LP, ...
Command used to configure port 1 (256), port 2 (257), ... as OUT_DIGITAL or OUT_RELAY_LP (low power consumption relay) or other value (see table below)
512-529 Port option 0=NORMAL, 1=INVERTED (output normally ON, or input is ON when port voltage is 0V) Set port option. If set to 1, output stays ON after boot until the port is asserted (then relays goes OFF). For inputs, setting INVERTED the port value is ON (1) when input voltage is 0V, OFF when input is left open with internal pullhigh enabled.
8192 Slave Address 1-247 Permits to change the slave address of the module, so it's possible to add other modules to the same bus
8193 Serial bitrate 0=115200bps, 1=57600, 2=38400, 3=19200, 4=9600, 5=4800, 6=2400, 7=1200bps Serial speed, default 115200 bps 8,n,1
8194 Serial parity 0=None, 1=Even, 2=Odd Serial parity, default none (115200 bps 8,n,1)
8198 Revision, major Read only Get firmware version, major number. For example "02" means that revision is "02XX" where XX defined by parameter 8199
8199 Revision, minor Read only Get firmware version, minor number. For example "h1" means that revision is "XXh1" where XX defined by parameter 8198

It's possible to activate one or more outputs for a certain amount of time (monostable/timer output) as indicated in the table. The parameter corresponding to the needed time can be computed using the following rules:

From 0 to 60s => 31.25ms resolution 2=62.5ms, 3=93.75ms, ... 1920=60s => value=time_in_milliseconds/31.5
From 1m to 1h with 1s resolution 1921=61s, 3540+1920=5460=1h => value=(time_in_seconds-60)+1920
From 1h to 1d with 1m resolution 5461=1h+1m, 1380+5460=6840=24h => value=(time_in_minutes-60)+5460
From 1d to 1500 days with 1h resolution 6841=25h, 6842=26h, and so on => value=(time_in_hours-24)+6840

The following tables show some Modbus commands examples.

Slave Addr Func. Code Reg.Addr Reg.Value Frame Description
56 06 8192 1 [37][06][20][00][00][01][xx][xx] Change slave address from 54 (0x36) to 1
01 06 8193 4 [01][06][20][01][00][04][D2][09] Set serial speed to 9600bps
01 06 8194 1 [01][06][20][02][00][01][E2][0A] Set even parity
49 10 8192 1,4,1 [31][10][20][00][00][03][06][00][01][00][04][00][01][B1][71] With a single command, set slave address to 1, serial speed to 9600bps, even parity. Original modules address was 49 (0x31) in this example.
01 06 0 65280 [01][06][00][00][FF][00][C8][3A] Activate RL1 output forever (65280=0xff00)
01 06 1 960 [01][06][00][01][03][C0][D8][AA] Activate RL2 for 960/32=30s
01 06 255 0 [01][06][00][FF][00][00][B9][FA] Disable all outputs (Reg.Addr=255)
01 10 0 32,0,0,65280 [31][10][00][00][00][04][08][00][20][00][00][00][00][FF][00][E6][5C] Set RL1 On for 1s (32), RL2 Off, RL3 Off, RL4 On - Max 10 registers can be set in one command
01 03 255 1 [01][03][00][FF][00][01][B4][3A] Read a 16bit value with ports status. For example if returned value is 0xd1 (0b11010001), output status is:
RL8=On, RL7=On, RL6=Off, RL5=On, RL4=Off, RL3=Off, RL2=Off, RL1=On
01 03 8198 2 [01][03][20][06][00][02][2F][CA] Read 4 bytes within module version. For example, if returned value is <30><32><68><31> (in hex format), the corresponding ASCII value is "02h1" (Firmware 02h1)
01 0F 0 8,1,0xd1 [01][0F][00][00][00][08][01][D1][3E][C9] Set coil status to 0xd1 (0b11010001), activating RL8, RL7, RL5, RL1 and disabling other relays
01 01 0 8 [01][01][00][00][00][08][3D][CC] Read coil status. If returned value is 0xd1 (0b11010001), it means that RL8, RL7, RL5 and RL1 are On

Modbus protocol can be tested easily using a modbus program, like mbpoll for Linux:

mbpoll -v -m rtu -0 -1 -a1 -b115200 -Pnone -r 0 /dev/ttyUSB0 32 0 64 128 0 0 0 65280

to activate RL1 for 1s, R3 for 2s, RL4 for 4s and RL8 forever.

mbpoll -v -m rtu -0 -1 -a1 -b115200 -Pnone -r 255 -c 1 /dev/ttyUSB0

to read all port states.

Configurable parameters

The following parameters can be configured by the user to set motor working times and get the tracker working as preferred.

Parameter name Description Range Default DomBus Modbus
PeriodicTrackerCheck Time to wait before moving the motors again, during tracking 10-600 seconds 60 INIT=60 on port Man  
TrackerSensorMin Threshold for sensors N+S to distinguish between night and day 16-16384 2048 INIT=2048 on port S  
TrackerNightTime Time to wait from night detection before moving to the night position 60-43200 seconds 600 INIT=600 on port W  
TrackerNightPercNS Night tilt position (0-100%) 0-100 20 INIT=20 on port MN  
TrackerNightPercEW Night azimuth position (0-100%) 0-100 0 INIT=0 on port ME  
WorkingTimeNS Tilt actuatator working time 10-600 seconds 100 INIT=100 on port Pns  
WorkingTimeEW Azimuth actuatator working time 10-600 seconds 100 INIT=100 on port Pew