Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Ayuda invernadero automatico
#1
Buenas gente espero que estén bien
Bueno básicamente soy un super novato en Arduino, y me mande de lleno para crear mi primer proyecto con Arduino UNO


Proyecto: invernadero automático
¿Como funciona?
Tengo un sensor DHT11, que utilizo para medir temperatura y humedad dentro de un habitáculo cerrado
Cuando la temperatura supera X valor, se activa un Rele del modulo de doble Rele que viene en el kit
Cuando la temperatura disminuye de  X valor, se activa el otro Rele del modulo de doble Rele
Esto alimentara un sistema que calienta o enfria correspondientemente

Luego se mide la humedad, y cuando la misma disminuye de X valor, se activa un generador de frecuencia
Dado que quiero generar vapor con un piezoelectrico, y el mismo funciona con 1.7 MHz, me pareció que seria buena idea generar la frecuencia desde el mismo Arduino, investigando encontré que lo más cercano es 1.778 MHz por una cuestión del reloj interno. Luego conecto la salida a un MOSFET (que también necesito saber cual es el mejor) y de ahi al Piezo,

La cuestión es que he básicamente hecho copy paste de distintos códigos y se me ha hecho un desastre. Ahora mismo no me compila y no se porque

Les dejo el codigo que hice pero pienso realmente tirarlo a la basura y empezar de cero





#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN 7 //Pin 22 del Arduino 
#define DHTTYPE DHT11 //Definir el sensor como un DHT11
#define RELAY1  5  // Relay heating
#define RELAY2  6  // Relay cooling

int red = 8; // red LED heating
int blue = 9; // blue LED cooling

DHT dht(DHTPIN, DHTTYPE);

float temperature;
float humedad;

const uint8_t OUTPUT_PIN = 3;  // = OC2B
const uint8_t PERIOD = 9;      // 9 CPU cycles ~ 1.778 MHz

void setup()
{
pinMode(red, OUTPUT);
pinMode(piezo, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
}
{
    pinMode(OUTPUT_PIN, OUTPUT);
    TCCR2B = 0;           // stop timer
    TCNT2  = 0;           // reset timer
    TCCR2A = _BV(COM2B1)  // non-inverting PWM on OC2B
           | _BV(WGM20)   // fast PWM mode, TOP = OCR2A
           | _BV(WGM21);  // ...ditto
   TCCR2B = _BV(WGM22);  // ...ditto
    OCR2A = PERIOD - 1;
    OCR2B = PERIOD/2 - 1;
}

void soundBuzzer() {
    TCCR2B |= _BV(CS20);  // F_CPU / 1
}

void silenceBuzzer() {
   TCCR2B &= ~_BV(CS20);
   TCNT2 = 0;
}

void loop()

if (humedad <60){    // 
  digitalWrite(ledhum, HIGH);  // si la humedad es menor de 70% genera oscilacion
}
  else{
  digitalWrite(piezo, LOW);  // si humedad mayor de 70% apaga led
  }
{
  delay(1000); //Tiempo de espera entre una lectura y otra. Para el DHT11 es 1 segundo

  temperature = dht.readTemperature(); //Lee la temperatura
  humedad = dht.readHumidity(); //Lee la humedad

 {
    if(temperature < 25)
    {
digitalWrite(red,HIGH);
digitalWrite(blue,LOW);
 
 
digitalWrite(RELAY1,0); 
digitalWrite(RELAY2,1);   
           }
    else if(temperature > 25)
    {
digitalWrite(RELAY1,1);
digitalWrite(RELAY2,0); 
digitalWrite(red,LOW);
digitalWrite(blue,HIGH);

  
}                 
}
}

Desde ya gracias
Citar
#2
Buenas noches.

Tu código tiene tantos errores, y tan simples, que nadie te va a hacer caso, estas demostrando que no has hecho ninguno de los ejercicios básicos de programación, para entender cómo se programa con Arduino, y te has tirado a la piscina para automatizar un invernadero.
 
Es como si no supieras andar, y ya te has apuntado a hacer una maratón extrema, subiendo 7 veces al Himalaya.
 
Para empezar, debes saber que en los códigos de Arduino, hay unas reglas de escritura, como en todos los idiomas, que si no las sigues, no estás generando un código, sino que estas escribiendo unas líneas, que ni entiendes tu que las estas escribiendo, ni las entiende el Arduino, cuando haces la compilación, y en tu código, no estás siguiendo esas reglas básicas.
 
Por eso se empieza con un programa fácil, para encender y apagar un LED, a simple vista es un código sencillo, pero muy útil y de obligado estudio y realización, para aprender cómo se establecen las reglas de escritura del código del IDE Arduino
 
Lo peor que se puede hacer, es copiar y pegar códigos a lo loco sin saber lo que se está haciendo, lo primero que tienes que saber es como se hace funcionar un sensor en modo básico, y después puedes intentar complicarlo añadiendo una función dependiendo de las lecturas. Pero si no sabes cómo funciona el sensor, malamente puedes hacerlo funcionar.
 
Cuando haces un copia y pega, de un programa que ha hecho otra persona, debes de tener mucho cuidado en copiar todas las líneas del código, y pegarlas en su sitio, porque si no lo único que haces es tener un código que ni tiene sentido, ni funciona.
 
Lo primero que veo, así a simple vista, es que tu void setup (), empieza con el corchete { de la línea 21 y acaba en el corchete de la línea 27 } por lo tanto todo lo que hay entre las líneas 28 y 38, no se va a ejecutar nunca.
 
Los dos void que tienes entre las líneas 40 a 47, están fuera de sitio, y no se van a ejecutar nunca, o si se ejecutan, será solo una vez, cuando se cargue el void setup (), pero lo normal es que no se ejecuten nunca, deberían estar después del viod loop (), para su correcto funcionamiento.
 
En el void loop (), te falta el corchete de inicio { en la línea 48, y el de final } en la línea 83, por lo que nunca te va a funcionar.
 
Cuando arregles eso seguimos.
 
Un saludo desde Cuenca, España.
Citar