{"id":21811,"date":"2026-03-10T14:52:16","date_gmt":"2026-03-10T14:52:16","guid":{"rendered":"https:\/\/residential-bandicoot-99rq.flyinghost.app\/?post_type=resources&#038;p=21811"},"modified":"2026-03-10T16:45:46","modified_gmt":"2026-03-10T16:45:46","slug":"calculadora-havs","status":"publish","type":"resources","link":"https:\/\/pulsarinstruments.com\/es\/resources\/havs-calculator\/","title":{"rendered":"Calculadora HAVS"},"content":{"rendered":"<p class=\"wp-block-paragraph\">La calculadora HAVS est\u00e1 dise\u00f1ada para ayudar a los usuarios a evaluar el riesgo de <a href=\"https:\/\/pulsarinstruments.com\/es\/noticias\/que-es-havs\/\" data-type=\"news\" data-id=\"14321\">HAVS<\/a> calculando el nivel de exposici\u00f3n a las vibraciones de herramientas o procesos. Proporciona estimaciones sobre los puntos de exposici\u00f3n por hora, el tiempo para alcanzar el valor de acci\u00f3n de exposici\u00f3n (EAV) y el valor l\u00edmite de exposici\u00f3n (ELV), ayudando a los usuarios a gestionar y limitar la exposici\u00f3n a la vibraci\u00f3n mano-brazo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si necesita una versi\u00f3n fuera de l\u00ednea de una calculadora HAVS, le recomendamos que descargue la aplicaci\u00f3n <a href=\"https:\/\/www.hse.gov.uk\/vibration\/hav\/calculator-guide.htm\" target=\"_blank\" rel=\"noopener\">Calculadora HSE HAVS<\/a>.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <style>\n        .calculator-container {\n            font-family: Arial, sans-serif;\n            max-width: 1300px;\n            margin-top: 20px;\n            margin-bottom: 20px;\n            margin: auto;\n            border: 0 solid;\n        }\n        #vibrationTable {\n           margin-top: 20px;\n           margin-bottom: 20px;\n           border-radius: 5;\n}\n\n#key {\nmargin: 0px;\n}\n\n.input-cell input {\n    border-width: 1px;\n    border-radius: 5px;\n}\n\n        th {\n        background-color: #2E4795 !important;\n        color: #fff;\n}\n        table {\n            width: 100%;\n            border-collapse: collapse;\n        }\n        th, td {\n            border: 1px solid #ddd;\n            text-align: center;\n            padding: 10px;\n            width: 8.33%;\n            margin: auto;\n        }\n        th {\n            background-color: #f2f2f2;\n        }\n        .input-cell input {\n            width: 100%;\n            padding: 5px;\n            box-sizing: border-box;\n        }\n        button {\n            cursor: pointer;\n        }\n    .exposurePointsPerHour {\n    background-color: rgba(13,71,182,.1);\n}\n\n .timeToReachEAV {\n    background-color: rgba(13,71,182,.1);\n}\n\n.timeToReachELV {\n    background-color: rgba(13,71,182,.1);\n}\n\n.partialExposure {\n    background-color: rgba(13,71,182,.1);\n}\n.partialExposurePoints {\n    background-color: rgba(13,71,182,.1);\n}\n.calculatebutton {\nborder-radius: 10px; \npadding-left: 20px;\npadding-right: 20px;\npadding-top: 5px;\npadding-bottom: 5px; \nbackground-color: #006DFF;\ncolor: #fff;\nborder: 0 solid;\nmargin-top: 0px;\n}\n        .red-background {\n            background-color: #ff6666;\n        }\n        .orange-background {\n            background-color: #ffcc66;\n        }\n        .green-background {\n            background-color: #66cc66;\n        }\n\n#rotateDevicePrompt {\n    display: none;\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(0,0,0,0.8);\n    color: white;\n    font-size: 24px;\n    text-align: center;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n    z-index: 1000; \/* Make sure this is on top of other elements *\/\n}\n\n@media screen and (orientation: portrait) {\n    #rotateDevicePrompt {\n        display: flex; \/* Show the prompt only in portrait mode *\/\n    }\n\n@media screen and (max-width: 768px) { \/* Adjusts for devices with width less than 768px *\/\n        .calculator-container {\n            width: 100%; \/* Full width *\/\n            overflow-x: auto; \/* Allows table to scroll horizontally *\/\n        }\n\n        table {\n            width: auto; \/* Allows table to be only as wide as it needs to be, enabling horizontal scroll *\/\n        }\n\n        th, td {\n            padding: 5px; \/* Reduces padding *\/\n            font-size: 12px; \/* Reduces font size *\/\n        }\n\n        .input-cell input, button {\n            font-size: 12px; \/* Reduces font size *\/\n        }\n\n        \/* Hide less important columns on small screens *\/\n        .calculator-container th:nth-child(3),\n        .calculator-container td:nth-child(3),\n        .calculator-container th:nth-child(4),\n        .calculator-container td:nth-child(4) {\n            display: none;\n        }\n    }\n    \n    @media screen and (orientation: landscape) {\n.calculator-container {\n            width: 100%;    }\n}\n    <\/style>\n<\/head>\n<body>\n<div id=\"rotateDevicePrompt\">\n    <p>Gira el dispositivo al modo horizontal.<\/p>\n<\/div>\n<div class=\"calculator-container\">\n    <table id=\"vibrationTable\">\n        <thead>\n            <tr>\n                <th>Nombre de la herramienta o del proceso<\/th>\n                <th>Magnitud de las vibraciones m\/s\u00b2.<\/th>\n                <th>Puntos de exposici\u00f3n por hora<\/th>\n                <th>Tiempo para alcanzar el EAV<\/th>\n                <th>Tiempo para alcanzar el VLE<\/th>\n                <th>Duraci\u00f3n de la exposici\u00f3n Horas<\/th>\n                <th>Duraci\u00f3n de la exposici\u00f3n Minutos<\/th>\n                <th>Exposici\u00f3n parcial m\/s\u00b2 (A8)<\/th>\n                <th>Puntos de exposici\u00f3n parciales<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <!-- Initial row -->\n            <tr data-tool-recommendation=\"\">\n                <td class=\"input-cell\"><input type=\"text\" class=\"toolName\"\/><\/td>\n                <td class=\"input-cell\"><input type=\"number\" class=\"vibrationMagnitude\" step=\"0.1\"\/><\/td>\n                <td class=\"exposurePointsPerHour\"><\/td>\n                <td class=\"timeToReachEAV\"><\/td>\n                <td class=\"timeToReachELV\"><\/td>\n                <td class=\"input-cell\"><input type=\"number\" class=\"exposureDurationHours\" step=\"0\" min=\"1\"\/><\/td>\n                <td class=\"input-cell\"><input type=\"number\" class=\"exposureDurationMinutes\" step=\"1\" min=\"1\" max=\"59\"\/><\/td>\n                <td class=\"partialExposure\"><\/td>\n                <td class=\"partialExposurePoints\"><\/td>\n            <\/tr>\n        <\/tbody>\n        <tfoot>\n            <tr>\n<td colspan=\"2\">     <button class=\"calculatebutton\" onclick=\"addTool()\">A\u00f1adir otra herramienta<\/button> <\/td>\n            \n<td colspan=\"5\" style=\"text-align: right;\"><strong>Exposici\u00f3n total:<\/strong><\/td>\n                <td id=\"totalPartialExposure\">0<\/td>\n                <td id=\"totalExposurePoints\">0<\/td>\n            <\/tr>\n<tr>\n<td colspan=\"10\"> \n<p id=\"key\"><b>EAV<\/b>: Valor de la acci\u00f3n de exposici\u00f3n = 2,5 m\/s\u00b2 A(8), <b>ELV<\/b>: Valor l\u00edmite de exposici\u00f3n = 5 m\/s\u00b2 A(8)<\/p>\n<\/td>\n<\/tr>\n        <\/tfoot>\n    <\/table>\n<\/div>\n\n<div><p id=\"havsMessage\" style=\"text-align: center; font-weight: bold;\"><\/p> <\/div>\n<div>\n    <p id=\"havsMessage\" style=\"text-align: center; font-weight: bold;\"><\/p>\n    <p id=\"toolRecommendations\" style=\"text-align: center;\"><\/p>\n<\/div>\n\n<script>\nvar toolRecommendations = []; \/\/ Global array to store recommendations\n\ndocument.addEventListener('DOMContentLoaded', function() {\n    setupInputListeners();\n});\n    function setupInputListeners() {\n    var inputs = document.querySelectorAll('.vibrationMagnitude, .exposureDurationHours, .exposureDurationMinutes');\n    inputs.forEach(function(input) {\n        input.addEventListener('change', function() {\n            calculateExposure(input.closest('tr'));\n        });\n    });\n}\n\n\n    \/\/ Initial setup call\n    setupInputListeners();\n\n    function calculateExposure(row) {\n    var vibrationMagnitude = parseFloat(row.querySelector('.vibrationMagnitude').value) || 0;\n    \n    \/\/ Calculate Exposure Points Per Hour using the provided vibration magnitude.\n    var exposurePointsPerHour = Math.pow(vibrationMagnitude, 2) * 2;\n\nif (exposurePointsPerHour === 0) {\n        \/\/ Set timeToReachEAV and timeToReachELV to some default value or message\n        timeToReachEAV = 'N\/A'; \/\/ or some other sensible default\n        timeToReachELV = 'N\/A'; \/\/ or some other sensible default\n    } else {    \n\/\/ Calculate Time to Reach EAV and ELV in minutes.\n    var timeToReachEAV = 100 * 60 \/ exposurePointsPerHour; \/\/ For EAV of 2.5 m\/s\u00b2 (100 points)\n    var timeToReachELV = 400 * 60 \/ exposurePointsPerHour; \/\/ For ELV of 5 m\/s\u00b2 (400 points)\n\n    var exposureDurationHours = parseFloat(row.querySelector('.exposureDurationHours').value) || 0;\n    var exposureDurationMinutes = parseFloat(row.querySelector('.exposureDurationMinutes').value) || 0;\n    var exposureDurationTotalMinutes = (exposureDurationHours * 60) + exposureDurationMinutes;\n    \n    \/\/ Calculate Partial Exposure Points.\n    var partialExposurePoints = exposurePointsPerHour * exposureDurationTotalMinutes \/ 60;\n    \n    \/\/ Calculate Partial Exposure (A8) as the square root of the partial exposure points normalized to an 8-hour day.\n   var exposureDurationTotalHours = exposureDurationHours + (exposureDurationMinutes \/ 60);\n   var partialExposure = Math.sqrt((vibrationMagnitude * vibrationMagnitude * exposureDurationTotalHours) \/ 8);\n var toolName = row.querySelector('.toolName').value || 'Unnamed Tool';\n    var timeToReachELVFormatted = formatHoursAndMinutes(timeToReachELV);\n\n    if (partialExposure >= 5) {\n        var recommendation = toolName + \" has a high level of vibration (Partial Exposure: \" + partialExposure.toFixed(1) + \" m\/s\u00b2). Consider reducing usage time and ensure not to exceed its Time to Reach ELV (\" + timeToReachELVFormatted.hours + \"h \" + timeToReachELVFormatted.minutes + \"m).\";\n        row.setAttribute('data-tool-recommendation', recommendation);\n    } else {\n        row.setAttribute('data-tool-recommendation', ''); \/\/ Clear the recommendation if not relevant\n    }\n\n    \/\/ Update the table with the calculated values.\n    row.querySelector('.exposurePointsPerHour').textContent = exposurePointsPerHour.toFixed(0);\n    row.querySelector('.timeToReachEAV').textContent = formatHoursAndMinutes(timeToReachEAV).hours + 'h ' +\n                                                         formatHoursAndMinutes(timeToReachEAV).minutes + 'm';\n    row.querySelector('.timeToReachELV').textContent = formatHoursAndMinutes(timeToReachELV).hours + 'h ' +\n                                                         formatHoursAndMinutes(timeToReachELV).minutes + 'm';\n    row.querySelector('.partialExposure').textContent = partialExposure.toFixed(1);\n    row.querySelector('.partialExposurePoints').textContent = partialExposurePoints.toFixed(0);\n\n    calculateTotals();\n}\n}\n\nfunction displayToolRecommendations() {\n    var rows = document.querySelectorAll('#vibrationTable tbody tr');\n    var recommendations = [];\n\n    rows.forEach(function(row) {\n        var recommendation = row.getAttribute('data-tool-recommendation');\n        if (recommendation) {\n            recommendations.push(recommendation);\n        }\n    });\n\n    var recommendationsElement = document.getElementById('toolRecommendations');\n    var recommendationsHtml = recommendations.length > 0 ? '<strong>Tool Recommendations:<\/strong><br>' + recommendations.join('<br>') : '';\n    recommendationsElement.innerHTML = recommendationsHtml;\n}\n\nfunction formatHoursAndMinutes(totalMinutes) {\n    var hours = Math.floor(totalMinutes \/ 60);\n    var minutes = Math.round(totalMinutes % 60);\n    return { hours, minutes };\n}\n\n\n    function calculateTotals() {\n        var totalExposurePoints = 0;\n        var totalPartialExposureSquared = 0;\n\n        document.querySelectorAll('.partialExposurePoints').forEach(function(cell) {\n            var value = parseFloat(cell.textContent) || 0;\n            totalExposurePoints += value;\n        });\n\n        document.querySelectorAll('.partialExposure').forEach(function(cell) {\n            var value = parseFloat(cell.textContent) || 0;\n            totalPartialExposureSquared += value * value;\n        });\n\n        var totalPartialExposure = Math.sqrt(totalPartialExposureSquared);\n\n        var totalExposurePointsElement = document.getElementById('totalExposurePoints');\n        var totalPartialExposureElement = document.getElementById('totalPartialExposure');\n\n        totalExposurePointsElement.textContent = Math.round(totalExposurePoints).toString();\n        totalPartialExposureElement.textContent = totalPartialExposure.toFixed(1) + ' m\/s\u00b2';\n\n        \/\/ Set the background color based on the value\n        if (totalExposurePoints > 400 || totalPartialExposure >= 5) {\n            totalExposurePointsElement.className = 'red-background';\n            totalPartialExposureElement.className = 'red-background';\n        } else if (totalExposurePoints > 100 || totalPartialExposure >= 2.5) {\n            totalExposurePointsElement.className = 'orange-background';\n            totalPartialExposureElement.className = 'orange-background';\n        } else {\n            totalExposurePointsElement.className = 'green-background';\n            totalPartialExposureElement.className = 'green-background';\n        }\n    displayHAVSMessage(totalPartialExposure);\n    displayToolRecommendations();\n    }\n\n    function calculateTime(limitPoints, exposurePointsPerHour) {\n        var time = limitPoints \/ exposurePointsPerHour;\n        var hours = Math.floor(time);\n        var minutes = Math.round((time - hours) * 60);\n        return { hours, minutes };\n    }\n\n    function addTool() {\n        var tableBody = document.getElementById('vibrationTable').querySelector('tbody');\n        var newRow = tableBody.insertRow(-1);\n\n        newRow.innerHTML = `\n            <td class=\"input-cell\"><input type=\"text\" class=\"toolName\"\/><\/td>\n            <td class=\"input-cell\"><input type=\"number\" class=\"vibrationMagnitude\" step=\"0.1\"\/><\/td>\n            <td class=\"exposurePointsPerHour\"><\/td>\n            <td class=\"timeToReachEAV\"><\/td>\n            <td class=\"timeToReachELV\"><\/td>\n            <td class=\"input-cell\"><input type=\"number\" class=\"exposureDurationHours\" step=\"1\" min=\"1\"\/><\/td>\n            <td class=\"input-cell\"><input type=\"number\" class=\"exposureDurationMinutes\" step=\"1\" min=\"1\" max=\"59\"\/><\/td>\n            <td class=\"partialExposure\"><\/td>\n            <td class=\"partialExposurePoints\"><\/td>\n        `;\n        setupInputListeners();\n\n    }\n\nfunction formatTime(totalMinutes) {\n    var hours = Math.floor(totalMinutes \/ 60);\n    var minutes = Math.round(totalMinutes % 60);\n    \/\/ Ensure minutes are shown with two digits\n    minutes = minutes < 10 ? '0' + minutes : minutes;\n    return hours + \":\" + minutes;\n}\n\n    window.onload = setupInputListeners;\n\nfunction checkOrientation() {\n    if (window.innerHeight > window.innerWidth) {\n        \/\/ Show the prompt if in portrait mode\n        document.getElementById('rotateDevicePrompt').style.display = 'flex';\n    } else {\n        \/\/ Hide the prompt if in landscape mode\n        document.getElementById('rotateDevicePrompt').style.display = 'none';\n    }\n}\n\nfunction displayHAVSMessage(totalExposure) {\n    var messageElement = document.getElementById('havsMessage');\n    if (totalExposure < 2.5) {\n        messageElement.textContent = 'These are good HAVS levels, but you should still always be looking to reduce your HAVS exposure.';\n        messageElement.style.color = 'green';\n    } else if (totalExposure >= 2.5 && totalExposure < 5) {\n        messageElement.textContent = 'Alert: You are over the Action value and should be actively taking measures to reduce your employee\\'s exposure.';\n        messageElement.style.color = 'orange';\n    } else if (totalExposure >= 5) {\n        messageElement.textContent = 'Warning: Your employees are at serious risk of injury from vibration at work.';\n        messageElement.style.color = 'red';\n    }\n}\n\n\/\/ Call checkOrientation on load and on resize event\nwindow.addEventListener('load', checkOrientation);\nwindow.addEventListener('resize', checkOrientation);\nwindow.addEventListener('orientationchange', checkOrientation); \/\/ For mobile devices that support orientationchange\n<\/script>\n\n<\/body>\n<\/html>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 son el VAE y el VFU?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">EAV (Exposure Action Value) y ELV (Exposure Limit Value) son umbrales establecidos para la exposici\u00f3n a las vibraciones. El VLA es el nivel por encima del cual debe informarse a los trabajadores de los riesgos para la salud y deben adoptarse medidas preventivas. El VLE es la cantidad m\u00e1xima de vibraciones a la que puede estar expuesto un empleado en un solo d\u00eda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Medici\u00f3n de la magnitud de las vibraciones<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La magnitud de las vibraciones debe medirse con un <a href=\"https:\/\/pulsarinstruments.com\/es\/productos\/c\/vibrometros\/\">medidor de vibraciones mano-brazo<\/a>. Las mediciones precisas permiten a los empresarios calcular la exposici\u00f3n y garantizar el cumplimiento de la normativa sobre vibraciones.<\/p>","protected":false},"template":"","resource-category":[461],"class_list":["post-21811","resources","type-resources","status-publish","hentry","resource-category-calculators"],"_links":{"self":[{"href":"https:\/\/pulsarinstruments.com\/es\/wp-json\/wp\/v2\/resources\/21811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pulsarinstruments.com\/es\/wp-json\/wp\/v2\/resources"}],"about":[{"href":"https:\/\/pulsarinstruments.com\/es\/wp-json\/wp\/v2\/types\/resources"}],"wp:attachment":[{"href":"https:\/\/pulsarinstruments.com\/es\/wp-json\/wp\/v2\/media?parent=21811"}],"wp:term":[{"taxonomy":"resource-category","embeddable":true,"href":"https:\/\/pulsarinstruments.com\/es\/wp-json\/wp\/v2\/resource-category?post=21811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}