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