Skip to main content

Grove - Sensor de Temperatura I2C de Alta Precisión (MCP9808)

El Grove - Sensor de Temperatura I2C de Alta Precisión (MCP9808) es un módulo digital de alta precisión basado en el MCP9808. A diferencia de otros sensores, puedes elegir la resolución de medición de este sensor. Además de las mediciones de temperatura de alta precisión, también ofrecemos alerta de temperatura programable. Utilizamos un pin separado para generar la señal de alarma, encontrarás que es muy conveniente usar esta señal como una interrupción para controlar otras placas.

En resumen, creemos que este sensor será una nueva estrella para el control de temperatura.

Actualizable a Sensores Industriales

Con el controlador S2110 y el registrador de datos S2100 de SenseCAP, puedes convertir fácilmente el Grove en un sensor LoRaWAN®. Seeed no solo te ayuda con la creación de prototipos, sino que también te ofrece la posibilidad de expandir tu proyecto con la serie SenseCAP de sensores industriales robustos.

Los sensores industriales de la serie SenseCAP S210x proporcionan una experiencia lista para usar para la detección ambiental. Por favor, consulta el Sensor Inalámbrico de Temperatura y Humedad S2101 con mayor rendimiento y robustez para el monitoreo de la calidad del aire. La serie incluye sensores para humedad del suelo, temperatura y humedad del aire, intensidad de luz, CO2, EC, y una estación meteorológica 8 en 1. Prueba la última SenseCAP S210x para tu próximo proyecto industrial exitoso.

Sensor Industrial SenseCAP
S2101 Temp. y Humedad del Aire

Características

  • Alta Precisión

    • ±0.25 (típico) de -40°C a +125°C
    • ±0.5°C (máximo) de -20°C a 100°C
    • ±1°C (máximo) de -40°C a +125°C
  • Resolución de Medición Seleccionable por el Usuario

    • +0.5°C, +0.25°C, +0.125°C, +0.0625°C
  • Salida de Alerta de Temperatura Programable por el Usuario

  • Interfaz I2C

Especificaciones

ElementoValor
Voltaje de trabajo3.3V/5V
Rango de operación-40°C a +125°C
Interfaz digitalI2C estándar 400 kHz
Dirección I2C0x18(predeterminada)/ 0x18~0x1F(opcional)

Aplicaciones

  • Aplicaciones Industriales
  • Congeladores y Refrigeradores Industriales
  • Procesamiento de Alimentos
  • Computadoras Personales y Servidores
  • Periféricos de PC
  • Electrónicos de Consumo
  • Dispositivos Portátiles/de Mano

Descripción General del Hardware

Mapa de Pines

Dirección I2C

Ofrecemos 3 conjuntos de pads en la parte posterior del PCB. Por defecto AD0~AD2 están todos conectados a los pads de nivel bajo, puedes cortar esos pads y soldarlos al otro lado (nivel alto). La dirección I2C es una dirección de 7 bits 0011A0A1A2. 0011 es el código de dirección, que es la configuración de fábrica, no podemos cambiarlo. A0A1A2 es la dirección esclava, podemos cambiarla. La configuración por defecto es A0=0/A1=0/A2=0, por lo que la dirección I2C por defecto es 0011000. Normalmente la dirección debería ser de 8 bits, por lo que necesitamos agregar un bit 0 al MSB (Bit Más Significativo), entonces obtenemos 0001,1000. Esta es una dirección binaria, a menudo usamos la dirección hexadecimal en el código, así que convirtamos la dirección binaria a una dirección hexadecimal, aquí obtenemos 0x18. De la misma manera, si soldamos todos los pads al nivel alto, obtendremos 0001,1111, que es 0x1F. Así que la dirección I2C va desde 0x18 hasta 0x1F, entre ellas, puedes elegir la que quieras, solo asegúrate de cambiar la dirección I2C en el archivo Seeed_MCP9808.h en la librería Grove_Temperature_sensor_MCP9808-master.

#define DEFAULT_IIC_ADDR  0X18

Mapa de direcciones

A2=0A0=0A0=1
A1=0A2A1A0-000,0x18A2A1A0-001,0x19
A1=1A2A1A0-010,0x1AA2A1A0-011,0x1B
A2=1A0=0A0=1
A1=0=0A2A1A0-100,0x1CA2A1A0-101,0x1D
A1=0=1A2A1A0-110,0x1EA2A1A0-111,0x1F

Pad ALE

Puedes ver el pad ALE en la parte posterior de la PCB. La señal de alerta que sale de este pad puede usarse como una señal de interrupción externa para otros controladores. La salida predeterminada es alta, en esta placa debería ser 3.3V. Cuando se cumple la condición, el voltaje de salida se vuelve bajo (0V). Puedes configurar la condición cuando termines este wiki 😄

Esquemático

Dirección I2C

Como mencionamos anteriormente, usamos esos tres conjuntos de pads para seleccionar la dirección I2C, si quieres cambiar la dirección predeterminada, puedes cortar el cable y volver a soldarlo.

MCP9808

Como puedes ver, el pad ALE está conectado a los 3.3V a través de una resistencia pull-up.

Circuito cambiador de nivel bidireccional

Este es un circuito típico cambiador de nivel bidireccional para conectar dos secciones de voltaje diferentes de un bus I2C. El bus I2C de este sensor usa 3.3V, si el bus I2C del Arduino usa 5V, este circuito será necesario. En el esquemático anterior, Q6 y Q5 son MOSFET de canal N 2N7002A, que actúan como un interruptor bidireccional. Para entender mejor esta parte, puedes consultar el AN10441

tip

En esta sección solo te mostramos parte del esquemático, para el documento completo consulta los Recursos

Plataformas Compatibles

ArduinoRaspberry Pi
caution

Las plataformas mencionadas anteriormente como compatibles son una indicación de la compatibilidad de software o teórica del módulo. Solo proporcionamos biblioteca de software o ejemplos de código para la plataforma Arduino en la mayoría de los casos. No es posible proporcionar biblioteca de software / código de demostración para todas las plataformas MCU posibles. Por lo tanto, los usuarios tienen que escribir su propia biblioteca de software.

Primeros Pasos

Jugar Con Arduino

Hardware

Materiales requeridos

Seeeduino V4.2Base ShieldGrove - I2C High Accuracy Temperature Sensor
Obtener Uno AhoraObtener Uno AhoraObtener Uno Ahora
note

1 Por favor conecta el cable USB con cuidado, de lo contrario podrías dañar el puerto. Por favor usa el cable USB con 4 cables en el interior, el cable de 2 cables no puede transferir datos. Si no estás seguro sobre el cable que tienes, puedes hacer clic aquí para comprar

2 Cada módulo Grove viene con un cable Grove cuando lo compras. En caso de que pierdas el cable Grove, puedes hacer clic aquí para comprar.

  • Paso 1. Conecta el Grove - I2C High Accuracy Temperature Sensor al puerto I2C del Grove-Base Shield.

  • Paso 2. Conecta el Grove - Base Shield al Seeeduino.

  • Paso 3. Conecta el Seeeduino a la PC mediante un cable USB.

note

Si no tenemos Grove Base Shield, también podemos conectar directamente este módulo al Seeeduino como se muestra a continuación.

SeeeduinoGrove-MCP9808
5VRojo
GNDNegro
SDABlanco
SCLAmarillo

Software

note

Si esta es la primera vez que trabajas con Arduino, te recomendamos encarecidamente que veas Comenzando con Arduino antes de empezar.

  • Paso 1. Descarga la librería Grove MCP9808 desde Github.

  • Paso 2. Consulta Cómo instalar una librería para instalar la librería para Arduino.

  • Paso 3. Reinicia el IDE de Arduino. Abre el ejemplo a través de la ruta: File --> Examples --> Grove Temperature Sensor MCP9808 --> MCP9808_demo_with_limit.

tip

Como se muestra en la imagen anterior, proporcionamos dos demos para ti, MCP9808_basic_demo y MCP9808_demo_with_limit. El MCP9808_basic_demo solo proporciona la temperatura, la función de alerta está deshabilitada. Y para el demo MCP9808_demo_with_limit, la función de alerta está habilitada. Si solo quieres la temperatura, el demo básico estará bien. Si quieres usar la función de alerta, debes elegir el demo con límite.

  • Paso 4. Sube el demo. Si no sabes cómo subir el código, por favor revisa Cómo subir código.

  • Paso 5. Abre el Monitor Serie del IDE de Arduino haciendo clic en Tool-> Serial Monitor. O presiona las teclas ++ctrl+shift+m++ al mismo tiempo. Si todo va bien, obtendrás el resultado.

El resultado debería ser como

sensor init!!
temperature value is: 29.31
temperature value is: 29.31
temperature value is: 29.31
temperature value is: 29.25
temperature value is: 29.25
temperature value is: 29.25
temperature value is: 29.25
temperature value is: 29.25
temperature value is: 29.19
temperature value is: 29.25

Ahora, veamos cómo usar el ALE Pad.

El código en la demostración MCP9808_demo_with_limit:

#include "Seeed_MCP9808.h"


MCP9808 sensor;

void setup()
{
Serial.begin(115200);
if(sensor.init())
{
Serial.println("sensor init failed!!");
}
//Set upper limit is 30°C
sensor.set_upper_limit(SET_UPPER_LIMIT_ADDR,0x01e0);
delay(10);
//Set upper limit is 32°C
sensor.set_critical_limit(SET_CRITICAL_LIMIT_ADDR,0x0200);
delay(10);
//Enable the alert bit.The alert bit outputs low when the temperature value beyond limit.Otherwise stays high.
sensor.set_config(SET_CONFIG_ADDR,0x0008);

Serial.println("sensor init!!");
}


void loop()
{
float temp=0;
//Get temperature ,a float-form value.
sensor.get_temp(&temp);
Serial.print("temperature value is: ");
Serial.println(temp);
delay(1000);
}

Además de medir la temperatura, este código también implementa una función. Cuando la temperatura es menor a 30℃, la salida del ALE Pad es alta por defecto-3.3v. Cuando la temperatura es mayor a 30℃, el ALE Pad tendrá una salida baja-0v.

Entonces podrías preguntar, ¿qué pasa si quiero cambiar la temperatura umbral? OK, por favor ve a la línea 14:

sensor.set_upper_limit(SET_UPPER_LIMIT_ADDR,0x01e0);

Usamos esta función para controlar la temperatura, el primer parámetro es la dirección del registro UPPER_LIMIT y el segundo parámetro 0x01e0 es la temperatura hexadecimal que establecemos, como mencionamos anteriormente, son 30℃. El 0x01e0 es un número hexadecimal de cuatro bits, el último bit a la derecha representa la parte fraccionaria. Lo establecemos como 0, entonces el número válido es 0x1e. e significa 14 en decimal, y el bit superior 1 significa 16 en decimal. Así que 0x1e equivale a 16+14=30.

Proporcionamos 3 funciones en el archivo Seeed_MCP9808.cpp.
sensor.set_upper_limit(SET_UPPER_LIMIT_ADDR,u16); sensor.set_lower_limit(SET_LOWER_LIMIT_ADDR,u16); sensor.set_critical_limit(SET_CRITICAL_LIMIT_ADDR,u16);

As we mentioned before, the default output of the ALE Pad is high, and the output level goes low when the temperature meets certain conditions. You can use those 3 functions to set your own conditions.

sensor.set_lower_limit(SET_LOWER_LIMIT_ADDR,u16) is used to set the lower temperature limit, u16 is the 4 bit Hexadecimal temperature we set. When the temperature is lower than the value we set, the output of the ALE Pad will goes down.

sensor.set_upper_limit(SET_UPPER_LIMIT_ADDR,u16) is used to set the upper temperature limit, also u16 is the 4 bit Hexadecimal temperature we set. When the temperature is higher than the value we set, the output of the ALE Pad will goes down.

sensor.set_critical_limit(SET_CRITICAL_LIMIT_ADDR,u16) is used for the inturrupt mode, in this wiki we only show you how to work as a comparator. If you want to know more, please check the datasheet .

Now we can set a condition zone by lower_limit and upper_limit, when the temperature comes to the condition zone, the output will goes low.

For example, if you want the ALE Pad output high between 28℃ and 30℃, and output low when the tempareture is higer than 30℃ or lower than 28℃. The code should be like:


sensor.set_lower_limit(SET_LOWER_LIMIT_ADDR,0x01c0);
delay(10);
sensor.set_upper_limit(SET_UPPER_LIMIT_ADDR,0x01e0);
delay(10);

caution

Por favor, asegúrate de que el upper_limit sea mayor que el lower_limit, de lo contrario no funcionará correctamente. Y por favor asegúrate de que el critical_limit sea mayor que el upper_limit. Se requiere un cierto delay() para asegurar que los registros se escriban correctamente.

Jugar con Raspberry Pi

Hardware

  • Paso 1. Elementos utilizados en este proyecto:
Raspberry piGrove Base Hat para RasPiGrove - Sensor de Temperatura I2C de Alta Precisión
Consigue UNO AhoraConsigue UNO AhoraConsigue UNO Ahora
  • Paso 2. Conecta el Grove Base Hat al Raspberry.
  • Paso 3. Conecta el Grove - I2C High Accuracy Temperature Sensor al puerto I2C del Base Hat.
  • Paso 4. Conecta el Raspberry Pi a la PC a través del cable USB.

Software

caution

Si estás usando Raspberry Pi con Raspberrypi OS >= Bullseye, tienes que usar esta línea de comandos solo con Python3.

  • Paso 1. Sigue Setting Software para configurar el entorno de desarrollo e instalar grove.py en tu raspberry pi.

  • Paso 2. Ejecuta los siguientes comandos para ejecutar el código.

# virutalenv for Python3
virtualenv -p python3 env
source env/bin/activate
#enter commmand
grove_high_accuracy_temperature

Following is the mcp9808.py code.


import math
import threading
from grove.i2c import Bus
from grove.temperature import Temper

RES_LOW = 0x00
RES_MEDIUM = 0x01
RES_HIGH = 0x02
RES_PRECISION = 0x03

MCP9808_REG_AMBIENT_TEMP = 0x05

class TemperMCP9808(Temper):
def __init__(self, address=0x18):
self._addr = address
self._bus = Bus()
self._resolution = Temper.RES_1_2_CELSIUS

def _derive_res(self, res):
ares = -1
if res >= Temper.RES_1_2_CELSIUS:
ares = RES_LOW
elif res >= Temper.RES_1_4_CELSIUS:
ares = RES_MEDIUM
elif res >= Temper.RES_1_8_CELSIUS:
ares = RES_HIGH
elif res >= Temper.RES_1_16_CELSIUS:
ares = RES_PRECISION

if ares < 0:
return False
self._bus.write_byte(self._addr, ares)
# print("ares = {}".format(ares))
return True

@property
def temperature(self):
result = self._bus.read_word_data(self._addr, MCP9808_REG_AMBIENT_TEMP)
# Swap the bytes
data = (result & 0xff) << 8 | (result & 0xff00) >> 8
# print("data = {}".format(data))
# print("data = {}".format(hex(data)))
# Check if the temperature is negative
if data & 0x1000:
data = -((data ^ 0x0FFF) + 1)
else:
data = data & 0x0fff
return data / 16.0
success

Si todo va bien, podrás ver el siguiente resultado


(env)pi@raspberrypi:~ grove_high_accuracy_temperature
Insert Grove - I2C-High-Accuracy-Temperature
to Grove-Base-Hat any I2C slot
Detecting temperature...
24.5 Celsius
24.5 Celsius
24.375 Celsius
^CTraceback (most recent call last):
File "grove_high_accuracy_temperature.py", line 54, in <module>
main()
File "grove_high_accuracy_temperature.py", line 50, in main
time.sleep(1)
KeyboardInterrupt

Puedes salir de este programa simplemente presionando ctrl+c.

Visor Esquemático Online

Recursos

Proyecto

Este es el video de introducción de este producto, demostraciones simples, puedes intentarlo.

Soporte Técnico y Discusión del Producto

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para atender diferentes preferencias y necesidades.

Loading Comments...