====== liens ====== * BCM2835 lib code : http://www.pibits.net/code/raspberry-pi-mlx90614-infrared-thermometer.php * http://bildr.org/2011/02/mlx90614-arduino/ * https://www.raspberrypi.org/forums/viewtopic.php?t=17738 * S_DATA\electronique\arduino\code\weethermos contient aussi une petite doc sur les shields utilisé ====== cablage ====== ===== mlx90614 ===== * Part No. MLX90614 [[https://github.com/arduinolearning/Datasheets/blob/master/MLX90614.pdf|datasheet ]] * Temperature Code E (-40°C...85°C) K (-40°C…125°C) * Package Code SF (TO-39) * Option Code - X X X (1) (2) (3) * (1) Supply Voltage/ Accuracy * A - 5V * B - 3V * C - Reserved * D - 3V medical accuracy * (2) Number of thermopiles: * A – single zone * B – dual zone * C – gradient compensated* * (3) Package options: * A – Standard package * B – Reserved * C – 35° FOV * D/E – Reserved * F – 10° FOV * G – Reserved * H – 12° FOV (refractive lens) * I – 5° FOV * Standard part -000 * Packing form -TU {{:divers_elec:mlx90614:temperature_mlxclose.jpg|}} [[https://learn.adafruit.com/using-melexis-mlx90614-non-contact-sensors/wiring-and-test|source]] ===== Pi ===== WiringPi Pin = WPP ^ Fonction ^ WPP ^ Name ^ Header ^^ Name ^ WPP ^ Fonction ^ | mlx90614 pwr | | 3.3v | 1 | 2 | 5v | | | | mlx90614 SDA (pull up on pi board) | 8 | SDA | 3 | 4 | 5v | | | | mlx90614 SCL (pull up on pi board) | 9 | SCL | 5 | 6 | 0v | | | | | 7 | GPIO7 | 7 | 8 | TxD | 15 | | | mlx90614 gnd | | 0v | 9 | 10 | RxD | 16 | | | | 0 | GPIO0 | 11 | 12 | GPIO1 | 1 | | | | 2 | GPIO2 | 13 | 14 | 0v | | | | | 3 | GPIO3 | 15 | 16 | GPIO4 | 4 | | | | | 3.3v | 17 | 18 | GPIO5 | 5 | | | | 12 | MOSI | 19 | 20 | 0v | | | | | 13 | MISO | 21 | 22 | GPIO6 | 6 | | | | 14 | SCLK | 23 | 24 | CE0 | 10 | | | | | 0v | 25 | 26 | CE1 | 11 | | * https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/ * Pi 3 Model B+ rev 1.0 : 1.8k pull on SDA SCL (R23 GPIO2) (R24 GPIO3) * Pi 3 Model B rev 1.2 : 1.8k pull on SDA SCL (R23 GPIO2) (R24 GPIO3) * Pi 2 Model B rev 1.2 : 1.8k pull on SDA SCL (R23 GPIO2) (R24 GPIO3) * Pi Model B+ rev 1.2 : 1.8k pull on SDA SCL (R23 GPIO2) (R24 GPIO3) * Pi Model A+ rev 1.1 : 1.8k pull on SDA SCL (R23 GPIO2) (R24 GPIO3) * Pi Zero rev 1.3 : 1.8k pull on SDA SCL (R23 GPIO2) (R24 GPIO3) * Pi Zero W rev1.1 : ? pas de BCM2835 sur le schéma ? ===== code ===== //gcc mlx90614.c -o mlx90614 -l bcm2835 #include #include #include #include #include #include #include #include #include #define AVG 1 //averaging samples # include char getch(){ char buf=0; fflush(stdout); if(read(0,&buf,1)<0) perror("read()"); return buf; } int main(int argc, char **argv) { unsigned char buf[6]; unsigned char i,reg; double temp=0,calc=0, skytemp,atemp,sky_temp_average_double,sky_temp_sum_double=0; unsigned int G_nb_sample_uint16=0; char c_command; //pas d'attente et pas d'echo sur getch struct termios old={0}; if(tcgetattr(0, &old)<0) perror("tcsetattr()"); old.c_lflag&=~ICANON; old.c_lflag&=~ECHO; old.c_cc[VMIN]=0; old.c_cc[VTIME]=0; if(tcsetattr(0, TCSANOW, &old)<0) perror("tcsetattr ICANON"); bcm2835_init(); bcm2835_i2c_begin(); bcm2835_i2c_set_baudrate(25000); // set address bcm2835_i2c_setSlaveAddress(0x5a); printf("x : exit\nr : RAZ moyenne\nconnected to MLX90614 \n"); while(c_command != 'x') { calc=0; reg=7; for(i=0;i ====== cablibration ====== données Gris mlx(IR) mlx(internal) 20 21.8 21.65 21.8 24.76 24.42 18.5 21.2 19.72 25.6 28.4 26.9 29.2 31.30 31 11 9.6 9.6 amb_temp_f = ((amb_temp_f_ar[0]+amb_temp_f_ar[1]+amb_temp_f_ar[2])/3)-1.6; //1.6 correctif : moyenne sans MIN et MAX obj_temp_f = ((obj_temp_f_ar[0]+obj_temp_f_ar[1]+obj_temp_f_ar[2])/3)-2.5; //2.5 correctif : moyenne sans MIN et MAX