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 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩