개발자/Arduino

Arduino Nano 33 BLE Sense 개발 가이드 4 - 센서 종합 테스트

지구빵집 2020. 5. 1. 18:39
반응형

 

Arduino Nano 33 BLE Sense 개발 가이드 4 - 센서 종합 테스트

 

Arduino는 빠른 프로토 타이핑 및 아이디어 검증을 위한 개발 플랫폼이었습니다. 우리 중 많은 사람들이 Arduino UNO 개발 보드를 시작했을 것입니다. 그러나 오늘날 사물 인터넷 , 컴퓨터 비전 , 인공 지능 , 기계 학습 및 기타 미래 기술로 나아가면서 겸손한 Arduino UNO는 더 이상 8bit 마이크로 컨트롤러에 대처할 수 없었습니다. 이를 위해 Wi-Fi, Bluetooth, GSM 및 기타 인기 있는 MKR1000 또는 MKR GSM 1400 과 같은 기타 무선 기능이 내장된 보다 강력한 프로세서를 갖춘 새로운 보드가 출시되었습니다. 이러한 맥락에서 Arduino는 최근 Arduino Nano 33이라는 새로운 버전의 Nano를 출시했습니다..

 

Arduino Nano 33 BLE Sense 보드 front

 

Arduino Nano 33 BLE Sense 보드 back

 

 

Arduino Nano 33 BLE Sense 개발 가이드 강의 자료 목록

 

Arduino NANO 33 BLE Sense 개발 가이드 1 - 시작하기

Arduino NANO 33 BLE Sense 개발 가이드 2 - 훑어보기

Arduino NANO 33 BLE Sense 개발 가이드 3 - 센서 다루기

Arduino Nano 33 BLE Sense 개발 가이드 4 - 센서 종합 테스트

Arduino Nano 33 BLE Sense 개발 가이드 5 - BLE 통신 테스트



Arduino Nano 33 보드에는 Arduino Nano 33 IoT와 Arduino Nano 33 BLE Sense가 있습니다. 두 모듈의 주요 차이점은 Arduino Nano 33 BLE Sense 모듈에는 내장 센서가 있지만 (자세한 내용은 나중에 자세히 설명) Arduino Nano 33 IoT에는 해당 기능이 없습니다. 이 기사에서는 Arduino Nano 33 BLE Sense 보드를 검토하고 해당 기능을 소개하고 마지막으로 센서 값을 읽고 직렬 모니터에 표시하는 샘플 코드를 작성합니다. 그럼 배우자….!

 

Arduino Nano 33 BLE Sense

 

“Arduino Nano 33 BLE Sense”라는 이름은 한 입이지만 이름 자체에 중요한 정보가 있습니다. 치수, 핀 배치 및 폼 팩터가 기존 Arduino Nano와 매우 유사하기 때문에 “Nano”라고 하며 실제로 기존 프로젝트에서 Arduino Nano의 대체물로 사용될 계획을 나타낸다. 새로운 모듈은 클래식 Nano가 5V에서 작동하는 동안 3.3V 보드가 3.3V에서 작동한다는 것을 나타 내기 위해“33”이라는 이름을 지었다고 생각합니다.

 

다음으로 “BLE ”라는 이름 은 모듈이 Bluetooth 저에너지 (BLE5 5.0)를 지원함을 나타냅니다. "센스"라는 이름은 가속도계, 자이로 스코프, 자력계, 온도 및 습도 센서, 압력 센서, 근접 센서, 컬러 센서, 제스처 센서 및 내장 마이크와 같은 온보드 센서가 있음을 나타냅니다. 우리는 나중에 BLE 및 기타 센서의 세부 사항을 살펴볼 것이지만 지금은 Arduino Nano 33 BLE Sense 보드가 언 박싱 방식과 똑같이 보입니다.

 

Arduino Nano 33 BLE Sense 하드웨어 개요

 

보드의 첫 번째 모습에서 상단에 붐비는 많은 구성 요소를 찾을 수 있습니다. 대부분 내가 앞서 말한 센서입니다. 그러나 주 뇌는 오른쪽의 금속 케이스 뒤에 숨겨져 있습니다. 이 케이스 에는 강력한 Cortex M4F와 BLE 및 Bluetooth 5 통신을 위한 NINA B306 모듈 이 포함된 Nordic nRF52840 프로세서 가 있습니다. 이를 통해 보드는 초 저전력에서 작동하고 Bluetooth 5를 사용하여 통신할 수 있어 홈 오토메이션 및 기타 연결된 프로젝트의 저전력 메시 네트워크 애플리케이션에 이상적입니다. 또한 nRF 프로세서는 ARM Mbed OS를 지원하므로 또한 나중에 논의할 소프트웨어 개선 사항도 제공합니다. 보드에서 알아야 할 센서, LED, 푸시 버튼 및 기타 중요한 사항은

 

이미지 출처: https://circuitdigest.com/microcontroller-projects/arduino-nano-33-ble-sense-board-review-and-getting-started-guide

 

위 이미지에서 볼 수 있듯이 보드에는 센서가 내장되어있어 보드를 외부 센서에 연결하지 않고도 건물의 중요한 부분을 만들 수 있습니다. 이 보드는 웨어러블 장치 및 피트니스 밴드, 포도당 모니터링, 보수계, 스마트 워치, 기상 관측소, 주택 보안 등과 같은 이러한 스마트 센서를 대부분 사용하는 스마트 휴대용 장치에 사용하기 위한 것입니다. 또한 모든 센서에는 항상 사용할 수 있는 Arduino 용 사전 빌드 라이브러리가 있습니다. 이 기사의 끝에서 모든 센서의 값을 읽고 직렬 모니터에 표시합니다. 필요한 라이브러리와 함께 Arduino Nano 33 BLE Sense 보드의 센서 세부 정보는 다음 표와 같습니다. (아래 테이블에서 ArduinoLPS22HB library 링크를 바로 잡음) 

 

 이름

 매개 변수

 연결

LSM9DSI – ST 마이크로 일렉트로닉스

가속도계, 자이로 스코프, 자력계

LSMDSI 데이터 시트

Arduino_LSM9DS1 라이브러리

LPS22HB – ST 마이크로 일렉트로닉스

압력

LPS22HB 데이터 시트 

Arduino_LPS22HB 라이브러리

HTS221 – ST 마이크로 일렉트로닉스

온도와 습도

LPS22HB 데이터 시트 

Arduino_HTS221 Library

APDS9960 – 아바고 테크.

근접, 빛, 컬러, 제스처

LPS22HB 데이터 시트 

Arduino_APDS9960 라이브러리

MP34DT05 – ST 마이크로 일렉트로닉스

마이크로폰

MP34DT05 데이터 시트 

내장 PDM 라이브러리

 

이러한 센서의 대부분은 ST Microelectronics에서 제공되며 저전력 작동을 지원하므로 배터리 작동 설계에 이상적입니다. APS9960 센서는 이미 통합 모듈로 제공되고 있기 때문에 APDS9960 센서를 아두 이노와 함께 사용했기 때문에 APDS9960 센서에 대해 익숙할 것입니다.(자료 참고 APDS9960 sensor with Arduino previously) 이러한 센서에 대한 자세한 내용은 해당 데이터 시트를 방문하고 제공된 라이브러리 전체를 Arduino IDE에 추가하여 Arduino Nano 33 BLE Sense 보드와 함께 사용하기 시작하십시오.

 

라이브러리를 추가하려면 주어진 링크를 사용하여 해당 GitHub 페이지로 이동하여 ZIP 파일을 다운로드 한 다음 스케치-> 라이브러리 포함-> Add.ZIP 라이브러리를 사용하거나 Arduino IDE에서 라이브러리 관리자를 사용하여 추가하십시오 도서관.

 

Arduino Nano 33 BLE Sense 보드 기술 사양 :

 

Nordic nRF52840 Processor로 구동되는 Arduino Nano 44 BLE 보드는 다음과 같은 기술 사양을 갖습니다.

 

  • 작동 전압 : 3.3V
  • USB 입력 전압 : 5V
  • 입력 핀 전압 : 4.5V ~ 21V
  • 칩 : NINA-B3 – RF52840
  • 클럭 : 64MHz
  • 플래시 : 1MB
  • SRAM : 256KB
  • 무선 연결 : Bluetooth 5.0 / BLE
  • 인터페이스 : USB, I2C, SPI, I2S, UART
  • 디지털 I / O 핀 : 14
  • PWM 핀 : 6 (8 비트 해상도)
  • 아날로그 핀 : 8 (10 비트 또는 12 비트 구성 가능)

 

Arduino Nano 33 BLE Sense를 통한 소프트웨어 개선

 

모든 Arduino 보드와 마찬가지로 Arduino Nano 33 BLE Sense 보드는 Arduino IDE로 프로그래밍할 수 있습니다. 그러나 시작하기 전에 보드 관리자를 사용하고 보드 세부 사항을 IDE에 추가해야 합니다. ARM Mbed OS를 사용하여 nRF 52840을 프로그래밍할 수 있다는 것을 알고 있으므로 Arduino Nano 33 보드는 RTOS (Real-Time Operating System (RTOS)를 지원합니다.

 

Mbed OS 프로그래밍을 사용하면 프로그램에서 여러 스레드를 동시에 실행하여 멀티 태스킹을 수행할 수 있습니다. 또한 지연 기능을 호출할 때마다 보드가 간지럼 모드로 들어갈 때마다 보드의 전력 소비가 크게 줄어듭니다. 지연 시간 동안 전력을 절약하고 지연이 끝나면 작동으로 되돌아갑니다. 이 작업은 일반적인 Arduino 지연 작업보다 4.5uA 적은 소비량으로 보고 됩니다.

 

즉, Arduino IDE와의 Mbed OS 통합은 비교적 새롭고 Arduino IDE와 함께 Mbed OS의 모든 기능을 완전히 활용하려면 다소 시간이 걸릴 것입니다. 따라서 빠른 시작을 위해 모든 센서 값을 읽고 직렬 모니터에 표시하는 프로그램을 작성합니다.

 

Arduino Nano 33 BLE Sense를 위한 Arduino IDE 준비

 

Arduino IDE를 시작하고 도구-> 보드-> 보드 관리자로 이동하여 Arduino 보드 관리자를 시작하십시오. 이제 "Mbed OS"를 검색하고 패키지를 설치하십시오. 설치가 완료되려면 다소 시간이 걸립니다.

 

Arduino Nano 33 BLE 보드 설치

 

설치가 완료되면 대화 상자를 닫고 랩톱에 마이크로 USB 케이블을 사용하여 Arduino 33 보드를 연결하십시오. 보드 창을 연결하자마자 보드 창에 필요한 드라이버 설치가 자동으로 시작됩니다.

 

다음 Arduino IDE를 열고 도구-> 보드-> Arduino Nano 33을 선택하십시오. 그런 다음 도구-> 포트를 확인하여 올바른 COM 포트를 선택하십시오. 내 포트가 COM3 포트에 연결되어 있지만 사용자가 다를 수 있습니다. 포트가 선택되면 IDE 하단 오른쪽 모서리는 다음과 같아야 합니다

 

이미지 하단 오른쪽 Arduino Nano 33 BLE on Com63 을 확인한다

 

이제 모든 것이 작동하는지 빠르게 확인하기 위해 예제 프로그램을 사용할 수 있습니다. File-> Examples-> PDM-> PDMSerialPlotter에 제공된 프로그램을 사용해 봅시다. 이 프로그램은 온보드 마이크를 사용하여 오디오를 듣고 직렬 플로터에 플로팅 합니다. 프로그램을 업로드하고 보드와 IDE가 작동하는지 확인할 수 있습니다.

 

지금 당신이 엄청나게 느린 컴파일을 경험한다면 당신은 혼자만 겪는 일은 아닙니다. 많은 사람들 이미 문제에 직면하고 있으며 이 기사를 쓸 당시에는 해결책이 없는 것 같습니다. 간단한 프로그램을 컴파일하고 업로드하는 데 약 2-3 분이 걸리며 일부 BLE 프로그램을 시도하거나 Mbed OS로 작업하려고 할 때 컴파일 시간이 10분 이상으로 증가합니다. 이것이 우리가 무엇인가 해나가고자 하는 데 어려움은 아닙니다. 이것은 아두이노 IDE와 Mbed OS 통합이기 때문에, 멋진 아두이노 커뮤니티에서 해결책이 나오길 기대합니다.

 

센서 데이터를 읽고 직렬 모니터에 표시하는 프로그램

 

보드의 BLE 또는 핵심 Mbed OS 기능을 사용하지 않으면 컴파일 시간이 합리적입니다. 그래서 아래 그림과 같이 모든 센서 값을 읽고 직렬 모니터에 표시하는 간단한 스케치를 작성했습니다.

 

모든 센서 값을 읽고 직렬 모니터에 표시

 

동일한 작업을 수행하는 전체 코드는이 페이지의 맨 아래에 나와 있지만 위에서 언급한 모든 라이브러리를 설치했는지 확인하십시오. 코드 설명은 다음과 같습니다. 필요한 모든 헤더 파일을 포함시키는 코드로 프로그램을 시작하십시오. 여기에서는 마이크를 제외한 4 개의 센서를 모두 사용합니다.

 

#include <Arduino_LSM9DS1.h> // 9 축 IMU 용 라이브러리 포함
#include <Arduino_LPS22HB.h> // 압력을 읽을 라이브러리 포함
#include <Arduino_HTS221.h> // 온도 및 습도를 읽을 수있는 라이브러리 포함
#include <Arduino_APDS9960.h> // 컬러, 근접성 및 제스처 인식을위한 라이브러리 포함

 

설정 기능 내에서 모든 센서 값을 표시하고 필요한 모든 라이브러리를 초기화하기 위해 9600 보드 속도로 직렬 모니터를 초기화합니다. 설정 내부의 코드는 아래와 같습니다.

 

void setup()
{
  Serial.begin(9600); //Serial monitor to display all sensor values
  if (!IMU.begin()) //Initialize IMU sensor
  { Serial.println("Failed to initialize IMU!"); while (1);}
  if (!BARO.begin()) //Initialize Pressure sensor
  { Serial.println("Failed to initialize Pressure Sensor!"); while (1);}
  if (!HTS.begin()) //Initialize Temperature and Humidity sensor
  { Serial.println("Failed to initialize Temperature and Humidity Sensor!"); while (1);}
  if (!APDS.begin()) //Initialize Colour, Proximity and Gesture sensor
  { Serial.println("Failed to initialize Colour, Proximity and Gesture Sensor!"); while (1);}
 }
 

 

루프 기능 내에서 라이브러리에서 필요한 센서 값을 읽은 다음 직렬 모니터에 인쇄합니다. 구문은 각 라이브러리의 예제 프로그램에서 참조할 수 있습니다. 가속도계, 자이로 스코프, 자력계, 압력, 온도, 습도 및 근접 센서 값을 읽고 직렬 모니터에 표시했습니다. 가속도계 값을 측정하는 코드는 아래와 같이 모든 센서에 대해 측정할 수 있습니다.

 

//Accelerometer values
if (IMU.accelerationAvailable()) 
{
    IMU.readAcceleration(accel_x, accel_y, accel_z);
    Serial.print("Accelerometer = ");
    Serial.print(accel_x); 
    Serial.print(", ");
    Serial.print(accel_y);
    Serial.print(", ");
    Serial.println(accel_z);
}
delay (200);

 

 

Arduino Nano 33 BLE- 코드 업로드

 

코드를 Nano 33에 업로드하는 것은 다른 보드와 유사하지만 보드에는 두 개의 COM 포트가 있습니다. 업로드 버튼을 클릭하면 Arduino IDE가 코드를 컴파일 한 다음 소프트웨어 명령을 통해 보드를 자동으로 재설정하여 보드를 부트 로더 모드로 설정하고 코드를 업로드합니다. 이 때문에 업로드가 완료되면 Arduino IDE가 자동으로 COM 포트를 다른 번호로 변경한 것을 확인할 수 있으며 직렬 모니터를 열기 전에 다시 변경할 수 있습니다.

 

이것은 지금까지 Arduino Nano 33 보드에 대한 나의 경험과 거의 비슷합니다. 나중에 센서와 BLE 기능으로 무언가를 만들려고 합니다. 이사회에 대한 경험은 어땠습니까? 내가 그걸로 무엇을 만들고 싶습니까? 의견 섹션에 답변을 남겨두면 더 자세히 논의할 것입니다.

 

코드

 

#include <Arduino_LSM9DS1.h> //Include the library for 9-axis IMU
#include <Arduino_LPS22HB.h> //Include library to read Pressure 
#include <Arduino_HTS221.h> //Include library to read Temperature and Humidity 
#include <Arduino_APDS9960.h> //Include library for colour, proximity and gesture recognition

void setup(){
  Serial.begin(9600); //Serial monitor to display all sensor values 

  if (!IMU.begin()) //Initialize IMU sensor 
  { Serial.println("Failed to initialize IMU!"); while (1);}

  if (!BARO.begin()) //Initialize Pressure sensor 
  { Serial.println("Failed to initialize Pressure Sensor!"); while (1);}

  if (!HTS.begin()) //Initialize Temperature and Humidity sensor 
  { Serial.println("Failed to initialize Temperature and Humidity Sensor!"); while (1);}

  if (!APDS.begin()) //Initialize Colour, Proximity and Gesture sensor 
  { Serial.println("Failed to initialize Colour, Proximity and Gesture Sensor!"); while (1);}
 }

float accel_x, accel_y, accel_z;
float gyro_x, gyro_y, gyro_z;
float mag_x, mag_y, mag_z;
float Pressure;
float Temperature, Humidity;
int Proximity;

void loop()
{
  //Accelerometer values 
  if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(accel_x, accel_y, accel_z);
    Serial.print("Accelerometer = ");Serial.print(accel_x); Serial.print(", ");Serial.print(accel_y);Serial.print(", ");Serial.println(accel_z);
  }
delay (200);

  //Gyroscope values 
  if (IMU.gyroscopeAvailable()) {
    IMU.readGyroscope(gyro_x, gyro_y, gyro_z);
    Serial.print("Gyroscope = ");Serial.print(gyro_x); Serial.print(", ");Serial.print(gyro_y);Serial.print(", ");Serial.println(gyro_z);
  }
delay (200);

  //Magnetometer values 
  if (IMU.magneticFieldAvailable()) {
    IMU.readMagneticField(mag_x, mag_y, mag_z);
    Serial.print("Magnetometer = ");Serial.print(mag_x); Serial.print(", ");Serial.print(mag_y);Serial.print(", ");Serial.println(mag_z);
  }
delay (200);

  //Read Pressure value
  Pressure = BARO.readPressure();
  Serial.print("Pressure = ");Serial.println(Pressure);
  delay (200);

  //Read Temperature value
  Temperature = HTS.readTemperature();
  Serial.print("Temperature = ");Serial.println(Temperature);
  delay (200);

  //Read Humidity value
  Humidity = HTS.readHumidity();
  Serial.print("Humidity = ");Serial.println(Humidity);
  delay (200);

  //Proximity value
  if (APDS.proximityAvailable()) {
    Proximity = APDS.readProximity();
    Serial.print("Proximity = ");Serial.println(Proximity); 
    }
  delay (200);

  Serial.println("_____________________________________________________"); 
  delay(1000);
}

코드와 내용 출처: Circuit Digest

 

 

참고자료

 

ArduinoBLE library

ArduinoBLE library Github

Designing a two-axis gesture-controlled platform for DSLR cameras

Getting started with the Arduino NANO 33 BLE Sense

Getting Started with Arduino products

Use your Arduino NANO 33 BLE Sense on the Arduino Web IDE

Arduino Nano 33 BLE Sense Review - What's New and How to Get Started?

영감을 주는 Arduino Project Hub

Guide on the Arduino IDE

Nano 33 BLE Sense Project

 

 

 

반응형