Sensor DHT11 de temperatura y humedad

Sensor DHT11 de temperatura y humedad    Inicio Tutoriales Raspberry Pi Sensor DHT11 de temperatura y humedad 15Ago

Views 149 Downloads 0 File size 545KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Sensor DHT11 de temperatura y humedad   

Inicio Tutoriales Raspberry Pi Sensor DHT11 de temperatura y humedad

15Ago

Sensor DHT11 de temperatura y humedad By FrancescTutoriales Raspberry PiHumedad, Raspberry Pi, sensor, TemperaturaWith 25 comments  

Descripción En este nuevo tutorial vamos a aprender a leer los valores de temperatura ambiente y humedad relativa que nos proporciona el sensor DHT11. Este sensor tiene un precio muy económico y resulta ideal para pequeños proyectos con Raspberry Pi o Arduino.

Se caracteriza por tener la señal digital bien calibrada, es decir, nos asegura una gran fiabilidad en las lecturas. La calibración se realiza en laboratorio adquiriendo así una extrema precisión. Estamos hablando de un sensor con un microcontrolador de 8 bits y 2 sensores resistivos encapsulados en una pequeña caja de plástico azul y construidos con materiales de excelente calidad para una respuesta rápida y precisa. Existen varios modelos del sensor DHT11 en el mercado, algunos vienen soldados a una placa y otros vienen sueltos para usarse directamente conectados a una breadboard (placa de pruebas). Lo

bueno de los modelos que ya vienen soldados a una placa es que nos ahorra tener que montar la resistencia que actúa como pull-up. El protocolo de comunicación se realiza a través de un único hilo (Single-Bus) para que la integración en vuestros proyectos sea fácil y rápida pudiéndolo conectar directamente a los pines GPIO de vuestra Raspberry Pi.

La tensión de alimentación del sensor es de 3~5V, podéis conectarlo a los pines +5V o +3’3V y GND de vuestra Raspberry Pi o alimentarlo desde una batería externa. Su rango de funcionamiento es de 0 a 50ºC para la temperatura y de 20% a 90% de humedad relativa. El pin de comunicaciones para realizar lecturas lo podéis conectar a cualquier pin GPIO y tiene la capacidad

de transmitir la señal hasta 20 metros de distancia. La tasa de refresco en las lecturas es de 2 segundos.

Esquema y cableado El sensor DHT11 que se vende suelto no tiene especificados los pines así que fijaros en la siguiente imagen, el sensor esta boca arriba por la parte que tiene agujeros y las patillas están hacia abajo. El pin que esta situado más a la izquierda es el pin VCC (3’3V o 5V). El segundo pin es el que usaremos para las lecturas, en el esquema esta conectado al pin GPIO nº4 de la Raspberry Pi. El tercer pin no se usará en este proyecto. El cuarto pin es GND, lo teneis que conectar en cualquier pin GND de la Raspberry Pi o de la batería. Por último hay que conectar una resistencia de 4’7 KOhm a 10 KOhm del pin VCC al segundo pin (el que usamos para realizar lecturas), esto actuará como “Pull-up”.  

  Con esto ya tendríamos el cableado listo, veamos ahora un ejemplo de script en Python para realizar lecturas con este sensor.

Script de ejemplo import RPi.GPIO as GPIO #Imp import time #Importamo def bin2dec(string_num): #Crea

1

import RPi.GPIO as GPIO   #Importamos las librerias necesarias para usar los pines GPIO

2

import time               #Importamos time para poder realizar pausas

3

 

4

def bin2dec(string_num):  #Creamos una funcion para transformar de binario a decimal

5

    return str(int(string_num, 2))

6

 

7

data = []                 #Definimos data como un array

8

 

9

GPIO.setmode(GPIO.BCM)    #Ponemos la placa en modo BCM

1

GPIO.setup(4,GPIO.OUT)    #Configuramos el pin 4 como salida

0

GPIO.output(4,GPIO.HIGH)  #Enviamos una señal

1

time.sleep(0.025)         #Pequeña pausa

1

GPIO.output(4,GPIO.LOW)   #Cerramos la señal

1

time.sleep(0.02)          #Pequeña pausa

2

 

1

GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Ponemos el pin 4 en modo lectura

3

 

1

for i in range(0,500): #Lee los bits que conforman la respuesta binaria del sensor

4

    data.append(GPIO.input(4))

1

 

5

#Define algunas variables usadas para calculos más adelante

1

bit_count = 0

6

tmp = 0

1

count = 0

7

HumidityBit = ""

1

TemperatureBit = ""

8

crc = ""

1

 

9

try:   #Hazlo mientras no existan errores, si detectas error salta a "except"

2

#El siguiente codigo lee los bits de respuesta que envia el

0

#sensor y los transforma a un numero decimal leible.

2

 

1

while data[count] == 1:

2

tmp = 1                              

2

count = count + 1

2

 

3

for i in range(0, 32):

2

bit_count = 0

4

 

2

while data[count] == 0:

5

tmp = 1

2

count = count + 1

6

 

2

while data[count] == 1:

7

bit_count = bit_count + 1

2

count = count + 1

8

 

2

if bit_count > 3:

9

if i>=0 and i=16 and i=0 and i=16 and i 3:

4

crc = crc + "1"

3

else:

4

crc = crc + "0"

4

except: #Errores en el bloque

4

print "ERR_RANGE"

5

exit(0) #Salimos

4

 

6

#Aqui obtendriamos las lecturas de humedad y temperatura en un formato mas manejable

4

Humidity = bin2dec(HumidityBit)

7

Temperature = bin2dec(TemperatureBit)

4

 

8

if int(Humidity) + int(Temperature) - int(bin2dec(crc)) == 0: #La comprobacion del CRC se ha validado

4

print "Humidity:"+ Humidity +"%"

9

print "Temperature:"+ Temperature +"C"

5

else: #Si no es valido

0

print "ERR_CRC"

5 1 5 2 5 3 5 4 5 5 5 6 5

7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7

6 7 7 7 8 7 9 8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9 1

Este script a veces falla y nos da ERR_CRC, esto se debe a que no estamos usando un sistema operativo en tiempo real asi que las lecturas a veces suceden fuera de intervalo. Podemos solucionar esto modificando ligeramente el codigo del script o usando directamente alguna de las librerias que existen en GITHUB para este sensor. Un usuario del blog nos ha proporcionado un segundo código que podemos usar si el primero falla, muchas gracias Sergio Correa!

Python import RPi.GPIO as GPIO #Imp import time #Importamo def bin2dec(string_num): #Crea

1

import RPi.GPIO as GPIO   #Importamos las librerias necesarias para usar los pines GPIO

2

import time               #Importamos time para poder realizar pausas

3

def bin2dec(string_num):  #Creamos una función para transformar de binario a decimal

4

    return str(int(string_num, 2))

5

data = []                 #Definimos data como un array

6

GPIO.setmode(GPIO.BCM)    #Ponemos la placa en modo BCM

7

GPIO.setup(4,GPIO.OUT)    #Configuramos el pin 4 como salida

8

GPIO.output(4,GPIO.HIGH)  #Enviamos una señal

9

time.sleep(0.025)         #Pequeña pausa

1

GPIO.output(4,GPIO.LOW)   #Cerramos la señal

0

time.sleep(0.02)          #Pequeña pausa

1

GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Ponemos el pin 4 en modo lectura

1

for i in range(0,500): #Lee los bits que conforman la respuesta binaria del sensor

1

    data.append(GPIO.input(4))

2

#Define algunas variables usadas para cálculos más adelante

1

count = 0

3

inicio = 0

1

word = ""

4

crc_check = 0

1

try:   #Hazlo mientras no existan errores, si detectas error salta a "except"

5

#El siguiente código lee los bits de respuesta que envia el

1

#sensor y los transforma a un número decimal leible.

6

#Buscamos el primer canto de bajada

1

    inicio = data.index(0)

7

  

1

    flag = 0  

8

    for senal in data[inicio:500]:

1

        if senal == 1:

9

            flag = 1

2

            count = count + 1

0

 

2

        if senal == 0 and flag == 1:

1

            flag = 0

2

            if count < 4: word = word + "0"

2

            else: word = word + "1"

2

            count = 0              

3

 

2

    Humidity = bin2dec(word[0:8])

4

    Temperature = bin2dec(word[16:24])

2

    crc = bin2dec(word[32:40])

5

          

2

except:

6

    print "ERR_RANGE"

2

    exit(0)

7

  

2

crc_check = int(Humidity) + int(Temperature) - int(crc)

8

 

2

if  crc_check < 2 and crc_check > -2: #La comprobacion del CRC se ha validado

9

    print "Humidity:"+ str(Humidity) +" %"

3

    print "Temperature:"+ str(Temperature) +" C"

0

else: #Si no es válido

3

    print "ERR_CRC ("+ str(crc) +"): ERR_H ("+str(Humidity)+") or ERR_T ("+str(Temperature)+")"

1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4

1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9

módulo de sensor de sonido de voz micrófono para arduino descripción:  este es el módulo sensor de sonido de voz micrófono para arduino  marca: Keyes  modelo ky-038  adoptar chip principal LM393  micrófono de condensador eléctrico  cuenta con salida de señal de un solo canal  señal de salida de bajo nivel utilizado para la luz de control de sonido  gran módulo para el sistema de alarma de sonido  voltaje de funcionamiento: 4-6v dc definición de interfaz:  ao: sensor de salida analógica  GND: Tierra  vcc: rango de entrada de fuente de alimentación: 3v-24v.  hacer: salida digital (salida del comparador)  dos indicación LED rojo: el poder y el sensor. el poder: el poder está apagado. Sensor: cuando el micrófono detecta sonido alcanza un determinado valor, este LED luz. el paquete incluyó:  1 x módulo de sensor de sonido de voz