1. 아두이노 나노 33 시리즈  

아두이노 나노 33 IOT, 아두이노 나노 33 BLE, 아두이노 나노 33 BLE Sense 등 기존의 아두이노 나노와 비슷한 이름을 가진 아두이노보드들이 여러개 있어 혼동된다. 이들 시리즈들의 공통점과 차이점을 설명해 구분할 수 있도록 하고자 한다. 

 

아두이노 보드 이름에 나노가 붙으면 보드의 사이즈가 원래의 아두이노 나노와 동일한 18 x 45mm 이라는 의미이고 33 시리즈는 전통적으로 아두이노 보드들은 작동전압이 5V 이었는데 3.3V로 작동되는 보드임을 나타내는 것으로 보인다. 그리고 그뒤에 붙은 명칭은 보드의 기능을 용도별로 특화한 사항을 의미한다.    

 

즉 아두이노 나노 33 시리즈는 나노사이즈로 3.3V용 보드라는 의미로 각각의 보드는 다음과 같다.  

2. Arduino Nano 33 IoT

위 모양의 아두이노 나노 33 IOT는 IOT환경에 사용할 수 있도록 WIFI 및 BLE 통신기능이 추가되어 있고, 6축 IMU가 장착되어 있다. 

3. Arduino Nano 33 BLE

위 모양의 아두이노 나노 33 BLE 는 통신기능을 BLE 5.0으로 업그레이드하고 프로세서 및 메모리 사양을 증가시켜 놓은 모델로서 IMU센서도 9축용으로 업그레이드되어 있다. 

4. Arduino Nano 33 BLE Sense

 

위 모양의 아두이노 나노 33 BLE SENSE는 나노 33 BLE에 각종 센서들을 내장시켜 하나의 보드로 통합한 형태이다.  

 

5. Arduino Nano 33 시리즈 비교표

보드 Arduino NANO Arduino NANO 33 IOT Arduino NANO 33 BLE Arduino NANO 33 SENSE
무선통신 불가 Wi-Fi / BLE 4.2 BLE5.0 BLE5.0
메인칩 ATmega328 ATSAMD21 NINA-b3
(nRF52840)
NINA-b3
(nRF52840)
클럭 16 MHz 48MHz 64MHz 64MHz
Flash 메모리 32 kbyte 256 kbyte 1MB 1MB
SRAM 2 kbyte 32 kbyte 256kbyte 256kbyte
인터페이스 USB, SPI, I2C, UART USB, SPI, I2C, UART USB, SPI, I2C, UART USB, SPI, I2C, UART
USB 전원 5V 5V 5V 5V
VIN핀 전원 7V ~ 12V 4.5V ~ 21V 4.5V ~ 21V 4.5V ~ 21V
회로동작전압 5V 3.3V 3.3V 3.3V
디지털핀 14핀
6개핀에 PWM기능 탑재
14핀
6개핀에 PWM기능 탑재
14핀
6개핀에 PWM기능 탑재
14핀
6개핀에 PWM기능 탑재
아날로그핀 8 8 8 8
내장센서  - LSM6DS3: 6축 IMU( 가속도,자이로)  LSM9DS1: 9축 IMU(가속도,자이로,지자기) - LSM9DS1: 9축 IMU(가속도,자이로,지자기)
- APDS9960:
 색, 제스처, 근접 센서
- MP34DT05: 디지털 마이크
- LPS22HB: 대기압 센서
- HTS221: 온습도 센서
- RGB LED = {D22, D23, D24}
보드 크기 18mm × 45mm 18mm × 45mm 18mm × 45mm 18mm × 45mm

 

1.아두이노 나노 33 BLE Sense

 

아두이노 나노 33 BLE Sense보드는 아두이노 나노급 사이즈이지만 성능과 기능을 대폭 향상시켜 AI학습용으로 사용할수 있도록 한다는 취지의 보드이다.  기본적으로 메인 칩을 노르딕사의  nRF52840를 채용하여 처리 속도 및 메모리 용량을 대폭 업그레이드하고 BLE 5.0 저전력 블루투스 통신기능을 내장시킴과 동시에 여러가지 센서들을 보드내에 포함시켜 별도 센서 연결작업 없이도 다양한 센서기능 실습이 가능하도록 구성되어 있다.    

2. 아두이노 나노와의 사양비교  

보드 Arduino NANO Arduino NANO 33 SENSE
무선통신 불가 BLE5.0
메인칩 ATmega328 NINA-b3
(nRF52840)
클럭 16 MHz 64MHz
Flash 메모리 32 kbyte 1MB
SRAM 2 kbyte 256kbyte
인터페이스 USB, SPI, I2C, UART USB, SPI, I2C, UART
USB 전원 5V 5V
VIN핀 전원 7V ~ 12V 4.5V ~ 21V
회로동작전압 5V 3.3V
디지털핀 14핀
6개핀에 PWM기능 탑재
14핀
6개핀에 PWM기능 탑재
아날로그핀 8 8
보드 크기 18mm × 45mm 18mm × 45mm
내장된 센서  - - LSM9DS1: 9축 IMU(가속도,자이로,지자기)
- APDS9960:
색, 제스처, 근접 센서
- MP34DT05: 디지털 마이크
- LPS22HB: 대기압 센서
- HTS221: 온습도 센서
- RGB LED = {D22, D23, D24}

 

3. 나노 33 BLE Sense PINMAP

-Digital PIN : 14개의 디지털 Input/Output 핀을 가지고 있으며 전부 PWM 용으로 사용가능하다.

-Analog PIN : 8개의 12 bit 해상도 아랄로그핀이 있어  최대 8개의 아날로그 센서를 연결하여 사용할 수 있다.

-기타 통신을 위한 I2C, SPI, Tx/Rx 핀들이 구성되어 있다. 

 

-VIN : VIN 단자를 통한 입력 전원은 21V까지 가능하고 USB 연결을 통해 5V 전원공급으로 사용가능하지만 기본적인 보드의 LOGIC 전압은 3.3 이다. 따라서 Digtal Input 등의 단자에 다른 5V 신호를 가하게 되면 보드가 손상되므로 주의해야 한다.     

 

-5V PIN : 다른 부품에 5V 전압을 공급할 수 있도록 5V 출력 핀이 있지만 기본적으로 비활성화 되어 있고 사용하려면 다음과 같이  보드 뒷면을 납땜으로 연결시켜 주어야 한다.  

5. 아두이노IDE에서의 사용방법 

 

기존 아두이노나노와는 전혀 다른 보드이므로 보드패키지를 설치해 주여야 한다.   

 

1) 아두이노 IDE에서 툴 -> 보드 ->보드메니저를 선택한다. 

 

2) 보드메니저에서 nano 33 BLE를 검색하여 "Arduino Mbed OS Nano Board"를 설치해 주어야 한다. 

 

3) 또한 내장되어 있는 센서기능을 사용하려면 해당 라이브러리들을 각각 설치해야 한다. 얘를 들어 가속도센서기능을 사용하려면  라이브러리 메니저에서 Arduino_LSM9DS1라이브러리를 찾아 설치해 주어야 한다. 

 

6. 샘플프로그램 

위 두가지 설치작업을 마치고 보드를  Arduino 33 BLE"로 선택하면 다음과 같은 관련 예제 프로그램들이 표시된다. AI기능 개발 테스트를 위한  TensorflowLite 예제도 몇개 포함되어 있다. 

 

7. 사용후기 

 

보드의 크기만 기존의 아두이노 나노와 동일할 뿐 모든 사양이나 기능의 범위가 다른 차원의 보드로서 AI기능 학습 등에 널리 유용한 보드임에는 분명하지만.....

 

아직 중국산 호환보드가 나오지 않고 이탈리아산 오리지널만 판매되고 있어서 인지 구매 가격이 너무 비싸다. 아두이노 나노의 경우 호환기종을 몇천원대에 살 수 있는 반면 나노 33 BLE Sense보드는 10배 정도의 비용을 들여야 구매할 수 있다.  

 

그리고 실제 아두이노 IDE에서 사용해보면 컴파일속도가 매우 느려 답답하다.  컴파일 한번 하는데 간단한 프로그램도 몇분은 기본이고, 조금 복잡한 AI 프로그램은 10분이상 아무 반응없이 컴파일 작업이 진행되므로 에러로 작업이 중단된 것으로 생각되어 강제 종료 후 다시 작업하는 사례가 많을 정도로 느리다. 두번째 컴파일 작업은 조금 속도가 빨라 지기는 하지만 여전히 느려 답답하다.  

 

 

 8. 구매좌표    

 

정품 나노 33 BLE 센스 Nano 33 BLE Sense ABX00031

COUPANG

www.coupang.com

 

 

1. 미디어파이프(Mediapipe)를 활용한 AI Web페이지 개발하기

 

미디어파이프는 사용하기 편하게 라이브러리 형태로 모듈화되어 제공되는데 지원가능한 환경이나 언어가 매우 다양해 Andoid, iOS, C++, Python, JavaScript, Coral 등이 지원된다. 이중에서 JavaScript언어 지원기능을 사용하면 미디어파이프 AI기능이 포함된 Web 페이지를 손쉽게 개발할 수 있다. 

 

미디어파이프에서 JavaScript 방식으로 제공하는 모듈들은 다음과 같다. 

Solution NPM Package Example
Face Mesh @mediapipe/face_mesh mediapipe.dev/demo/face_mesh
Face Detection @mediapipe/face_detection mediapipe.dev/demo/face_detection
Hands @mediapipe/hands mediapipe.dev/demo/hands
Holistic @mediapipe/holistic mediapipe.dev/demo/holistic
Objectron @mediapipe/objectron mediapipe.dev/demo/objectron
Pose @mediapipe/pose mediapipe.dev/demo/pose
Selfie Segmentation @mediapipe/selfie_segmentation mediapipe.dev/demo/selfie_segmentation

 이외에 다음과 같은 추가 모듈이 제공된다. 

 

2.설치 

 

위의 모듈들은 NPM 패키지형태로 제공되는데 이를 자체 웹서버에 설치하려면 npm install명령으로 가능하다. 즉 손모양인식을 위한 hands모듈은 "npm install @mediapipe/hands."라는 명령어로 설치하면 된다. 그러나 웹서버가 인터넷환경에서 운영될 것이라면 굳이 자체 서버에 설치할 필요도 없이 구글에서 제공하는 사이트를 링크걸어 사용하면 된다. 

<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/drawing_utils@0.1/drawing_utils.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/holistic@0.1/holistic.js" crossorigin="anonymous"></script>
</head>

 

 

3.샘플 웹페이지 

 

-HTML 코드 

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/camera_utils/camera_utils.js" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/control_utils/control_utils.js" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/drawing_utils/drawing_utils.js" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/hands/hands.js" crossorigin="anonymous"></script>
</head>

<body>
  <div class="container">
    <video class="input_video"></video>
    <canvas class="output_canvas" width="1280px" height="720px"></canvas>
  </div>
</body>
</html>

5~8 line : 세가지 유티리티 모듈과 손동작 인식 AI 모델기능인 hands.js를 링크하는 것 만으로 필요한 미디어파이프 기능을 모두 사용할 수 있다  

 

-CSS 

body {
  bottom: 0;
  font-family: 'Titillium Web', sans-serif;
  color: white;
  left: 0;
  margin: 0;
  position: absolute;
  right: 0;
  top: 0;
  transform-origin: 0px 0px;
  overflow: hidden;
}

.container {
  position: absolute;
  background-color: #596e73;
  width: 100%;
  max-height: 100%;
}

.input_video {
  display: none;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  &.selfie {
    transform: scale(-1, 1);
  }
}


.output_canvas {
  max-width: 100%;
  display: block;
  position: relative;
  left: 0;
  top: 0;
}

 

-JavaScript

<script type="module">
const videoElement = document.getElementsByClassName('input_video')[0];
const canvasElement = document.getElementsByClassName('output_canvas')[0];
const canvasCtx = canvasElement.getContext('2d');

function onResults(results) {
  canvasCtx.save();
  canvasCtx.clearRect(0, 0, canvasElement.width, canvasElement.height);
  canvasCtx.drawImage(
      results.image, 0, 0, canvasElement.width, canvasElement.height);
  if (results.multiHandLandmarks) {
    for (const landmarks of results.multiHandLandmarks) {
      drawConnectors(canvasCtx, landmarks, HAND_CONNECTIONS,
                     {color: '#00FF00', lineWidth: 5});
      drawLandmarks(canvasCtx, landmarks, {color: '#FF0000', lineWidth: 2});
    }
  }
  canvasCtx.restore();
}

const hands = new Hands({locateFile: (file) => {
  return `https://cdn.jsdelivr.net/npm/@mediapipe/hands/${file}`;
}});
hands.setOptions({
  maxNumHands: 2,
  minDetectionConfidence: 0.5,
  minTrackingConfidence: 0.5
});
hands.onResults(onResults);

const camera = new Camera(videoElement, {
  onFrame: async () => {
    await hands.send({image: videoElement});
  },
  width: 1280,
  height: 720
});
camera.start();
</script>

24~28 Line :  손동작 인식 AI모델을 실행할 때 option으로  인식할 최대 손모양 갯수, 최소 신뢰도 값을 지정한다. 

6 ~ 19 Line : 손동작 인식 AI모델 실행결과에 따른 처리 

12 ~ 16 Line : 인식된 손가락 Landmark 좌표를 이용하여 원하는 기능의 동작을 프로그램할 수 있다. 

9~10 Line의 촬영이미지 Display 부분을 삭제하면 다음과 같이 인식된 손가락 모양만 표시된다. 

 

4.  테스트 사이트 

 

다음 링크에 접속하면 Codepen 기능을 이용하여 구글에서 제공하는 데모 프로그램을 동작시켜 볼 수 있고, 여기에서 내용을 수정해 가면서 작동되는 내용을 즉석에서 테스트 확인해 볼 수도  있다.  

 

 

 

MediaPipe - Hands

...

codepen.io

 

+ Recent posts