{"id":13362,"date":"2026-11-05T00:52:50","date_gmt":"2026-11-05T00:52:50","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=13362"},"modified":"2026-11-12T04:42:02","modified_gmt":"2026-11-12T04:42:02","slug":"calculadora-zonas-aspersores","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/es\/calculadora-zonas-aspersores\/","title":{"rendered":"Calculadora de zonas de aspersores"},"content":{"rendered":"\n<style>#lawn-tool{max-width:960px;margin:24px auto;color:#243746}#lawn-tool *{box-sizing:border-box}#lawn-tool .fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:18px}#lawn-tool label{display:block;font-weight:600}#lawn-tool input,#lawn-tool textarea{display:block;width:100%;padding:12px;border:1px solid #9aacb5;border-radius:8px;margin-top:6px;font:inherit}#lawn-tool button{padding:12px 20px;margin:18px 10px 10px 0;border:2px solid #1ecad3;border-radius:8px;background:#1ecad3;color:#1a202c;cursor:pointer;font:inherit}#lawn-tool button[type=reset],#lawn-tool #copy-area{background:white}#lawn-tool button:focus-visible,#lawn-tool input:focus-visible,#lawn-tool textarea:focus-visible{outline:3px solid #9486f7;outline-offset:3px;color:#1a202c}#lawn-tool button:active{color:#1a202c}#lawn-tool .result{background:#edf7f8;border-left:4px solid #1ecad3;padding:18px;margin:16px 0;overflow-wrap:anywhere}#lawn-tool svg{width:100%;height:300px;border:1px solid #b8cbd2}#lawn-tool a{color:#08778b}<\/style><div id=\"lawn-tool\" lang=\"es\"><p>Estima la capacidad por zona con el caudal disponible y las especificaciones de las boquillas.<\/p><form data-mode=\"zone\"><div class=\"fields\"><label>Caudal disponible a presi\u00f3n de trabajo (litros\/minuto)<input name=\"flow\" type=\"number\" min=\"0\" step=\"any\" required value=\"40\"><\/label><label>Caudal por boquilla id\u00e9ntica a esa presi\u00f3n (litros\/minuto)<input name=\"nozzle\" type=\"number\" min=\"0\" step=\"any\" required value=\"4\"><\/label><label>N\u00famero total de aspersores<input name=\"heads\" type=\"number\" min=\"0\" step=\"any\" required value=\"17\"><\/label><label>Presi\u00f3n de trabajo en las boquillas (bar)<input name=\"pressure\" type=\"number\" min=\"0\" step=\"any\" required value=\"3\"><\/label><label>Presi\u00f3n m\u00ednima exigida por el fabricante (bar)<input name=\"required\" type=\"number\" min=\"0\" step=\"any\" required value=\"2\"><\/label><label>Reserva de caudal (%)<input name=\"reserve\" type=\"number\" min=\"0\" step=\"any\" required value=\"20\"><\/label><\/div><button type=\"submit\">Calcular<\/button><button type=\"reset\">Restablecer<\/button><\/form><div class=\"result\" role=\"status\" aria-live=\"polite\">Introduce tus medidas y calcula.<\/div><h2>C\u00f3mo funciona el c\u00e1lculo<\/h2><p>Aspersores por zona = redondeo inferior(caudal disponible \u00d7 (1 \u2212 reserva \u00f7 100) \u00f7 caudal por boquilla). Zonas = redondeo superior(total \u00f7 aspersores por zona). Mide el caudal a la presi\u00f3n de trabajo necesaria. Una prueba de cubo sin restricci\u00f3n y la presi\u00f3n est\u00e1tica por s\u00ed solas no bastan. Se suponen boquillas id\u00e9nticas y zonas que funcionan sucesivamente. Verifica p\u00e9rdidas en tuber\u00edas, desnivel, v\u00e1lvulas, dispositivos antirretorno, solapamiento y uniformidad. Con presi\u00f3n insuficiente no se recomienda una capacidad.<\/p><h2>Unidades y datos<\/h2><p>Sustituye los ejemplos por tus medidas. 1 pie = 0,3048 m; 1 pie cuadrado = 0,09290304 m\u00b2; 1 pulgada = 25,4 mm; 1 gal\u00f3n estadounidense = 3,785411784 litros. Usa la misma moneda en todos los precios. Un precio cero omite el presupuesto opcional.<\/p><h2>Gu\u00edas para el c\u00e9sped<\/h2><ul><li><a href=\"https:\/\/aiper.com\/blogs\/es\/como-regar-el-cesped-en-pendiente\/\">C\u00f3mo regar un c\u00e9sped en pendiente<\/a><\/li><\/ul><h2>M\u00e1s herramientas para el c\u00e9sped<\/h2><p><a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-tepes\/\">calculadora de tepes<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-superficie-cesped\/\">calculadora de superficie de c\u00e9sped<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-riego-cesped-duracion\/\">calculadora de riego y duraci\u00f3n de aspersores<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-coste-corte-cesped\/\">calculadora de coste de corte de c\u00e9sped<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-tiempo-corte-cesped\/\">calculadora de tiempo de corte de c\u00e9sped<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-cal-cesped\/\">calculadora de cal para c\u00e9sped<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-riego-goteo\/\">calculadora de riego por goteo<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-semillas-cesped\/\">calculadora de semillas de c\u00e9sped<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-fertilizante-cesped\/\">calculadora de fertilizante para c\u00e9sped<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/es\/herramientas\/\">Herramientas<\/a><\/p><p><a href=\"https:\/\/www.rainbird.com\/homeowners\/how-many-sprinklers-can-be-used-zone-or-valve\">Referencia t\u00e9cnica<\/a><\/p><\/div><script>\/* SI units internally; no external services or weather assumptions. *\/\nfunction calculateLawn(mode,v){\n const n=k=>{if(v[k]===undefined||String(v[k]).trim()==='')throw Error(\"Introduce todas las medidas necesarias.\");let x=Number(v[k]);if(!Number.isFinite(x)||x<0)throw Error(\"Usa valores finitos y no negativos.\");return x;};\n const p=k=>{let x=n(k);if(x<=0)throw Error(\"Esta medida debe ser mayor que cero.\");return x;};\n const percent=k=>{let x=n(k);if(x>=100)throw Error(\"El porcentaje debe ser inferior a 100.\");return x\/100;};\n let o;\n if(mode==='sod'){\n  let a=p('area'),w=n('waste');if(w>100)throw Error(\"El desperdicio debe estar entre 0 y 100 %.\");\n  let q=a*(1+w\/100);o={required:q,pieces:Math.ceil(q\/p('piece')-1e-10),pallets:Math.ceil(q\/p('pallet')-1e-10)};\n  if(n('price')>0)o.budget=q*n('price');\n }else if(mode==='watering'){\n  let depth=Math.max(0,n('target')-n('rain')),minutes=depth\/p('rate')*60,water=p('area')*depth;\n  o={depth,minutes,litres:water};if(n('price')>0)o.budget=water\/1000*n('price');\n }else if(mode==='zone'){\n  let heads=p('heads');if(!Number.isInteger(heads))throw Error(\"El n\u00famero de aspersores debe ser entero.\");\n  let capacity=Math.floor(p('flow')*(1-percent('reserve'))\/p('nozzle'));\n  if(p('pressure')<p('required'))throw Error(\"La presi\u00f3n de trabajo es inferior a la requerida.\");\n  if(capacity<1)throw Error(\"El caudal no basta para una boquilla con esta reserva.\");\n  o={capacity,zones:Math.ceil(heads\/capacity)};\n }else if(mode==='area'){\n  let polygons=JSON.parse(v.polygons);if(!Array.isArray(polygons)||!polygons.length)throw Error(\"Introduce los pol\u00edgonos medidos.\");\n  let total=0;\n  for(let poly of polygons){\n   let pts=poly.points;if(!Array.isArray(pts)||pts.length<3)throw Error(\"Cada pol\u00edgono necesita al menos tres v\u00e9rtices.\");\n   for(let pt of pts)if(!Array.isArray(pt)||pt.length!==2||!pt.every(x=>typeof x==='number'&&Number.isFinite(x)))throw Error(\"Cada v\u00e9rtice necesita dos coordenadas finitas.\");\n   \/\/ Reject crossings, touching edges, repeated vertices and degenerate edges.\n   let cross=(a,b,c)=>(b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0]);\n   let on=(a,b,c)=>Math.abs(cross(a,b,c))<1e-9&&c[0]>=Math.min(a[0],b[0])-1e-9&&c[0]<=Math.max(a[0],b[0])+1e-9&&c[1]>=Math.min(a[1],b[1])-1e-9&&c[1]<=Math.max(a[1],b[1])+1e-9;\n   for(let i=0;i<pts.length;i++)for(let j=i+1;j<pts.length;j++){\n    if(pts[i][0]===pts[j][0]&&pts[i][1]===pts[j][1])throw Error(\"No repitas v\u00e9rtices.\");\n    if(j===i+1||i===0&&j===pts.length-1)continue;\n    let a=pts[i],b=pts[(i+1)%pts.length],c=pts[j],d=pts[(j+1)%pts.length];\n    if(cross(a,b,c)*cross(a,b,d)<0&&cross(c,d,a)*cross(c,d,b)<0||on(a,b,c)||on(a,b,d)||on(c,d,a)||on(c,d,b))throw Error(\"Los lados no deben cruzarse ni tocarse.\");\n   }\n   let a=Math.abs(pts.reduce((s,p,i)=>s+p[0]*pts[(i+1)%pts.length][1]-pts[(i+1)%pts.length][0]*p[1],0))\/2;\n   if(a<=0)throw Error(\"La superficie del pol\u00edgono debe ser positiva.\");\n   if(poly.exclude!==undefined&&typeof poly.exclude!=='boolean')throw Error(\"La exclusi\u00f3n debe ser verdadera o falsa.\");\n   total+=poly.exclude?-a:a;\n  }\n  if(total<=0)throw Error(\"La superficie neta debe ser positiva.\");o={area:total,sqft:total\/0.09290304};\n }else if(mode==='mowing-cost'){\n  let area=p('area'),frequency=p('frequency'),weeks=p('weeks');\n  if(frequency>7||weeks>52.1775)throw Error(\"Usa como m\u00e1ximo 7 visitas por semana y 52,1775 semanas por a\u00f1o.\");\n  let obstacle=n('obstacle');if(obstacle>100)throw Error(\"El recargo debe estar entre 0 y 100 %.\");\n  let visit=Math.max(n('minimum'),n('base')+area\/100*n('rate')+n('edging'))*(1+obstacle\/100),visits=Math.ceil(frequency*weeks-1e-10);\n  o={visits};if(visit>0)Object.assign(o,{visit,month:visit*frequency*52.1775\/12,season:visit*visits});\n }else if(mode==='mowing-time'){\n  let area=p('area'),width=p('width')\/100,speed=p('speed')*1000,overlap=percent('overlap'),eff=p('efficiency')\/100;\n  if(eff>1)throw Error(\"La eficiencia no debe superar el 100 %.\");\n  let productivity=width*(1-overlap)*speed*eff,minutes=area\/productivity*60;\n  o={effective:width*(1-overlap)*100,productivity,minutes,total:minutes+n('extra')};\n }else if(mode==='lime'){\n  let area=p('area'),rate=n('lab'),reference=p('reference'),product=p('product');\n  if(reference>200||product>200)throw Error(\"Los valores neutralizantes deben ser porcentajes no superiores a 200.\");\n  let adjusted=rate*reference\/product,total=area\/100*adjusted;\n  o={adjusted,total,bags:Math.ceil(total\/p('bag')-1e-10)};\n  let cap=n('cap');if(cap>0){let passes=Math.max(1,Math.ceil(adjusted\/cap-1e-10));o.passes=total>0?passes:0;o.perpass=total>0?total\/passes:0;}\n }else if(mode==='drip'){\n  let length=p('length'),spacing=p('spacing'),lines=p('lines');\n  if(!Number.isInteger(lines))throw Error(\"El n\u00famero de l\u00edneas debe ser entero.\");\n  \/\/ Assumes the first emitter is one spacing from the inlet, not at x=0.\n  let emitters=Math.floor(length\/spacing+1e-10);if(emitters<1)throw Error(\"Cada l\u00ednea debe contener al menos un gotero.\");\n  let flow=emitters*p('emitter'),capacity=p('supply')*60*(1-percent('reserve')),linesPerZone=Math.floor(capacity\/flow);\n  if(linesPerZone<1)throw Error(\"El caudal no basta para una l\u00ednea completa de goteo.\");\n  let minutes=n('litres')\/p('emitter')*60,zones=Math.ceil(lines\/linesPerZone);\n  o={emitters,totalemitters:emitters*lines,flow:flow*lines\/60,linesperzone:linesPerZone,zones,minutes,totalminutes:minutes*zones,water:emitters*lines*n('litres')};\n }else throw Error(\"Calculadora desconocida.\");\n if(Object.values(o).some(x=>!Number.isFinite(x)))throw Error(\"Las medidas superan el intervalo admitido.\");\n return o;\n}\nif(typeof module!=='undefined')module.exports=calculateLawn;\n\n(()=>{const root=document.getElementById('lawn-tool'),form=root.querySelector('form'),result=root.querySelector('.result'),labels={\"capacity\": \"M\u00e1ximo de aspersores id\u00e9nticos por zona\", \"zones\": \"M\u00ednimo de zonas seg\u00fan caudal\"};let last=null;\nfunction polygons(text){return text.trim().split(\/\\n\\s*\\n\/).map(block=>{let rows=block.trim().split(\/\\n\/),exclude=\/^[-\u2013\u2014]$\/.test(rows[0].trim());if(exclude)rows.shift();return {exclude,points:rows.map(row=>{let parts=row.trim().split(\/\\s*,\\s*\/);if(parts.length!==2||parts.some(p=>!p.trim()))throw Error(\"Usa una coordenada x,y por l\u00ednea.\");return parts.map(Number);})};});}\nform.addEventListener('submit',e=>{e.preventDefault();last=null;try{let v=Object.fromEntries(new FormData(form));let polys;if(form.dataset.mode==='area'){polys=polygons(v.coordinates);v.polygons=JSON.stringify(polys);}let out=calculateLawn(form.dataset.mode,v);result.replaceChildren();for(let [key,value]of Object.entries(out)){let p=document.createElement('p');p.textContent=labels[key]+': '+value.toLocaleString(\"es\",{maximumFractionDigits:3});result.append(p);}if(polys){let svg=root.querySelector('#area-diagram'),all=polys.flatMap(p=>p.points),xs=all.map(p=>p[0]),ys=all.map(p=>p[1]),minx=Math.min(...xs),miny=Math.min(...ys),w=Math.max(...xs)-minx,h=Math.max(...ys)-miny;svg.replaceChildren();svg.setAttribute('viewBox',[minx-1,miny-1,w+2,h+2].join(' '));for(let poly of polys){let shape=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','polygon');shape.setAttribute('points',poly.points.map(p=>p.join(',')).join(' '));shape.setAttribute('fill',poly.exclude?'#fff':'#b4e8c1');shape.setAttribute('stroke','#147e91');shape.setAttribute('stroke-width',Math.max(w,h)\/200);svg.append(shape);}last=out.area;root.querySelector('#copy-area').disabled=false;}}\ncatch(err){result.textContent=err.message;if(root.querySelector('#copy-area'))root.querySelector('#copy-area').disabled=true;}});\nform.addEventListener('reset',()=>{last=null;result.textContent=\"Introduce tus medidas y calcula.\";let svg=root.querySelector('#area-diagram');if(svg)svg.replaceChildren();let b=root.querySelector('#copy-area');if(b)b.disabled=true;});\nlet copy=root.querySelector('#copy-area');if(copy)copy.addEventListener('click',async()=>{if(last===null)return;try{await navigator.clipboard.writeText(String(last));result.append(document.createTextNode(\" Superficie copiada en m\u00b2.\"));}catch(e){result.append(document.createTextNode(\" Copia la superficie manualmente: \"+last+' m\u00b2.'));}});\n})();\n(()=>{let r=document.getElementById('lawn-tool');r.querySelector('form').addEventListener('input',()=>{r.querySelector('.result').textContent=\"Introduce tus medidas y calcula.\";let b=r.querySelector('#copy-area');if(b)b.disabled=true;let s=r.querySelector('#area-diagram');if(s)s.replaceChildren();});})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Estima la capacidad por zona con el caudal disponible y las especificaciones de las boquillas. Caudal disponible a presi\u00f3n de trabajo (litros\/minuto)Caudal por boquilla id\u00e9ntica a esa presi\u00f3n (litros\/minuto)N\u00famero total de aspersoresPresi\u00f3n de trabajo en las boquillas (bar)Presi\u00f3n m\u00ednima exigida por el fabricante (bar)Reserva de caudal (%) CalcularRestablecer Introduce tus medidas y calcula. C\u00f3mo funciona [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"aiper_reading_time":2,"aiper_last_reviewed":"","aiper_reviewer":0,"aiper_related_ids":[],"aiper_layout":"","footnotes":""},"class_list":["post-13362","page","type-page","status-publish","hentry"],"lang":"es","translations":{"es":13362,"fr":13361,"de":13360,"en":13359},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=13362"}],"version-history":[{"count":3,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13362\/revisions"}],"predecessor-version":[{"id":13479,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13362\/revisions\/13479"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=13362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}