{"id":13430,"date":"2026-11-05T01:08:12","date_gmt":"2026-11-05T01:08:12","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=13430"},"modified":"2026-11-12T04:43:11","modified_gmt":"2026-11-12T04:43:11","slug":"calculadora-cal-cesped","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/es\/calculadora-cal-cesped\/","title":{"rendered":"Calculadora de cal para c\u00e9sped"},"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>Convierte la recomendaci\u00f3n de un an\u00e1lisis de suelo en cantidad de producto con valores neutralizantes comparables.<\/p><form data-mode=\"lime\"><div class=\"fields\"><label>Superficie de c\u00e9sped (m\u00b2)<input name=\"area\" type=\"number\" min=\"0\" step=\"any\" required value=\"100\"><\/label><label>Dosis recomendada por el an\u00e1lisis (kg por 100 m\u00b2)<input name=\"lab\" type=\"number\" min=\"0\" step=\"any\" required value=\"\"><\/label><label>Valor neutralizante de referencia del an\u00e1lisis (%)<input name=\"reference\" type=\"number\" min=\"0\" step=\"any\" required value=\"100\"><\/label><label>Valor neutralizante del producto sobre la misma base (%)<input name=\"product\" type=\"number\" min=\"0\" step=\"any\" required value=\"90\"><\/label><label>Peso de tu saco (kg)<input name=\"bag\" type=\"number\" min=\"0\" step=\"any\" required value=\"20\"><\/label><label>M\u00e1ximo por aplicaci\u00f3n seg\u00fan etiqueta o laboratorio (kg por 100 m\u00b2; 0 sin fraccionar)<input name=\"cap\" type=\"number\" min=\"0\" step=\"any\" required value=\"0\"><\/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>Usa un an\u00e1lisis de suelo reciente; la diferencia de pH por s\u00ed sola no determina la dosis. Dosis de producto = recomendaci\u00f3n \u00d7 valor de referencia \u00f7 valor del producto. Ambos porcentajes deben usar la misma base: ECCE con ECCE o CCE con CCE. Comprueba si la recomendaci\u00f3n ya considera tu producto. El CCE por s\u00ed solo no describe finura ni rapidez de acci\u00f3n. Si el informe usa ENP en libras por tonelada o la base es dudosa, pide al laboratorio porcentajes compatibles. Los sacos se redondean solo para comprar; aplica la masa calculada. El m\u00e1ximo de etiqueta o laboratorio permite estimar fracciones iguales. Respeta sus intervalos e instrucciones de incorporaci\u00f3n; no se inventa ning\u00fan intervalo. 1 lb por 1.000 pies cuadrados equivale aproximadamente a 0,48824 kg por 100 m\u00b2.<\/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\/cesped-necesita-cal-ph\/\">\u00bfTu c\u00e9sped necesita cal? (y qu\u00e9 tiene que ver el pH)<\/a><\/li><li><a href=\"https:\/\/aiper.com\/blogs\/es\/como-corregir-suelo-acido\/\">C\u00f3mo corregir un suelo \u00e1cido: dosis de cal y momento adecuado<\/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-zonas-aspersores\/\">calculadora de zonas 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-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:\/\/content.ces.ncsu.edu\/soil-acidity-and-liming-basic-information-for-farmers-and-gardeners\">Referencia t\u00e9cnica<\/a><\/p><p>1 lb = 0.45359237 kg; 1 mph = 1.609344 km\/h; 1 in = 2.54 cm.<\/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={\"adjusted\": \"Dosis de producto ajustada (kg por 100 m\u00b2)\", \"total\": \"Cantidad total de producto (kg)\", \"bags\": \"Sacos enteros\", \"passes\": \"M\u00ednimo de aplicaciones seg\u00fan tu l\u00edmite\", \"perpass\": \"Producto por aplicaci\u00f3n igual sobre toda la superficie (kg)\"};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>Convierte la recomendaci\u00f3n de un an\u00e1lisis de suelo en cantidad de producto con valores neutralizantes comparables. Superficie de c\u00e9sped (m\u00b2)Dosis recomendada por el an\u00e1lisis (kg por 100 m\u00b2)Valor neutralizante de referencia del an\u00e1lisis (%)Valor neutralizante del producto sobre la misma base (%)Peso de tu saco (kg)M\u00e1ximo por aplicaci\u00f3n seg\u00fan etiqueta o laboratorio (kg por 100 [&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-13430","page","type-page","status-publish","hentry"],"lang":"es","translations":{"es":13430,"fr":13429,"de":13428,"en":13427},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13430","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=13430"}],"version-history":[{"count":1,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13430\/revisions"}],"predecessor-version":[{"id":13446,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13430\/revisions\/13446"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=13430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}