No podía transmitir la información a ThingSpeak ya que no hacia buena comunicación el Arduino con el Módulo debido al Shield que estaba usando, utilicé otro y santo remedio.
Ahora puedo enviar los datos a la plataforma pero de los 3 que mido solo llegan 2, creo que la variable "valueDb" me está causando el conflicto.
#include <DHT.h>
#include <DHT_U.h>
#include <SoftwareSerial.h>
//Sensor de Temperatura.
#define DHTPIN 8 // PIN Sensor de Temperatura.
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE); //Configuración Sensor de Temperatura.
//Sensor de Sonido.
const double dBAnalogQuiet = 10; //Valores para calibrar el sensor de sonido.
const double dBAnalogModerate = 12;
const double dBAnalogLoud = 17;
#define PIN_ANALOG_IN A0 //PIN Sensor de Sonido.
#define SENSOR_TEMP1 "Tem"
#define SENSOR_HUM1 "Hum"
#define SENSOR_SONIDO "Dec"
const char * myWriteAPIKey = "AFFRO7S0G657Q7YX";
SoftwareSerial GPRSBee(3,2); // RX, TX
float t = 0.0;
float h = 0.0;
float valueDb = 0.0;
int PowerModem = 7;
char dato;
int salida = 0;
void setup()
{
pinMode (PowerModem, OUTPUT);
GPRSBee.begin(9600);
Serial.begin(9600);
delay(10);
dht.begin();
digitalWrite(PowerModem, HIGH);
delay(2000);
digitalWrite(PowerModem, LOW);
delay(2000);
digitalWrite(PowerModem, HIGH);
delay(3000);
VerSerial();
Serial.println("//-------------------------------------------------------------------------------------------");
Serial.println("Iniciando");
Serial.println("Configurando Puertos:");
delay(2000);
VerSerial();
delay(1000);
while(salida==0)
{
delay(1000);
configuracionGPRSBee();
//Se configuran Parámetros para usar el módulo, si todo OK salida=1
delay(1000);
}
VerSerial();
}
void loop()
{
Serial.println("//-------------------------------------------------------------------------------------------");
Serial.println("Leyendo Sensores");
Sensores();
MonitorSerial();
String Tem = String (t);
String Hum = String (h);
String Dec = String (valueDb);
Serial.println("//-------------------------------------------------------------------------------------------");
Serial.println("Enviado Información al Servidor");
delay(1000);
SendtempGPRSBee(SENSOR_TEMP1, Tem, SENSOR_HUM1, Hum, SENSOR_SONIDO, Dec);
delay(1000);
}
//-------------------------------------------------------------------------------------------
int VerSerial()
{
while(Serial.available() != 0)
{
dato = Serial.read();
GPRSBee.print(dato);
}
while(GPRSBee.available() != 0)
{
dato = GPRSBee.read();
Serial.print(dato);
}
}
//-------------------------------------------------------------------------------------------
void Sensores()
{
// Sensor de Temperatura y Humedad.
h = dht.readHumidity();
t = dht.readTemperature();
// Sensor de Sonido.
int value;
float decibelsValueQuiet = 49.5;
float decibelsValueModerate = 65;
float decibelsValueLoud = 70;
value = analogRead(PIN_ANALOG_IN);
if (value < 13)
{
Serial.print("Decibeles: ");
decibelsValueQuiet += calculateDecibels(value, 'q');
Serial.print(decibelsValueQuiet);
Serial.println(" dB");
valueDb = decibelsValueQuiet;
}
else if ((value > 13) && ( value <= 23) )
{
Serial.print("Decibeles: ");
decibelsValueModerate += calculateDecibels(value, 'm');
Serial.print(decibelsValueModerate);
Serial.println(" dB");
valueDb = decibelsValueModerate;
}
else if(value > 22)
{
Serial.print("Decibeles: ");
decibelsValueLoud += calculateDecibels(value, 'l');
Serial.print(decibelsValueLoud);
Serial.println(" dB");
valueDb = decibelsValueLoud;
}
}
//-------------------------------------------------------------------------------------------
void MonitorSerial()
{
Serial.print("Temperatura = ");
Serial.print(t);
Serial.println("°C");
Serial.print("Humedad = ");
Serial.print(h);
Serial.println("%");
delay(2000);
}
//-------------------------------------------------------------------------------------------
int configuracionGPRSBee()
{
Serial.println("Configurando MODEM Telit UL865-NAD");
delay(1000);
GPRSBee.println("AT"); //Verifica funcionamiento
VerSerial();
delay(3000);
GPRSBee.println("AT+CGDCONT=1,\"IP\",\"wap.tmovil.cl\""); // APN de la compañia de tu SIM
//Claro: bam.clarochile.cl - Movistar: wap.tmovil.cl
VerSerial();
delay(3000);
GPRSBee.println("AT#SGACT=1,1"); //Activa el contexto GSM
VerSerial();
delay(3000);
GPRSBee.println("AT&K0"); //Se configura sin control de flujo
VerSerial();
delay(3000);
GPRSBee.println("AT#SD=1,0,80,\"api.thingspeak.com\",0,0,1"); //Abre la conexión remota a través del socket
VerSerial();
delay(3000);
salida=1;
}
//-------------------------------------------------------------------------------------------
int SendtempGPRSBee(String sensor_name1, String valor1, String sensor_name2, String valor2, String sensor_name3, String valor3)
//Función para enviar información al servidor.
{
Serial.println("Iniciando Envio de Datos");
GPRSBee.println("AT#SD=1,0,80,\"api.thingspeak.com\",0,0,1"); //Abre la conexión remota a través del socket
delay(3000);
VerSerial();
delay(1000);
GPRSBee.println("AT#SSEND=1"); //Enviar datos
VerSerial();
delay(700);
GPRSBee.println("GET https://api.thingspeak.com/update?api_key=AFFRO7S0G657Q7YX&field1="+valor1+"&field2="+valor2+"&field3"+valor3);
VerSerial();
delay(2000);
GPRSBee.println((char)26); //Caracter para finalizar el mensaje
delay(500);
VerSerial();
GPRSBee.println("AT#SH=1"); //Finaliza conexión
delay(500);
VerSerial();
delay(200);
}
//-------------------------------------------------------------------------------------------
// Cálculo de Decibeles.
float calculateDecibels(int x, char c)
{
float decibelsCalculated;
if (c == 'q')
decibelsCalculated = 20 * log10(x/dBAnalogQuiet);
if (c == 'm')
decibelsCalculated = 20 * log10(x/dBAnalogModerate);
if (c == 'l')
decibelsCalculated = 20 * log10(x/dBAnalogLoud);
return (decibelsCalculated);
}
El canal donde envío la información es este: Monitoreo de Variables Canario 3G - ThingSpeak IoT
y como pueden ver no llega la información al 3er campo.
Quizás hay un problema en la sintaxis del código?