# Autor: David Marchena Martinez # Fecha: 19/01/2019 # Mail: davidmarxena@gmail.com # ****************************** # *Calcula la cantidad de UV * # ****************************** #!/usr/bin/env python3 # coding: utf-8 import datetime import time import convert_ard_TO_ras import writefile import busio import digitalio import board import adafruit_mcp3xxx.mcp3008 as MCP from adafruit_mcp3xxx.analog_in import AnalogIn # importar modulos propios def calcula_UV(UV_ant): i = 0 suma_UV = 0 suma_ant = UV_ant suma_3v3 = 0 # No creamos clase ya que tras 1024 lecturas la aplicaci�n da error cerr�ndo todo # create the spi bus spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI) # create the cs (chip select) Orignalmente D5 (Gpio5, conector 29) cs = digitalio.DigitalInOut(board.D22) # create the mcp object mcp = MCP.MCP3008(spi, cs) try: while i < 12: # Canal 1 #valor_UV = float(ADC3008.ADC3008(1)) valor_UV = AnalogIn(mcp, MCP.P1).value # Canal 2 #valor_3v3 = float(ADC3008.ADC3008(2)) valor_3v3 = AnalogIn(mcp, MCP.P2).value # Homogeneizamos los valores del MPC3008 al ADC de arduino valor_UV = float(convert_ard_TO_ras.Con_ras3v3_TO_ard(valor_UV)) valor_3v3 = float(convert_ard_TO_ras.Con_ras3v3_TO_ard(valor_3v3)) # Evaluamos la UV cada 12 periodos de 5 segundos por tanto 1 minuto if valor_3v3 > 0 and valor_UV > 0: suma_UV = suma_UV + valor_UV suma_3v3 = suma_3v3 + valor_3v3 i = i+1 if i == 12: # Hacemos una media en un minuto de la UV captada suma_UV = float(suma_UV / 12) suma_3v3 = float(suma_3v3 / 12) # web de la formula https://learn.sparkfun.com/tutorials/ml8511-uv-sensor-hookup-guide/all # miramos los voltios pq no es un valor constante +-3.3 suma_UV = float(3.3 / suma_3v3*suma_UV) in_min = 0.99 # Voltage minimo sensor in_max = 2.8 # Voltage Maximo sensor out_min = 0.0 # UV intensidad minima sensor mW/cm^2 out_max = 15.0 # UV intensidad Maxima sensor mW/cm^2 suma_UV = (suma_UV - in_min) * (out_max - out_min) / \ (in_max - in_min) + out_min # Generamos la hora utc = datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S') # Enviamos a la web cuando hay cambios del +-0,5 del valor # Ponemos 0 porque el valor por defecto es 0 y necesitamos una primera toma para que pueda evaluar. if suma_ant==0 or suma_UV >= suma_ant+(0.5) or suma_UV <= suma_ant - (0.5): suma_ant = suma_UV print("UV") print("------------------") print(utc) print("UV " + str(suma_UV)) print("------------------") # Redondeamos a 2 decimales para que la BBDD guarde bien los datos writefile.setfile("UV", round(suma_UV, 2)) time.sleep(5) except (KeyboardInterrupt, SystemExit): raise except: print("error desconocido sensor UV") return suma_ant