the program have one sensor acs712 and moduleds1302
Dependencies: FATFileSystem mbed
ACS712.h@0:b82abca089ac, 2017-06-08 (annotated)
- Committer:
- RUBENTEC
- Date:
- Thu Jun 08 20:17:34 2017 +0000
- Revision:
- 0:b82abca089ac
ds1302-bluetooth-acs712
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RUBENTEC | 0:b82abca089ac | 1 | #include <mbed.h> |
RUBENTEC | 0:b82abca089ac | 2 | /** A Hall-Effect sensor for measuring current levels in a given path |
RUBENTEC | 0:b82abca089ac | 3 | * |
RUBENTEC | 0:b82abca089ac | 4 | * Can be used as a current detector |
RUBENTEC | 0:b82abca089ac | 5 | * |
RUBENTEC | 0:b82abca089ac | 6 | * Example: |
RUBENTEC | 0:b82abca089ac | 7 | * @code |
RUBENTEC | 0:b82abca089ac | 8 | * // Periodically read current levels in a circuit and |
RUBENTEC | 0:b82abca089ac | 9 | * // send output to PC terminal |
RUBENTEC | 0:b82abca089ac | 10 | * |
RUBENTEC | 0:b82abca089ac | 11 | * #include "mbed.h" |
RUBENTEC | 0:b82abca089ac | 12 | * #include "ACS712.h" |
RUBENTEC | 0:b82abca089ac | 13 | * |
RUBENTEC | 0:b82abca089ac | 14 | * // Connect the sensor analog output pin to mbed's AnalogIn pin |
RUBENTEC | 0:b82abca089ac | 15 | * ACS712 dev(p18); |
RUBENTEC | 0:b82abca089ac | 16 | * // Connect mbed to pc's USB port |
RUBENTEC | 0:b82abca089ac | 17 | * Serial pc(USBTX, USBRX); |
RUBENTEC | 0:b82abca089ac | 18 | * |
RUBENTEC | 0:b82abca089ac | 19 | * int main() { |
RUBENTEC | 0:b82abca089ac | 20 | * pc.printf("Sensor Log: \n\n\r"); |
RUBENTEC | 0:b82abca089ac | 21 | * while (1) { |
RUBENTEC | 0:b82abca089ac | 22 | * // Read current from sensor and output to pc terminal |
RUBENTEC | 0:b82abca089ac | 23 | * pc.printf("Sensor Value: %2.2f A\n\r", dev); |
RUBENTEC | 0:b82abca089ac | 24 | * wait(0.200); |
RUBENTEC | 0:b82abca089ac | 25 | * } |
RUBENTEC | 0:b82abca089ac | 26 | * } |
RUBENTEC | 0:b82abca089ac | 27 | * @endcode |
RUBENTEC | 0:b82abca089ac | 28 | */ |
RUBENTEC | 0:b82abca089ac | 29 | |
RUBENTEC | 0:b82abca089ac | 30 | class ACS712 { |
RUBENTEC | 0:b82abca089ac | 31 | |
RUBENTEC | 0:b82abca089ac | 32 | public: |
RUBENTEC | 0:b82abca089ac | 33 | /** Create a hall-effect sensor of the specified type |
RUBENTEC | 0:b82abca089ac | 34 | * |
RUBENTEC | 0:b82abca089ac | 35 | * @param _pin mbed AnalogIn pin where the analog output of sensor is connected |
RUBENTEC | 0:b82abca089ac | 36 | * @param voltDivRatio resistor voltage division ratio at output of the sensor |
RUBENTEC | 0:b82abca089ac | 37 | * @param type type of ACS712 sensor used |
RUBENTEC | 0:b82abca089ac | 38 | * |
RUBENTEC | 0:b82abca089ac | 39 | * @note Supported types of sensors: |
RUBENTEC | 0:b82abca089ac | 40 | */ |
RUBENTEC | 0:b82abca089ac | 41 | ACS712(PinName _pin, float voltDivRatio = 1, short type = 5); |
RUBENTEC | 0:b82abca089ac | 42 | |
RUBENTEC | 0:b82abca089ac | 43 | /** Read the value of the measured current in amps |
RUBENTEC | 0:b82abca089ac | 44 | * |
RUBENTEC | 0:b82abca089ac | 45 | * @return current value in amps |
RUBENTEC | 0:b82abca089ac | 46 | */ |
RUBENTEC | 0:b82abca089ac | 47 | float read(); |
RUBENTEC | 0:b82abca089ac | 48 | ACS712& operator=(const ACS712&); |
RUBENTEC | 0:b82abca089ac | 49 | |
RUBENTEC | 0:b82abca089ac | 50 | /** Read the value of the measured current in amps |
RUBENTEC | 0:b82abca089ac | 51 | * Allows the ACS712 object to be used in a float context |
RUBENTEC | 0:b82abca089ac | 52 | * |
RUBENTEC | 0:b82abca089ac | 53 | * @return current value in amps |
RUBENTEC | 0:b82abca089ac | 54 | */ |
RUBENTEC | 0:b82abca089ac | 55 | operator float() { return read(); } |
RUBENTEC | 0:b82abca089ac | 56 | |
RUBENTEC | 0:b82abca089ac | 57 | private: |
RUBENTEC | 0:b82abca089ac | 58 | AnalogIn sensor; |
RUBENTEC | 0:b82abca089ac | 59 | float translate(float); |
RUBENTEC | 0:b82abca089ac | 60 | float ratio; |
RUBENTEC | 0:b82abca089ac | 61 | short type; |
RUBENTEC | 0:b82abca089ac | 62 | |
RUBENTEC | 0:b82abca089ac | 63 | }; |
RUBENTEC | 0:b82abca089ac | 64 | |
RUBENTEC | 0:b82abca089ac | 65 | ACS712::ACS712(PinName _pin, float voltDivRatio, short sensorType) : sensor(_pin){ |
RUBENTEC | 0:b82abca089ac | 66 | ratio = voltDivRatio; |
RUBENTEC | 0:b82abca089ac | 67 | type = sensorType; |
RUBENTEC | 0:b82abca089ac | 68 | } |
RUBENTEC | 0:b82abca089ac | 69 | |
RUBENTEC | 0:b82abca089ac | 70 | float ACS712::translate(float val){ |
RUBENTEC | 0:b82abca089ac | 71 | switch(type){ |
RUBENTEC | 0:b82abca089ac | 72 | case 5: |
RUBENTEC | 0:b82abca089ac | 73 | return (val*ratio - 2.46*ratio)/(.185*ratio); |
RUBENTEC | 0:b82abca089ac | 74 | case 20: |
RUBENTEC | 0:b82abca089ac | 75 | return (val*ratio - 2.46*ratio)/(.1*ratio); |
RUBENTEC | 0:b82abca089ac | 76 | case 30: |
RUBENTEC | 0:b82abca089ac | 77 | return (val*ratio - 2.46*ratio)/(.066*ratio); |
RUBENTEC | 0:b82abca089ac | 78 | default: |
RUBENTEC | 0:b82abca089ac | 79 | return 999; |
RUBENTEC | 0:b82abca089ac | 80 | } |
RUBENTEC | 0:b82abca089ac | 81 | } |
RUBENTEC | 0:b82abca089ac | 82 | |
RUBENTEC | 0:b82abca089ac | 83 | |
RUBENTEC | 0:b82abca089ac | 84 | float ACS712::read(){ |
RUBENTEC | 0:b82abca089ac | 85 | return ACS712::translate(sensor * 3.3); |
RUBENTEC | 0:b82abca089ac | 86 | } |
RUBENTEC | 0:b82abca089ac | 87 | |
RUBENTEC | 0:b82abca089ac | 88 | ACS712& ACS712::operator=(const ACS712& rhs){ |
RUBENTEC | 0:b82abca089ac | 89 | sensor = rhs.sensor; |
RUBENTEC | 0:b82abca089ac | 90 | ratio = rhs.ratio; |
RUBENTEC | 0:b82abca089ac | 91 | type = rhs.type; |
RUBENTEC | 0:b82abca089ac | 92 | return *this; |
RUBENTEC | 0:b82abca089ac | 93 | } |