Hola,tengo un problema que me lleva de cabeza mas de 2 meses.Primero decir que no soy un genio en esto de arduino,todo lo que hecho a sido a base de videos y buscar informacion y por supuesto a mucho fallar.
Mi proyecto es para controlar un acuario y poder ver los parametros de tds,ph,temperatura y un sensor de humedad por si tuviera alguna fuga ,todo lo veo en una pantalla de 20 x 4 y controlo tres tubos de leds con 3 reles con un modulo reloj.Todo lo alimento con una fuente de 5 v y el arduino con tranformador de 6,5 v.
Lo que me ocurre es que la sonda de ph los valores me fructua mucho (1 grado o mas),el resto me funciona correctamente,creo.
haber si me podeis ayudar,muchas gracias.
Por cierto es un arduino mega.
Si he cometido algun error en el foro lo siento,me lo comunicais.
#include <GravityTDS.h>
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <EEPROM.h>
#define RELAY_ON 0 //PRUEBAS
#define RELAY_OFF 1 //PRUEBAS
#define TdsSensorPin A12 // sensor tds
LiquidCrystal_I2C lcd(0x27,20,4);
RTC_DS1307 RTC;
GravityTDS gravityTds; //sensor tds
const byte pinDatosDQ = 22; // sensor temperatura
float temperature = 25,tdsValue = 0;
const int analogInPin = A8; // sensor ph
int sensorValue = 0; // sensor ph
unsigned long int avgValue; // sensor ph
float b; // sensor ph
int buf[10],temp; // sensor ph
OneWire oneWireObjeto(pinDatosDQ);
DallasTemperature sensorDS18B20(&oneWireObjeto);
void setup () {
gravityTds.setPin(TdsSensorPin); //sensor tds
gravityTds.setAref(5.0); //sensor tds voltaje 5v
gravityTds.setAdcRange(1024); //sensor tds 1024 a 10 bit ADC; 4096 a 12 bit ADC
gravityTds.begin(); //iniciar sensor tds
sensorDS18B20.begin(); //sensor temperatura
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicaci¢n con el RTC
//RTC.adjust(DateTime(DATE, TIME)); // Establece la fecha y hora (Comentar una vez establecida la hora)
//el anterior se usa solo en la configuracion inicial
lcd.init();
lcd.backlight();
lcd.clear();
digitalWrite(32,RELAY_OFF); //PRUEBAS
digitalWrite(36,RELAY_OFF); //PRUEBAS
digitalWrite(40,RELAY_OFF); //PRUEBAS
pinMode(32,OUTPUT);
pinMode(36,OUTPUT);
pinMode(40,OUTPUT);
}
void loop(){
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
lcd.setCursor(0,0);
lcd.print("H:");
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
lcd.print(" ");
lcd.setCursor(13,0);
lcd.print("T:");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
int hora =now.hour();
int minuto =now.minute();
int segundo = now.second();
if(hora >=11 && hora <=21){ //amanecer
digitalWrite(32,RELAY_ON);
}
else {
digitalWrite(32,RELAY_OFF);
}
if(hora >=21 && hora <=22){ //noche
digitalWrite(36,RELAY_ON);
}
else {
digitalWrite(36,RELAY_OFF);
{
if(hora >=12 && hora <=20){ //dia
digitalWrite(40,RELAY_ON);
}
else {
digitalWrite(40,RELAY_OFF);
}
delay(1000); // La informaci¢n se actualiza cada 1 seg.
for(int i=0;i<10;i++) //sensor ph
{
buf*=analogRead(analogInPin); *
- delay(10);*
- }*
- for(int i=0;i<9;i++)*
- {*
- for(int j=i+1;j<10;j++)*
- {*
_ if(buf*>buf[j])_
_ {_
_ temp=buf;
buf=buf[j];
buf[j]=temp;
}
}
}
avgValue=0;
for(int i=2;i<8;i++)
avgValue+=buf;
float pHVol=(float)avgValue5.0/1024/6;
float phValue = -5.70 * pHVol + 21.34;
* lcd.setCursor(12,3);
lcd.print("PH:");
lcd.print(phValue); //sensor ph*
* delay(2000);*_
* int lectura = analogRead (A15); //sensor de humedad *
* lcd.setCursor(0,2); //sensor de humedad*
* lcd.print("HUMEDAD:"); //sensor de humedad*
* if (lectura >=900){ //entre 1000 y 1023 sensor humedad*
* lcd.print("SECO");*
}
* else if (lectura < 900 && lectura >=500){ //entre 1000 y 600 sensor humedad*
* lcd.print("HUMEDO");*
}
* else if (lectura < 500){ //entre 600 y 0 sensor humedad*
* lcd.print("MOJADO");*
* }*
* //temperature = readTemperature(); // leer temperatura del sensor*
* gravityTds.setTemperature(temperature); // conpensar temperatura del sensor*
* gravityTds.update(); //sample and calculate*
* tdsValue = gravityTds.getTdsValue(); // obtener el valor de tds*
* lcd.setCursor(0,3);*
* lcd.print("TDS:");*
* lcd.print(tdsValue,0);*
* lcd.print(" PPM"); //sensor tds*
* lcd.setCursor(0,1); //sensor temperatura*
* lcd.print("TEMPERATURA:"); //sensor temperatura*
* sensorDS18B20.requestTemperatures(); //sensor temperatura*
* lcd.print(sensorDS18B20.getTempCByIndex(0)+1); //sensor temperatura*
* lcd.print(" C "); //sensor temperatura*
* }*
* }*
}
completo_5.ino (4.78 KB)