Go Down

Topic: Problemas sensor temperatura y lcd {SOLUCIONADO} (Read 293 times) previous topic - next topic

a188024

May 13, 2019, 08:28 pm Last Edit: May 18, 2019, 12:55 am by surbyte
Hola

Soy nuevo en el foro y bastante novato en la electronica y programación por lo que como no... me surgen dudas...
He probado a montar un sensor de temperatura dht11 que muestre los datos en el lcd (16,2).
En principio mirando videos es relativamente sencillo pero el primer problema es que mi dht11 es no-blocking por lo que la programacion que he visto en casi todos los videos no sirve o a mi al menos no me funciona, si que he conseguido que me lo muestre en el ide y tambien en el lcd pero con errores...
Al iniciar funciona correctamente (temp en fila 1 y hum en fila 2) pero pasados un tiempo la humedad pasa a la fila 1 y despues empiezan a salir simbolos muyyyy extraños... y luego vuelve a aparecer bien y asi continuamente.
Agradeceria que me pudieseis echar una manita y aprovecho para preguntaros...

¿que diferencia hay entre dht11 y dht11 no-blocking?

a188024

#1
May 13, 2019, 08:34 pm Last Edit: May 15, 2019, 11:20 am by a188024
Os adjunto y pongo la programacion:
Code: [Select]

#include <LiquidCrystal.h>
#include <dht_nonblocking.h>
#define SENSOR DHT_TYPE_11
static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor(DHT_SENSOR_PIN, SENSOR);
int VO = 3;
int RS = 4;
int E = 5;
int D4 = 6;
int D5 = 7;
int D6 = 8;
int D7 = 9;
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
void setup() {
  analogWrite(VO, 90);
  lcd.begin(16,2);
  }
static bool measure_environment( float *temperature, float *humidity )
{
  static unsigned long measurement_timestamp = millis( );
  if( millis( ) - measurement_timestamp > 4000ul )
  {
    if( dht_sensor.measure( temperature, humidity ) == true )
    {
      measurement_timestamp = millis( );
      return( true );
    }
  }
  return( false );
}
void loop() {
  float temperature;
  float humidity;
  if( measure_environment( &temperature, &humidity ) == true )
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print("C");
    lcd.setCursor(0,1);
    lcd.print("Hum.: ");
    lcd.print(humidity);
    lcd.print("%");
    delay(15000);
    }
}

a188024

Por favor, alguien me puede echar una mano?
Muchas gracias

Luck_

Buenas, te contesta otro nuevo por el foro, pero bueno, siempre hay que intentar echar una mano, y este proyecto no es nada complicado, pero lo único que no tengo claro es que es el no blocking, si me lo pudieras definir igual preciso más.. Al igual q la librería del dht11 no la conozco (especifica para lo q dices) pero bueno, en cuanto me digas, nos ponemos a ello!!

surbyte

Lee el privado y edita tu post #1 a188024

Cuando se vea con etiquetas yo responderé.

a188024

#5
May 15, 2019, 10:40 am Last Edit: May 15, 2019, 05:17 pm by a188024
Hola
Muchas gracias a ambos.
@Surbyte, perdona, creo que ya está.

A priori creía que era fácil porque al ver el código para dht11 normal parecía fácil.
Pero al ser nonblocking el código aparentemente cambia bastante (o al menos el que tengo yo de muestra) y en el primer intento dio errores de compilación que ya solucione... pero después de empezar a mostrar datos salieron los caracteres extraños.

surbyte

Tu sensor no es non blocking, estas usando un código que NO BLOQUEA el resto del funcionamiento del microcontrolador.
La mayoría de los códigos DHT11 detienen por 2 segundos la ejecución del código pero el tuyo no.

Supongo que esta es tu librería, la pruebo y te digo

a188024

Primero probé con la Libreria dht11 normal y no funciono.
Revisando el datasheet de mi dht11 vi que había que usar la nonblocking.

Luck_

Andaaaaaa, que interesante...asi q eso era non blocking...

Te pongo al día a188024, por si acaso no estabas al tanto... (como era mi caso con lo de nonblocking)

Los sensores dht11 como bien dice surbyte necesitan una franja de 2 segundos para las mediciones, estuve mirando en Internet y por más q ponía nonblocking no descubrí nada nuevo, sino los mismos sensores que tenemos en casa habituales.. Con lo cual deduzco que a raíz del comentario de que es una librería...ya no tiene que ver nada con el hardware...

Ahora bien, si te da problemas un dht11, empieza por lo básico, conexión a pin digital  y un codigo sencillito como este.
Que tengas suerte!!


Code: [Select]




#include <DHT11.h> //está librería es la que me uso.

int pin=5;
DHT11 dht11(pin);

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

void loop()
   {
       int err;
       float temp, hum;
       err = dht11.read(hum, temp)

            Serial.print("Temperatura: ");
             Serial.print(temp);
             Serial.print(" Humedad: ");
             Serial.print(hum);
          
       delay(2000);        
   }


a188024

Muchas gracias
Probare con el código que me has pasado pero el otro día me dio el error en la parte de la librería con un código sencillo también.
Pero desde luego poco me cuesta probarlo nuevamente.
Os cuento

a188024

Hola

He comprobado con el codigo que me ha puesto luck_ y lo cierto es que ya funciona (era por culpa de la libreria que no iba bien, ni idea del porque).
Eso si, tengo que decir que en base a ese codigo y libreria he vuelto a intentar que muestre los datos por pantalla y me sigue haciendo exactamente lo mismo...
Empieza bien y conforme pasan los segundos vuelven a salir los simbolos raros... y luego otra vez bien y asi sucesivamente...

Adjunto el nuevo codigo que estoy usando:

Code: [Select]


#include <DHT11.h>
#include <LiquidCrystal.h>
int pin=2;
int VO = 3;
int RS = 4;
int E = 5;
int D4 = 6;
int D5 = 7;
int D6 = 8;
int D7 = 9;
DHT11 dht11(pin);
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
void setup()
   {
       analogWrite(VO, 90);
       lcd.begin(16,2);
   }
void loop()
   {
       int err;
       float temp, hum;
       err = dht11.read(hum, temp);
            lcd.setCursor(0, 0);
            lcd.print("Temp: ");
            lcd.print(temp);
            lcd.setCursor(0, 1);
            lcd.print("Hum: ");
            lcd.print(hum);
             
       delay(2000);         
   }


a188024

Descubierto el error.
Tenia que ser algun cable... los he soltado todos y lo he probado en un nano y sin problemas.
Lo he vuelto a montar en el uno y ya no pasa.
Perdonar... di que asi he aprendido algo mas.
Gracias a todos

Go Up