Amanda Travieso
/
HumiditySenor
Outputs humidity to the serial terminal.
main.cpp@2:4edb77a5ab26, 2016-04-14 (annotated)
- Committer:
- atravieso
- Date:
- Thu Apr 14 18:59:42 2016 +0000
- Revision:
- 2:4edb77a5ab26
- Parent:
- 1:e59c75779477
Export for Dan
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
atravieso | 0:a8fcc4098c24 | 1 | |
atravieso | 0:a8fcc4098c24 | 2 | |
atravieso | 2:4edb77a5ab26 | 3 | #include "HIH_5030.h" |
atravieso | 0:a8fcc4098c24 | 4 | #include "mbed.h" |
atravieso | 0:a8fcc4098c24 | 5 | |
atravieso | 0:a8fcc4098c24 | 6 | |
atravieso | 0:a8fcc4098c24 | 7 | Serial pc(USBTX, USBRX); |
atravieso | 0:a8fcc4098c24 | 8 | |
atravieso | 0:a8fcc4098c24 | 9 | AnalogIn ain_UseA(p15); |
atravieso | 0:a8fcc4098c24 | 10 | AnalogIn ain_UseB(p16); |
atravieso | 0:a8fcc4098c24 | 11 | AnalogIn ain_UseC(p17); |
atravieso | 0:a8fcc4098c24 | 12 | AnalogIn ain_UseD(p18); |
atravieso | 0:a8fcc4098c24 | 13 | AnalogIn ain_UseE(p19); |
atravieso | 0:a8fcc4098c24 | 14 | DigitalOut myled(LED1); |
atravieso | 0:a8fcc4098c24 | 15 | |
atravieso | 0:a8fcc4098c24 | 16 | |
atravieso | 0:a8fcc4098c24 | 17 | /* |
atravieso | 0:a8fcc4098c24 | 18 | |
atravieso | 0:a8fcc4098c24 | 19 | Constructor |
atravieso | 0:a8fcc4098c24 | 20 | dataPin: the IO pin connected to the sensor's data pin (pin 15) |
atravieso | 1:e59c75779477 | 21 | supplyVoltage: the voltage supplying the humidity sensor (pins 1,3 - for the HIH5030 3.3 V typical) |
atravieso | 1:e59c75779477 | 22 | referenceVoltage: motor controller's reference voltage (3.3V for the LPC1768) |
atravieso | 0:a8fcc4098c24 | 23 | */ |
atravieso | 0:a8fcc4098c24 | 24 | |
atravieso | 0:a8fcc4098c24 | 25 | HIH4010::HIH4010(float dataPin, float supplyVoltage, float referenceVoltage){ |
atravieso | 0:a8fcc4098c24 | 26 | |
atravieso | 0:a8fcc4098c24 | 27 | pin = dataPin; |
atravieso | 0:a8fcc4098c24 | 28 | vSupply = supplyVoltage; |
atravieso | 0:a8fcc4098c24 | 29 | vRef = referenceVoltage; |
atravieso | 0:a8fcc4098c24 | 30 | |
atravieso | 0:a8fcc4098c24 | 31 | /* |
atravieso | 0:a8fcc4098c24 | 32 | Relative Humidity is calculated using the following equations taken from the datasheet: |
atravieso | 0:a8fcc4098c24 | 33 | (1) Vout = (VSupply)(0.00636(sensorRH) + 0.1515) |
atravieso | 0:a8fcc4098c24 | 34 | (2) sensorRH = (Vout - zeroOffset) / slope |
atravieso | 0:a8fcc4098c24 | 35 | |
atravieso | 0:a8fcc4098c24 | 36 | Solving (1) for sensorRH: |
atravieso | 0:a8fcc4098c24 | 37 | sensorRH = (Vout - (0.1515)VSupply) / (0.00636)VSupply |
atravieso | 0:a8fcc4098c24 | 38 | |
atravieso | 0:a8fcc4098c24 | 39 | Equate result with (2): |
atravieso | 0:a8fcc4098c24 | 40 | zeroOffset = (0.1515)VSupply |
atravieso | 0:a8fcc4098c24 | 41 | slope = (0.00636)VSupply |
atravieso | 0:a8fcc4098c24 | 42 | */ |
atravieso | 0:a8fcc4098c24 | 43 | |
atravieso | 0:a8fcc4098c24 | 44 | slope = 0.00636 * vSupply; |
atravieso | 0:a8fcc4098c24 | 45 | zeroOffset = 0.1515 * vSupply; |
atravieso | 0:a8fcc4098c24 | 46 | |
atravieso | 0:a8fcc4098c24 | 47 | } |
atravieso | 0:a8fcc4098c24 | 48 | |
atravieso | 0:a8fcc4098c24 | 49 | |
atravieso | 0:a8fcc4098c24 | 50 | /* |
atravieso | 0:a8fcc4098c24 | 51 | Convert sensor reading into relative humidity using equation (2) |
atravieso | 0:a8fcc4098c24 | 52 | */ |
atravieso | 0:a8fcc4098c24 | 53 | |
atravieso | 0:a8fcc4098c24 | 54 | float HIH4010::getSensorRH() { |
atravieso | 0:a8fcc4098c24 | 55 | return ((vout() - zeroOffset) / slope); |
atravieso | 0:a8fcc4098c24 | 56 | |
atravieso | 0:a8fcc4098c24 | 57 | } |
atravieso | 0:a8fcc4098c24 | 58 | |
atravieso | 0:a8fcc4098c24 | 59 | /* |
atravieso | 0:a8fcc4098c24 | 60 | Get temperature-compensated relative humity. From data sheet: |
atravieso | 0:a8fcc4098c24 | 61 | trueRH = sensorRH / (1.0546 - 0.00216T) |
atravieso | 0:a8fcc4098c24 | 62 | */ |
atravieso | 0:a8fcc4098c24 | 63 | |
atravieso | 0:a8fcc4098c24 | 64 | float HIH4010::getTrueRH(float temperature) { |
atravieso | 0:a8fcc4098c24 | 65 | return getSensorRH() / (1.0546 - (0.00216 * temperature)); |
atravieso | 0:a8fcc4098c24 | 66 | |
atravieso | 0:a8fcc4098c24 | 67 | } |
atravieso | 0:a8fcc4098c24 | 68 | |
atravieso | 0:a8fcc4098c24 | 69 | /* |
atravieso | 0:a8fcc4098c24 | 70 | Get sensor output voltage. |
atravieso | 0:a8fcc4098c24 | 71 | Assumes 12-bit (2^16 = 4096) A/D resolution. |
atravieso | 0:a8fcc4098c24 | 72 | */ |
atravieso | 0:a8fcc4098c24 | 73 | |
atravieso | 0:a8fcc4098c24 | 74 | float HIH4010::vout() { |
atravieso | 0:a8fcc4098c24 | 75 | return (float)(ain_UseA.read_u16()) * 3.3 / 65536; |
atravieso | 0:a8fcc4098c24 | 76 | |
atravieso | 0:a8fcc4098c24 | 77 | } |
atravieso | 0:a8fcc4098c24 | 78 | |
atravieso | 0:a8fcc4098c24 | 79 | |
atravieso | 0:a8fcc4098c24 | 80 | int main() |
atravieso | 0:a8fcc4098c24 | 81 | { |
atravieso | 0:a8fcc4098c24 | 82 | float ad[5]; |
atravieso | 1:e59c75779477 | 83 | float supplyvoltage = 3.3; |
atravieso | 1:e59c75779477 | 84 | float referencevoltage = 3.3; |
atravieso | 1:e59c75779477 | 85 | float vdiv = (3.3 / 65536); //3.3 is the reference voltage (AnalogIn measures from 0V to 3.3V) and 65536 is the highest number that can be represented by a 16 bit unsigned |
atravieso | 0:a8fcc4098c24 | 86 | while( 1 ){ |
atravieso | 1:e59c75779477 | 87 | ad[0] = (float)ain_UseA.read_u16() * vdiv; //16-bit unsigned short representing the current input voltage, normalised to a 16-bit value |
atravieso | 0:a8fcc4098c24 | 88 | ad[1] = (float)ain_UseB.read_u16() * vdiv; |
atravieso | 0:a8fcc4098c24 | 89 | ad[2] = (float)ain_UseC.read_u16() * vdiv; |
atravieso | 0:a8fcc4098c24 | 90 | ad[3] = (float)ain_UseD.read_u16() * vdiv; |
atravieso | 0:a8fcc4098c24 | 91 | ad[4] = (float)ain_UseE.read_u16() * vdiv; |
atravieso | 1:e59c75779477 | 92 | //pc.printf("%5.3f,%5.3f,%5.3f,%5.3f,%5.3f\r\n ", ad[0],ad[1],ad[2],ad[3],ad[4]); |
atravieso | 1:e59c75779477 | 93 | HIH4010 humidity(ad[0], supplyvoltage, referencevoltage); |
atravieso | 1:e59c75779477 | 94 | pc.printf("%5.3f\r\nHumidity: ", humidity.getSensorRH()); |
atravieso | 0:a8fcc4098c24 | 95 | myled = 1; |
atravieso | 0:a8fcc4098c24 | 96 | wait(2.0); |
atravieso | 0:a8fcc4098c24 | 97 | myled = 0; |
atravieso | 0:a8fcc4098c24 | 98 | wait(2.0); |
atravieso | 0:a8fcc4098c24 | 99 | } |
atravieso | 0:a8fcc4098c24 | 100 | } |