Proyecto riego automático

Buenas tardes,

Mientras voy leyendo a marchas forzadas, estoy copiando un proyecto de riego automático con DHT11+arduino uno+bomba 5v+ Higrómetro.

El proyecto a clonar está publicado en la web techmake.com y me encuentro diferentes errores de sintaxis.

Abajo detallo los errores que me muestra.

A ver si alguien me puede echar una manita mientras sigo aprendiendo.. Mil gracias

#include <DHT.h>
#define DHTTYPE DHT11

#define sensor_humedad_pin A0
#define fotorresistor_pin A5

int pinDHT11 = 2;
DHT dht(pinDHT11, DHTTYPE);

int fotorresistor_value = 0;
int agua_pin = 3;
int agua_speed =255;

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

void loop () {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.print("Error");
    return;
  }
}

int valor_humedad_tierra = map(analogRead (sensor_humedad_pin), 0, 1023, 100, 0);
int fotorresistor_value =  map(analogRead (fotorresistor_ping), 1023, 0, 100, 0);

//Monitoreo de valores
Serial.println(" ");
Serial.print("Humedad: ");
Serial.print(h);
Serial.print("   %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C ");

Serial.print("Humedad en suelo: ");
Serial.print(valor_humedad_tierra);
Serial.print("%");

Serial.print("Luz: ");
Serial.print(fotorresistor_value);
Serial.println("%)");

//configuración de condiciones de riego

if( valor_humedad_tierra <= 50 && fotorresistor_value <30 && t<30) {
  digitalWrite(agua_pin, HIGH);; // Se activa Bomba
  analogWrite(agua_pin, agua_speed);
 } else {
   digitalWrite(agua_pin, LOW); // Desactiva Bomba
 }
 delay (2000);
 }


Aquí la salida:

dht11iglometrobomba.ino:30:5: error: redefinition of 'int fotorresistor_value'
 int fotorresistor_value =  map(analogRead (fotorresistor_ping), 1023, 0, 100, 0);
     ^~~~~~~~~~~~~~~~~~~
dht11iglometrobomba.ino:10:5: note: 'int fotorresistor_value' previously defined here
 int fotorresistor_value = 0;
     ^~~~~~~~~~~~~~~~~~~
dht11iglometrobomba.ino:30:44: error: 'fotorresistor_ping' was not declared in this scope
 int fotorresistor_value =  map(analogRead (fotorresistor_ping), 1023, 0, 100, 0);
                                            ^~~~~~~~~~~~~~~~~~
dht11iglometrobomba.ino:30:44: note: suggested alternative: 'fotorresistor_pin'
 int fotorresistor_value =  map(analogRead (fotorresistor_ping), 1023, 0, 100, 0);
                                            ^~~~~~~~~~~~~~~~~~
                                            fotorresistor_pin
dht11iglometrobomba.ino:33:1: error: 'Serial' does not name a type
 Serial.println(" ");
 ^~~~~~
dht11iglometrobomba.ino:34:1: error: 'Serial' does not name a type
 Serial.print("Humedad: ");
 ^~~~~~
dht11iglometrobomba.ino:35:1: error: 'Serial' does not name a type
 Serial.print(h);
 ^~~~~~
dht11iglometrobomba.ino:36:1: error: 'Serial' does not name a type
 Serial.print("   %\t");
 ^~~~~~
dht11iglometrobomba.ino:37:1: error: 'Serial' does not name a type
 Serial.print("Temperatura: ");
 ^~~~~~
dht11iglometrobomba.ino:38:1: error: 'Serial' does not name a type
 Serial.print(t);
 ^~~~~~
dht11iglometrobomba.ino:39:1: error: 'Serial' does not name a type
 Serial.print(" *C ");
 ^~~~~~
dht11iglometrobomba.ino:41:1: error: 'Serial' does not name a type
 Serial.print("Humedad en suelo: ");
 ^~~~~~
dht11iglometrobomba.ino:42:1: error: 'Serial' does not name a type
 Serial.print(valor_humedad_tierra);
 ^~~~~~
dht11iglometrobomba.ino:43:1: error: 'Serial' does not name a type
 Serial.print("%");
 ^~~~~~
dht11iglometrobomba.ino:45:1: error: 'Serial' does not name a type
 Serial.print("Luz: ");
 ^~~~~~
dht11iglometrobomba.ino:46:1: error: 'Serial' does not name a type
 Serial.print(fotorresistor_value);
 ^~~~~~
dht11iglometrobomba.ino:47:1: error: 'Serial' does not name a type
 Serial.println("%)");
 ^~~~~~
dht11iglometrobomba.ino:51:1: error: expected unqualified-id before 'if'
 if( valor_humedad_tierra <= 50 && fotorresistor_value <30 && t<30) {
 ^~
dht11iglometrobomba.ino:54:4: error: expected unqualified-id before 'else'
  } else {
    ^~~~
dht11iglometrobomba.ino:57:8: error: expected constructor, destructor, or type conversion before '(' token
  delay (2000);
        ^
dht11iglometrobomba.ino:58:2: error: expected declaration before '}' token
  }
  ^

exit status 1

Compilation error: redefinition of 'int fotorresistor_value'

Por favor, etiqueta también los códigos de error como si fuera código de programa, tal y como has hecho con el código de tu programa.

  • Línea 27: la llave cierra el loop antes de terminar el código, sobra.
  • Línea 30: la variable valor_humedad_tierra la declaras dentro del loop, la he declarado fuera.
  • Línea 31: declaras de nuevo la variable fotoresistor_value.
#include <DHT.h>
#define DHTTYPE DHT11

#define sensor_humedad_pin A0
#define fotorresistor_pin A5

int pinDHT11 = 2;
DHT dht(pinDHT11, DHTTYPE);

int fotorresistor_value;;
int valor_humedad_tierra;

int agua_pin = 3;
int agua_speed =255;

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

void loop () {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.print("Error");
    return;
  }

valor_humedad_tierra = map(analogRead (sensor_humedad_pin), 0, 1023, 100, 0);
fotorresistor_value =  map(analogRead (fotorresistor_pin), 1023, 0, 100, 0);

//Monitoreo de valores
Serial.println(" ");
Serial.print("Humedad: ");
Serial.print(h);
Serial.print("   %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C ");

Serial.print("Humedad en suelo: ");
Serial.print(valor_humedad_tierra);
Serial.print("%");

Serial.print("Luz: ");
Serial.print(fotorresistor_value);
Serial.println("%)");

//configuración de condiciones de riego

if( valor_humedad_tierra <= 50 && fotorresistor_value <30 && t<30) {
  digitalWrite(agua_pin, HIGH);; // Se activa Bomba
  analogWrite(agua_pin, agua_speed);
 } else {
   digitalWrite(agua_pin, LOW); // Desactiva Bomba
 }
 delay (2000);
 }

Ahora ya compila, pero en el monitor me tira "Error", tendré que repasar todo el conexiado, igual viene de ahí.

Muchas gracias, me queda muuucho que leer y practicar todavía

Un saludo

Como has conectado el DTH11? Por cierto el DHT11 es un mal sensor, no lo vuelvas a considerar en tus proyectos. Mide temperatura y humedad en valores enteros. El DTH22 en cambio lo hace con decimales y por tanto mas preciso.
Debe tener una R entre el terminal de datos y VCC, la has puesto?
image

Moderador:
Edita el titulo. Coloca algo que indique tu problema. "Ayuda a novato" no dice nada.
Lee le punto 5 de las normas del foro ademas de todos los demas puntos.
Edita los errores usando etiquetas </>, debe verse igual que un código.

Editado...

He cambiado el DHT11 por un DHT22 como indicabas y con las modificaciones de código.
El error en el monitor ya lo solucioné ayer, era un problema de montaje, ahora sólo me queda averiguar como funciona el fotorresistor, ya que lo he montado tal cual está en el diagrama de techmake y el valor de "% luz" siempre es 0 o 1, además de que la bomba no se activa en ningún momento.Funciona, está comprobada pero no actúa cuando los valores son los aptos para que se active. Algún problema sigo teniendo.
Copio el código por si puede ser de utilidad:

#include <DHT.h>
#define DHTTYPE DHT22

#define sensor_humedad_pin A0
#define fotorresistor_pin A5

int pinDHT22 = 2;
DHT dht(pinDHT22, DHTTYPE);

int fotorresistor_value;;
int valor_humedad_tierra;

int agua_pin = 3;
int agua_speed =255;

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

void loop () {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.print("Error, algo falla");
    return;
  }

valor_humedad_tierra = map(analogRead (sensor_humedad_pin), 0, 1023, 100, 0);
fotorresistor_value =  map(analogRead (fotorresistor_pin), 1023, 0, 100, 0);

//Monitoreo de valores
Serial.println(" ");
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" ºC ");

Serial.print("Humedad en suelo: ");
Serial.print(valor_humedad_tierra);
Serial.print("%");

Serial.print("Luz: ");
Serial.print(fotorresistor_value);
Serial.println("%)");

//configuración de condiciones de riego

if( valor_humedad_tierra <= 50 && fotorresistor_value <30 && t>30) {
  digitalWrite(agua_pin, HIGH);; // Se activa Bomba
  analogWrite(agua_pin, agua_speed);
 } else {
   digitalWrite(agua_pin, LOW); // Desactiva Bomba
 }
 delay (2000);
 }

Por cierto, si, hay una R, el esquema está en el siguiente enlace:

https://cdn.shopify.com/s/files/1/0083/1858/2874/files/5C-1_4eedb1f7-a745-4be7-88fa-88d79442bd4b_2048x2048.png?v=1595516758

Moderador:
No te pedí por privado que editar el título y corrigieras tu primer post?
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>