Once I disassembled the setup it was obvious what had failed.
Three of the triacs are obviously fried. One so badly that its pads have come loose from the circuit board.
All of the 220 ohm gate resistors are damaged. They show discoloration in the center, and none measure 220 ohms. The lowest resistance I got was 300 ohms, some were in the 100s of k.
I am running a Raspberry pi 4. This Raspberry pi can draw more than the 1 amp that the OpenSprinkler pi can provide, especially if one wants to connect anything to its USB ports which I had not done, but was thinking about adding to the system.
I followed the recommendation to power the PI through the USB type C port.
The following is my best theory of what happened:
In measuring the solenoids through the 50′ of wire, two of them measured 20 ohms. This is lower than it should be.
There appears to be no current limiting other than the transformer itself on the AC input.
There appears to be some accidental protection against shorted solenoids since usually the raspberry pi is powered by the AC, and if there is a short, the AC voltage will drop to near zero, killing the power to the Raspberry pi, resetting everything, and shutting off the Triacs.
By adding the additional power supply on the USB C port, this shutdown did not happen, the Triacs stayed on, drawing more current than they were designed for, overheated, and eventually burned out. I’m not entirely sure why the gate resistors also burned, but this happened on every single gate transistor, including two that never had a solenoid connected to the associated triac.
For safety, I think there should be a fuse between the AC connector, and the Common connector.
If OpenSprinkler decides to spin the board to add a fuse, I would suggest that they also spread out the traces between the two 40 pin headers. Packing those traces so close together on a two layer board is begging for crosstalk. You get away with this now since you are not using those signals, but anyone trying to use that second connector is going to have problems. The alternative is a four layer board with two ground layers, but that is more expensive.
The package you are using for the triacs is designed to transfer heat to the circuit board. Unfortunately, this design does not have any place for that heat to go. Ideally you would have about a square inch of copper connected to the large pad to act as a heat sink.
I’d also like to see some way for the Raspberry pi to detect when a solenoid is malfunctioning. These solenoids are out in the elements and will eventually fail. I’d rather not have to replace my sprinkler controller every time a solenoid fails, or run for months thinking I’m watering when I am not.