estacion metereologica1

Les traigo un  proyecto con Raspberry Pi.Viendo como  construir una estación meteorológica que mande datos por una red inalambrica.

Decidí usar una Raspberry Pi a + principalmente debido a su bajo consumo de energía. Para enviarme los resultados, utilicé el módulo EFCom Pro GPRS / GSM , que puede enviar un mensaje de texto directamente a mi teléfono móvil con los resultados.

Elementos Requeridos

Raspberry Pi A +

módulo EFCom Pro GPRS / GSM

 tarjeta SIM

Protoboard

 MCP3008 ADC

 LDR

 LM35 (sensor de temperatura)

DHT22 (Sensor de humedad)

TGS2600 Sensor general de calidad del aire

Resistencia de 2.2 KΩ

Resistencia de  22 KΩ

Resistencia de  10 KΩ

10 cables hembra

Surtido de alambre de calibre simple

caja de conexiones al aire libre individual

caja mas grande de conexiones al aire libre 

conector de cable a prueba de agua

Ojales de cable semi ciegos de 2 x 20 mm

Pasos

1_ El primer componente que se conecta es este convertidor analógico a digital MCP3008. Esto puede tomar hasta 8 entradas analógicas y se comunica con la Raspberry Pi a través de SPI. Con el chip hacia arriba y el semicírculo cortado en el extremo más alejado, los pines de la derecha se conectan a la Raspberry Pi. Conéctelos como se muestra.

2_Los pines de la izquierda son las 8 entradas analógicas, numeradas 0-7 de arriba a abajo. Solo usaremos los primeros 3 (CH0, CH1, CH2), para el LDR, el sensor de gas general (TGS2600) y el sensor de temperatura (LM35). Primero conecte el LDR como se muestra en el diagrama. Un lado a tierra y el otro a 3,3 V mediante una resistencia de 2,2 KΩ y CH0.

3_A continuación, conecte el “sensor general de gas“. Este sensor de gas se utiliza para la detección de contaminantes del aire como el hidrógeno y el monóxido de carbono. Todavía no he descubierto cómo obtener concentraciones específicas, por lo que por ahora el resultado de este sensor es un nivel de porcentaje básico, donde el 100% está completamente saturado. Con el sensor hacia arriba (pines en la parte inferior), el pin directamente a la derecha del afloramiento pequeño es el pin 1 y luego los números aumentan en el sentido de las agujas del reloj alrededor del pin. Por lo tanto, los pines 1 y 2 se conectan a 5 V, el pin 3 se conecta a CH1 y tierra mediante una resistencia de 22 K 22 y el pin 4 se conecta directamente a tierra.

4_El sensor analógico final para conectar es el sensor de temperatura LM35. Esto tiene 3 pines. Tome el sensor de modo que el lado plano sea el más cercano a usted, el pin más a la izquierda se conecta directamente a 5V El pin central se conecta a CH2 y el pin más a la derecha se conecta directamente a tierra.

5_El último componente para conectar es el sensor de humedad DHT22. Este es un sensor digital, por lo que se puede conectar directamente a la Raspberry Pi. Tome el sensor con la rejilla hacia usted y las cuatro clavijas en la parte inferior. Los pines se ordenan desde 1 a la izquierda. Conecte 1 a 3.3V. El pin 2 va a GPIO4 y 3.3V a través de una resistencia de 10KΩ. Deje el pin 3 desconectado y el pin 4 va directamente a tierra.

Ahora que se han construido los circuitos de detección, debe haber una forma de recibir los resultados. Ahí es donde entra el módulo GSM. Lo usaremos para enviar los resultados a través de la red celular en un SMS, una vez al día.

Arranca tu Raspberry Pi con una imagen estándar de Raspbian. Ahora cambia el archivo “/boot/cmdline.txt” desde:

dwc_otg.lpm_enable = 0 console = ttyAMA0,115200 kgdboc = ttyAMA0,115200 console = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 elevator = deadline rootwait

a:

dwc_otg.lpm_enable = 0 console = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 elevator = deadline rootwait

eliminando la sección de arriba del texto  por el texto de abajo.

En segundo lugar, debe editar el archivo “/ etc / inittab”, comentando la segunda línea en la siguiente sección:

Spawn a getty en la línea serial de Raspberry Pi
T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100

Para que lea:

#Spawn a getty en la línea serial de Raspberry Pi
# T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100

y reinicie el pi. Ahora el puerto serie debe ser libre para comunicarse con lo que desee. Es hora de conectar el módulo GSM. Eche un vistazo al diagrama del circuito en el paso anterior y las imágenes de arriba para ver cómo se hace esto. Básicamente, TX está conectado a RX y RX está conectado a TX. En la Raspberry Pi TX y RX están GPIO 14 y 15 respectivamente.

Ahora, probablemente querrá comprobar que el módulo está funcionando, ¡así que intentemos enviar un mensaje de texto! Para esto necesitas descargar Minicom. Es un programa que te permite escribir en el puerto serie. Utilizar:

sudo apt-get install minicom

Una vez que se ha instalado, se puede abrir minicom con el siguiente comando:

minicom -b 9600 -o -D / dev / ttyAMA0

9600 es la velocidad en baudios y / dev / ttyAMA0 es el nombre del puerto en serie del Pi. Esto abrirá un emulador de terminal en el que todo lo que escriba aparecerá en el puerto serie, es decir, se enviará al módulo GSM.

Inserte su tarjeta SIM recargada en el módulo GSM y presione el botón de encendido. Después de lo cual debería encenderse un led azul.

Ahora verificamos que Raspberry Pi haya detectado el módulo con el siguiente comando:

“AT”

El módulo debe responder con:

“OK”

¡Muy Bueno! Luego debemos configurar el módulo para enviar un SMS como texto en lugar de binario:

AT + CMGF = 1

de nuevo la respuesta debe ser “OK”. Ahora escribimos el comando para enviar un SMS:

AT + CMGS =" +54 ************"

Reemplaza las estrellas con tu numero.

El módem con responder con “>” después de lo cual puede escribir su mensaje. Para enviar el mensaje presione <CTRL-Z>. Eso es todo, y con un poco de suerte, acaba de recibir un mensaje de texto de su Raspberry Pi.

Bueno, ahora que sabemos que el módulo GSM está funcionando, puede cerrar minicom; No lo necesitaremos para el resto del proyecto.Ahora también podría ser un buen momento para probar con el módulo PiJuice. Simplemente se conecta al GPIO de la Raspberry Pi, todos los cables conectados a la Pi simplemente se enchufan directamente en las salidas de pines correspondientes en la PiJuice.

Aqui abajo les dejo el programa completo:

import spidev
import time
import os
import serial
import sys
import Adafruit_DHT

# set delay
#delay = 5
delay = 86400


#seteo para sensor de humedad
sensor = 22
pin = 4

# abre SPI bus
spi = spidev.SpiDev()
spi.open(0,0)

# lee sensor de humedad
def ReadHumidity(places):
  humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
  humidity = round(humidity,places)
  return humidity

# lee en SPI port especificado en el canal
def ReadChannel(channel):
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) +adc[2]
  return data

# convierte los datos seriales 
def ConvertVolts(data,places):
  volts = (data * 3.3)/float(1023)
#	volts = round(volts,places)
  return volts

# convierte voltage  a porcentage
def ConvertPercent(VoltReading,places,x):
  if x==1:
    Percentage = ((3.3-VoltReading)/3.3)*100
  elif x==2:
    Percentage = (VoltReading/3.3)*100
  Percentage=round(Percentage,places)
  return Percentage 

# convierte temperatura voltage a C
def ConvertTemp(TempVolts,places):
  Temp = (TempVolts/0.01)
  Temp = round(Temp,places)
  return Temp		

# envia los resultados por SMS a el nro de celular especificado
def SendMessage(LightReading,GasReading,TempReading,HumidityReading):
  SMS = "Light = " + str(float(LightReading)) + "%, Gas = " + str(float(GasReading)) + "%, Temp = " + str(float(TempReading)) + "C, Humidity = " + str(float(HumidityReading)) + "%"
  port.write("AT\r")
  response=port.readlines(None)
  print (response)
  port.write("AT+CMGF=1\r")
  response=port.readlines(None)
  print (response)
  port.write('AT+CMGS="+54**********"\r') # pone tu nro de celular aqui 
  response=port.readlines(None)
  print (response)
  port.write(str(SMS)+"\r")
  port.write(chr(26))
  response=port.readlines(None)

#setea sensor de canales en MCP3008
light_channel = 0
gas_channel   = 1
temp_channel  = 2

# seteo modem 
print "Initialising Modem..."
port = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=3.0)
port.write("AT\r")
response = port.readlines(None)
print (response)

while True:
#toma la humedad leída
  humidity_percentage = ReadHumidity(2)

#toma la intensidad de luz leida y los convierte a porcentaje
  light_level      = ReadChannel(light_channel)
  light_volts      = ConvertVolts(light_level,2)
  light_percentage = ConvertPercent(light_volts,2)
  light_percentage = ConvertPercent(light_volts,2,2)

#toma la lectura de gas y los convierte a porcentaje
  gas_level      = ReadChannel(gas_channel)
  gas_volts      = ConvertVolts(gas_level,2)
  gas_percentage = ConvertPercent(gas_volts,2)	
  gas_percentage = ConvertPercent(gas_volts,2,1)	

#toma la temperatura leida y los convierte a grados C
  temp_level  = ReadChannel(temp_channel)
  temp_volts  = ConvertVolts(temp_level,2)
  temp_C      = ConvertTemp(temp_volts,2)

# envia los resultados al celular por SMS
  SendMessage(light_percentage,gas_percentage,temp_C,humidity_percentage)

  print "______________________________"
  print("Humidity: {}%". format(humidity_percentage))  
  print("Light level: {}%". format(light_percentage))
  print("Gas  : {}%". format(gas_percentage))
  print("Temperature : {}C". format(temp_C))

  time.sleep(delay)

Esto está configurado para enviar datos una vez al día. Para fines de prueba, esto no es bueno, por lo que es posible que desee editar el programa. Esto se hace fácilmente; solo abre el archivo; “sudo nano estacion_met.py”. Cerca de la parte superior hay una sección de “retraso establecido”. Comente la línea “retraso = 86400” y elimine el comentario “retraso = 5”. Ahora los resultados serán enviados una vez cada 5 segundos. También querrá cambiar el programa para que contenga su propio número de teléfono móvil. Encuentre donde dice “+54 **********” y reemplace las estrellas con su propio número.

Antes de ejecutar el programa, solo tendrá que descargar una biblioteca para leer el sensor de humedad DHT22:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

 

Y la biblioteca necesita ser instalada:

cd Adafruit_Python_DHT
sudo apt-get update
sudo apt-get install build-essential python-dev
sudo python setup.py install

Genial, ahora puedes probar el programa.

sudo python estacion_met.py

Como el programa se está ejecutando, los resultados deben enviarse a su móvil, pero también deben imprimirse en el terminal cada 5 segundos.

Saludos Carlitos

views
64

 


ElectroMercado

  • ideas_/_inventos | programación | raspberry_pi | otros
2 Comentarios
  1. Luciano
    Luciano 6 meses

    Buenisimo 👏👏👏 @carlitos145.

    1+

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account