HST11 sensor code
bob kruggel
Posts: 50
I am going through the Basic Stamp code (page 6 of 8) and have either found an error or I don't understand the ** operator. I've copied some comment lines and one line of code below. I added the line numbers.
1.' linearize humidity
2.' rhLin = (soRH * 0.0405) - (soRH^2 * 0.0000028) - 4
3.' for the BASIC Stamp:
4.' rhLin = (soRH * 0.0405) - (soRH * 0.002 * soRH * 0.0014) - 4
5.' Conversion factors are multiplied by 10 to return tenths
6.'rhLin = (soRH ** $67AE) - (soRH ** $83 * soRH ** $5B) - 40
Line 2 is from the SHT11 spec sheet and describes how to adjust the non-linearity of the humidity sensor.
Line 4 rewrites the second half of the formula to assure that the calculation of (soRH^2*.0000028) stays within the limits of BASIC math.
Line 6 makes use of the ** operator to multiple by a fraction and also·multiplies the formula in 6 by 10 to get an answer in tenths.
Line 6 should read in decimal 6. rhLin=(soRH**.405)-(10*(soRH**.002*soRH**.0014))-400.
This can be written as (soRH**.405)-(soRH**.02**soRH**.0014)-400 or (soRH**.405)-(soRH**.002**soRH**.014)-400
Converting the fractions to hex·as described in the help screen·(soRH**$67AE) -(soRH**$51e*soRH**$5B)-400.
The use of ** is very confusing, but I think this is correct.
Bob Kruggel
1.' linearize humidity
2.' rhLin = (soRH * 0.0405) - (soRH^2 * 0.0000028) - 4
3.' for the BASIC Stamp:
4.' rhLin = (soRH * 0.0405) - (soRH * 0.002 * soRH * 0.0014) - 4
5.' Conversion factors are multiplied by 10 to return tenths
6.'rhLin = (soRH ** $67AE) - (soRH ** $83 * soRH ** $5B) - 40
Line 2 is from the SHT11 spec sheet and describes how to adjust the non-linearity of the humidity sensor.
Line 4 rewrites the second half of the formula to assure that the calculation of (soRH^2*.0000028) stays within the limits of BASIC math.
Line 6 makes use of the ** operator to multiple by a fraction and also·multiplies the formula in 6 by 10 to get an answer in tenths.
Line 6 should read in decimal 6. rhLin=(soRH**.405)-(10*(soRH**.002*soRH**.0014))-400.
This can be written as (soRH**.405)-(soRH**.02**soRH**.0014)-400 or (soRH**.405)-(soRH**.002**soRH**.014)-400
Converting the fractions to hex·as described in the help screen·(soRH**$67AE) -(soRH**$51e*soRH**$5B)-400.
The use of ** is very confusing, but I think this is correct.
Bob Kruggel
Comments
I do think you're correct about the error in the SHT11 code. Your version with $51E correctly includes the factor of 10, whereas the version with $83 in the documentation does not.
It makes a substantial difference, especially at high %RH, as shown in the attached table. The version with $83 substantially overestimates the %RH and can come up with values >100%RH. The column "RH error" is the difference between using $15E and $83.
I looked back at my own code at here and see that I did the computation in a different order. That result is in the table in column "EME"--whew! seems to be correct. I do agree the use of ** can be confusing.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Tracy Allen
www.emesystems.com
Post Edited (Tracy Allen) : 7/28/2009 5:37:22 AM GMT
I am working on a web page for my SHT11 sensor modules I sell and I am hoping to include some of my notes that I took while figuring things out. Maybe they will help others. (probably not as much as Tracy Allen's site though)
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Andrew Williams
WBA Consulting
IT / Web / PCB / Audio
Thanks for the conformation. Some times when I'm learning new stuff I doubt myself too much.
BobK