Pages: 1 [2] 3 4 ... 9   Go Down
Author Topic: Cheap-Thermocam V3 | A cheap thermographic camera for everyone !  (Read 55658 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
UK
Offline Offline
Brattain Member
*****
Karma: 300
Posts: 26219
I don't think you connected the grounds, Dave.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
because it wouldn't work; ordinary glass mirrors don't reflect heat (long IR).
What about surface-coated mirrors?
Glass doesn't transmit the IR well, but if it comes off the metal layer directly?
Old laser printers and scanners can be a good source of these.
Logged

"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

0
Offline Offline
Jr. Member
**
Karma: 2
Posts: 80
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@cr0sh: thanks for the good explanation smiley
i dont think that moving the servo is a real problem because the limitation at speed at the moment comes from the infrared sensor. faster ones are more expensive and thats not the goal.
 i use the mlx90614 with a response time of 100ms which is at the standard configuration minimum.
today i found out that you can reduce the settle time to 37ms by adjusing some settings in eeprom of the mlx90614. that would make the whole process almost three times faster.
here is the document: http://www.melexis.com/Assets/Understanding-MLX90614-on-chip-digital-signal-filters-5272.aspx
my problem is that i dont know how to configure the sensor without this evaluation board (it costs about 250 dollar -.-)
can somebody help ?
« Last Edit: March 13, 2011, 06:22:36 pm by maxbot » Logged

Phoenix, Arizona USA
Offline Offline
Faraday Member
**
Karma: 40
Posts: 5570
Where's the beer?
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Well, it says it uses a 2-wire interface, so you could probably use the Wire library on the Arduino to program it; page 6 details how to set ConfigRegister1, you basically send 11 bits of data (0-10) to address 0x05, which I guess is the address of the device on the 2-wire bus. The directions are a little vague; it sounds like you are -not- supposed to change bits 3-7, only bits 0-2 and bits 8-10, in order to change the settings. So you have to read the register, make the alterations, then write the register value back, preserving the value in bits 3-7.
Logged

I will not respond to Arduino help PM's from random forum users; if you have such a question, start a new topic thread.

0
Offline Offline
Jr. Member
**
Karma: 2
Posts: 80
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Well, it says it uses a 2-wire interface, so you could probably use the Wire library on the Arduino to program it; page 6 details how to set ConfigRegister1, you basically send 11 bits of data (0-10) to address 0x05, which I guess is the address of the device on the 2-wire bus. The directions are a little vague; it sounds like you are -not- supposed to change bits 3-7, only bits 0-2 and bits 8-10, in order to change the settings. So you have to read the register, make the alterations, then write the register value back, preserving the value in bits 3-7.

Ok thanks. I understand this but code realisation is to difficult for me  smiley-confuse
I found this sketch that modifies the emission rate, i think this is very close to what I need:

Code:
/Simple program to read/write to the EEPROM (or read RAM) of the MLX90614 IR Sensor (in my case
//the MLX90614ESF-AAA). Example below erases the emissivity coefficient and then writes E = 1.
//Written be a total beginner, probably includes errors, and can definitely be
//improved on in many ways... /Lo-fi, 2011.

#include <i2cmaster.h>

void setup()
{
Serial.begin(9600);
Serial.println("----------Let's begin!----------");
i2c_init();                             //Initialise i2c bus
PORTC = (1 << PORTC4) | (1 << PORTC5);  //enable pullups
}

void loop()
{
int dev = 0x00; // I use the general address. If I specify the address
                //(0x05<<1), the code doesn't work, don't know why... yet.
unsigned int data_l = 0;
unsigned int data_h = 0;
int pec = 0;

float data_t = 0;
float emissivity = 0;

//READ EEPROM/RAM

Serial.println("*1: Read EEPROM address:");
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x24);  //0x004 and 0x04 etc reads the same address in the RAM,
                  //add 2(0) for EEPROM, eg. 0x24 (emissivity correction
                  //coefficient in EEPROM).

i2c_rep_start(dev+I2C_READ);
data_l = i2c_readAck(); //Read 1 byte and then send ack
data_h = i2c_readAck(); //Read 1 byte and then send ack
pec = i2c_readNak();
i2c_stop();

Serial.print("Data Low: ");
Serial.println(data_l);

Serial.print("Data High: ");
Serial.println(data_h);

Serial.print("Data combined: ");
data_t = (((data_h) << 8) + data_l);
Serial.println(data_t);

Serial.print("Emissivity: ");
emissivity = ((data_t) / 65535);
Serial.println(emissivity);

delay(5000);

//WRITE TO EEPROM, FIRST: ERASE OLD STUFF

i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x24); //Register Address to write to

i2c_write(0x00); //Erase low byte (write 0)
i2c_write(0x00); //Erase high byte (write 0)
i2c_write(0xE8); //Send PEC
i2c_stop();

Serial.println("*2: Erasing old emissivity factor (writing 0).");
delay(5000);

//CHECK IF THE EEPROM VALUE HAS BEEN ERASED

Serial.println("*3: Check if the old emissivity coefficient was erased:");
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x24);  //See above comment.

i2c_rep_start(dev+I2C_READ);
data_l = i2c_readAck(); //Read 1 byte and then send ack
data_h = i2c_readAck(); //Read 1 byte and then send ack
pec = i2c_readNak();
i2c_stop();

Serial.print("Data Low: ");
Serial.println(data_l);

Serial.print("Data High: ");
Serial.println(data_h);

Serial.print("Data combined: ");
data_t = (((data_h) << 8) + data_l);
Serial.println(data_t);

Serial.print("Emissivity: ");
emissivity = ((data_t) / 65535);
Serial.println(emissivity);
delay(5000);

//WRITE TO EEPROM, THE NEW STUFF!

i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x24); //Register Address to write to

i2c_write(0xFF); //New emissivity factor, Ef=1
i2c_write(0xFF); //New emissivity factor, Ef=1
i2c_write(0xCC); //Send PEC
i2c_stop();

Serial.println("*4: Write new E to EEPROM (E = 1.0).");
delay(5000);
Serial.println("----------The process starts over again----------");
delay(5000);
}

The only thing I know so far (after 2 hours of research..) is that I have to change i2c_write(0x24);  to i2c_write(0x25); and that I need to send the following 16 Bits to this register:
1;0;0;R;R;R;R;R;1;0;0;R;R;R;R;R
R stands for read, so that the sketch first reads whats the existing value and then uses it.

Can anybody please help me with the adaption of the code ? Thanks a lot in advantage  smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cool!

Is this sensitive enough to see any stars in the sky (other than our sun)?

Is this sensitive enough to see any stars in the sky (other than our sun) in the daytime?
Logged

Espoo, Finland
Offline Offline
God Member
*****
Karma: 7
Posts: 586
"Oops, try again..."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cool!

Is this sensitive enough to see any stars in the sky (other than our sun)?

Is this sensitive enough to see any stars in the sky (other than our sun) in the daytime?

How did you think that could be done, what is your idea, and in what purpose would you like to use that?

Kari
Logged


The only law for me; Ohms Law: U=R*I       P=U*I
Note to self: "Damn! Why don't you just fix it!!!"

0
Offline Offline
Jr. Member
**
Karma: 2
Posts: 80
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cool!

Is this sensitive enough to see any stars in the sky (other than our sun)?

Is this sensitive enough to see any stars in the sky (other than our sun) in the daytime?

Never thought about that.. I will try and post results within the next week
Logged

Espoo, Finland
Offline Offline
God Member
*****
Karma: 7
Posts: 586
"Oops, try again..."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

If you want to get the temperature of the star, you need a bit different technic for that.
 smiley-lol

Cheers,
Kari
Logged


The only law for me; Ohms Law: U=R*I       P=U*I
Note to self: "Damn! Why don't you just fix it!!!"

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Is this sensitive enough to see any stars in the sky (other than our sun) in the daytime?
How did you think that could be done, what is your idea, and in what purpose would you like to use that?
...
If you want to get the temperature of the star, you need a bit different technic for that.

I wonder if this could be done by pointing the thermal camera at the sky, without any other changes to the hardware or software.

I think it would be cool to have a time-lapse movie showing the stars apparently revolving around the celestial pole for a full (24 hour) cycle.
(I don't need to get the temperature of the star for that, right?)

I've been told that the vast majority of all stars in our galaxy are red dwarfs. Most of the energy a red dwarf star emits is in the infrared.
Logged

Espoo, Finland
Offline Offline
God Member
*****
Karma: 7
Posts: 586
"Oops, try again..."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


I've been told that the vast majority of all stars in our galaxy are red dwarfs. Most of the energy a red dwarf star emits is in the infrared.

Watching the sky is one thing, telescoping the sky is one thing, but getting information from one star... Think about the problem this way; you are standing next to heat source, with IR-thermometer. It is quite large object, lets say water boiler. If the width of the object is 1 meter, and you are in the distance of two meters, what is the angle where you can turn and still hit the target. Now, go 10 meters back and turn, how much is left? Then 100m. At that point you are getting the picture of the accuracy needed for the mechanical side of the aiming. Next take 4,7 light years back, and calculate the angle.

IR-thermometer needs quite large source, or extremely hot if it small. There's no chance to get measurement with this level of technology.

Wiser men will correct my text, add extra info... and more scientic and professional information as well.

Kari
Logged


The only law for me; Ohms Law: U=R*I       P=U*I
Note to self: "Damn! Why don't you just fix it!!!"

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 987
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

How can a 5° FOV sensor give pixels a few centimeters wide for objects some meters far?!?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 1
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

my problem is that i dont know how to configure the sensor without this evaluation board (it costs about 250 dollar -.-)
can somebody help ?
I just came across this at sparkfun http://www.sparkfun.com/products/9813($50). Not sure if this is the same thing?

Question.. How do you think the IR sensor sold at sparkfun - MLX90614ESF-BAA - would work in your project, you specify a MLX90614ESF-DCI. I already own the one from sparkfun and was wondering if I could get away with using it?

Thanks for posting your project.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 987
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

my problem is that i dont know how to configure the sensor without this evaluation board (it costs about 250 dollar -.-)
can somebody help ?
I just came across this at sparkfun http://www.sparkfun.com/products/9813($50). Not sure if this is the same thing?

Question.. How do you think the IR sensor sold at sparkfun - MLX90614ESF-BAA - would work in your project, you specify a MLX90614ESF-DCI. I already own the one from sparkfun and was wondering if I could get away with using it?

Thanks for posting your project.

As per datasheet, xCI models are the best one, as they have the narrowest FOV and an internal "temperature gradient compensation system" which allows further narrowing.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 987
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

By the way, reaplacing the BAA by the DCI should be easily possible.
Does sparkfun have resellers in europe?
Logged

Phoenix, Arizona USA
Offline Offline
Faraday Member
**
Karma: 40
Posts: 5570
Where's the beer?
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
because it wouldn't work; ordinary glass mirrors don't reflect heat (long IR).
What about surface-coated mirrors?
Glass doesn't transmit the IR well, but if it comes off the metal layer directly?
Old laser printers and scanners can be a good source of these.

Sorry about the lag in response time - I didn't see this for some reason.

I don't think a front-surface mirror would work, either; from the research I did, I never ran across anything about using a front-surface mirror, but then again everything was about the sensors and such, using special long IR transmissive lenses and elements made from something a bit more exotic than usual (thus a part of the higher price). I'm not really certain though; perhaps something to look into (if this could work, then you could potentially have a much higher scan rate, up to the limit of the sensor itself - which I understand isn't "high speed", but maybe it could be made better - hmm, I wonder what peltier cooling would do for speed?)...

smiley
Logged

I will not respond to Arduino help PM's from random forum users; if you have such a question, start a new topic thread.

Pages: 1 [2] 3 4 ... 9   Go Up
Jump to: