From a4e590ae3a204cce3841a535f06a3e94162b4e88 Mon Sep 17 00:00:00 2001 From: Mihai Tudor Panu Date: Tue, 16 Dec 2014 16:29:40 -0800 Subject: [PATCH] adxl345: Grove 3-Axis Accelerometer Signed-off-by: Mihai Tudor Panu --- docs/images/adxl345.jpeg | Bin 0 -> 21440 bytes examples/CMakeLists.txt | 3 + examples/adxl345.cxx | 51 ++++++++++ examples/javascript/adxl345.js | 41 +++++++++ examples/python/adxl345.py | 41 +++++++++ src/adxl345/CMakeLists.txt | 5 + src/adxl345/adxl345.cxx | 164 +++++++++++++++++++++++++++++++++ src/adxl345/adxl345.h | 99 ++++++++++++++++++++ src/adxl345/jsupm_adxl345.i | 20 ++++ src/adxl345/pyupm_adxl345.i | 23 +++++ 10 files changed, 447 insertions(+) create mode 100644 docs/images/adxl345.jpeg create mode 100644 examples/adxl345.cxx create mode 100644 examples/javascript/adxl345.js create mode 100644 examples/python/adxl345.py create mode 100644 src/adxl345/CMakeLists.txt create mode 100644 src/adxl345/adxl345.cxx create mode 100644 src/adxl345/adxl345.h create mode 100644 src/adxl345/jsupm_adxl345.i create mode 100644 src/adxl345/pyupm_adxl345.i diff --git a/docs/images/adxl345.jpeg b/docs/images/adxl345.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..66262a8f3e538d4a8f9e2d0b0eff468f9b3d9ebd GIT binary patch literal 21440 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 ZoNW(Um5Ytsi+mRwS)u=@OZcDZ{{VF + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include "adxl345.h" + +int +main(int argc, char **argv) +{ +//! [Interesting] + int16_t *raw; + float *acc; + + // Note: Sensor only works at 3.3V on the Intel Edison with Arduino breakout + upm::Adxl345* accel = new upm::Adxl345(0); + + while(true){ + accel->update(); // Update the data + raw = accel->getRawValues(); // Read raw sensor data + acc = accel->getAcceleration(); // Read acceleration (g) + fprintf(stdout, "Current scale: 0x%2xg\n", accel->getScale()); + fprintf(stdout, "Raw: %6d %6d %6d\n", raw[0], raw[1], raw[2]); + fprintf(stdout, "AccX: %5.2f g\n", acc[0]); + fprintf(stdout, "AccY: %5.2f g\n", acc[1]); + fprintf(stdout, "AccZ: %5.2f g\n", acc[2]); + sleep(1); + } +//! [Interesting] + return 0; +} diff --git a/examples/javascript/adxl345.js b/examples/javascript/adxl345.js new file mode 100644 index 00000000..d03d1f43 --- /dev/null +++ b/examples/javascript/adxl345.js @@ -0,0 +1,41 @@ +/* +* Author: Mihai Tudor Panu +* Copyright (c) 2015 Intel Corporation. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +// Load accelerometer +var adxl345 = require('jsupm_adxl345'); + +// Instantiate on I2C bus +var adxl = new adxl345.Adxl345(0); + +setInterval(function() +{ + adxl.update(); // Update the data + var raw = adxl.getRawValues(); // Read raw sensor data + var force = adxl.getAcceleration(); // Read acceleration force (g) + var rawvalues = raw.getitem(0) + " " + raw.getitem(1) + " " + raw.getitem(2); + console.log("Raw Values: " + rawvalues); + console.log("ForceX: " + force.getitem(0).toFixed(2) + " g"); + console.log("ForceY: " + force.getitem(1).toFixed(2) + " g"); + console.log("ForceZ: " + force.getitem(2).toFixed(2) + " g"); +}, 1000); diff --git a/examples/python/adxl345.py b/examples/python/adxl345.py new file mode 100644 index 00000000..d19110ad --- /dev/null +++ b/examples/python/adxl345.py @@ -0,0 +1,41 @@ +# Author: Mihai Tudor Panu +# Copyright (c) 2014 Intel Corporation. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +from time import sleep +import pyupm_adxl345 as adxl345 + +# Create an I2C accelerometer object +adxl = adxl345.Adxl345(0) + +# Loop indefinitely +while True: + + adxl.update() # Update the data + raw = adxl.getRawValues() # Read raw sensor data + force = adxl.getAcceleration() # Read acceleration force (g) + print "Raw: %6d %6d %6d" % (raw[0], raw[1], raw[2]) + print "ForceX: %5.2f g" % (force[0]) + print "ForceY: %5.2f g" % (force[1]) + print "ForceZ: %5.2f g\n" % (force[2]) + + # Sleep for 1 s + sleep(1) diff --git a/src/adxl345/CMakeLists.txt b/src/adxl345/CMakeLists.txt new file mode 100644 index 00000000..9f192281 --- /dev/null +++ b/src/adxl345/CMakeLists.txt @@ -0,0 +1,5 @@ +set (libname "adxl345") +set (libdescription "libupm Digital Accelerometer") +set (module_src ${libname}.cxx) +set (module_h ${libname}.h) +upm_module_init() diff --git a/src/adxl345/adxl345.cxx b/src/adxl345/adxl345.cxx new file mode 100644 index 00000000..4ebddcae --- /dev/null +++ b/src/adxl345/adxl345.cxx @@ -0,0 +1,164 @@ +/* + * Author: Mihai Tudor Panu + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include "math.h" +#include "adxl345.h" + +#define READ_BUFFER_LENGTH 6 + +//address and id +#define ADXL345_I2C_ADDR 0x53 +#define ADXL345_ID 0x00 + +//control registers +#define ADXL345_OFSX 0x1E +#define ADXL345_OFSY 0x1F +#define ADXL345_OFSZ 0x20 +#define ADXL345_TAP_THRESH 0x1D +#define ADXL345_TAP_DUR 0x21 +#define ADXL345_TAP_LATENCY 0x22 +#define ADXL345_ACT_THRESH 0x24 +#define ADXL345_INACT_THRESH 0x25 +#define ADXL345_INACT_TIME 0x26 +#define ADXL345_INACT_ACT_CTL 0x27 +#define ADXL345_FALL_THRESH 0x28 +#define ADXL345_FALL_TIME 0x29 +#define ADXL345_TAP_AXES 0x2A +#define ADXL345_ACT_TAP_STATUS 0x2B + +//interrupt registers +#define ADXL345_INT_ENABLE 0x2E +#define ADXL345_INT_MAP 0x2F +#define ADXL345_INT_SOURCE 0x30 + +//data registers (read only) +#define ADXL345_XOUT_L 0x32 +#define ADXL345_XOUT_H 0x33 +#define ADXL345_YOUT_L 0x34 +#define ADXL345_YOUT_H 0x35 +#define ADXL345_ZOUT_L 0x36 +#define ADXL345_ZOUT_H 0x37 +#define DATA_REG_SIZE 6 + +//data and power management +#define ADXL345_BW_RATE 0x2C +#define ADXL345_POWER_CTL 0x2D +#define ADXL345_DATA_FORMAT 0x31 +#define ADXL345_FIFO_CTL 0x38 +#define ADXL345_FIFO_STATUS 0x39 + +//useful values +#define ADXL345_POWER_ON 0x08 +#define ADXL345_AUTO_SLP 0x30 +#define ADXL345_STANDBY 0x00 + +//scales and resolution +#define ADXL345_FULL_RES 0x08 +#define ADXL345_10BIT 0x00 +#define ADXL345_2G 0x00 +#define ADXL345_4G 0x01 +#define ADXL345_8G 0x02 +#define ADXL345_16G 0x03 + +using namespace upm; + +Adxl345::Adxl345(int bus) +{ + //init bus and reset chip + m_i2c = mraa_i2c_init(bus); + + mraa_i2c_address(m_i2c, ADXL345_I2C_ADDR); + m_buffer[0] = ADXL345_POWER_CTL; + m_buffer[1] = ADXL345_POWER_ON; + mraa_i2c_write(m_i2c, m_buffer, 2); + + mraa_i2c_address(m_i2c, ADXL345_I2C_ADDR); + m_buffer[0] = ADXL345_DATA_FORMAT; + m_buffer[1] = ADXL345_16G | ADXL345_FULL_RES; + mraa_i2c_write(m_i2c, m_buffer, 2); + + //2.5V sensitivity is 256 LSB/g = 0.00390625 g/bit + //3.3V x and y sensitivity is 265 LSB/g = 0.003773584 g/bit, z is the same + + m_offsets[0] = 0.003773584; + m_offsets[1] = 0.003773584; + m_offsets[2] = 0.00390625; + + Adxl345::update(); +} + +Adxl345::~Adxl345() +{ + mraa_i2c_stop(m_i2c); +} + +float* +Adxl345::getAcceleration() +{ + for(int i = 0; i < 3; i++){ + m_accel[i] = m_rawaccel[i] * m_offsets[i]; + } + return &m_accel[0]; +} + +int16_t* +Adxl345::getRawValues() +{ + return &m_rawaccel[0]; +} + +uint8_t +Adxl345::getScale(){ + + uint8_t result; + + mraa_i2c_address(m_i2c, ADXL345_I2C_ADDR); + mraa_i2c_write_byte(m_i2c, ADXL345_DATA_FORMAT); + + mraa_i2c_address(m_i2c, ADXL345_I2C_ADDR); + result = mraa_i2c_read_byte(m_i2c); + + return pow(2, (result & 0x03) + 1); +} + +mraa_result_t +Adxl345::update(void) +{ + mraa_i2c_address(m_i2c, ADXL345_I2C_ADDR); + mraa_i2c_write_byte(m_i2c, ADXL345_XOUT_L); + + mraa_i2c_address(m_i2c, ADXL345_I2C_ADDR); + mraa_i2c_read(m_i2c, m_buffer, DATA_REG_SIZE); + + // x + m_rawaccel[0] = ((m_buffer[1] << 8 ) | m_buffer[0]); + // y + m_rawaccel[1] = ((m_buffer[3] << 8 ) | m_buffer[2]); + // z + m_rawaccel[2] = ((m_buffer[5] << 8 ) | m_buffer[4]); + + return MRAA_SUCCESS; +} diff --git a/src/adxl345/adxl345.h b/src/adxl345/adxl345.h new file mode 100644 index 00000000..6a6d60b6 --- /dev/null +++ b/src/adxl345/adxl345.h @@ -0,0 +1,99 @@ +/* + * Author: Mihai Tudor Panu + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#pragma once + +#include + +#define READ_BUFFER_LENGTH 6 + +namespace upm { + +/** + * @brief Adxl345 accelerometer library + * @defgroup adxl345 libupm-adxl345 + */ + +/** + * @brief C++ API for Adxl345 (3-axis digital accelerometer) + * + * The Adxl345 is a 3-axis digital accelerometer. + * (http://www.seeedstudio.com/wiki/images/2/2c/ADXL345_datasheet.pdf) + * The sensor has configurable resolutions for measuring ±2g, ±4g, ±8g or ±16g. + * Note that the sensor it is incompatible and will not be detected on the I2C bus + * by the Intel Edison using the Arduino breakout board at 5V (3V3 will work fine). + * + * @ingroup adxl345 i2c + * @snippet adxl345.cxx Interesting + * @image html adxl345.jpeg + */ +class Adxl345 { +public: + /** + * Creates an Adxl345 object + * + * @param bus number of used i2c bus + */ + Adxl345(int bus); + + /** + * Adxl345 object destructor + */ + ~Adxl345(); + + /** + * Returns a pointer to a float[3] that contains acceleration (g) forces + * + * @return float* to a float[3] + */ + float* getAcceleration(); + + /** + * Returns a pointer to an int[3] that contains the raw register values for X, Y and Z + * + * @return int* to an int[3] + */ + int16_t* getRawValues(); + + /** + * Returns the scale the accelerometer is currently set up to: 2, 4, 8 or 16 + * + * @return uint with current scale value + */ + uint8_t getScale(); + + /** + * Updates the acceleration values from i2c bus + * + * @return 0 for success + */ + mraa_result_t update(); +private: + float m_accel[3]; + float m_offsets[3]; + int16_t m_rawaccel[3]; + uint8_t m_buffer[READ_BUFFER_LENGTH]; + mraa_i2c_context m_i2c; +}; + +} diff --git a/src/adxl345/jsupm_adxl345.i b/src/adxl345/jsupm_adxl345.i new file mode 100644 index 00000000..6f72b795 --- /dev/null +++ b/src/adxl345/jsupm_adxl345.i @@ -0,0 +1,20 @@ +%module jsupm_adxl345 +%include "../upm.i" +%include "../carrays_int16_t.i" +%include "../carrays_float.i" + +%{ + #include "adxl345.h" +%} + +%typemap(out) int16_t * { + $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int16Array, 0 | 0 ); +} + +%typemap(out) float * { + $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_floatArray, 0 | 0 ); +} + +%include "adxl345.h" + +%include diff --git a/src/adxl345/pyupm_adxl345.i b/src/adxl345/pyupm_adxl345.i new file mode 100644 index 00000000..033a8d30 --- /dev/null +++ b/src/adxl345/pyupm_adxl345.i @@ -0,0 +1,23 @@ +%module pyupm_adxl345 +%include "../upm.i" +%include "../carrays_int16_t.i" +%include "../carrays_float.i" + +%typemap(out) int16_t * { + $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int16Array, 0 | 0 ); +} + +%typemap(out) float * { + $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_floatArray, 0 | 0 ); +} + +%feature("autodoc", "3"); + +#ifdef DOXYGEN +%include "adxl345_doc.i" +#endif + +%include "adxl345.h" +%{ + #include "adxl345.h" +%}