mirror of
				https://github.com/eclipse/upm.git
				synced 2025-10-31 23:24:20 +03:00 
			
		
		
		
	enc03r: Initial implementation
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:
		 Jon Trulson
					Jon Trulson
				
			
				
					committed by
					
						 Sarah Knepper
						Sarah Knepper
					
				
			
			
				
	
			
			
			 Sarah Knepper
						Sarah Knepper
					
				
			
						parent
						
							df4706e3b1
						
					
				
				
					commit
					a1620271f2
				
			| @@ -51,6 +51,7 @@ add_executable (mpl3115a2-example mpl3115a2.cxx) | ||||
| add_executable (ldt0028-example ldt0028.cxx) | ||||
| add_executable (am2315-example am2315.cxx) | ||||
| add_executable (itg3200-example itg3200.cxx) | ||||
| add_executable (enc03r-example enc03r.cxx) | ||||
|  | ||||
| include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) | ||||
| include_directories (${PROJECT_SOURCE_DIR}/src/grove) | ||||
| @@ -90,6 +91,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/mpl3115a2) | ||||
| include_directories (${PROJECT_SOURCE_DIR}/src/ldt0028) | ||||
| include_directories (${PROJECT_SOURCE_DIR}/src/am2315) | ||||
| include_directories (${PROJECT_SOURCE_DIR}/src/itg3200) | ||||
| include_directories (${PROJECT_SOURCE_DIR}/src/enc03r) | ||||
|  | ||||
| target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT}) | ||||
| target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT}) | ||||
| @@ -144,3 +146,4 @@ target_link_libraries (mpl3115a2-example mpl3115a2 ${CMAKE_THREAD_LIBS_INIT}) | ||||
| target_link_libraries (ldt0028-example ldt0028 ${CMAKE_THREAD_LIBS_INIT}) | ||||
| target_link_libraries (am2315-example am2315 ${CMAKE_THREAD_LIBS_INIT}) | ||||
| target_link_libraries (itg3200-example itg3200 ${CMAKE_THREAD_LIBS_INIT}) | ||||
| target_link_libraries (enc03r-example enc03r ${CMAKE_THREAD_LIBS_INIT}) | ||||
|   | ||||
							
								
								
									
										79
									
								
								examples/enc03r.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								examples/enc03r.cxx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| /* | ||||
|  * 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 "enc03r.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| // analog voltage, usually 3.3 or 5.0 | ||||
| #define CALIBRATION_SAMPLES 1000 | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|  | ||||
|   // Instantiate a ENC03R on analog pin A0 | ||||
|   upm::ENC03R *gyro = new upm::ENC03R(0); | ||||
|    | ||||
|   // The first thing we need to do is calibrate the sensor. | ||||
|   cout << "Please place the sensor in a stable location, and do not" << endl; | ||||
|   cout << "move it while calibration takes place." << endl; | ||||
|   cout << "This may take a couple of minutes." << endl; | ||||
|  | ||||
|   gyro->calibrate(CALIBRATION_SAMPLES); | ||||
|   cout << "Calibration complete.  Reference value: "  | ||||
|        << gyro->calibrationValue() << endl; | ||||
|  | ||||
|   // Read the input and print both the raw value and the angular velocity, | ||||
|   // waiting 0.1 seconds between readings | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       unsigned int val = gyro->value(); | ||||
|       double av = gyro->angularVelocity(val); | ||||
|  | ||||
|       cout << "Raw value: " << val << ", "   | ||||
|            << "angular velocity: " << av << " deg/s" << endl; | ||||
|        | ||||
|       usleep(100000); | ||||
|     } | ||||
| //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|  | ||||
|   delete gyro; | ||||
|   return 0; | ||||
| } | ||||
							
								
								
									
										66
									
								
								examples/javascript/enc03r.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								examples/javascript/enc03r.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| /*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. | ||||
| */ | ||||
|  | ||||
| // Load analog gyro module | ||||
| var analogGyro = require('jsupm_enc03r'); | ||||
| // Instantiate a ENC03R on analog pin A0 | ||||
| var myGyro = new analogGyro.ENC03R(0); | ||||
|  | ||||
| var CALIBRATION_SAMPLES = 1000; | ||||
|  | ||||
| console.log("Please place the sensor in a stable location,\n" + | ||||
| 			"and do not move it while calibration takes place.\n" + | ||||
| 			"This may take a couple of minutes."); | ||||
|  | ||||
| myGyro.calibrate(CALIBRATION_SAMPLES); | ||||
| console.log("Calibration complete.  Reference value: " + | ||||
|             myGyro.calibrationValue()); | ||||
|  | ||||
| // Read the input and print both the raw value and the angular velocity, | ||||
| // waiting 0.1 seconds between readings | ||||
| setInterval(function() | ||||
| { | ||||
| 	var gyroVal = myGyro.value(); | ||||
| 	var outputStr = "Raw value: " + gyroVal + ", "  + | ||||
| 					"angular velocity: " + | ||||
| 					roundNum(myGyro.angularVelocity(gyroVal), 5) + " deg/s"; | ||||
| 	console.log(outputStr); | ||||
| }, 100); | ||||
|  | ||||
| function roundNum(num, decimalPlaces) | ||||
| { | ||||
| 	var extraNum = (1 / (Math.pow(10, decimalPlaces) * 1000)); | ||||
| 	return (Math.round((num + extraNum) * (Math.pow(10, decimalPlaces))) /  | ||||
|             Math.pow(10, decimalPlaces)); | ||||
| } | ||||
|  | ||||
| // Print message when exiting | ||||
| process.on('SIGINT', function() | ||||
| { | ||||
| 	console.log("Exiting..."); | ||||
| 	process.exit(0); | ||||
| }); | ||||
							
								
								
									
										5
									
								
								src/enc03r/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/enc03r/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| set (libname "enc03r") | ||||
| set (libdescription "upm enc03r single axis analog gyro module") | ||||
| set (module_src ${libname}.cxx) | ||||
| set (module_h ${libname}.h) | ||||
| upm_module_init() | ||||
							
								
								
									
										76
									
								
								src/enc03r/enc03r.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/enc03r/enc03r.cxx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| /* | ||||
|  * 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 "enc03r.h" | ||||
|  | ||||
| using namespace upm; | ||||
| using namespace std; | ||||
|  | ||||
| ENC03R::ENC03R(int pin, float vref) | ||||
| { | ||||
|   mraa_init(); | ||||
|  | ||||
|   if ( !(m_aio = mraa_aio_init(pin)) ) | ||||
|     { | ||||
|       cerr << __FUNCTION__ << ": mraa_aio_init() failed" << endl; | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   m_vref = vref; | ||||
|   m_calibrationValue = 0; | ||||
| } | ||||
|  | ||||
| ENC03R::~ENC03R() | ||||
| { | ||||
|   mraa_aio_close(m_aio); | ||||
| } | ||||
|  | ||||
| unsigned int ENC03R::value() | ||||
| { | ||||
|   return mraa_aio_read(m_aio); | ||||
| } | ||||
|  | ||||
| void ENC03R::calibrate(unsigned int samples) | ||||
| { | ||||
|   unsigned int val; | ||||
|   float total = 0.0; | ||||
|  | ||||
|   for (int i=0; i<samples; i++) | ||||
|     { | ||||
|       val = mraa_aio_read(m_aio); | ||||
|       total += (float)val; | ||||
|       usleep(2000); | ||||
|     } | ||||
|  | ||||
|   m_calibrationValue = total / (float)samples; | ||||
| } | ||||
|  | ||||
| double ENC03R::angularVelocity(unsigned int val) | ||||
| { | ||||
|   // from seeed studio example | ||||
|   //return (((double)(val-m_calibrationValue)*(m_vref*1000.0))/1023.0/0.67); | ||||
|   return (((double)(val-m_calibrationValue)*(m_vref*1000.0))/685.41); | ||||
| } | ||||
							
								
								
									
										100
									
								
								src/enc03r/enc03r.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/enc03r/enc03r.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| /* | ||||
|  * 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 <mraa/aio.h> | ||||
|  | ||||
| namespace upm { | ||||
|  | ||||
|   /** | ||||
|    * @brief C++ API for the ENC03R Single Axis Analog Gyro | ||||
|    * | ||||
|    * UPM module for the ENC03R Single Axis Analog Gyro. | ||||
|    * This gyroscope measures the x-axis angular velocity; that is, | ||||
|    * how fast the sensor is rotating around the x-axis. | ||||
|    * Calibration of the sensor is necessary for accurate readings. | ||||
|    * | ||||
|    * @ingroup grove analog | ||||
|    * @snippet enc03r.cxx Interesting | ||||
|    */ | ||||
|   class ENC03R { | ||||
|   public: | ||||
|  | ||||
|     /** | ||||
|      * ENC03R sensor constructor | ||||
|      * | ||||
|      * @param pin analog pin to use | ||||
|      * @param vref the voltage reference to use, default 5.0 | ||||
|      */ | ||||
|     ENC03R(int pin, float vref=5.0); | ||||
|  | ||||
|     /** | ||||
|      * ENC03R Destructor | ||||
|      */ | ||||
|     ~ENC03R(); | ||||
|  | ||||
|     /** | ||||
|      * Calibrate the sensor by determining an analog reading over many | ||||
|      * samples with no movement of the sensor.  This must be done | ||||
|      * before attempting to use the sensor. | ||||
|      * | ||||
|      * @param samples the number of samples to use for calibration | ||||
|      */ | ||||
|     void calibrate(unsigned int samples); | ||||
|      | ||||
|     /** | ||||
|      * Return the raw value of the sensor | ||||
|      * | ||||
|      * @return raw value of sensor | ||||
|      */ | ||||
|     unsigned int value(); | ||||
|  | ||||
|     /** | ||||
|      * Return the currently stored calibration value | ||||
|      * | ||||
|      * @return current calibration value | ||||
|      */ | ||||
|     float calibrationValue() { return m_calibrationValue; }; | ||||
|  | ||||
|     /** | ||||
|      * Compute angular velocity based on value and stored calibration | ||||
|      * reference. | ||||
|      * | ||||
|      * @param val the value to use to compute the angular velocity | ||||
|      * @return computed angular velocity | ||||
|      */ | ||||
|     double angularVelocity(unsigned int val); | ||||
|  | ||||
|   private: | ||||
|     // determined by calibrate(); | ||||
|     float m_calibrationValue; | ||||
|  | ||||
|     // reference voltage | ||||
|     float m_vref; | ||||
|     mraa_aio_context m_aio; | ||||
|   }; | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										8
									
								
								src/enc03r/jsupm_enc03r.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/enc03r/jsupm_enc03r.i
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| %module jsupm_enc03r | ||||
| %include "../upm.i" | ||||
|  | ||||
| %{ | ||||
|     #include "enc03r.h" | ||||
| %} | ||||
|  | ||||
| %include "enc03r.h" | ||||
							
								
								
									
										9
									
								
								src/enc03r/pyupm_enc03r.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/enc03r/pyupm_enc03r.i
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| %module pyupm_enc03r | ||||
| %include "../upm.i" | ||||
|  | ||||
| %feature("autodoc", "3"); | ||||
|  | ||||
| %include "enc03r.h" | ||||
| %{ | ||||
|     #include "enc03r.h" | ||||
| %} | ||||
		Reference in New Issue
	
	Block a user