{"id":13361,"date":"2026-11-05T00:52:45","date_gmt":"2026-11-05T00:52:45","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=13361"},"modified":"2026-11-12T04:42:02","modified_gmt":"2026-11-12T04:42:02","slug":"calculateur-zones-arrosage","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/fr\/calculateur-zones-arrosage\/","title":{"rendered":"Calculateur de zones d\u2019arrosage"},"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=\"fr\"><p>Estimez la capacit\u00e9 de chaque zone avec le d\u00e9bit disponible et les sp\u00e9cifications des buses.<\/p><form data-mode=\"zone\"><div class=\"fields\"><label>D\u00e9bit disponible \u00e0 la pression de service (litres\/minute)<input name=\"flow\" type=\"number\" min=\"0\" step=\"any\" required value=\"40\"><\/label><label>D\u00e9bit par buse identique \u00e0 cette pression (litres\/minute)<input name=\"nozzle\" type=\"number\" min=\"0\" step=\"any\" required value=\"4\"><\/label><label>Nombre total d\u2019arroseurs<input name=\"heads\" type=\"number\" min=\"0\" step=\"any\" required value=\"17\"><\/label><label>Pression de service aux buses (bar)<input name=\"pressure\" type=\"number\" min=\"0\" step=\"any\" required value=\"3\"><\/label><label>Pression minimale exig\u00e9e par le fabricant (bar)<input name=\"required\" type=\"number\" min=\"0\" step=\"any\" required value=\"2\"><\/label><label>R\u00e9serve de d\u00e9bit (%)<input name=\"reserve\" type=\"number\" min=\"0\" step=\"any\" required value=\"20\"><\/label><\/div><button type=\"submit\">Calculer<\/button><button type=\"reset\">R\u00e9initialiser<\/button><\/form><div class=\"result\" role=\"status\" aria-live=\"polite\">Saisissez vos mesures et lancez le calcul.<\/div><h2>M\u00e9thode de calcul<\/h2><p>Arroseurs par zone = arrondi inf\u00e9rieur(d\u00e9bit disponible \u00d7 (1 \u2212 r\u00e9serve \u00f7 100) \u00f7 d\u00e9bit par buse). Zones = arrondi sup\u00e9rieur(nombre total \u00f7 arroseurs par zone). Mesurez le d\u00e9bit \u00e0 la pression de service requise. Un test au seau sans restriction et la pression statique seuls ne suffisent pas. Les buses sont suppos\u00e9es identiques et les zones fonctionnent successivement. V\u00e9rifiez aussi les pertes de charge, le d\u00e9nivel\u00e9, les vannes, les dispositifs antiretour, le recouvrement et l\u2019uniformit\u00e9. Une pression insuffisante emp\u00eache toute recommandation de capacit\u00e9.<\/p><h2>Unit\u00e9s et donn\u00e9es<\/h2><p>Remplacez les exemples par vos mesures. 1 pied = 0,3048 m ; 1 pied carr\u00e9 = 0,09290304 m\u00b2 ; 1 pouce = 25,4 mm ; 1 gallon am\u00e9ricain = 3,785411784 litres. Utilisez la m\u00eame devise pour tous les prix. Un prix nul masque le budget facultatif.<\/p><h2>Guides pour la pelouse<\/h2><ul><li><a href=\"https:\/\/aiper.com\/blogs\/fr\/comment-arroser-une-pelouse-en-pente\/\">Comment arroser une pelouse en pente<\/a><\/li><\/ul><h2>Autres outils pour la pelouse<\/h2><p><a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-gazon-en-rouleaux\/\">calculateur de gazon en rouleaux<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-surface-pelouse\/\">calculateur de surface de pelouse<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-arrosage-pelouse-duree\/\">calculateur d\u2019arrosage et de dur\u00e9e des arroseurs<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-cout-tonte-pelouse\/\">calculateur de co\u00fbt de tonte<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-temps-tonte\/\">calculateur de temps de tonte<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-chaux-pelouse\/\">calculateur de chaux pour pelouse<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-irrigation-goutte-a-goutte\/\">calculateur d\u2019irrigation goutte \u00e0 goutte<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-semences-gazon\/\">calculateur de semences de gazon<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-engrais-pelouse\/\">calculateur d\u2019engrais pour pelouse<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/outils\/\">Outils<\/a><\/p><p><a href=\"https:\/\/www.rainbird.com\/homeowners\/how-many-sprinklers-can-be-used-zone-or-valve\">R\u00e9f\u00e9rence technique<\/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(\"Saisissez toutes les mesures requises.\");let x=Number(v[k]);if(!Number.isFinite(x)||x<0)throw Error(\"Utilisez des valeurs finies et positives ou nulles.\");return x;};\n const p=k=>{let x=n(k);if(x<=0)throw Error(\"Cette mesure doit \u00eatre sup\u00e9rieure \u00e0 z\u00e9ro.\");return x;};\n const percent=k=>{let x=n(k);if(x>=100)throw Error(\"Le pourcentage doit \u00eatre inf\u00e9rieur \u00e0 100.\");return x\/100;};\n let o;\n if(mode==='sod'){\n  let a=p('area'),w=n('waste');if(w>100)throw Error(\"Les pertes doivent \u00eatre comprises entre 0 et 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(\"Le nombre d\u2019arroseurs doit \u00eatre entier.\");\n  let capacity=Math.floor(p('flow')*(1-percent('reserve'))\/p('nozzle'));\n  if(p('pressure')<p('required'))throw Error(\"La pression de service est inf\u00e9rieure au minimum requis.\");\n  if(capacity<1)throw Error(\"Le d\u00e9bit ne suffit pas pour une buse avec cette r\u00e9serve.\");\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(\"Saisissez les polygones mesur\u00e9s.\");\n  let total=0;\n  for(let poly of polygons){\n   let pts=poly.points;if(!Array.isArray(pts)||pts.length<3)throw Error(\"Chaque polygone exige au moins trois sommets.\");\n   for(let pt of pts)if(!Array.isArray(pt)||pt.length!==2||!pt.every(x=>typeof x==='number'&&Number.isFinite(x)))throw Error(\"Chaque sommet exige deux coordonn\u00e9es finies.\");\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(\"Ne r\u00e9p\u00e9tez pas les sommets.\");\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(\"Les c\u00f4t\u00e9s ne doivent ni se croiser ni se toucher.\");\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 surface du polygone doit \u00eatre positive.\");\n   if(poly.exclude!==undefined&&typeof poly.exclude!=='boolean')throw Error(\"L\u2019exclusion doit \u00eatre vraie ou fausse.\");\n   total+=poly.exclude?-a:a;\n  }\n  if(total<=0)throw Error(\"La surface nette doit \u00eatre positive.\");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(\"Utilisez au maximum 7 passages par semaine et 52,1775 semaines par an.\");\n  let obstacle=n('obstacle');if(obstacle>100)throw Error(\"La majoration doit \u00eatre comprise entre 0 et 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(\"L\u2019efficacit\u00e9 ne doit pas d\u00e9passer 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(\"Les valeurs neutralisantes doivent \u00eatre des pourcentages au plus \u00e9gaux \u00e0 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(\"Le nombre de lignes doit \u00eatre entier.\");\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(\"Chaque ligne doit comporter au moins un goutteur.\");\n  let flow=emitters*p('emitter'),capacity=p('supply')*60*(1-percent('reserve')),linesPerZone=Math.floor(capacity\/flow);\n  if(linesPerZone<1)throw Error(\"Le d\u00e9bit ne suffit pas pour une ligne compl\u00e8te.\");\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(\"Calculateur inconnu.\");\n if(Object.values(o).some(x=>!Number.isFinite(x)))throw Error(\"Les mesures d\u00e9passent la plage prise en charge.\");\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\": \"Nombre maximal d\u2019arroseurs identiques par zone\", \"zones\": \"Nombre minimal de zones selon le d\u00e9bit\"};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(\"Saisissez une coordonn\u00e9e x,y par ligne.\");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(\"fr\",{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=\"Saisissez vos mesures et lancez le calcul.\";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(\" Surface copi\u00e9e en m\u00b2.\"));}catch(e){result.append(document.createTextNode(\" Copier la surface manuellement : \"+last+' m\u00b2.'));}});\n})();\n(()=>{let r=document.getElementById('lawn-tool');r.querySelector('form').addEventListener('input',()=>{r.querySelector('.result').textContent=\"Saisissez vos mesures et lancez le calcul.\";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>Estimez la capacit\u00e9 de chaque zone avec le d\u00e9bit disponible et les sp\u00e9cifications des buses. D\u00e9bit disponible \u00e0 la pression de service (litres\/minute)D\u00e9bit par buse identique \u00e0 cette pression (litres\/minute)Nombre total d\u2019arroseursPression de service aux buses (bar)Pression minimale exig\u00e9e par le fabricant (bar)R\u00e9serve de d\u00e9bit (%) CalculerR\u00e9initialiser Saisissez vos mesures et lancez le calcul. M\u00e9thode [&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-13361","page","type-page","status-publish","hentry"],"lang":"fr","translations":{"fr":13361,"es":13362,"de":13360,"en":13359},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13361","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=13361"}],"version-history":[{"count":3,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13361\/revisions"}],"predecessor-version":[{"id":13478,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13361\/revisions\/13478"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=13361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}