아하
생활

생활꿀팁

고귀한오랑우탄112
고귀한오랑우탄112

ST M0 Discovery에서 온습도를 측정하고 싶습니다.

ST M0 Discovery에서 온습도를 측정하고 싶은데 어떤 센서를 써야 하는지요?

Arm coretex M0로 측정할 수 있는 온습도 모두 측정 가능한 센서(I2C통신이 되는 센서)를 추천해 주시면 감사하겠습니다.

또..기본 동작을 확인할 수 있는 예제도 주시면 더더욱 감사하겠습니다.

55글자 더 채워주세요.
1개의 답변이 있어요!
  • 남다른메추리264
    남다른메추리264

    제가 사용했던 온도 습도를 측정할 수 있는 모듈로 설명드리겠습니다.

    제품은 HDC-1080이라는 모델로 I2C 통신으로 데이터를 계측할 수 있는 센서 모듈입니다.

    검색하시면 쉽게 찾을 수 있습니다.

    먼저 cube에서 pin assign을 아래와 같이 하였고 측정은 간단하게 polling 방식으로 100ms마다

    측정하는 소스를 올렸습니다.

    생성된 프로젝트의 main.c에서 추가된 부분만 확인하시면 될 것 같네요.

    #include "main.h" #include "i2c.h" #include "gpio.h" unsigned char buffer[5]; //for HDC1080 on the I2C unsigned int rawTemp; unsigned int rawHumi; float HDC1080_Temp; float HDC1080_Humi; void SystemClock_Config(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_I2C1_Init(); //Config the HDC1080 to perform acquisition separately HAL_Delay(15); buffer[0] = 0x02; //pointer buffer[1] = 0; //MSB byte buffer[2] = 0; //LSB byte HAL_I2C_Master_Transmit(&hi2c1, 0x40 << 1, buffer, 3, 100); while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //trigger temperature measurment buffer[0] = 0x00; HAL_I2C_Master_Transmit(&hi2c1, 0x40 << 1, buffer, 1, 100); HAL_Delay(20); HAL_I2C_Master_Receive(&hi2c1, 0x40 << 1, buffer, 2, 100); rawTemp = buffer[0] << 8 | buffer[1]; //combine 8-bit of 2ea into 1 16-bit HDC1080_Temp = (( (float)rawTemp / 65536 ) * 165.0 - 40 ); //trigger humidity measurment buffer[0] = 0x01; HAL_I2C_Master_Transmit(&hi2c1, 0x40 << 1, buffer, 1, 100); HAL_Delay(20); HAL_I2C_Master_Receive(&hi2c1, 0x40 << 1, buffer, 2, 100); rawHumi = buffer[0] << 8 | buffer[1]; //combine 8-bit of 2ea into 1 16-bit HDC1080_Humi = (( (float)rawHumi / 65536 ) * 100.0 ); HAL_Delay(100); } /* USER CODE END 3 */ }

    도움이 되시길 바랍니다.