MEMS 기압 센서 LPS22HB(STMicroelectronics)를 사용합니다. 기압과 온도를 측정할 수 있습니다.
본 문서의 전체 리스트를 링크로 연결하였습니다. 참고하세요.
UNO R4 WiFi BLE ⑥ BME280의 BLE 주변기기와 연결되는 센트럴
UNO R4 WiFi BLE ⑤ BME280의 BLE peripheral
UNO R4 WiFi BLE ④ 기압 센서 BME280을 연결
UNO R4 WiFi BLE ③ LPS22의 BLE 주변기기와 연결되는 센트럴
UNO R4 WiFi BLE ② LPS22의 BLE 주변기기
UNO R4 WiFi BLE ① 기압 센서 LPS22 연결
마이크로컴퓨터 보드 Arduino UNO R4 WiFi는 Wi-Fi와 BLE 무선 통신을 지원하며, BLE로 3회에 걸쳐 송수신을 한다.
● Adafruit의 Stemma QT/Qwiic 보드
LPS22 보드 설명 페이지
Stemma QT/Qwiic(JST SH 4핀) 커넥터는 2곳에 장착되어 있으며, 어느 쪽에 연결해도 상관없다. 이 커넥터를 사용하여 I2C로 제어하는 경우, 특히 점퍼선을 연결하는 등의 작업이 필요하지 않습니다.
커넥터는 앞면과 뒷면 모두 꽂을 수 있지만, 핀이 내부 상단에 정렬되어 있어 꽂을 수 있는 방향이 정해져 있습니다. 잠금장치는 없지만, 쉽게 빠지는 일은 없습니다.
● 기압 센서 LPS22의 주요 사양
LPS22HB의 데이터 시트는 이 웹페이지에서 확인할 수 있습니다.
- 전원 전압 1.7~3.6V
- 기압 측정 범위 260~1260hPa, 정확도: ±1hPa, 분해능: ±0.1hPa
- 온도 측정 범위 -40~+85℃, 정확도 ±1.5℃, 분해능 ±1.5℃.
- 인터페이스 I2C(0~400kHz), SPI(10MHz)
- 슬레이브 주소 0x5d, 후면의 Address를 단락시키면 0x5c
사용 환경
- Arduino UNO R4 WiFi
- Arduino IDE 2.2.1
- Windows10 22H2
연결
Arduino UNO R4 WiFi의 I2C 신호와 센서 보드를 JST 커넥터로 연결합니다(Stemma QT/Qwiic 보드의 사진 비율은 다릅니다).
슬레이브 주소 확인
기존에 많이 사용되는 i2cScanner.ino를 실행하여 슬레이브 주소를 확인합니다.
이 마이컴 보드에는 Qwiic 전용 커넥터가 준비되어 있지만, LPS22는 인식하지 못했습니다.
(2024/01/30) Qwiic 전용 커넥터는 이 보드에 있는 두 개의 버스 중 두 번째 버스에 연결되어 있습니다.
Wire1.begin();
libraryName.begin( Wire1 );
와 같이 작성하게 된다. 미확인. (추기 끝)
I/O 단자의 SCL과 SDA 단자, 전원 단자를 이용하여 Stemma QT/Qwiic 커넥터를 장착합니다.
전원은 3.3V입니다.
주소 x5d를 찾았습니다.
라이브러리 준비: LPS22에서 검색하여 찾은 Adafruit LPS2X 라이브러리를 설치합니다.
설치를 시작할 때 관련 라이브러리 및 종속성 설치 여부를 묻는 패널이 나오면 모두 설치를 선택합니다.
샘플 스케치
메뉴의 파일->스케치 예제에서 Adafruit LPS2X의 adafruit_lps22_test.ino를 선택한다,
컴파일, 실행합니다. 실행 시 처음 표시되는 값은 올바르지 않은 것 같으니, 읽지 말고 버리십시오. 온도는 다른 온도 센서에 비해 +2±0.5℃로 높게 측정됩니다.
SPI 관련을 제거하고 I2C에 대한 설명만 남긴 스케치입니다.
// Basic demo for pressure readings from Adafruit LPS2X
#include <Wire.h>
#include <Adafruit_LPS2X.h>
#include <Adafruit_Sensor.h>
Adafruit_LPS22 lps;
void setup(void) {
Serial.begin(115200);
while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit LPS22 test!");
// Try to initialize!
if (!lps.begin_I2C()) {
Serial.println("Failed to find LPS22 chip");
while (1) { delay(10); }
}
Serial.println("LPS22 Found!");
lps.setDataRate(LPS22_RATE_10_HZ);
Serial.print("Data rate set to: ");
switch (lps.getDataRate()) {
case LPS22_RATE_ONE_SHOT: Serial.println("One Shot / Power Down"); break;
case LPS22_RATE_1_HZ: Serial.println("1 Hz"); break;
case LPS22_RATE_10_HZ: Serial.println("10 Hz"); break;
case LPS22_RATE_25_HZ: Serial.println("25 Hz"); break;
case LPS22_RATE_50_HZ: Serial.println("50 Hz"); break;
case LPS22_RATE_75_HZ: Serial.println("75 Hz"); break;
}
}
void loop() {
sensors_event_t temp;
sensors_event_t pressure;
lps.getEvent(&pressure, &temp);// get pressure
float tempC = temp.temperature;
float press = pressure.pressure;
Serial.print("Temperature: ");Serial.print(temp.temperature);Serial.println(" degrees C");
Serial.print("Pressure: ");Serial.print(pressure.pressure);Serial.println(" hPa");
Serial.println("");
delay(5000);
}
그래픽 디스플레이에 측정 결과 표시
측정한 온도와 기압을 그래픽 디스플레이에 표시하는 방법은 다음과 같습니다.
Arduino UNO R4 Minima로 센서 인터페이스하기 ⑤ 온습도 센서 Si7021의 측정 결과를 그래픽 디스플레이에 표시하기
스케치 코드입니다.
// Basic demo for pressure readings from Adafruit LPS2X
#include <Wire.h>
#include <Adafruit_LPS2X.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_SSD1306.h>
Adafruit_LPS22 lps;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
void setup(void) {
Serial.begin(115200);
while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit LPS22 + ssd1306");
// Try to initialize!
if (!lps.begin_I2C()) {
Serial.println("Failed to find LPS22 chip");
while (1) { delay(10); }
}
Serial.println("LPS22 Found!");
lps.setDataRate(LPS22_RATE_10_HZ);
Serial.print("Data rate set to: ");
switch (lps.getDataRate()) {
case LPS22_RATE_ONE_SHOT: Serial.println("One Shot / Power Down"); break;
case LPS22_RATE_1_HZ: Serial.println("1 Hz"); break;
case LPS22_RATE_10_HZ: Serial.println("10 Hz"); break;
case LPS22_RATE_25_HZ: Serial.println("25 Hz"); break;
case LPS22_RATE_50_HZ: Serial.println("50 Hz"); break;
case LPS22_RATE_75_HZ: Serial.println("75 Hz"); break;
}
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3C for 128x32
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.display();
delay(500); // Pause for 2 seconds
display.setTextSize(1);
display.setTextColor(WHITE);
display.setRotation(0);
display.clearDisplay();
}
void loop() {
display.clearDisplay();
display.setCursor(0, 0);
sensors_event_t temp;
sensors_event_t pressure;
lps.getEvent(&pressure, &temp);// get pressure
Serial.print("Temperature: ");Serial.print(temp.temperature);Serial.println(" degrees C");
Serial.print("Pressure: ");Serial.print(pressure.pressure);Serial.println(" hPa");
Serial.println("");
display.println("Temperature: - `C");
display.print(temp.temperature, 2);
display.println("");
display.println("");
display.println("Pressure: - hPa");
display.print(pressure.pressure, 1);
display.display();
delay(5000);
}
실행 예시입니다.
'아두이노우노 R4' 카테고리의 다른 글
i2c 충돌나면 풀업저항 다는 게 제일 먼저 할 일 (1) | 2024.07.28 |
---|---|
DS1302 아두이노 RTC 모듈 사용법 (2) | 2024.07.12 |
아두이노 0.96인치 OLED 디스플레이(SSD1306) 실습 (0) | 2024.07.04 |
UNO R4 WiFi BLE ② LPS22의 BLE 주변기기 (1) | 2024.06.18 |
Arduino Mega의 PWM 주파수를 변경하는 방법 (0) | 2024.05.23 |
UNO R4 Mechanical Size (1) | 2024.05.22 |
아두이노 UNO R4 WiFi 최강 가이드 (0) | 2024.05.22 |
아두이노 UNO R4와 R3: 종합적인 검토 및 호환성 가이드 (0) | 2024.05.21 |
더욱 좋은 정보를 제공하겠습니다.~ ^^