Home › Forums › Environmental Sensors › TEROS 11 not providing output
- This topic has 0 replies, 1 voice, and was last updated 2021-09-04 at 10:58 PM by Anish.
Viewing 0 reply threads
-
AuthorPosts
-
-
2021-09-04 at 10:58 PM #15858
Hello,
I connected a TEROS 11 sensor to Mayfly data logger and modified HYDROS 21 code to include the modular sensor for TEROS 11. But getting ‘-9999’ as output from the sensor in addition to warning of “2 results expected This differs from the sensor’s standard design of 3 measurements!!”.
While there is no issues with recording battery voltage and signal percent. Could anyone help me regarding this?
Thanks,
Anish
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384/** =========================================================================* @file DRWI_LTE.ino* @brief Example for DRWI CitSci LTE sites.** @author Sara Geleskie Damiano <sdamiano@stroudcenter.org>* @copyright (c) 2017-2020 Stroud Water Research Center (SWRC)* and the EnviroDIY Development Team* This example is published under the BSD-3 license.** Build Environment: Visual Studios Code with PlatformIO* Hardware Platform: EnviroDIY Mayfly Arduino Datalogger** DISCLAIMER:* THIS CODE IS PROVIDED "AS IS" - NO WARRANTY IS GIVEN.* ======================================================================= */// ==========================================================================// Defines for the Arduino IDE// NOTE: These are ONLY needed to compile with the Arduino IDE.// If you use PlatformIO, you should set these build flags in your// platformio.ini// ==========================================================================/** Start [defines] */#ifndef TINY_GSM_RX_BUFFER#define TINY_GSM_RX_BUFFER 64#endif#ifndef TINY_GSM_YIELD_MS#define TINY_GSM_YIELD_MS 2#endif/** End [defines] */// ==========================================================================// Include the libraries required for any data logger// ==========================================================================/** Start [includes] */// The Arduino library is needed for every Arduino program.#include <Arduino.h>// EnableInterrupt is used by ModularSensors for external and pin change// interrupts and must be explicitly included in the main program.#include <EnableInterrupt.h>// Include the main header for ModularSensors#include <ModularSensors.h>/** End [includes] */// ==========================================================================// Data Logging Options// ==========================================================================/** Start [logging_options] */// The name of this program fileconst char* sketchName = "DRWI_LTE.ino";// Logger ID, also becomes the prefix for the name of the data file on SD cardconst char* LoggerID = "WC002";// How frequently (in minutes) to log dataconst uint8_t loggingInterval = 2;// Your logger's timezone.const int8_t timeZone = -6; // Central Standard Time// NOTE: Daylight savings time will not be applied! Please use standard time!// Set the input and output pins for the logger// NOTE: Use -1 for pins that do not applyconst int32_t serialBaud = 115200; // Baud rate for debuggingconst int8_t greenLED = 8; // Pin for the green LEDconst int8_t redLED = 9; // Pin for the red LEDconst int8_t buttonPin = 21; // Pin for debugging mode (ie, button pin)const int8_t wakePin = 31; // MCU interrupt/alarm pin to wake from sleep// Mayfly 0.x D31 = A7// Set the wake pin to -1 if you do not want the main processor to sleep.// In a SAMD system where you are using the built-in rtc, set wakePin to 1const int8_t sdCardPwrPin = -1; // MCU SD card power pinconst int8_t sdCardSSPin = 12; // SD card chip select/slave select pinconst int8_t sensorPowerPin = 22; // MCU pin controlling main sensor power/** End [logging_options] */// ==========================================================================// Wifi/Cellular Modem Options// ==========================================================================/** Start [xbee_cell_transparent] */// For any Digi Cellular XBee's// NOTE: The u-blox based Digi XBee's (3G global and LTE-M global)// are more stable used in bypass mode (below)// The Telit based Digi XBees (LTE Cat1) can only use this mode.#include <modems/DigiXBeeCellularTransparent.h>// Create a reference to the serial port for the modemHardwareSerial& modemSerial = Serial1; // Use hardware serial if possibleconst int32_t modemBaud = 9600; // All XBee's use 9600 by default// Modem Pins - Describe the physical pin connection of your modem to your board// NOTE: Use -1 for pins that do not applyconst int8_t modemVccPin = -2; // MCU pin controlling modem powerconst int8_t modemStatusPin = 19; // MCU pin used to read modem statusconst bool useCTSforStatus = false; // Flag to use the modem CTS pin for statusconst int8_t modemResetPin = 20; // MCU pin connected to modem reset pinconst int8_t modemSleepRqPin = 23; // MCU pin for modem sleep/wake requestconst int8_t modemLEDPin = redLED; // MCU pin connected an LED to show modem// status (-1 if unconnected)// Network connection informationconst char* apn = "hologram"; // The APN for the gprs connectionDigiXBeeCellularTransparent modemXBCT(&modemSerial, modemVccPin, modemStatusPin,useCTSforStatus, modemResetPin,modemSleepRqPin, apn);// Create an extra reference to the modem by a generic nameDigiXBeeCellularTransparent modem = modemXBCT;/** End [xbee_cell_transparent] */// ==========================================================================// Using the Processor as a Sensor// ==========================================================================/** Start [processor_sensor] */#include <sensors/ProcessorStats.h>// Create the main processor chip "sensor" - for general metadataconst char* mcuBoardVersion = "v0.5b";ProcessorStats mcuBoard(mcuBoardVersion);/** End [processor_sensor] */// ==========================================================================// Maxim DS3231 RTC (Real Time Clock)// ==========================================================================/** Start [ds3231] */#include <sensors/MaximDS3231.h>// Create a DS3231 sensor objectMaximDS3231 ds3231(1);/** End [ds3231] */// ==========================================================================// Meter Terros 11// ==========================================================================/** Start [teros11] */#include <sensors/MeterTeros11.h>const char* teros11SDI12address = "2"; // The SDI-12 Address of the Teros 11const int8_t terosPower = sensorPowerPin; // Power pin (-1 if unconnected)const int8_t terosData = 7; // The SDI12 data pinconst uint8_t teros11NumberReadings = 3; // The number of readings to average// Create a METER TEROS 11 sensor objectMeterTeros11 teros11(*teros11SDI12address, terosPower, terosData,teros11NumberReadings);/** End [teros11] */// ==========================================================================// Creating the Variable Array[s] and Filling with Variable Objects// ==========================================================================/** Start [variable_arrays] */Variable* variableList[] = {new MeterTeros11_Ea(&teros11),new MeterTeros11_Temp(&teros11),new MeterTeros11_VWC(&teros11),new ProcessorStats_Battery(&mcuBoard),new MaximDS3231_Temp(&ds3231),new Modem_SignalPercent(&modem),};// All UUID's, device registration, and sampling feature information can be// pasted directly from Monitor My Watershed. To get the list, click the "View// token UUID list" button on the upper right of the site page.// *** CAUTION --- CAUTION --- CAUTION --- CAUTION --- CAUTION ***// Check the order of your variables in the variable list!!!// Be VERY certain that they match the order of your UUID's!// Rearrange the variables in the variable list if necessary to match!// *** CAUTION --- CAUTION --- CAUTION --- CAUTION --- CAUTION ***const char *UUIDs[] = // UUID array for device sensors{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", // Permittivity (Meter_Teros11_Ea)"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", // Temperature (Meter_Teros11_Temp)"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", // Volumetric water content (Meter_Teros11_VWC)"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", // Battery voltage (EnviroDIY_Mayfly_Batt)"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", // Temperature (EnviroDIY_Mayfly_Temp)"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // Percent full scale (Digi_Cellular_SignalPercent)};const char *registrationToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // Device registration tokenconst char *samplingFeature = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // Sampling feature UUID// Count up the number of pointers in the arrayint variableCount = sizeof(variableList) / sizeof(variableList[0]);// Create the VariableArray objectVariableArray varArray(variableCount, variableList, UUIDs);/** End [variable_arrays] */// ==========================================================================// The Logger Object[s]// ==========================================================================/** Start [loggers] */// Create a new logger instanceLogger dataLogger(LoggerID, loggingInterval, &varArray);/** End [loggers] */// ==========================================================================// Creating Data Publisher[s]// ==========================================================================/** Start [publishers] */// Create a data publisher for the Monitor My Watershed/EnviroDIY POST endpoint#include <publishers/EnviroDIYPublisher.h>EnviroDIYPublisher EnviroDIYPOST(dataLogger, &modem.gsmClient,registrationToken, samplingFeature);/** End [publishers] */// ==========================================================================// Working Functions// ==========================================================================/** Start [working_functions] */// Flashes the LED's on the primary boardvoid greenredflash(uint8_t numFlash = 4, uint8_t rate = 75) {for (uint8_t i = 0; i < numFlash; i++) {digitalWrite(greenLED, HIGH);digitalWrite(redLED, LOW);delay(rate);digitalWrite(greenLED, LOW);digitalWrite(redLED, HIGH);delay(rate);}digitalWrite(redLED, LOW);}// Reads the battery voltage// NOTE: This will actually return the battery level from the previous update!float getBatteryVoltage() {if (mcuBoard.sensorValues[0] == -9999) mcuBoard.update();return mcuBoard.sensorValues[0];}// ==========================================================================// Arduino Setup Function// ==========================================================================/** Start [setup] */void setup() {// Start the primary serial connectionSerial.begin(serialBaud);// Print a start-up note to the first serial portSerial.print(F("Now running "));Serial.print(sketchName);Serial.print(F(" on Logger "));Serial.println(LoggerID);Serial.println();Serial.print(F("Using ModularSensors Library version "));Serial.println(MODULAR_SENSORS_VERSION);Serial.print(F("TinyGSM Library version "));Serial.println(TINYGSM_VERSION);Serial.println();// Start the serial connection with the modemmodemSerial.begin(modemBaud);// Set up pins for the LED'spinMode(greenLED, OUTPUT);digitalWrite(greenLED, LOW);pinMode(redLED, OUTPUT);digitalWrite(redLED, LOW);// Blink the LEDs to show the board is on and starting upgreenredflash();// Set the timezones for the logger/data and the RTC// Logging in the given time zoneLogger::setLoggerTimeZone(timeZone);// It is STRONGLY RECOMMENDED that you set the RTC to be in UTC (UTC+0)Logger::setRTCTimeZone(0);// Attach the modem and information pins to the loggerdataLogger.attachModem(modem);modem.setModemLED(modemLEDPin);dataLogger.setLoggerPins(wakePin, sdCardSSPin, sdCardPwrPin, buttonPin,greenLED);// Begin the loggerdataLogger.begin();// Note: Please change these battery voltages to match your battery// Set up the sensors, except at lowest battery levelif (getBatteryVoltage() > 3.4) {Serial.println(F("Setting up sensors..."));varArray.setupSensors();}// Extra modem set-up - selecting AT&T as the carrier and LTE-M only// NOTE: The code for this could be shortened using the "commandMode" and// other XBee specific commands in TinyGSM. I've written it this way in// this example to show how the settings could be changed in either bypass// OR transparent mode.Serial.println(F("Waking modem and setting Cellular Carrier Options..."));modem.modemWake(); // NOTE: This will also set up the modem// Go back to command mode to set carrier optionsfor (uint8_t i = 0; i < 5; i++) {// Wait the required guard time before entering command modedelay(1010);modem.gsmModem.streamWrite(GF("+++")); // enter command modeif (modem.gsmModem.waitResponse(2000, GF("OK\r")) == 1) break;}// Carrier Profile - 0 = Automatic selection// - 1 = No profile/SIM ICCID selected// - 2 = AT&T// - 3 = Verizon// NOTE: To select T-Mobile, you must enter bypass mode!modem.gsmModem.sendAT(GF("CP"), 2);modem.gsmModem.waitResponse(GF("OK\r"));// Cellular network technology - 0 = LTE-M with NB-IoT fallback// - 1 = NB-IoT with LTE-M fallback// - 2 = LTE-M only// - 3 = NB-IoT onlymodem.gsmModem.sendAT(GF("N#"), 2);modem.gsmModem.waitResponse();// Write changes to flash and apply themSerial.println(F("Wait while applying changes..."));// Write changes to flashmodem.gsmModem.sendAT(GF("WR"));modem.gsmModem.waitResponse(GF("OK\r"));// Apply changesmodem.gsmModem.sendAT(GF("AC"));modem.gsmModem.waitResponse(GF("OK\r"));// Reset the cellular component to ensure network settings are changedmodem.gsmModem.sendAT(GF("!R"));modem.gsmModem.waitResponse(30000L, GF("OK\r"));// Force reset of the Digi component as well// This effectively exits command modemodem.gsmModem.sendAT(GF("FR"));modem.gsmModem.waitResponse(5000L, GF("OK\r"));// Sync the clock if it isn't valid or we have battery to spareif (getBatteryVoltage() > 3.55 || !dataLogger.isRTCSane()) {// Synchronize the RTC with NIST// This will also set up the modemdataLogger.syncRTC();}// Create the log file, adding the default header to it// Do this last so we have the best chance of getting the time correct and// all sensor names correct// Writing to the SD card can be power intensive, so if we're skipping// the sensor setup we'll skip this too.if (getBatteryVoltage() > 3.4) {Serial.println(F("Setting up file on SD card"));dataLogger.turnOnSDcard(true); // true = wait for card to settle after power updataLogger.createLogFile(true); // true = write a new headerdataLogger.turnOffSDcard(true); // true = wait for internal housekeeping after write}// Call the processor sleepSerial.println(F("Putting processor to sleep\n"));dataLogger.systemSleep();}/** End [setup] */// ==========================================================================// Arduino Loop Function// ==========================================================================/** Start [loop] */// Use this short loop for simple data logging and sendingvoid loop() {// Note: Please change these battery voltages to match your battery// At very low battery, just go back to sleepif (getBatteryVoltage() < 3.4) {dataLogger.systemSleep();}// At moderate voltage, log data but don't send it over the modemelse if (getBatteryVoltage() < 3.55) {dataLogger.logData();}// If the battery is good, send the data to the worldelse {dataLogger.logDataAndPublish();}}/** End [loop] */<!–more–>
-
-
AuthorPosts
Viewing 0 reply threads
- You must be logged in to reply to this topic.