Tengo un prototipo de datalogger basado en Arduino que registra las lecturas diferenciales de un ADS 1115, pero me da lecturas erróneas, este esta conectado a la par con un CR1000 por lo que al comparar las lecturas so observa que hay un error en el datalogger con el Arduino. Podrían ayudarme con esto, ya que soy nuevo en este tipo de cosas.
Gracias.
#include <Adafruit_ADS1X15.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <RTClib.h>
// Crear objeto de la clase
Adafruit_ADS1115 ads;
RTC_DS1307 rtc;
#define SSpin 10
File logFile;
// Factor de escala. Por defecto el valor de referencia es 6,144V
// El factor de escala de esta referencia es de 0,1875mV
const float multiplier = 0.0078125;
void setup(void){
Serial.begin(9600);
//RTC
if (! rtc.begin()) {
Serial.println("Modulo RTC no encontrado !"); //si falla la inicializacion del modulo muestra mensaje de error
while (1);
}
//rtc.adjust(DateTime(__DATE__, __TIME__));
//TARJETA SD
Serial.println("Inicializando tarjeta ..."); // texto en ventana de monitor
if (!SD.begin(SSpin)) { // inicializacion de tarjeta SD
Serial.println("fallo en inicializacion !");// si falla se muestra texto correspondiente y
return; // se sale del setup() para finalizar el programa
}
Serial.println(F("Iniciado correctamente"));
//ADS1115
// Factor de escala
ads.setGain(GAIN_SIXTEEN);
// Iniciar el ADS1115
ads.begin();
}
void loop(void){
//ABRIR O CREAR ARCHIVO
logFile = SD.open("data.txt", FILE_WRITE);//abrimos el archivo
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
// DateTime y asigna a variable fecha
//ADS1115
// Obtener el diferencial
short diferencia_0_1 = ads.readADC_Differential_0_1();
short diferencia_2_3 = ads.readADC_Differential_2_3();
// Convertir en voltios
float milivolts_1 = (diferencia_0_1 * multiplier);
float milivolts_2 = (diferencia_2_3 * multiplier);
Serial.print(fecha.year()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.day()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
Serial.print(" , "); // caracter dos puntos como separador
// Serial.print("Sensor 1");
// Serial.print("=");
Serial.print(milivolts_1, 4);
Serial.print(" ,");
Serial.print(milivolts_2, 4);
Serial.println(" ");
logFile.print(fecha.year()); // funcion que obtiene el dia de la fecha completa
logFile.print("/"); // caracter barra como separador
logFile.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
logFile.print("/"); // caracter barra como separador
logFile.print(fecha.day()); // funcion que obtiene el año de la fecha completa
logFile.print(" "); // caracter espacio en blanco como separador
logFile.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
logFile.print(":"); // caracter dos puntos como separador
logFile.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
logFile.print(":"); // caracter dos puntos como separador
logFile.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
logFile.print(" ,"); // caracter dos puntos como separador
logFile.print(milivolts_1, 4);
logFile.print(" ,");
logFile.print(milivolts_2, 4);
logFile.println(" ");
logFile.close(); //cerramos el archivo
delay(2000);
}
Aqui el codigo que estoy usando