# IR termometro con MLX90614

**URL:** <https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143>\
**Category:** Hardware\
**Created:** [June 5, 2016, 7:41am UTC](https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143 "2016-06-05T07:41:54Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![xarrigo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/xarrigo/32/221439_2.png) [@xarrigo](https://forum.arduino.cc/u/xarrigo)\
**Post date:** [June 5, 2016, 7:41am UTC](https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143/1 "2016-06-05T07:41:54Z")

</div>

Cioa a tutti,  
ho acquistato un sensore infrarosso che mi sembra ottimo .... quando va  
MI spiego : il sensore dovrebbe leggere la temperatura di una piastra senza appoggiarci le solite termocoppie e il suo lavoro lo fa egregiamente, ma mi sono accorto che non sempre legge.  
Ho preso il programma di test e ho inserito un po di print ed ecco l'arcano: da spento spesso parte ma si blocca sul primo o secondo step, il collegamento è quanto di più semlice ci sia 5Vcc-GND (esterni GND collegate) SDA-A4, SCL-A5 resistenze di pull-up 4,7k  
La risposta a volte è  
_Fine SETUP_  
_dato : i2c\_start\_wa_it  
a volte  
_Fine SETUP_  
_dato : i2c\_start\_wait i2c\_rep\_start_  
e quando funziona  
_Fine SETUP_  
_dato : i2c\_start\_wait i2c\_rep\_start i2c\_readAck i2c\_readNak i2c\_stop sonda = 24_  
_dato : i2c\_start\_wait i2c\_rep\_start i2c\_readAck i2c\_readNak i2c\_stop sonda = 24_

lo sketch:

```cpp
//IR_termometro_MLX90614
#include <i2cmaster.h>
int t5;
int v = 0;
float Ctemp, Ftemp;
void setup() {
    Serial.begin(9600);
    while(!Serial); 
 i2c_init(); //Initialise the i2c bus
 Serial.println("Fine SETUP");
  }
void loop() {
 {
    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;   
    Serial.print(" dato : ");
  i2c_start_wait(dev+I2C_WRITE);
    Serial.print(" i2c_start_wait ");
  i2c_write(0x07);
    // read
  i2c_rep_start(dev+I2C_READ);
    Serial.print(" i2c_rep_start ");
    data_low = i2c_readAck(); //Read 1 byte and then send ack  
    data_high = i2c_readAck(); //Read 1 byte and then send ack  
  Serial.print(" i2c_readAck ");
    pec = i2c_readNak();
  Serial.print(" i2c_readNak ");
    i2c_stop();
  Serial.print(" i2c_stop ");
    //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
    double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
    double tempData = 0x0000; // zero out the data
    int frac; // data past the decimal point   
    // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01;   
    float celsius = tempData - 273.15;
    t5=celsius;
    Serial.print("sonda = ");
    Serial.println(t5);
    delay(2000);
      }

}

```

Devo dire che sono perplesso per il fatto che a volte va a volte no , senza toccare nulla.  
Ringrazio anticipatamente quanti mi risponderanno

---

<div class="post-metadata">

**Author:** ![astrobeed](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/astrobeed/32/214099_2.png) [@astrobeed](https://forum.arduino.cc/u/astrobeed)\
**Post date:** [June 5, 2016, 7:52am UTC](https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143/2 "2016-06-05T07:52:02Z")

</div>

Non è che stai utilizzando cavi troppi lunghi, o collegamenti poco affidabili, p.e. una breadboard ?

---

<div class="post-metadata">

**Author:** ![seti81](https://avatars.discourse-cdn.com/v4/letter/s/3ab097/32.png) [@seti81](https://forum.arduino.cc/u/seti81)\
**Post date:** [June 5, 2016, 7:55am UTC](https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143/3 "2016-06-05T07:55:10Z")

</div>

Posta uno schema del collegamento e magari una foto..

---

<div class="post-metadata">

**Author:** ![xarrigo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/xarrigo/32/221439_2.png) [@xarrigo](https://forum.arduino.cc/u/xarrigo)\
**Post date:** [June 5, 2016, 8:35pm UTC](https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143/4 "2016-06-05T20:35:41Z")

</div>

> astrobeed:  
> Non è che stai utilizzando cavi troppi lunghi, o collegamenti poco affidabili, p.e. una breadboard ?

si sto usando una breadbord ma con cavi lunghi max 15cm.  
lo schema è semplicissimo : arduinonano collegato alla USB, sensore con alimentazione superstabilizzata 5V2A , le due GND collegate; collegamento tra nano e sensore 2 fili SDA su A4 ardunano e SCL su A5 ardunano  
Ho fatto altre prove e mi sembra quasi che a volte il sensore non parta o se parte poi si blocchi.  
Ho meso i vari serialprint proprio per vedere dove arriva.  
Fatto curioso: se riesco a farlo partire poi continua a darmi le temperature senza mai fermarsi come se si sbloccasse  
grazie dell'interessamento e degli aiuti, arrigo

---

<div class="post-metadata">

**Author:** ![astrobeed](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/astrobeed/32/214099_2.png) [@astrobeed](https://forum.arduino.cc/u/astrobeed)\
**Post date:** [June 6, 2016, 7:28am UTC](https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143/5 "2016-06-06T07:28:06Z")

</div>

E' altamente probabile che il problema è dato proprio dalla breadboard, la I2C è fortemente sensibile alla capacità parassita della linea e le breadboard ne introducono facilmente molta, prova a ridurre le pullup a 1.5 k, se il problema sparisce hai la conferma.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 7, 2021, 1:30am UTC](https://forum.arduino.cc/t/ir-termometro-con-mlx90614/390143/6 "2021-05-07T01:30:36Z")

</div>


