mirror of
				https://github.com/eclipse/upm.git
				synced 2025-11-04 00:54:21 +03:00 
			
		
		
		
	ta12200: Initial implementation; Grove Electricity uses this sensor
[renamed from] groveelectricity: Initial implementation This module adds support for the Grove Electricity sensor. Signed-off-by: Jon Trulson <jtrulson@ics.com> Signed-off-by: Zion Orent <zorent@ics.com> Signed-off-by: Sarah Knepper <sarah.knepper@intel.com>
This commit is contained in:
		
				
					committed by
					
						
						Sarah Knepper
					
				
			
			
				
	
			
			
			
						parent
						
							ed15b1042d
						
					
				
				
					commit
					4333869b7b
				
			@@ -59,6 +59,7 @@ add_executable (a110x-example a110x.cxx)
 | 
			
		||||
add_executable (gp2y0a21yk-example gp2y0a21yk.cxx)
 | 
			
		||||
add_executable (grovemoisture-example grovemoisture.cxx)
 | 
			
		||||
add_executable (groveehr-example groveehr.cxx)
 | 
			
		||||
add_executable (ta12200-example ta12200.cxx)
 | 
			
		||||
 | 
			
		||||
include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l)
 | 
			
		||||
include_directories (${PROJECT_SOURCE_DIR}/src/grove)
 | 
			
		||||
@@ -105,6 +106,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/a110x)
 | 
			
		||||
include_directories (${PROJECT_SOURCE_DIR}/src/gp2y0a21yk)
 | 
			
		||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovemoisture)
 | 
			
		||||
include_directories (${PROJECT_SOURCE_DIR}/src/groveehr)
 | 
			
		||||
include_directories (${PROJECT_SOURCE_DIR}/src/ta12200)
 | 
			
		||||
 | 
			
		||||
target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
@@ -167,3 +169,4 @@ target_link_libraries (a110x-example a110x ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
target_link_libraries (gp2y0a21yk-example gp2y0a21yk ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
target_link_libraries (grovemoisture-example grovemoisture ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
target_link_libraries (groveehr-example groveehr ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
target_link_libraries (ta12200-example ta12200 ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								examples/javascript/ta12200.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								examples/javascript/ta12200.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
/*jslint node:true, vars:true, bitwise:true, unparam:true */
 | 
			
		||||
/*jshint unused:true */
 | 
			
		||||
/*global */
 | 
			
		||||
/*
 | 
			
		||||
* Author: Zion Orent <zorent@ics.com>
 | 
			
		||||
* 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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
var electricitySensor = require('jsupm_ta12200');
 | 
			
		||||
// Instantiate a TA12-200 sensor on analog pin A0
 | 
			
		||||
var myElectricitySensor = new electricitySensor.TA12200(0);
 | 
			
		||||
 | 
			
		||||
function getElectricityInfo()
 | 
			
		||||
{
 | 
			
		||||
	var maxVal = myElectricitySensor.highestValue();
 | 
			
		||||
	var current = myElectricitySensor.milliAmps(maxVal);
 | 
			
		||||
 | 
			
		||||
	console.log("Max ADC Value: " + maxVal + ", current: " + current + "mA");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
setInterval(getElectricityInfo, 100);
 | 
			
		||||
 | 
			
		||||
// Print message when exiting
 | 
			
		||||
process.on('SIGINT', function()
 | 
			
		||||
{
 | 
			
		||||
	console.log("Exiting...");
 | 
			
		||||
	process.exit(0);
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										65
									
								
								examples/ta12200.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								examples/ta12200.cxx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Author: Jon Trulson <jtrulson@ics.com>
 | 
			
		||||
 * 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 <unistd.h>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include "ta12200.h"
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int shouldRun = true;
 | 
			
		||||
 | 
			
		||||
void sig_handler(int signo)
 | 
			
		||||
{
 | 
			
		||||
  if (signo == SIGINT)
 | 
			
		||||
    shouldRun = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  signal(SIGINT, sig_handler);
 | 
			
		||||
 | 
			
		||||
//! [Interesting]
 | 
			
		||||
  // Instantiate a TA12-200 sensor on analog pin A0
 | 
			
		||||
  upm::TA12200* electricity = new upm::TA12200(0);
 | 
			
		||||
  
 | 
			
		||||
  while (shouldRun)
 | 
			
		||||
    {
 | 
			
		||||
      unsigned int maxVal = electricity->highestValue();
 | 
			
		||||
      float current = electricity->milliAmps(maxVal);
 | 
			
		||||
 | 
			
		||||
      cout << "Max ADC Value: " << maxVal << ", current: " << current
 | 
			
		||||
           << "mA" << endl;
 | 
			
		||||
      usleep(100000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
//! [Interesting]
 | 
			
		||||
 | 
			
		||||
  cout << "Exiting..." << endl;
 | 
			
		||||
 | 
			
		||||
  delete electricity;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								src/ta12200/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/ta12200/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
set (libname "ta12200")
 | 
			
		||||
set (libdescription "upm ta12200 current transformer module")
 | 
			
		||||
set (module_src ${libname}.cxx)
 | 
			
		||||
set (module_h ${libname}.h)
 | 
			
		||||
upm_module_init()
 | 
			
		||||
							
								
								
									
										8
									
								
								src/ta12200/jsupm_ta12200.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/ta12200/jsupm_ta12200.i
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
%module jsupm_ta12200
 | 
			
		||||
%include "../upm.i"
 | 
			
		||||
 | 
			
		||||
%{
 | 
			
		||||
    #include "ta12200.h"
 | 
			
		||||
%}
 | 
			
		||||
 | 
			
		||||
%include "ta12200.h"
 | 
			
		||||
							
								
								
									
										9
									
								
								src/ta12200/pyupm_ta12200.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/ta12200/pyupm_ta12200.i
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
%module pyupm_ta12200
 | 
			
		||||
%include "../upm.i"
 | 
			
		||||
 | 
			
		||||
%feature("autodoc", "3");
 | 
			
		||||
 | 
			
		||||
%include "ta12200.h"
 | 
			
		||||
%{
 | 
			
		||||
    #include "ta12200.h"
 | 
			
		||||
%}
 | 
			
		||||
							
								
								
									
										112
									
								
								src/ta12200/ta12200.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								src/ta12200/ta12200.cxx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Author: Jon Trulson <jtrulson@ics.com>
 | 
			
		||||
 * 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 <iostream>
 | 
			
		||||
 | 
			
		||||
#include "ta12200.h"
 | 
			
		||||
 | 
			
		||||
using namespace upm;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
TA12200::TA12200(int pin)
 | 
			
		||||
{
 | 
			
		||||
  initClock();
 | 
			
		||||
 | 
			
		||||
  if ( !(m_aio = mraa_aio_init(pin)) )
 | 
			
		||||
    {
 | 
			
		||||
      cerr << __FUNCTION__ << ": mraa_aio_init() failed" << endl;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TA12200::~TA12200()
 | 
			
		||||
{
 | 
			
		||||
  mraa_aio_close(m_aio);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TA12200::initClock()
 | 
			
		||||
{
 | 
			
		||||
  gettimeofday(&m_startTime, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t TA12200::getMillis()
 | 
			
		||||
{
 | 
			
		||||
  struct timeval elapsed, now;
 | 
			
		||||
  uint32_t elapse;
 | 
			
		||||
 | 
			
		||||
  // get current time
 | 
			
		||||
  gettimeofday(&now, NULL);
 | 
			
		||||
 | 
			
		||||
  // compute the delta since m_startTime
 | 
			
		||||
  if( (elapsed.tv_usec = now.tv_usec - m_startTime.tv_usec) < 0 ) 
 | 
			
		||||
    {
 | 
			
		||||
      elapsed.tv_usec += 1000000;
 | 
			
		||||
      elapsed.tv_sec = now.tv_sec - m_startTime.tv_sec - 1;
 | 
			
		||||
    } 
 | 
			
		||||
  else 
 | 
			
		||||
    {
 | 
			
		||||
      elapsed.tv_sec = now.tv_sec - m_startTime.tv_sec;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  elapse = (uint32_t)((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));
 | 
			
		||||
 | 
			
		||||
  // never return 0
 | 
			
		||||
  if (elapse == 0)
 | 
			
		||||
    elapse = 1;
 | 
			
		||||
 | 
			
		||||
  return elapse;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned int TA12200::highestValue()
 | 
			
		||||
{
 | 
			
		||||
  unsigned int hiVal = 0;
 | 
			
		||||
  unsigned int val;
 | 
			
		||||
  uint32_t start = getMillis();
 | 
			
		||||
 | 
			
		||||
  // 1 second
 | 
			
		||||
  while (getMillis() < (start + 1000))
 | 
			
		||||
    {
 | 
			
		||||
      val = mraa_aio_read(m_aio);
 | 
			
		||||
      if (val > hiVal)
 | 
			
		||||
        hiVal = val;
 | 
			
		||||
    }
 | 
			
		||||
        
 | 
			
		||||
  return hiVal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float TA12200::milliAmps(unsigned int val, int res)
 | 
			
		||||
{
 | 
			
		||||
  float ampCurrent;
 | 
			
		||||
  float effectiveVal;
 | 
			
		||||
 | 
			
		||||
  // From grove wiki page:
 | 
			
		||||
  // minimum_current=1/1024*5/800*2000000/1.414=8.6(mA) 
 | 
			
		||||
  // Only for sinusoidal alternating current
 | 
			
		||||
  //ampCurrent = float(val) / float(res) * 5.0 / 800.0 * 2000000.0;
 | 
			
		||||
  ampCurrent = float(val) / float(res) * 12500.0;
 | 
			
		||||
  effectiveVal = ampCurrent/1.414;
 | 
			
		||||
  return (effectiveVal);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										99
									
								
								src/ta12200/ta12200.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								src/ta12200/ta12200.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Author: Jon Trulson <jtrulson@ics.com>
 | 
			
		||||
 * 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 <string>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <mraa/aio.h>
 | 
			
		||||
 | 
			
		||||
// default ADC resolution. 
 | 
			
		||||
#define TA12200_ADC_RES 1024
 | 
			
		||||
 | 
			
		||||
namespace upm {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * @brief C++ API for the TA12-200 current transformer
 | 
			
		||||
   *
 | 
			
		||||
   * UPM module for the TA12-200 current transformer, which is found,
 | 
			
		||||
   * for instance, in the Grove Electricity Sensor. 
 | 
			
		||||
   * This module can measure AC current moving through a wire at up 
 | 
			
		||||
   * to 5A.
 | 
			
		||||
   *
 | 
			
		||||
   * @ingroup analog
 | 
			
		||||
   * @snippet ta12200.cxx Interesting
 | 
			
		||||
   */
 | 
			
		||||
  class TA12200 {
 | 
			
		||||
  public:
 | 
			
		||||
    /**
 | 
			
		||||
     * TA12200 sensor constructor
 | 
			
		||||
     *
 | 
			
		||||
     * @param pin analog pin to use
 | 
			
		||||
     */
 | 
			
		||||
    TA12200(int pin);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * TA12200 Destructor
 | 
			
		||||
     */
 | 
			
		||||
    ~TA12200();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return the number of milliseconds elapsed since initClock()
 | 
			
		||||
     * was last called.
 | 
			
		||||
     *
 | 
			
		||||
     * @return elapsed milliseconds
 | 
			
		||||
     */
 | 
			
		||||
    uint32_t getMillis();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reset the Clock
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    void initClock();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the conversion value from the sensor
 | 
			
		||||
     *
 | 
			
		||||
     * @return the highest value obtained over 1 second of measuring
 | 
			
		||||
     */
 | 
			
		||||
    unsigned int highestValue();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Compute the measured voltage
 | 
			
		||||
     *
 | 
			
		||||
     * @param val value measured by highestValue()
 | 
			
		||||
     * @param res ADC resolution
 | 
			
		||||
     *
 | 
			
		||||
     * @return the measured current in milliamps
 | 
			
		||||
     */
 | 
			
		||||
    float milliAmps(unsigned int val, int res=TA12200_ADC_RES);
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
    struct timeval m_startTime;
 | 
			
		||||
    mraa_aio_context m_aio;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user