SWI 08: Frame Class Utility

This is the basic code to create a frame with some Smart Water sensors

Required Materials

1 x Waspmote 1 x Battery 1 x Plug&Sense Ions 1 x Ion Sensor Probe 1 x Single or Double Junction Reference Probe Several Smart Water Ions Sensors

Notes

- This example can be executed in Waspmote v12 and Waspmote v15. - If you are using a Waspmote v12, you MUST use the proper sensor field definitions.

Code

/*
    ------------  [SWI_08] - Frame Class Utility  ------------

    Explanation: This is the basic code to create a frame with some
    Smart Water sensors

    Copyright (C) 2016 Libelium Comunicaciones Distribuidas S.L.
    http://www.libelium.com

    This program 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.

    This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.

    Version:           3.0
    Design:            David Gascón
    Implementation:    Luis Miguel Marti
*/

#include <smartWaterIons.h>
#include <WaspFrame.h>

// All Ion sensors can be connected in the four sockets
// In Plug&Sense SOCKETE is reserved for reference probe
//======================================================================
// Plug&Sense SOCKETS
//======================================================================
ionSensorClass calciumSensor(SOCKET_A);
ionSensorClass NO3Sensor(SOCKET_B);
ionSensorClass pHSensor(SOCKET_C);
ionSensorClass fluorideSensor(SOCKET_D);
pt1000Class tempSensor;
//======================================================================
// Calibration concentrations solutions used in the process
//======================================================================
#define point1 10.0
#define point2 100.0
#define point3 1000.0
//======================================================================
// Calibration voltage values for Calcium sensor
//======================================================================
#define point1_volt_Ca 2.163
#define point2_volt_Ca 2.296
#define point3_volt_Ca 2.425
//======================================================================
// Calibration voltage values for NO3 sensor
//======================================================================
#define point1_volt_NO3 3.080
#define point2_volt_NO3 2.900
#define point3_volt_NO3 2.671
//======================================================================
// Calibration voltage values for Fluor sensor
//======================================================================
#define point1_volt_F 3.115
#define point2_volt_F 2.834
#define point3_volt_F 2.557
//======================================================================
// Calibration values for pH sensor
//======================================================================
#define cal_point_10 1.405
#define cal_point_7  2.048
#define cal_point_4 2.687
#define cal_temperature 22.0
//======================================================================
// Define the number of calibration points
//======================================================================
#define NUM_POINTS 3

//======================================================================
const float concentrations[] = { point1, point2, point3 };
const float voltages_Ca[]    = { point1_volt_Ca, point2_volt_Ca, point3_volt_Ca};
const float voltages_NO3[]   = { point1_volt_NO3, point2_volt_NO3, point3_volt_NO3 };
const float voltages_F[]     = { point1_volt_F, point2_volt_F, point3_volt_F };
//======================================================================

void setup()
{
  // Turn ON the Smart Water Ions Board and USB
  SWIonsBoard.ON();
  USB.ON();

  USB.println(F("Frame Utility Example for Smart Water Ions"));
  USB.println(F("******************************************************"));
  USB.println(F("WARNING: This example is valid only for Waspmote v15"));
  USB.println(F("If you use a Waspmote v12, you MUST use the correct "));
  USB.println(F("sensor field definitions"));
  USB.println(F("******************************************************"));

  // Calibrate the Calcium sensor
  calciumSensor.setCalibrationPoints(voltages_Ca, concentrations, NUM_POINTS);
  // Calibrate the NO3 sensor
  NO3Sensor.setCalibrationPoints(voltages_NO3, concentrations, NUM_POINTS);
  // Calibrate the Fluoride sensor
  fluorideSensor.setCalibrationPoints(voltages_F, concentrations, NUM_POINTS);
  // Calibrate the pH sensor
  pHSensor.setpHCalibrationPoints(cal_point_10, cal_point_7, cal_point_4, cal_temperature);
}

void loop()
{
  ///////////////////////////////////////////
  // 1. Turn on the board
  ///////////////////////////////////////////

  SWIonsBoard.ON();
  delay(2000);

  ///////////////////////////////////////////
  // 2. Read sensors
  ///////////////////////////////////////////

  // Read the Calcium sensor
  float CaVolts = calciumSensor.read();
  float calciumValue = calciumSensor.calculateConcentration(CaVolts);
  delay(500);
  // Read the NO3 sensor
  float NO3Volts = NO3Sensor.read();
  float NO3Value = NO3Sensor.calculateConcentration(NO3Volts);
  delay(500);
  // Read the Fluoride sensor
  float flourVolts = fluorideSensor.read();
  float flourideValue = fluorideSensor.calculateConcentration(flourVolts);
  delay(500);
  // Read the Temperature sensor
  float tempValue = tempSensor.read();
  delay(500);
  // Read the pH sensor
  float pHVolts = pHSensor.read();
  float pHValue = pHSensor.pHConversion(pHVolts, tempValue);
  delay(500);

  ///////////////////////////////////////////
  // 3. Turn off the sensors
  ///////////////////////////////////////////

  SWIonsBoard.OFF();

  ///////////////////////////////////////////
  // 4. Create ASCII frame
  ///////////////////////////////////////////

  // Create new frame (ASCII)
  frame.createFrame(ASCII);

  // Add temperature
  frame.addSensor(SENSOR_IONS_WT, tempValue);
  // Add PH
  frame.addSensor(SENSOR_IONS_CA, calciumValue);
  // Add ORP value
  frame.addSensor(SENSOR_IONS_NO3, NO3Value);
  // Add DI value
  frame.addSensor(SENSOR_IONS_FL, flourideValue);
  // Add DO value
  frame.addSensor(SENSOR_IONS_PH, pHValue);

  // Show the frame
  frame.showFrame();

  //wait 2 seconds
  delay(2000);
}

Output

H#
Frame Utility Example for Smart Water Ions
===============================
Current ASCII Frame:
Length: 97
Frame Type: 134
frame (HEX): 3C3D3E8605233431313837303633443933373432463423574946495F5354415449435F303623302357543A32332E35302353574943413A302E343333235357494E4F3A302E32333423535749464C3A302E3334312353574950483A302E31323323
frame (STR): <=>�#41187063D93742F4#WIFI_STATIC_06#0#WT:23.50#SWICA:0.433#SWINO:0.234#SWIFL:0.341#SWIPH:0.123#
===============================
...

Last updated