아두이노 nano 33 Sense에 대한 설명은 앞선 자료를 참고한다. 아래는 센서와 라이브러리 자료다. 라이브러리(영어: library)는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 일관성 있게 존재하는 자원의 그룹이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있다.
Sensors and Libraries
- IMU – ArduinoLSM9DS1
- Microphone – PDM, ArduinoSound
- Gesture, Color, Proximity – ArduinoAPDS9960
- Humidity Temperature – ArduinoHTS221
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 통신 테스트
아래는 Nano 33 BLE Sense 보드 구성품의 데이터 시트다. 데이터 시트(Datasheet)란, 한마디로 각 전자부품의 사용 설명서다. 회로 설계할 때 고려해야 할 것들이 들어있는 설명서라는 말이다. 전자 제품을 사면 함께 들어있는 설명서처럼 데이터 시트도 제조사에 따라 그 형식과 내용이 조금씩 다르다. 요즘은 모든 전자부품 제조회사들이 pdf 형태로 데이터 시트를 제공하고 있어 쉽게 구할 수 있다. 데이터 시트에 대한 설명과 보는 방법에 대한 자세한 자료를 참고하기 바란다. (아래표의 출처 링크)
센서/모듈 이름 |
목적 |
데이터 시트 |
nRF52840 |
32Bbit, 64MHz MCU |
|
NINA-B306 |
Bluetooth |
|
LSM9DS1 |
9축 IMU센서 |
|
LP22HB |
대기압 센서 |
|
HTS221 |
주변 온도, 상대 습도 센서 |
|
APDS-9960 |
근접, 주변광, RGB, 제스처 센서 |
|
MP34DT05 |
디지털 마이크 |
센서 데이터 시트
IMU |
LSM9DS1 (datasheet) |
Microphone |
MP34DT05 (datasheet) |
Gesture, light, proximity |
APDS9960 (datasheet) |
Barometric pressure |
LPS22HB (datasheet) |
Temperature, humidity |
HTS221 (datasheet) |
위의 두 가지를 한번에 통합한 자료는 아래를 참고한다.
Sensor Name |
Parameters |
Links |
LSM9DSI – ST Microelectronics |
Accelerometer, Gyroscope, Magnetometer |
|
LPS22HB – ST Microelectronics |
Pressure |
|
HTS221 – ST Microelectronics |
Temperature and Humidity |
|
APDS9960 – Avago Tech. |
Proximity, Light, Colour, Gesture |
|
MP34DT05 – ST Microelectronics |
Microphone |
Nano 33 BLE Sense 보드에 있는 RGB LED를 테스트하는 코드다. 일치하는지 확인은 안 했지만 GPIO 22, 23, 24번 핀이 red, green, blue 색에 할당이 되었으니 아래 코드를 업로드하여 테스트하면 색깔이 변하는 것을 확인할 수 있다.
//Arduino Nano 33 BLE Sense RGB LED
//소스코드 출처: https://rootsaid.com/arduino-nano-33-ble-sense/
//last update: 2020.04.30
const int ledPin = 22;
const int ledPin2 = 23;
const int ledPin3 = 24;
void setup()
{
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
delay(1000);
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
delay(1000);
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
delay(1000);
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
delay(1000);
}
아래는 센서 전체 코드이다. 출처는 상단 주석에 나와있다. 결과를 시리얼 모니터로 확인한 이미지도 아래에 나타낸다. 주의 할 점은 코드를 업로드 하고 바로 씨리얼 모니터 포트를 끊게 되어 있으니 업로딩을 완료하면 메뉴 > 툴 > 포트로 진입하여 다시 컴포트를 선택하고 시리얼 모니터를 확인하면 잘 나온다.
//센서 전체 테스트 코드
//Program to read sensor data and display on Serial Monitor
//소스 출처: https://circuitdigest.com/microcontroller-projects/arduino-nano-33-ble-sense-board-review-and-getting-started-guide
//last update: 2020. 04. 30
//날 좋은데 일이라니~
#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);
}
컴파일과 업로딩을 하고 결과를 봐야 하는데 보드는 자동으로 업로딩 포트를 끊는다.
아래처럼 센서 데이터를 컴포트로 송신하는 아름다운 결과를 볼 수 있다.
위 코드를 한글로 작성하여 소스코드를 공개한 자료 링크
위 첨부 이미지를 참고하여 아래 코드는 이제 모든 것이 작동하는지 빠르게 확인하기 위해 예제 프로그램을 사용할 수 있습니다. File-> Examples-> PDM-> PDMSerialPlotter에 제공된 프로그램을 사용해 봅시다. 이 프로그램은 온보드 마이크를 사용하여 오디오를 듣고 직렬 플로터에 플로팅 합니다. 프로그램을 업로드하고 보드와 IDE가 작동하는지 확인할 수 있습니다.
/*
This example reads audio data from the on-board PDM microphones, and prints
out the samples to the Serial console. The Serial Plotter built into the
Arduino IDE can be used to plot the audio data (Tools -> Serial Plotter)
Circuit:
- Arduino Nano 33 BLE board
This example code is in the public domain.
*/
#include <PDM.h>
// buffer to read samples into, each sample is 16-bits
short sampleBuffer[256];
// number of samples read
volatile int samplesRead;
void setup() {
Serial.begin(9600);
while (!Serial);
// configure the data receive callback
PDM.onReceive(onPDMdata);
// optionally set the gain, defaults to 20
// PDM.setGain(30);
// initialize PDM with:
// - one channel (mono mode)
// - a 16 kHz sample rate
if (!PDM.begin(1, 16000)) {
Serial.println("Failed to start PDM!");
while (1);
}
}
void loop() {
// wait for samples to be read
if (samplesRead) {
// print samples to the serial monitor or plotter
for (int i = 0; i < samplesRead; i++) {
Serial.println(sampleBuffer[i]);
}
// clear the read count
samplesRead = 0;
}
}
void onPDMdata() {
// query the number of bytes available
int bytesAvailable = PDM.available();
// read into the sample buffer
PDM.read(sampleBuffer, bytesAvailable);
// 16-bit, 2 bytes per sample
samplesRead = bytesAvailable / 2;
}
pdm 마이크로폰 데이터 값의 출력 화면은 생략한다.
참고자료
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' 카테고리의 다른 글
NANO 33 BLE Sense - 4. 온습도 센서 HTS221 실습 (0) | 2020.05.10 |
---|---|
NANO 33 BLE Sense - 3 기압 센서 사용해보기 (0) | 2020.05.10 |
Arduino Nano 33 BLE Sense 개발 가이드 5 - BLE 통신 테스트 (14) | 2020.05.01 |
Arduino Nano 33 BLE Sense 개발 가이드 4 - 센서 종합 테스트 (0) | 2020.05.01 |
Arduino NANO 33 BLE Sense 개발 가이드 2 - Pinmap과 기능 훑어보기 (0) | 2020.05.01 |
Arduino NANO 33 BLE Sense 개발 가이드 1 - 시작하기 (2) | 2020.05.01 |
Ultrasonic Sensors: Comparison and Test (US42V2, JSN-SR04T, and US-100) (0) | 2019.05.22 |
아두이노 먼지센서 PM2005, PM2007, PM2008M 예제코드 (0) | 2018.11.23 |
더욱 좋은 정보를 제공하겠습니다.~ ^^