Lighting Control Zone Coverage Calculator
ANA›Life Services Authority›National Calculator Authority›Lighting Control Zone Coverage Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Lighting Control Zone Coverage Calculator
Calculate the number of lighting control zones required for a space, estimated fixture count per zone, and total control points based on room dimensions, zone size limits, and occupancy type per ASHRAE 90.1 and IES guidelines.
Room Length (ft)
Room Width (ft)
Ceiling Height (ft)
Occupancy Type
Office / Open Plan Classroom / Conference Retail Warehouse / Storage Corridor / Hallway Restroom / Utility
Max Zone Area per ASHRAE 90.1 (sq ft) (default auto-filled by occupancy)
Fixture Spacing (ft center-to-center)
Max Fixtures per Zone Circuit
Calculate
function ligCalc() { var resultDiv = document.getElementById('lig-result'); resultDiv.style.display = 'block'; resultDiv.className = 'calc-result';
// --- Gather inputs --- var length = parseFloat(document.getElementById('lig-room-length').value); var width = parseFloat(document.getElementById('lig-room-width').value); var height = parseFloat(document.getElementById('lig-ceiling-height').value); var occ = document.getElementById('lig-occupancy-type').value; var maxZoneAreaInput = document.getElementById('lig-max-zone-area').value; var spacing = parseFloat(document.getElementById('lig-fixture-spacing').value); var maxFixPerZone = parseFloat(document.getElementById('lig-fixtures-per-zone-max').value);
// --- Occupancy defaults (ASHRAE 90.1-2019 Table 9.6.1) --- // Max zone area (sq ft) and recommended illuminance (fc) by occupancy var occDefaults = { office: { maxZone: 2500, fc: 30, label: "Office / Open Plan" }, classroom: { maxZone: 2500, fc: 30, label: "Classroom / Conference" }, retail: { maxZone: 5000, fc: 30, label: "Retail" }, warehouse: { maxZone: 5000, fc: 20, label: "Warehouse / Storage" }, corridor: { maxZone: 2500, fc: 10, label: "Corridor / Hallway" }, restroom: { maxZone: 2500, fc: 20, label: "Restroom / Utility" } };
var occData = occDefaults[occ];
- // Auto-fill max zone area if blank
- var maxZoneArea = (maxZoneAreaInput === "" || isNaN(parseFloat(maxZoneAreaInput)))
- ? occData.maxZone
- parseFloat(maxZoneAreaInput);
// Auto-fill fixture spacing if blank if (isNaN(spacing) || spacing Math.min(length, width)) errors.push("Fixture spacing cannot exceed the smaller room dimension.");
if (errors.length > 0) { resultDiv.className = 'calc-result calc-error'; resultDiv.innerHTML = 'Please fix the following errors:' + errors.map(function(e){ return ''; }).join('') + ''; return; }
// ===================================================================== // CORE CALCULATIONS // =====================================================================
// 1. Total room area var roomArea = length * width; // sq ft
// 2. Number of zones required by AREA constraint // N_area = ceil(Room Area / Max Zone Area) var zonesFromArea = Math.ceil(roomArea / maxZoneArea);
// 3. Fixture grid estimation // Fixtures along length = floor(length / spacing) + 1 (end-to-end) // Fixtures along width = floor(width / spacing) + 1 // Total fixtures = fixturesL × fixturesW var fixturesAlongLength = Math.max(1, Math.round(length / spacing)); var fixturesAlongWidth = Math.max(1, Math.round(width / spacing)); var totalFixtures = fixturesAlongLength * fixturesAlongWidth;
// 4. Number of zones required by FIXTURE CIRCUIT constraint // N_circuit = ceil(Total Fixtures / Max Fixtures per Zone) var zonesFromCircuit = Math.ceil(totalFixtures / maxFixPerZone);
// 5. Governing number of zones = max of area-based and circuit-based var totalZones = Math.max(zonesFromArea, zonesFromCircuit);
// 6. Fixtures per zone (average) var fixturesPerZone = totalFixtures / totalZones;
// 7. Effective zone area (average) var effectiveZoneArea = roomArea / totalZones;
// 8. Spacing-to-height ratio (S/H) — quality check // IES recommends S/H ≤ 1.5 for uniform illumination var sToH = spacing / height; var sToHOk = sToH 6 (very high, deep room)"; }
var llf = 0.80; var targetFc = occData.fc; var totalLumensNeeded = (targetFc * roomArea) / (cu * llf); var lumensPerFixture = totalLumensNeeded / totalFixtures; var lumensPerZone = totalLumensNeeded / totalZones;
// 11. Dimming zones (10% step dimming saves ~30% energy on average) // Estimated annual energy savings with occupancy + daylight dimming // Assume 3000 hrs/yr operation, 15W per fixture average var wattsPerFixture = 15; // W (LED troffer typical) var hoursPerYear = 3000; var savingsFactor = 0.35; // 35% savings with occupancy + dimming controls var totalWatts = totalFixtures * wattsPerFixture; var annualKwh = (totalWatts * hoursPerYear) / 1000; var annualSavingsKwh = annualKwh * savingsFactor;
// ===================================================================== // FORMAT OUTPUT // =====================================================================
- var sToHColor = sToHOk ? "#2e7d32" : "#c62828";
- var sToHMsg = sToHOk
- ? "✓ Acceptable (≤ 1.5) — uniform illumination expected"
- "⚠ Exceeds 1.5 — consider reducing fixture spacing for uniformity";
var html = '### Results '; html += '';
function row(label, value, note) { return '' + '' + label + '' + '' + value + (note ? '' + note + '' : '') + ''; }
html += row("Occupancy Type", occData.label); html += row("Room Area", roomArea.toLocaleString(undefined,{maximumFractionDigits:1}) + " sq ft", length + " ft × " + width + " ft"); html += row("Ceiling Height", height + " ft", "Work plane assumed at 2.5 ft → cavity height = " + hc.toFixed(1) + " ft"); html += '';
html += '#### Zone Requirements '; html += ''; html += row("Max Zone Area (ASHRAE 90.1)", maxZoneArea.toLocaleString() + " sq ft"); html += row("Zones Required by Area", zonesFromArea, "ceil(" + roomArea.toFixed(0) + " ÷ " + maxZoneArea + ")"); html += row("Zones Required by Circuit", zonesFromCircuit, "ceil(" + totalFixtures + " fixtures ÷ " + maxFixPerZone + " max/zone)"); html += row("⭐ Total Zones Required (Governing)", "" + totalZones + "", "max(" + zonesFromArea + ", " + zonesFromCircuit + ")"); html += row("Effective Zone Area (avg)", effectiveZoneArea.toFixed(1) + " sq ft/zone"); html += '';
html += '#### Fixture Layout '; html += ''; html += row("Fixture Spacing", spacing + " ft c/c"); html += row("Fixture Grid", fixturesAlongLength + " × " + fixturesAlongWidth, "along length × along width"); html += row("Total Fixtures", totalFixtures); html += row("Avg Fixtures per Zone", fixturesPerZone.toFixed(1)); html += row("Spacing-to-Height Ratio (S/H)", sToH.toFixed(2), '' + sToHMsg + ''); html += '';
html += '#### Photometric Estimates '; html += ''; html += row("Room Cavity Ratio (RCR)", rcr.toFixed(2), cuNote); html += row("Coefficient of Utilization (CU)", cu.toFixed(2)); html += row("Light Loss Factor (LLF)", llf.toFixed(2), "Typical maintained value"); html += row("Target Illuminance", targetFc + " fc", occData.label + " per IES HB"); html += row("Total Lumens Required", Math.round(totalLumensNeeded).toLocaleString() + " lm"); html += row("Lumens per Fixture", Math.round(lumensPerFixture).toLocaleString() + " lm"); html += row("Lumens per Zone", Math.round(lumensPerZone).toLocaleString() + " lm"); html += '';
html += '#### Energy Estimate '; html += ''; html += row("Assumed Wattage per Fixture", wattsPerFixture + " W", "LED troffer typical"); html += row("Total Connected Load", totalWatts.toLocaleString() + " W", (totalWatts/1000).toFixed(2) + " kW"); html += row("Annual Energy (uncontrolled)", annualKwh.toLocaleString(undefined,{maximumFractionDigits:0}) + " kWh", "@ " + hoursPerYear + " hrs/yr"); html += row("Est. Annual Savings (with controls)", annualSavingsKwh.toLocaleString(undefined,{maximumFractionDigits:0}) + " kWh", savingsFactor*100 + "% reduction via occupancy + dimming"); html += '';
resultDiv.innerHTML = html; }
// Auto-fill max zone area when occupancy changes document.getElementById('lig-occupancy-type').addEventListener('change', function() { var occDefaults = { office: 2500, classroom: 2500, retail: 5000, warehouse: 5000, corridor: 2500, restroom: 2500 }; document.getElementById('lig-max-zone-area').placeholder = "e.g. " + occDefaults[this.value] + " (default for " + this.options[this.selectedIndex].text + ")"; document.getElementById('lig-max-zone-area').value = ""; });
#### Formulas Used
Room Area: A = L × W
Zones by Area (ASHRAE 90.1): Narea = ⌈A / Azone,max⌉
Total Fixtures (grid): F = round(L / s) × round(W / s) where s = fixture spacing
Zones by Circuit: Ncircuit = ⌈F / Fmax/zone⌉
Governing Zones: N = max(Narea, Ncircuit)
Room Cavity Ratio: RCR = 5 × hc × (L + W) / (L × W)
Total Lumens (Lumen Method): Φ = (Etarget × A) / (CU × LLF)
Spacing-to-Height Ratio: S/H = s / hceiling (IES recommends ≤ 1.5)
#### Assumptions & References
- Maximum zone areas follow ASHRAE 90.1-2019 Section 9.6.1 (2,500 sq ft for most occupancies; 5,000 sq ft for retail/warehouse).
- Target illuminance levels per IES Lighting Handbook (IESNA HB-10) maintained footcandles by space type.
- Energy savings of 35% estimated for combined occupancy sensing + continuous dimming controls per ASHRAE 90.1 and DOE studies.
More Calculators
- Mold Remediation Cost Estimator
- Mobile Game Monetization Revenue Calculator
- Mobile Game Session Length & Retention Calculator
- Indoor Humidity & Mold Risk Calculator
- Gacha Pull Probability Calculator
- Monster Attack & Damage Modifier Calculator
- Rent vs Buy Calculator
- Property ROI Calculator
- Dice Probability Calculator
- D&D 5e Encounter Difficulty Calculator
- MTG Deck Probability Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...