B4R Code Snippet Calculate Heat Index (B4x compatible)

Discussion in 'B4R Code Snippets' started by Kevin, Jun 17, 2018.

  1. Kevin

    Kevin Well-Known Member Licensed User

    I wanted to cycle between the actual air temperature and heat index on my little ESP-12E pool project. This can be used in any B4x IDE. It requires a known temperature and humidity.

    Calculating the heat index requires the temperature to be in Fahrenheit, so if working in Celsius, you need to convert it first: F = (C x 1.8) + 32
    To convert Fahrenheit back to Celcius: C = (F - 32) / 1.8

    Source of the formula to calculate heat index:
    Calculator
    Formula

    The Calculator webpage mentions that heat index results below 80 may be meaningless if outside the range of the chart, so if it calculates a heat index below 80 then I just return the original temperature and ignore the heat index.

    I've spot-checked the calculations in my code against their online calculator and they all came back the same. One slight difference is that I am using decimals (fractions) with the temperature that I send to the sub and the online calculator works with whole numbers (rounding up or down).

    Wind speed can also be a factor in calculating the heat index, but I do not have that data in my project nor do I know how to factor that into the formula.

    Code:
    Private Sub HeatIndex (dTempF As Double, dHum As Double) As Double
        
    'Source:  http://www.wpc.ncep.noaa.gov/html/heatindex_equation.shtml
        
        
    Dim HI As Double, Adjustment As Double
        
        
        
    'First get simplified heat index to see if it is at 80 F or higher
        'HI = 0.5 * {T + 61.0 + [(T-68.0)*1.2] + (RH*0.094)}
        
        HI = 
    .5 * (dTempF + 61 + ((dTempF - 68) * 1.2)) + (dHum * .094)
        
        
    'Per the equation and chart, if heat index is below 80 then calculating the heat index
        'could produce meaningless results
        If HI < 80 Then Return dTempF
        
        
    'If heat index is 80 or higher, do a more thorough calculation
        'HI = -42.379 + 2.04901523*T + 10.14333127*RH - .22475541*T*RH
        ' - .00683783*T*T - .05481717*RH*RH + .00122874*T*T*RH
        ' + .00085282*T*RH*RH - .00000199*T*T*RH*RH
        
        HI = -
    42.379 + (2.04901523 * dTempF) + (10.14333127 * dHum) - (.22475541 * dTempF * dHum) _
        - (
    .00683783 * dTempF * dTempF) - (.05481717 * dHum * dHum) + (.00122874 * dTempF * dTempF * dHum) _
        + (
    .00085282 * dTempF * dHum * dHum) - (.00000199 * dTempF * dTempF * dHum * dHum)
        
        
    'Adjustments
        'If the RH is less than 13% and the temperature is between 80 and 112 degrees F,
        'then the following adjustment is subtracted from HI:
        'Adjustment = [(13-RH)/4]*SQRT{[17-Abs(T-95.)]/17}
        
        
    If dHum < 13 And dTempF > 79.9 And dTempF < 112.1 Then
            Adjustment = ((
    13 - dHum) / 4) * Sqrt((17 - Abs(dTempF - 95)) / 17)
            HI = HI - Adjustment
            
    Return HI
        
    End If
        
        
    'If the RH is greater than 85% and the temperature is between 80 and 87 degrees F,
        'then the following adjustment is added to HI:
        'Adjustment = [(RH-85)/10] * [(87-T)/5]
        
        
    If dHum > 85 And dTempF > 79.9 And dTempF < 87.1 Then
            Adjustment = ((dHum - 
    85) / 10) * ((87-dTempF) / 5)
            HI = HI + Adjustment
            
    Return HI
        
    End If
        
        
    'If we get here, then no adjustments are necessary so return what we came up with in the
        'long equation above
        Return HI
    End Sub
     
    spairo and OliverA like this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice