mirror of
				https://github.com/eclipse/upm.git
				synced 2025-10-30 06:34:58 +03:00 
			
		
		
		
	micsv89: Initial support for MICSV89
Signed off by: Marc Graham <marc@m2ag.net> Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
		 Marc Graham
					Marc Graham
				
			
				
					committed by
					
						 Mihai Tudor Panu
						Mihai Tudor Panu
					
				
			
			
				
	
			
			
			 Mihai Tudor Panu
						Mihai Tudor Panu
					
				
			
						parent
						
							1040b4e51f
						
					
				
				
					commit
					bf856c5fca
				
			
							
								
								
									
										
											BIN
										
									
								
								docs/images/micsv89.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/images/micsv89.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 906 KiB | 
| @@ -146,6 +146,7 @@ add_executable (wheelencoder-example wheelencoder.cxx) | |||||||
| add_executable (sm130-example sm130.cxx) | add_executable (sm130-example sm130.cxx) | ||||||
| add_executable (grovegprs-example grovegprs.cxx) | add_executable (grovegprs-example grovegprs.cxx) | ||||||
| add_executable (lm35-example lm35.cxx) | add_executable (lm35-example lm35.cxx) | ||||||
|  | add_executable (micsv89-example micsv89.cxx) | ||||||
|  |  | ||||||
| include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) | include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) | ||||||
| include_directories (${PROJECT_SOURCE_DIR}/src/grove) | include_directories (${PROJECT_SOURCE_DIR}/src/grove) | ||||||
| @@ -257,6 +258,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/wheelencoder) | |||||||
| include_directories (${PROJECT_SOURCE_DIR}/src/sm130) | include_directories (${PROJECT_SOURCE_DIR}/src/sm130) | ||||||
| include_directories (${PROJECT_SOURCE_DIR}/src/grovegprs) | include_directories (${PROJECT_SOURCE_DIR}/src/grovegprs) | ||||||
| include_directories (${PROJECT_SOURCE_DIR}/src/lm35) | include_directories (${PROJECT_SOURCE_DIR}/src/lm35) | ||||||
|  | include_directories (${PROJECT_SOURCE_DIR}/src/micsv89) | ||||||
|  |  | ||||||
| target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT}) | target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT}) | ||||||
| target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT}) | target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT}) | ||||||
| @@ -404,3 +406,4 @@ target_link_libraries (wheelencoder-example wheelencoder ${CMAKE_THREAD_LIBS_INI | |||||||
| target_link_libraries (sm130-example sm130 ${CMAKE_THREAD_LIBS_INIT}) | target_link_libraries (sm130-example sm130 ${CMAKE_THREAD_LIBS_INIT}) | ||||||
| target_link_libraries (grovegprs-example grovegprs ${CMAKE_THREAD_LIBS_INIT}) | target_link_libraries (grovegprs-example grovegprs ${CMAKE_THREAD_LIBS_INIT}) | ||||||
| target_link_libraries (lm35-example lm35 ${CMAKE_THREAD_LIBS_INIT}) | target_link_libraries (lm35-example lm35 ${CMAKE_THREAD_LIBS_INIT}) | ||||||
|  | target_link_libraries (micsv89-example micsv89 ${CMAKE_THREAD_LIBS_INIT}) | ||||||
|   | |||||||
							
								
								
									
										78
									
								
								examples/c++/micsv89.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								examples/c++/micsv89.cxx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | /* | ||||||
|  |  * Author: Marc Graham <marc@m2ag.net> | ||||||
|  |  * 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "mraa.hpp" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include <iostream> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include "micsv89.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * An example for using the MICSV89 sensor library. | ||||||
|  |  * The MICSV89 comes in 4 variants, PWM and I2c | ||||||
|  |  * in 3.3 volts and 5 volts. This library only implements | ||||||
|  |  * the I2c version of the device. | ||||||
|  |  * | ||||||
|  |  * Device output is not valid until a warm up of 15 minutes | ||||||
|  |  * of operation. | ||||||
|  |  * | ||||||
|  |  * Additional linker flags: none | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | using namespace std; | ||||||
|  |  | ||||||
|  | upm::MICSV89 *sensor = NULL; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | int main() | ||||||
|  | { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	sensor = new upm::MICSV89(6); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	while(true) | ||||||
|  | 	{ | ||||||
|  | 		sensor->start(); | ||||||
|  | 		while(!sensor->valid()); | ||||||
|  | 		cout << "co2: " << sensor->co2equ() << endl; | ||||||
|  | 		cout << "short: " << sensor->vocshort() << endl; | ||||||
|  | 		cout << "tvoc: " << sensor->tvoc() << endl; | ||||||
|  | 		cout << "resistor: " << sensor->resistor() << endl; | ||||||
|  | 		cout << "****************************" << endl; | ||||||
|  | 		sleep(5); | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	delete sensor; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	return MRAA_SUCCESS; | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								examples/javascript/micsv89.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								examples/javascript/micsv89.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | // Drive the Grive RGB LCD (a JHD1313m1) | ||||||
|  | // | ||||||
|  | // The way to drive the LCD directly from | ||||||
|  | // Javascript code using the i2c interface directly | ||||||
|  | // This approach is useful for learning about using | ||||||
|  | // the i2c bus. The i2c file is an implementation | ||||||
|  | // in Javascript for some of the common LCD functions | ||||||
|  |  | ||||||
|  | // configure jshint | ||||||
|  | /*jslint node:true, vars:true, bitwise:true, unparam:true */ | ||||||
|  | /*jshint unused:true */ | ||||||
|  |  | ||||||
|  | var upmMICSV89 = require("jsupm_micsv89");  | ||||||
|  |  | ||||||
|  | var mics = new upmMICSV89.MICSV89(6);  | ||||||
|  |  | ||||||
|  | while(1) | ||||||
|  | { | ||||||
|  |     mics.start();  | ||||||
|  |     while(!mics.valid()); | ||||||
|  |     console.log("co2: " + mics.co2equ());  | ||||||
|  |     console.log("short: " + mics.vocshort());  | ||||||
|  |     console.log("tvoc: " + mics.tvoc());    | ||||||
|  |     console.log("resistor: " + mics.resistor());  | ||||||
|  |     console.log("***********************"); | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								src/micsv89/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/micsv89/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | set (libname "micsv89") | ||||||
|  | set (libdescription "upm micsv89 environmental sensor module") | ||||||
|  | set (module_src ${libname}.cxx) | ||||||
|  | set (module_h ${libname}.h) | ||||||
|  | upm_module_init() | ||||||
							
								
								
									
										8
									
								
								src/micsv89/javaupm_micsv89.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/micsv89/javaupm_micsv89.i
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | %module javaupm_micsv89 | ||||||
|  | %include "../upm.i" | ||||||
|  |  | ||||||
|  | %{ | ||||||
|  |     #include "micsv89.h" | ||||||
|  | %} | ||||||
|  |  | ||||||
|  | %include "micsv89.h" | ||||||
							
								
								
									
										8
									
								
								src/micsv89/jsupm_micsv89.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/micsv89/jsupm_micsv89.i
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | %module jsupm_micsv89 | ||||||
|  | %include "../upm.i" | ||||||
|  |  | ||||||
|  | %{ | ||||||
|  |     #include "micsv89.h" | ||||||
|  | %} | ||||||
|  |  | ||||||
|  | %include "micsv89.h" | ||||||
							
								
								
									
										80
									
								
								src/micsv89/micsv89.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								src/micsv89/micsv89.cxx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | |||||||
|  | /* | ||||||
|  |  * Author: Marc Graham <marc@m2ag.net> | ||||||
|  |  * 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "micsv89.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | using namespace upm; | ||||||
|  |  | ||||||
|  | MICSV89::MICSV89 (int bus, uint8_t address) { | ||||||
|  | 	m_name = "micsv89"; | ||||||
|  | 	m_valid = false; | ||||||
|  | 	m_address = address; | ||||||
|  | 	i2c = new mraa::I2c(bus); | ||||||
|  | 	tx_buf[0] = 0x09; | ||||||
|  | 	tx_buf[1] = 0x00; | ||||||
|  | 	tx_buf[2] = 0x00; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void MICSV89::start() | ||||||
|  | { | ||||||
|  | 	m_valid = false; | ||||||
|  | 	i2c->address(m_address); | ||||||
|  | 	i2c->frequency(MRAA_I2C_STD); | ||||||
|  | 	i2c->write(tx_buf, 3); | ||||||
|  | 	sleep(1); //Give the device time to make the measurement. | ||||||
|  | 	i2c->address(m_address); | ||||||
|  | 	i2c->frequency(MRAA_I2C_STD); | ||||||
|  | 	i2c->read(rx_buf, 6); | ||||||
|  | 	m_valid = true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | float MICSV89::co2equ() | ||||||
|  | { | ||||||
|  | 	return ((rx_buf[0] - 13) * (1600/229) + 400); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int MICSV89::vocshort() | ||||||
|  | { | ||||||
|  | 	return rx_buf[1]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | float MICSV89::tvoc() | ||||||
|  | { | ||||||
|  | 	return rx_buf[2] * (1000/229); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | float MICSV89::resistor() | ||||||
|  | { | ||||||
|  | 	return 10 * (rx_buf[3] + (256 * rx_buf[4]) + (65536 * rx_buf[5])); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | MICSV89::~MICSV89 () { | ||||||
|  | 	delete i2c; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										133
									
								
								src/micsv89/micsv89.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								src/micsv89/micsv89.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | |||||||
|  | /* | ||||||
|  |  * Author: Marc Graham <marc@m2ag.net> | ||||||
|  |  * 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <iostream> | ||||||
|  | #include <string> | ||||||
|  | #include "mraa.hpp" | ||||||
|  | #include "mraa/i2c.hpp" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace upm { | ||||||
|  |   /** | ||||||
|  |    * @library gas | ||||||
|  |    * @sensor  MICS-V89 | ||||||
|  |    * @comname MICS-V89 | ||||||
|  |    * @type Environmental. VOC and CO2 | ||||||
|  |    * @man http://sgx.cdistore.com/datasheets/e2v/MiCS-VZ-86%20and%20VZ-89%20rev%204.pdf | ||||||
|  |    * @man http://www.sgxsensortech.com/content/uploads/2015/01/MICS-VZ-89-I2C-specs-rev-A.pdf | ||||||
|  |    * @con i2c | ||||||
|  |    * | ||||||
|  |    * @brief API for the MICS-VZ89 Gas Sensor | ||||||
|  |    * The MiCS-VZ-86/89 combines state-of-the-art MOS | ||||||
|  |    * sensor technology with intelligent detection algorithms | ||||||
|  |    * to monitor VOCs and CO2 equivalent variations in | ||||||
|  |    * confined spaces. | ||||||
|  |    * | ||||||
|  |    * The MICSV89 comes in 4 variants, PWM and I2c | ||||||
|  |    * in 3.3 volts and 5 volts. This library only implements | ||||||
|  |    * the I2c version of the device. | ||||||
|  |    * | ||||||
|  |    * Device output is not valid until a warm up of 15 minutes | ||||||
|  |    * of operation. | ||||||
|  |    * | ||||||
|  |    * | ||||||
|  |    * @image html micsv89.jpg  | ||||||
|  |    * @snippet micsv89.cxx Interesting | ||||||
|  |    */ | ||||||
|  |     class MICSV89 { | ||||||
|  |         public: | ||||||
|  |             /** | ||||||
|  |              * MICSV89 constructor | ||||||
|  |              * | ||||||
|  |              * @param bus i2c bus the sensor is attached to. | ||||||
|  |              * @param address. Device address. Default is 0x70. | ||||||
|  |              */ | ||||||
|  |             MICSV89 (int bus, uint8_t address = 0x70); | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * MICSV89 destructor | ||||||
|  |              */ | ||||||
|  |             ~MICSV89 (); | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * Returns the name of the sensor | ||||||
|  |              */ | ||||||
|  |             std::string name() | ||||||
|  |             { | ||||||
|  |                 return m_name; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              *	Returns the  CO2 equivalent value. | ||||||
|  |              */ | ||||||
|  |             float co2equ(); | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * Returns VOC Short value. | ||||||
|  |              */ | ||||||
|  |             int vocshort(); | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * Returns Total VOC. | ||||||
|  |              */ | ||||||
|  |             float tvoc(); | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * Returns resistor value. | ||||||
|  |              */ | ||||||
|  |             float resistor(); | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * Performs a write/read cycle. | ||||||
|  |              */ | ||||||
|  |             void start(); | ||||||
|  |  | ||||||
|  |             /** | ||||||
|  |              * Returns true if a valid write/read cycle has been completed. | ||||||
|  |              * At startup and during write/read cycle will be false. | ||||||
|  |              */ | ||||||
|  |             bool valid() | ||||||
|  |             { | ||||||
|  |             	return m_valid; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         private: | ||||||
|  |             std::string m_name; | ||||||
|  |             bool m_valid; | ||||||
|  |             uint8_t m_address; | ||||||
|  |             uint8_t rx_buf[6]; | ||||||
|  |            	uint8_t tx_buf[3]; | ||||||
|  |            	mraa::I2c* i2c; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     }; | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								src/micsv89/pyupm_micsv89.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/micsv89/pyupm_micsv89.i
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | %module pyupm_micsv89 | ||||||
|  | %include "../upm.i" | ||||||
|  |  | ||||||
|  | %feature("autodoc", "3"); | ||||||
|  |  | ||||||
|  | %include "micsv89.h" | ||||||
|  | %{ | ||||||
|  |     #include "micsv89.h" | ||||||
|  | %} | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/mlx90614/.DS_Store
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/mlx90614/.DS_Store
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user