STM์ฌ์ MCU์ธ STM32F103C8T6์ ์ฌ์ฉํ์ฌ ์ ์ธ์ ์จ๋ ์ผ์๋ฅผ I2C๋ก ์ ์ดํด๋ณด๊ฒ ๋ค.
์ ์ธ์ ์จ๋ ์ผ์๋ ๋ฌผ์ฒด์์ ๋ฐ์ฐํ๋ ์ด(์จ๋)์ ๋ฐ๋ผ ํน์ ์์ญ์ ์ฃผํ์๊ฐ ๊ณ์ธก์ด ๋๋ ์ผ์๋ก ๋น์ ์ด์ ์จ๋ ๊ณ์ธก์ด ๊ฐ๋ฅํ๋ค. ๋์ ์ ๋ฐ๋๊ฐ ๋จ์ด์ง๋ค. ์ ๋ฐํ๊ฑด ๋น์ธ๊ณ ์ผ์๊ฐ ์ด์ด ๋ง์ด ๋์ ๋๊ฐ ์ฅ์น๊ฐ ํ์ํ๋ค.
์ํผ ์ ์ธ์ ์จ๋ ์ผ์๋ MLX90614๋ฅผ ์ฌ์ฉํ์๋ค.
float readTemp(I2C_HandleTypeDef *hi2c)
{
uint8_t IRbuffer[2];
// buffer[0] = MLX90614_TOBJ1;
HAL_I2C_Mem_Read(hi2c, (MLX90614_ADDRESS << 1), MLX90614_TOBJ1, 1, IRbuffer, 2, HAL_MAX_DELAY);
// ์ฝ์ด์จ ๋ฐ์ดํฐ๋ฅผ ์จ๋ ๊ฐ์ผ๋ก ๋ณํ
temperature = (float)(((uint16_t)IRbuffer[1] << 8) | IRbuffer[0]);
temperature *= 0.02; // data / 50 = x K (Kelvin)
temperature -= 273.15; // K to 'c
return temperature;
}
๋๋ฐ์ด์ค ์ด๋๋ ์ค์ ์ฝ์ ๋ช ๋ น์ ์ ์ด์ฃผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์จ๋ค.
์ค๊ฐ์ ๋ฐ๋ณต ์คํํธ๊ฐ ์์ด์ HAL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ MEM READ๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ ์ผ๋น(K) ๊ฐ์ผ๋ก ๋ค์ด์ค๋๋ฐ ์ฐ๋ฆฌ๋๋ผ๋ ์ญ์จ(โ)๋ฅผ ์ฐ๋ ๋ณํ์ ํด์ค์ผ ํ๋ค. (-273.15 ํด์ค๊ฑฐ) ๊ทธ๋ฆฌ๊ณ ๋ถํด๋ฅ์ด 0.02โ๋ผ์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ 50์ผ๋ก ๋๋ ์ฃผ๊ฑฐ๋ 0.02๋ก ๊ณฑํด์ค์ผ ํ๋ค. (์ผ๋น, ์ญ์จ ๋ณํ์ ์คํ์ ์ ์ฃผ๋ ๋๋?)
- ๋ -
ํน์๋ผ๋ ์ ์ผ์๋ก ํ ์คํธํ๊ณ ์ถ์๋ฐ ์์ง ์๋ค๋ฉด ์๋์ ๋งํฌ์์ ๊ตฌ๋งคํด๋ณผ ์๋ ์์ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ก ์๋ฃํ์ด float์ด๋ผ printfํ ๋ %f๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด cubeide์์ ์๋์ ๊ฐ์ด ์ฒดํฌํด์ค์ผ ํ๋ค.
์ต๊ทผ๋๊ธ