Go Down

Topic: Mi primer proyecto riego (Read 3260 times) previous topic - next topic

Befree197

Muchos??? Si tenía uno y lo he borrado, pero sigue igual..... Algo se me está escapando.... Pero revisando el codigo, no veo ninguno mas.

Gracias.

surbyte

Me perdí con tu código y mis correcciones. No se cual es el que corresponde ahora.

Befree197

Aqui te lo dejo compi

Code: [Select]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27);

const byte sensorPin = 8;
const byte relePin = 9;
const byte control = 9;        //Pin que activa o no el relé
const byte botonManualPin = 11;
bool sensor = 0;
bool manual = 0;
int a = 0;
float humedad;        //Valor de la humedad actual de la planta
float humedadcorte;     //Humedad que fija el usuario girando el potenciómetro.


void setup() {
 
  Serial.begin(9600);

  pinMode(sensorPin, INPUT);
  pinMode(relePin, OUTPUT);
  pinMode(botonManualPin, INPUT);
  lcd.begin(20,4);       //Inicia la LCD
 
  //lcd.backlight();    //Activa la luz de la LCD.
  pinMode(control,OUTPUT);//Declara el control del relé como salida 4
  Serial.println("Arrancando LCD I2C.");
}

void loop() {
  char buffer[20];
 
  sensor = digitalRead(sensorPin);
  manual = digitalRead(botonManualPin);
  //Serial.println(digitalRead(8)); //lectura digital
  //delay(500);
  if (sensor == HIGH || manual == HIGH){
     digitalWrite(relePin, HIGH);
     for(a=1;a<=120;a++){ //Regamos durante dos minutos   ????   
      // DUDO que esto sea cierto
     }
  }

  //Para que el sistema convierta la lectura analógica en % hay que establecer una relación:
 
  humedad = 0.12*(float) analogRead(A0);          //Convierte la lectura del sensor a %.
  humedadcorte =0.07*(float)analogRead(A1)+15.0;     //Convierte la lectura del potenciómetro a %. La humedad se ajusta entre un 15 y 90 por ciento.

  /*El siguiente bloque imprime en la pantalla
  el valor de la humedad que lee el sensor, y el
  de la humedad de corte leída por el potenciómetro*/
 
  lcd.setCursor(0,0);
  sprintf(buffer, "HUM. PLANTA:%3d%", humedad);
  lcd.print(buffer);
  lcd.setCursor(0,1);
  sprintf(buffer, "HUM. CORTE :%3d%", humedadcorte);
  lcd.print(buffer);
 
  if (humedad < 10.0) {
    digitalWrite(control,HIGH);
  }
  if (humedad > humedadcorte) {
        digitalWrite(control,LOW);
  }
  delay(1000);
}



surbyte

en tu código veo que inicializas con

Code: [Select]
  lcd.begin(16,2);       //Inicia la LCD



en el mio

Code: [Select]
  lcd.begin(20,4);       //Inicia la LCD


tu díras cual corresponde.

Befree197

Ya tengo el codigo funcionando. He realizado el montaje primero con un led, y a posteriori con un relé simulando la activación de la bomba sumergible. Todo funciona ok¡¡¡ Por fin¡¡¡  :)  :)  :)

Code: [Select]
/*Disposición de los pines en la LCD
GND: A tierra(GND)
Vcc: A 5 voltios
SDA: A la entrada analógica 4
SCL: A la entrada analógica 5
*/
//Primero incluimos las librerías:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR       0x27
LiquidCrystal_I2C           lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);

float humedad;//Valor de la humedad actual de la planta
float humedadcorte;//Humedad que fija el usuario girando el potenciómetro.
float temperatura;
int control=8;//Pin que activa o no el relé
int sensorPin = 2;
int sensorValue = 2;

void setup()

{
lcd.begin(20,4);//Inicia la LCD
lcd.setBacklightPin(3,POSITIVE);//Activa la luz de la LCD.
lcd.setBacklight(HIGH);
pinMode(control,OUTPUT);//Declara el control del relé como salida
}

void loop()

{
   lcd.setCursor(0,1);
   lcd.print("Temperatura:");
   sensorValue = analogRead(sensorPin); //conversor analògic-digital. 0=0v; 1024=5V
   //T=0,48*ADC-112,36 (veure wiki per saber com he arribat a aquest resultat)
   temperatura=0.48*sensorValue-385.5;
   lcd.setCursor(14,1);
   lcd.print(temperatura);
   lcd.print((char)223);
   delay(100);

//Para que el sistema convierta la lectura analógica en % hay que establecer una relación:
humedad=0.14*(float)analogRead(A0);//Convierte la lectura del sensor a %.
humedadcorte=0.07*(float)analogRead(A1)+25.0;//Convierte la lectura del potenciómetro a %. La
//humedad se ajusta entre un 15 y 90 por ciento.
/*El siguiente bloque imprime en la pantalla
el valor de la humedad que lee el sensor, y el
de la humedad de corte leída por el potenciómetro*/

lcd.setCursor(1,0);
lcd.print("RIEGO AUTOMATIZADO");
lcd.setCursor(0,2);
lcd.print("Hum.Planta:");
lcd.setCursor(15,2);
lcd.print(humedad);
lcd.setCursor(19,2);
lcd.print("%");
lcd.setCursor(0,4);
lcd.print("Hum.Corte:");
lcd.setCursor(15,4);
lcd.print(humedadcorte);
lcd.setCursor(19,4);
lcd.print("%");
if(humedad<30)
{
digitalWrite(control,HIGH);
}
else if(humedad>humedadcorte)
{
digitalWrite(control,LOW);
}

delay(1000);
}


Pero me surgen unas dudas.
Registro la temperatura con un sensor LM335, pero creo que no me mide bien la temperatura. Que puede ser??
Y por ultimo, cuando se realiza la activación del relé, la pantalla baja de brillo, como si bajara un tono la intensidad. Y cuando vuelve a descativarse, todo vuelve a la normalidad.Es como si hubiese un consumo excesivo, o no se...

Que puede suceder??

Muchas gracias por la ayuda prestada

Befree197


ivitito

Podrias subir una foto de las conexiones de arduino con los componenetes? estoy haciendo un proyecto parecido sin LCD y te lo agradeceria. Gracias

Go Up