天天看點

mlx90614紅外傳感器

mlx90614紅外傳感器

線接法 1

l  vin ↔ 3V  實體引腳 1

l  gnd ↔ gnd  實體引腳 6

l  scl ↔ SCL.1 實體引腳 5

l  sda ↔ SDA.1 實體引腳 3

線接法 2

MLX90614 Sensor Raspberry Pi
VIN 5V (Pin 2)
GND GND (Pin 6)
SCL GPIO 3 (Pin 5)
SDA GPIO 2 (Pin 3)
mlx90614紅外傳感器

安裝IIC庫

sudo apt install i2c-tools

安裝python的smbus

sudo apt install python-smbus

打開IIC

sudo raspi-config 選擇

3. Interface options --5. I2C --  Enable --Yes

檢視位址 i2cdetect -y -a 1

這裡位址是 0x5a

mlx90614紅外傳感器

近距離測試 , 此時 未用 補償算法 

mlx90614紅外傳感器

擷取數值

方法1

mlx90614.py

import smbus

from time import sleep

class MLX90614():

    MLX90614_RAWIR1=0x04

    MLX90614_RAWIR2=0x05

    MLX90614_TA=0x06

    MLX90614_TOBJ1=0x07

    MLX90614_TOBJ2=0x08

    MLX90614_TOMAX=0x20

    MLX90614_TOMIN=0x21

    MLX90614_PWMCTRL=0x22

    MLX90614_TARANGE=0x23

    MLX90614_EMISS=0x24

    MLX90614_CONFIG=0x25

    MLX90614_ADDR=0x0E

    MLX90614_ID1=0x3C

    MLX90614_ID2=0x3D

    MLX90614_ID3=0x3E

    MLX90614_ID4=0x3F

    comm_retries = 5

    comm_sleep_amount = 0.1

    def __init__(self, address=0x5a, bus_num=1):

        self.bus_num = bus_num

        self.address = address

        self.bus = smbus.SMBus(bus=bus_num)

    def read_reg(self, reg_addr):

        err = None

        for i in range(self.comm_retries):

            try:

                return self.bus.read_word_data(self.address, reg_addr)

            except IOError as e:

                err = e

                #"Rate limiting" - sleeping to prevent problems with sensor

                #when requesting data too quickly

                sleep(self.comm_sleep_amount)

        #By this time, we made a couple requests and the sensor didn't respond

        #(judging by the fact we haven't returned from this function yet)

        #So let's just re-raise the last IOError we got

        raise err

    def data_to_temp(self, data):

        temp = (data*0.02) - 273.15

        return temp

    def get_amb_temp(self):

        data = self.read_reg(self.MLX90614_TA)

        return self.data_to_temp(data)

    def get_obj_temp(self):

        data = self.read_reg(self.MLX90614_TOBJ1)

if __name__ == "__main__":

    sensor = MLX90614()

    print(sensor.get_amb_temp())

    print(sensor.get_obj_temp())

example.py

import time

from mlx90614 import MLX90614

thermometer_address = 0x5a

thermometer = MLX90614(thermometer_address)

while True: 

  print thermometer.get_amb_temp()

  print thermometer.get_obj_temp()

  time.sleep(1.5)

python2 example.py    即可獲得資料

mlx90614紅外傳感器

方法2

pip3 install adafruit-circuitpython-mlx90614

Read_data.py

import board

import adafruit_mlx90614

# The MLX90614 only works at the default I2C bus speed of 100kHz.

# A higher speed, such as 400kHz, will not work.

i2c = board.I2C()

mlx = adafruit_mlx90614.MLX90614(i2c)

# temperature results in celsius

print("Ambent Temp: ", mlx.ambient_temperature)

print("Object Temp: ", mlx.object_temperature)

調用 : python3 Read_data.py

mlx90614紅外傳感器