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