#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_NeoPixel.h>
// Configuración del sensor DS18B20
#define ONE_WIRE_BUS 2 // Pin donde está conectado el sensor DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Configuración del NeoPixel
#define PIN_NEOPIXEL 3 // Pin donde está conectado el NeoPixel
#define NUM_PIXELS 16 // Número de LEDs en el NeoPixel
Adafruit_NeoPixel strip(NUM_PIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
// Rangos de temperatura
#define TEMP_MIN -55 // Temperatura mínima (-55 °C)
#define TEMP_MAX 125 // Temperatura máxima (125 °C)
void setup() {
// Inicializar comunicación serial
Serial.begin(9600);
// Inicializar el sensor DS18B20
sensors.begin();
// Inicializar el NeoPixel
strip.begin();
strip.show(); // Apagar todos los LEDs al inicio
}
void loop() {
// Solicitar la temperatura actual
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0); // Obtener la temperatura en °C
// Mostrar la temperatura en el monitor serial
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.println(" °C");
// Mapear la temperatura a un color
uint32_t color = mapTemperatureToColor(tempC);
// Encender todos los LEDs del NeoPixel con el color calculado
for (int i = 0; i < NUM_PIXELS; i++) {
strip.setPixelColor(i, color);
}
strip.show();
// Esperar un segundo antes de la siguiente lectura
delay(1000);
}
// Función para mapear la temperatura a un color RGB
uint32_t mapTemperatureToColor(float temperature) {
// Limitar la temperatura dentro del rango válido
if (temperature < TEMP_MIN) temperature = TEMP_MIN;
if (temperature > TEMP_MAX) temperature = TEMP_MAX;
// Calcular el porcentaje de la temperatura en el rango total
float percentage = (temperature - TEMP_MIN) / (TEMP_MAX - TEMP_MIN);
// Definir los colores base
uint8_t red = 0, green = 0, blue = 0;
if (percentage < 0.5) {
// De azul oscuro a blanco (frío a neutro)
blue = 255;
red = green = (uint8_t)(percentage * 2 * 255); // Aumentar rojo y verde gradualmente
} else {
// De blanco a rojo (neutro a caliente)
red = 255;
green = (uint8_t)((1.0 - percentage) * 2 * 255); // Disminuir el verde
blue = 0;
}
// Devolver el color RGB
return strip.Color(red, green, blue);
}
Loading
ds18b20
ds18b20