All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.epfl.gsn.wrappers.tinyos.Convert Maven / Gradle / Ivy

The newest version!
/**
* Global Sensor Networks (GSN) Source Code
* Copyright (c) 2006-2016, Ecole Polytechnique Federale de Lausanne (EPFL)
* 
* This file is part of GSN.
* 
* GSN is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* 
* GSN is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with GSN.  If not, see .
* 
* File: src/ch/epfl/gsn/wrappers/tinyos/Convert.java
*
* @author Ali Salehi
*
*/

package ch.epfl.gsn.wrappers.tinyos;

// Data Converter for Mica2 Sensors.
public class Convert {
   
   // Here are the constant used, maybe you will want to put theme elsewere
   /** *********************************************************************************** */
   static final int    R1     = 10000;
   
   static final double a      = 0.001307050;
   
   static final double b      = 0.000214381;
   
   static final double c      = 0.000000093;
   
   static final int    ADC_FS = 1023;
   
   // Voltage reference for mica2
   static final double RV     = 1.223;
   
   // Calibration for Accalometer
   int                 minus_one_calibrationX;
   
   int                 plus_one_calibrationX;
   
   int                 minus_one_calibrationY;
   
   int                 plus_one_calibrationY;
   
   // The main method call all the converting method --> can show you how
   // it
   // fonctions
   // You may want to use the readabkeValue() method to represent your
   // values
   /** *********************************************************************************** */
   public static void main ( String args[] ) {
      
      Convert cv = new Convert( );
      // System.out.println("Value : "+cv.calculateTempC(500));
      // adc Voltage = 473
      System.out.println( "\nHere is the voltage : " + cv.convertVoltage( 473 ) + " mV\n" );
      
      // Light
      double light = cv.convertLight( 913 , cv.convertVoltage( 473 ) );
      System.out.println( "Here is the light value : " + cv.readableValue( light ) + "\n" );
      
      // Temp
      double kelvinTemp = cv.convertTemprature( 508 );
      System.out.println( "The temp value is : " + cv.readableValue( kelvinTemp ) + " Kelvin degres" );
      System.out.println( "The temp value is : " + cv.readableValue( ( float ) ( kelvinTemp - 273.15 ) ) + " Celsus degres\n" );
      
      // Magnometer magX
      double magX = cv.convertMag( 804 );
      System.out.println( "Here is the mag X value : " + cv.readableValue( magX ) + " mGauss" );
      
      // Magnometer magY
      double magY = cv.convertMag( 805 );
      System.out.println( "Here is the mag Y value : " + cv.readableValue( magY ) + " mGauss\n" );
      
      // Calibrate Accel
      cv.initAccel( 550 , 492 );
      
      // AccelX converting
      double accelX = cv.convertAccelX( 550 );
      System.out.println( "Here is the accel X value : " + cv.readableValue( accelX ) );
      
      // AccelY converting
      double accelY = cv.convertAccelY( 492 );
      System.out.println( "Here is the accel Y value : " + cv.readableValue( accelY ) + "\n" );
      
      //
      
   }
   
   // Tempreture converting
   /** *********************************************************************************** */
   public static double convertTemprature ( double adc ) {
      /**
       * The if(adc>1000) adc/=10; will be applied on tinyos packets generated
       * by tinynode motes.
       */
      if ( adc > 1000 ) adc /= 10;
      double rth = ( R1 * ( ADC_FS - adc ) ) / adc;
      // double rth = ( R1 * ( ADC_FS - adc ) ) / adc ;
      double lnRth = Math.log( rth );
      double x = a + ( b * lnRth );
      double y = c * Math.pow( lnRth , 3 );
      double output = ( ( 1 / ( x + y ) ) - 273.15 );
      if ( Double.isNaN( output ) ) return -1;
      return output;
   }
   
   // Light converting
   /** *********************************************************************************** */
   
   public static double convertLight ( int adcData , double batteryInVoltage ) {
      return ( adcData * batteryInVoltage ) / ADC_FS;
   }
   
   // Voltage converting
   /** *********************************************************************************** */
   public static double convertVoltage ( int data ) {
      // returns the voltage value in volte
      double x = ( RV * ADC_FS );
      double y = 1252352;
      return ( float ) ( x / data ); // Volt
      // return ( float ) ( y / data ) ; // milliVolt
   }
   
   // Change the values to a reabable format with only 2 digits after the
   // dot
   /** *********************************************************************************** */
   public static double readableValue ( double x ) {
      return x;
      // return ( float ) (Math.ceil( x * 100 )/100) ;
   }
   
   // Magnometer mag converter
   /** ********************************************************************************** */
   public static double convertMag ( int adcData ) {
      return ( adcData / ( 1.023 * 2.262 * 3.2 ) );
   }
   
   /*
    * - First initialize the calibration values (with the non moving mote) -
    * After you can use the converting methods
    */

   // Accel calibration : initializes the class fiels for calibration
   /** ********************************************************************************** */
   public void initAccel ( int accelX_adcData , int accelY_adcData ) {
      minus_one_calibrationX = accelX_adcData + 60;
      plus_one_calibrationX = accelX_adcData - 60;
      minus_one_calibrationY = accelY_adcData + 60;
      plus_one_calibrationY = accelY_adcData - 60;
   }
   
   // AccelX converting
   /** *******************************************************************490***615******* */
   public float convertAccelX ( int adcData ) {
      double zero_value = ( plus_one_calibrationX - minus_one_calibrationX ) / 2;
      double reading = ( zero_value - ( plus_one_calibrationX - adcData ) ) / zero_value;
      return ( float ) reading;
   }
   
   // AccalY converting
   /** ********************************************************************432****552***** */
   public double convertAccelY ( int adcData ) {
      double zero_value = ( plus_one_calibrationY - minus_one_calibrationY ) / 2;
      double reading = ( zero_value - ( plus_one_calibrationY - adcData ) ) / zero_value;
      return reading;
      
   }
   
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy