Hydroponic system · end to end
Select a component to inspect

Drag to rotate · right-drag / Shift-drag to pan · scroll or pinch to zoom · select a 3D part or component below.

NFT system monitor · interactive 3D

One representative NFT unit from the proposal's six-unit experimental design.

Reading availableAwaiting telemetry
PROPOSAL-ALIGNED CONCEPTUAL 3D · NOT AS-BUILT CAD MODEL LED · WAITING MQTT · checking broker

Select a component

RGB-D + sensorsESP32 + MQTTEdge AI + digital twinAdaptive LED commandPAR + biomass feedback

Proposal experiment: 6 independent NFT units (3 fixed-light controls, 3 biomass-adaptive), each with a separate reservoir and circulation loop. This viewer depicts one representative unit; current ch0 simulator data must not be interpreted as six independent physical units.

Select a component

Sensor readings, source and connection status will appear here.

—
Lettuce condition
Waiting for simulation data
Live RealSense camera frame from the physical crop
MODELWaiting for simulation telemetry
STAGE 1: SEEDLING Day 0 - 7 • < 2.5 g
STAGE 2: VEGETATIVE Day 8 - 18 • 15 - 40 g
STAGE 3: EXPANSION Day 19 - 28 • 45 - 90 g
STAGE 4: HARVEST Day 29 - 35 • 100 - 135 g
Lettuce twin · selected policy
BiomassBIO
—g
Leaf areaEstimate
—cm²
Crop day35-day cycle
—day
Policy Model Fresh Biomass Canopy Area
STATIC Baseline — —
ENV Adaptive — —
BIO Feedback — —
Model view · awaiting telemetry
Electrical Conductivity DFRobot EC v2
— mS/cm
Solution pH DFRobot pH v2
— pH
Model temperature Ambient/effective · simulator
— °C
Relative Humidity RH · crop environment
— %
Light RadiationLED PPFD
—µmol/m²s
Fresh Biomass Selected policy · ch0
— g
Canopy Leaf Area MQTT telemetry
— cm²
Network Latency sys/latency
— ms
Packet Reliability sys/success_rate
— %
01 · Estimated biomass by policy

Virtual fresh mass (g) over simulated days; not an actual harvest result.

Static · controlEnv · exploratoryBio · feedback
02 · Model nutrient solution & temperature

Separate native units: EC on the left (mS/cm), effective temperature on the right (°C). Not a DS18B20 water-temperature reading.

EC · left axisTemperature · right axis
03 · LED command & model PPFD

Green line: model PPFD. Dashed line: MQTT command setpoint, when available.

Model PPFDLED command
04 · Simulated network latency

Delivered-packet latency samples (ms), not physical Edge/cloud measurements.

Latency per sample

How are these numbers calculated?

A concise audit for research presentations. The highlighted values below come from the selected policy's latest model step; charts use MQTT history. Symbols and constants follow the project code and configuration, not parameters calibrated on real plants.

1 · virtual plant2 · virtual sensors & camera3 · MQTT + Edge model4 · LED policy5 · energy & charts

Internal biomass growth in the simulator

μ = 0.22 × k × fT × fEC × fLBₜ₊Δ = min(160, Bₜ + Δ × μ × Bₜ × max(0, 1 − Bₜ/160))

Δ = 0.25 day. k represents seeded plant-to-plant variation. Here, B is an internal simulator state, not measured harvest mass.

Run a simulation to see substituted values.
Source: plant/model.py + config/plant.yaml · model/.../step

Temperature, EC, and light factors

fT = exp(−((T − 22)/6)²)fEC = exp(−((EC − (ECopt + d))/0.6)²)ECopt = 1.2 + 0.7 × min(1, day/25)fL = (1 − exp(−PPFD/180))/(1 − exp(−300/180))

d represents individual EC-demand variation; all coefficients remain model assumptions.

Waiting for a model trace.
Source: plant/model.py + config/plant.yaml · model/.../step

Virtual camera estimate ≠ trained RGB-D AI

B̂ = max(0, B × (1 + 0.04 εcamera))Bs = 0.6 × Bs,previous + 0.4 × B̂LA = max(0, 18 × B^0.75 × (1 + 0.05 εLA))

ε is seeded Gaussian noise. B̂ feeds the estimated-biomass chart; LA is virtual leaf area. The proposal's short-term growth prediction and RGB-D fusion model are not yet implemented.

Waiting for a model trace.
Source: plant/model.py + devices/sensors.py · twin/.../biomass_est

LED intensity decision

Target(day) = 160/(1 + 79 × exp(−0.18 × day))Bs < 0.95×target → 340; Bs > 1.05×target → 260; otherwise → 300

Static/Env use 300 µmol/m²/s; Bio evaluates roughly every 2 simulated days. Current PPFD is a model output/setpoint, not a physical PAR reading. The model photoperiod remains 16 hours/day.

Waiting for LED data.
Source: control/policies.py + config/policies.yaml · cmd/.../light

Lamp energy & efficiency

ΔE = (PPFD/300) × 0.05 kW × 16 hours/day × Δ daysEtotal = ΣΔE; experimental efficiency = harvested fresh mass (g)/LED kWh

Energy here is a lamp-model result, not an electricity-meter reading. Experimental g/kWh is valid only when each unit's harvested mass and energy use are measured.

Waiting for a model trace.
Source: plant/model.py + config/plant.yaml · model/.../step

Emulated latency & reliability

latency = max(1, nominal + N(0, 3 ms))delivery rate = delivered packets / attempted packets × 100%

Nominal Edge: 28 ms (0.2% loss); cloud: 380 ms (4% loss). These are seeded model assumptions, not hardware benchmarks.

Waiting for network data.
Source: network/channel.py + config/network.yaml · sys/latency_sample

Proposal limitation: a valid experiment requires 6 independent NFT units, calibrated PAR, air temperature/humidity, nutrient-solution and energy measurements, biomass ground truth, and RGB-D model validation. The Bio policy currently also changes EC, so this comparison does not yet isolate the effect of LED control as the proposal intends.

MQTT activity
Mosquitto Broker • TCP 1883
[SYSTEM] sys/ready Dashboard connected. Displayed values are simulated.
Hardware details
ESP32 Firmware v1.0.0-ino
Register / Node Physical Address Sample Rate Bus State
ESP32 Core 0 / 1 0x3FF44000 (RTC) 240 MHz Dual Firmware stub
DS18B20 ROM 28-FF-64-1E-85-16-03-9B 1.0 Hz (12-bit) Spec only
RealSense ASIC USB Bus 001 Dev 004 30 FPS RGB-D Requires camera
Relay Optocouplers ULN2803A Darlington Event Dosed Isolated 2.5 kV