from machine import Pin, ADC, I2C
import ssd1306
import time
# Configuración de los pines GPIO para LEDs y buzzer
buzzer = Pin(18, Pin.OUT)
led_rojo = Pin(17, Pin.OUT)
led_verde = Pin(27, Pin.OUT)
# Configuración del sensor de gas simulado con el potenciometro (ADC en GP26 - A0)
sensor_gas = ADC(26)
# Configuración del bus I2C para el display OLED
i2c = I2C(0, scl=Pin(5), sda=Pin(4)) # I2C0 en GP4 (SDA) y GP5 (SCL)
oled = ssd1306.SSD1306_I2C(128, 64, i2c) # Tamaño de pantalla 128x64
# Umbrales para las alarmas
umbral_gas = 500
umbral_alarma_temprana = 400
# Variables para gestionar el contador de alarmas
contador_alarmas = 0
alarma_activada = False # Para evitar contar varias veces la misma alarma
while True:
# Leer el valor del sensor de gas (potenciometro)
valor_gas = sensor_gas.read_u16() // 64 # Escalar a 0-1023
# Limpiar la pantalla OLED
oled.fill(0)
# Mostrar el valor del sensor de gas
oled.text('Sensor de Gas', 0, 0)
oled.text(f'Valor: {valor_gas}', 0, 20)
# Mostrar el contador de alarmas en todo momento
oled.text(f"N ALARM: {contador_alarmas}", 0, 50)
# Imprimir en consola el valor del sensor de gas
print(f"Valor del sensor de gas: {valor_gas}")
# Verificar si el valor del gas está en el rango de alarma temprana
if umbral_alarma_temprana <= valor_gas < umbral_gas:
oled.text('Alarma temprana', 0, 40)
print("Alarma temprana: niveles cercanos a 500")
# Verificar si el valor del gas ha superado el umbral crítico (mayor a 500)
if valor_gas >= umbral_gas and not alarma_activada:
contador_alarmas += 1 # Incrementar contador cada vez que pase de 500
alarma_activada = True
oled.text(f"ALERTA: GAS ALTO", 0, 40)
print(f"ALERTA: Gas alto! Alarmas detectadas: {contador_alarmas}")
# Activar buzzer y LED rojo
buzzer.value(1)
led_rojo.value(1)
led_verde.value(0)
# Verificar si el valor del gas ha bajado por debajo del umbral de 400
if valor_gas < umbral_alarma_temprana:
alarma_activada = False # Permitir que el contador se vuelva a incrementar en una futura alarma
buzzer.value(0)
led_rojo.value(0)
led_verde.value(1)
oled.text('Niveles Normales', 0, 40)
print("Niveles de gas normales")
# Actualizar el contenido de la pantalla OLED
oled.show()
# Pausa de un segundo
time.sleep(1)