Difference between revisions of "RA2lover/Sandbox/Grow light automation"
From Unofficial Stationeers Wiki
< User:RA2lover/Sandbox
(→Sunset-triggered timer) |
(→Stopwatch timer) |
||
| Line 91: | Line 91: | ||
With the provided settings, the timer will start with the light turned off for the darkness duration, then turn the light on for the rest of the day length (stored in the memory unit as 1200 seconds or 20 minutes). | With the provided settings, the timer will start with the light turned off for the darkness duration, then turn the light on for the rest of the day length (stored in the memory unit as 1200 seconds or 20 minutes). | ||
<br>Starting with the grow light off is safer for occasional blackouts as the circuit has no awareness of how long it's been turned off for during a blackout and short blackouts risk stressing plants with excess light. | <br>Starting with the grow light off is safer for occasional blackouts as the circuit has no awareness of how long it's been turned off for during a blackout and short blackouts risk stressing plants with excess light. | ||
| + | ====IC10 Equivalent==== | ||
| + | {{ICCode| | ||
| + | define SecondsPerDay 1200 | ||
| + | define SecondsPerTick 0.5 | ||
| + | define DarknessTimeSeconds 300 #how much time per day to keep grow lights off | ||
| + | alias TimeSinceStartUp r0 | ||
| + | alias CurrentCycleTime r1 | ||
| + | alias GrowLightStatus r2 | ||
| + | start: | ||
| + | yield #wait until the next tick | ||
| + | add TimeSinceStartUp TimeSinceStartUp SecondsPerTick #increment time since startup | ||
| + | mod CurrentCycleTime TimeSinceStartUp SecondsPerDay #T_CurCycle = TotalRuntime % DayLength | ||
| + | sge GrowLightStatus CurrentCycleTime DarknessTimeSeconds # = 1 if CycleTime>=DarknessTime | ||
| + | sb HASH("StructureGrowLight") On GrowLightStatus #batch write to all grow lights | ||
| + | #optional debug code that lets you see CurrentCycleTime if running on an IC housing | ||
| + | alias OwnDeviceHash r15 | ||
| + | l OwnDeviceHash db PrefabHash | ||
| + | beq OwnDeviceHash HASH("StructureCircuitHousing") debugwrite # = IC Housing | ||
| + | beq OwnDeviceHash HASH("StructureCircuitHousingCompact") debugwrite# = IC Housing(C) | ||
| + | j start | ||
| + | debugwrite: | ||
| + | s db Setting CurrentCycleTime | ||
| + | j start | ||
| + | }} | ||
=== Memory Unit Timer === | === Memory Unit Timer === | ||
Revision as of 07:59, 10 November 2025
Contents
Disclaimer
Due to the frequency of game updates, all solutions are subject to change and may or may not be functional.
The designs on this page are valid as of v0.2.3771.18264 (2023-01-12)
Plant mechanics
Plant growth rate is multiplied by its growth efficiency. Thus, maximizing growth efficiency results in a more effective farm.
Factors which affect it are Breathing, Hydration, Temperature, Pressure, and Light efficiencies, the plant's Growth speed gene, and a small random variance assigned when planting each plant.
Proper grow light use can maximize light efficiency.
Light Efficiency
Factors which affect light efficiency include a multiplicative debuff of 1/1+Light Stress, and a multiplicative buff which is only applied if the plant has exceeded its light per day requirements and is not darkness deficient.
Light Stress
Light Stress increases by 1% every time a plant transitions from light to darkness or vice-versa. The amount of times this happens should be minimized if possible.
If a plant is deficient in light or darkness, Light stress increases at a rate of 200%/day. Otherwise, it decreases to 0% exponentially at a half-life of 1.38625 days for values of light stress below 50%.
Light/Darkness Deficiency
Light per day and Darkness per day requirements are tracked by TimeLitRatio and TimeDarknessRatio variables which are initialized at 50% for each plant. For non-deficient plants (ratios above 0%), these values decrease by 100%/day. Plants with a deficiency decrease the corresponding value at a slower date (S-curve from -100%/day at 0% to 0%/day at -500%). Plants exceeding their light/darkness per day requirements decrease their corresponding value at a faster rate (S-curve from -100%/day at 100% to -500%/day at 1000%).
TimeDarknessRatio is supplied when the plant is in darkness (not under sunlight or growlight illumination). Supplying darkness increases the value (on an S-curve) by 200%/darkness per day period at -1% to 500%/period at -500%, 100%/period on 0-100%, and 100%/period at 100% to 0%/period at 500% (on an S-curve).
TimeLitRatio supply is similar (though using light per day instead), but the increase in values is multiplied by how much light the plant is exposed to, which can be viewed as the Light Intensity parameter on the Plant Analyser Cartridge. A plant counts as being in light if it is exposed to at least 1% of earth's average solar irradiance (1367 W/m²). Grow lights within distance of a plant count as an additional 80% solar irradiance regardless of how close they are to it. Multiple grow lights illuminating the same plant don't stack, but sun exposure on top of a grow light does.
Maximizing Light Efficiency
Plants with TimeLitRatio above 100% and not under darkness deficiency receive a multiplicative buff for excess TimeLitRatio, multiplying light efficiency by up to 2x at 400% TimeLitRatio.
Light Efficiency also receives a multiplicative debuff based on how much light stress the plant is under. LightEfficiency = 1 / (1 + LightStress)
Because light stress has a very slow decay period, we want to avoid any circumstances placing the plant into a deficiency.
Maximizing TimeLitRatio while avoiding a darkness deficiency requires exposing plants to as much strong light for as long as possible while still meeting the plant's darkness per day requirements throughout its entire lifetime.
Because TimeDarknessRatio is only initialized at 50%, plants under this farming regime need to be exposed to its first darkness period within half a day of being planted, and it needs to be long enough to last until the next darkness period.
Farm designs
Farms benefitting from grow lights can be generally separated into two types: Indoor farms that can be placed in locations without regular sunlight exposure, and greenhouses where grow lights are used to augment the sun and provide faster growth rates.
Indoor farms
Farms using exclusively grow lights can use cheaper walls, are simpler to automate and can use horizontal space more efficiently. However, they need a reliable supply of power.
Their grow light timing can be completely decoupled from the day-night cycle, affording more choices in how they're used.
Outdoor greenhouses
Farms using the sun have higher build costs and can tolerate intermittent power, but have increased cooling demands and automation systems that need to take sunlight status into account as turning grow lights off isn't guaranteed to ensure darkness.
Clock sources
Turning the light on/off for a period of time needs a means of detecting time. Some of which include:
Stopwatch
Accessible from Kit (Music Machines). Provides a continuously increasing timer when activated which can be reset by turning it off and on again, looped with a modulo Math Unit or paused by disabling its Activate signal. Needs continuous power to avoid a timer reset.
Memory-based Timer
A Logic Memory unit which continuously updates a value through logic. Preserves its current value during a power loss, but requires additional power for logic elements needed to update its value.
IC10 Stack Timer
A timer preserving its time on power losses by storing its current time on an IC10 stack memory location. Comes virtually free when automating grow lights with a programmable chip, but requires using a programmable chip for automation.
Daylight Sensor
Provides celestial tracking information for the sun and the ability to check if sunlight is currently hitting its location (by reading the Activate logic parameter). While tracking maximums and minimums of its vertical angle can be used to identify noon and midnight, the angles cannot be directly relied on as a timing source because they change depending on seasons. Additionally, sunlight cannot distinguish between an eclipse and a sunset on its own.
Timing Circuits
Circuits which provide adjustable duty cycle grow light operation. No effort is provided for synchronization with daylight, so greenhouses operating off them should use Composite window shutters to prevent sunlight from denying darkness periods if the timers happen to get out of sync.
Stopwatch timer
A stopwatch is used as a clock source, with day duration being provided by the memory unit and darkness duration being provided by the dial (accessible through Kit (Logic Switch)). Using separate devices for these roles removes ambiguity without the need for a Labeller, even in arrangements where the memory unit and dial are on the same logic network.
With the provided settings, the timer will start with the light turned off for the darkness duration, then turn the light on for the rest of the day length (stored in the memory unit as 1200 seconds or 20 minutes).
Starting with the grow light off is safer for occasional blackouts as the circuit has no awareness of how long it's been turned off for during a blackout and short blackouts risk stressing plants with excess light.
IC10 Equivalent
Memory Unit Timer
The stopwatch clock source from the previous timer is replaced with an incrementing memory. This preserves light status during power losses at an additional 10W of power consumed, and potentially adds confusion requiring a labeller as multiple components of the same type are now present in the same logic network.
In order to reduce component count, this timer uses ticks instead of seconds as a unit of time measurement.
Synchronized Timing Circuits
Sunset-triggered timer
This shows a pitfall of logic circuits in that circuits relying on recursive logic are senstive to not just they order in which logic components were placed, but also the order in which they were loaded into the world. A design may function when first built, but stop working when the world is reloaded because logic components are run on a different execution order.
This design is not recommended for use because it is sensitive to logic component execution order, which may not persist across world loads.
The circuit uses a Logic Pulse Former assembly to create a single-tick pulse when a sunset is detected, which is then used to reset a counter to the darkness timer memory setting.
The darkness timer memory setting is a negative value, exploiting the fact writing any value equal or greater than 1 to a device's "On" setting turns it on. This removes the need for an additional logic compare component.
Geometry of Daylight Sensors
The Solar Angle variable from Daylight Sensors go from 0 degrees at mid-day, to 180 degrees at midnight, and then back to 0 degrees. The value is never negative.
How much light/dark do plants need?
| Plant | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Corn | L | L | L | L | L | L | L | L | L | D | D | D | D | |||||||
| Potato | L | L | L | L | L | L | L | L | L | L | D | D | D | D | ||||||
| Pumpkin | L | L | L | L | L | L | L | L | L | D | D | |||||||||
| Rice | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Soybean | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Tomato | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||||
| Wheat | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Darga Fern | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Fern | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||||
| Hades Alpha | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Hades Beta | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Peace Lily | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Switch Grass | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Tropical Lily | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Winterspawn Alpha | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D | |||||
| Winterspawn Beta | L | L | L | L | L | L | L | L | L | L | D | D | D | D | D |
As you can see from the table above, most plants need a minimum of 10 minutes of light, and 5 minutes of darkness. We can split the remaining 5 minutes equally, giving us 12.5 minutes of light and 7.5 minutes of darkness.
Let's do some math...
- The planet rotates 360 degrees per day.
- A day is 20 minutes.
360 degrees / 20 minutes = 18 degrees per minute
- We need light for 12.5 minutes per day.
18 degrees per minute * 12.5 minutes = 225 degrees
- We want half the light-budget on either side of mid-day
225 degrees / 2 = 112.5 degrees on either side
Bringing it all together
What you need:
- Logic I/O (x2) > Reader and Batch Writer
- Logic Processor > Compare
- Logic Memory
- Kit (Sensor) > Daylight Sensor
- Place the Daylight Sensor. Direction of data-port doesn't matter.
- Logic Reader > IN: Daylight Sensor VAR: Solar Angle
- Logic Memory > Value: 112.5
- Logic Compare > 1: Logic Reader 2: Logic Memory OUT: Less
- Logic Batch Writer > IN: Logic Compare OUT TYPE: Grow Light OUT VAR: On
Saving Power
You can save a bit of power by delaying turning on the light. If you reduce the time with lights to 10.5 minutes, then you can set the Logic Memory to 94.5.



