산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

TinyML-Language Detector 기반 Edge Impulse 및 Arduino

구성품 및 소모품

Arduino Nano 33 BLE 감지
× 1
국가 제어 장치 PCA9685 8-채널 8W 12V FET 드라이버 비례 밸브 I2C 인터페이스가 있는 컨트롤러
× 1
SG90 마이크로 서보 모터
× 3
9V 배터리 클립
× 1

필요한 도구 및 기계

3D 프린터(일반)
납땜 인두(일반)

앱 및 온라인 서비스

Edge Impulse Studio
Arduino IDE
오토데스크 퓨전 360

이 프로젝트 정보

개요

이 프로젝트의 배경은 마이크로컨트롤러에 구현된 신경망/딥 러닝을 사용하여 언어 분류기를 만드는 것입니다. 장치는 이탈리아어, 영어 및 프랑스 언어에 대해 하나의 단어를 식별합니다. 인식할 단어는 "si " 이탈리아어의 경우 " " 프랑스인은 " " 영어용입니다. 장치는 계속해서 듣고 있으며 3개의 단어 중 하나가 인식되면 해당 언어의 플래그가 나타납니다.

이 프로젝트는 Arduino Nano 33 BLE Sense 마이크로컨트롤러와 Edge Impulse Studio 개발 플랫폼이라는 두 가지 주요 구성 요소를 기반으로 합니다.

프로젝트 구현은 다음 단계를 따릅니다.

<울>
  • 데이터세트 샘플링/생성
  • 모델 디자인
  • 모델 교육
  • 모델 테스트
  • 하드웨어 맞춤설정
  • 모델 배포 및 사용자 지정
  • 최종 기기를 구축합니다(모델 주변의 하드웨어).
  • 데이터세트 샘플링/생성

    데이터셋은 전 세계적으로 약 30분(각 단어당 10분) 동안 3개의 단어(oui, si, yes)의 녹음으로 구성됩니다.

    각 단어에 대해 동일한 단어가 계속 반복되는 연속 사운드 파일을 만든 다음 Audacity 응용 프로그램을 사용하여 파일을 1초의 지속 시간 중 하나씩 여러 파일로 분할했습니다. 각 파일에는 단어의 예가 들어 있습니다.

    그런 다음 이 파일을 Edge Impulse에 업로드하고 단어에 따라 레이블을 지정했습니다.

    이 파일 외에도 1초 길이의 다른 녹음 파일 세트가 업로드되어 배경 소음으로 분류되었습니다.

    전 세계적으로 Training 데이터는 33분(단어당 10분, 배경 소음 3분)으로 구성되었습니다.

    모델 디자인

    이 모델은 이미 정의된 대부분의 필요한 알고리즘이 딤플화되어 있는 에지 임펄스 플랫폼을 활용하여 구현되었습니다.

    모델을 만드는 첫 번째 단계는 사운드를 시계열로 변환하는 것입니다. 그런 다음 시계열은 미리 정의된 시간 창 크기로 분할됩니다.

    (이 첫 번째 변환은 아래 그림의 빨간색 면에 표시됩니다.)

    두 번째 단계는 신호 처리 기술(이 경우 MFCC(Mel Frequency Cepstral Coefficients))을 사용하여 4가지 클래스(3단어 + 배경) 각각을 가장 잘 특성화하는 특성을 시계열에서 추출하는 것입니다.

    아래는 MFCC 변환 및 해당 계수의 예입니다.

    시계열과 계수의 컨볼루션은 신경망에 공급하는 데 사용됩니다. 마지막으로 신경망의 출력은 각 클래스에 속하는 확률을 제공합니다.

    아래는 신경망 구현 및 분류 성능에 대한 개요입니다.

    교육 - Arduino Nano 33 BLE Sense에 대한 사용자 지정

    교육 및 최종 모델 사용자 지정을 위해 Edge Impulse Studio에서 "EON Tuner라는 새로운 옵션을 사용할 수 있습니다. ". 임베디드 머신 러닝 애플리케이션을 위한 최적의 아키텍처를 선택할 수 있습니다.

    가능한 모델의 많은 인스턴스를 병렬로 실행하며 각 인스턴스는 다른 구성(다른 신호 디지털 기술 및 다른 신경망 아키텍처)을 사용합니다.

    이 옵션을 실행하려면 몇 가지 정보만 필요합니다.

    <울>
  • "대상 "는 모델 유형을 나타냅니다(이 경우 "키워드 스포팅 ")
  • 애플리케이션이 실행되는 하드웨어(이 경우 "Arduino Nano 33 BLE Sense(Cortex-M4F 64MHz) ".
  • 각 인스턴스에 대해 몇 가지 분류 성능 메트릭, 계산에 걸리는 시간, 램의 양, 마이크로컨트롤러 파일 시스템에서 사용되는 파일 시스템 공간을 제공합니다.

    이 프로젝트에서 우리는 분류 정확도에 대해 5가지 최고의 인스턴스를 선택했으며 그 중에서 가장 빠른 인스턴스를 선택했습니다.

    테스트

    테스트는 새로운 녹음 파일 세트를 수집하고 분류 품질을 확인하여 수행되었습니다.

    일단 분류가 정확한지 확인했습니다. 구현의 다음 단계인 최종 배포로 이동했습니다.

    배포

    edge-impulse studio 덕분에 배포가 매우 간단했습니다.

    배포 옵션에서 Arduino 라이브러리 옵션을 선택했습니다. 그것은 우리의 필요에 맞게 사용자 정의할 수 있는 모델의 표준 arduino C 파일을 제공합니다.

    에지 임펄스로 건물이 완성되면 zip 파일이 생성되어 로컬 시스템에 다운로드되며 최종 사용자 지정을 위해 Arduino Ide에서 가져오기만 하면 됩니다.

    코드

    코드는 링크에서 사용할 수 있습니다. 코드는 아래에 나열된 몇 가지 사용자 정의가 포함된 edge-impulse에서 다운로드한 코드를 기반으로 합니다.

    1. 라이브러리 Adafruit_PWMServoDriver.h를 추가했습니다. 플래그에 부착된 서보를 구동하기 위한 것입니다.

    2. servos_selector 함수가 정의되었습니다. 분류 결과에 따라 서보를 조정합니다.

    보이드 서보 선택기(int iter){
    time_now =millis();
    delta=time_now - time_was;
    if (delta> 2000){
    time_was=time_now;
    스위치(iter) {
    케이스 0:
    pwm.setPWM(0, 0, 350);
    delay(500);
    pwm.setPWM( 0, 0, 200);
    pwm.setPWM(1, 0, 200);
    pwm.setPWM(2, 0, 200);
    중단;
    케이스 1:
    pwm.setPWM(1, 0, 350);
    Serial.println("2222");
    delay(500);
    pwm.setPWM(0, 0, 200) );
    pwm.setPWM(1, 0, 200);
    pwm.setPWM(2, 0, 200);
    중단;
    케이스 2:
    pwm .setPWM(2, 0, 350);
    Serial.println("333");
    delay(500);
    pwm.setPWM(0, 0, 200);
    pwm.setPWM(1, 0, 200);
    pwm.setPWM(2, 0, 200);
    중단;
    }
    }
    }

    3. 마지막으로 servos_select를 호출하는 IF 조건이 추가되었습니다. "result.classification 기반 기능 " 개체입니다.

    (size_t ix =0, ix ei_printf(" %s:%.5f\n", result.classification[ix].label,
    result.classification[ix].value);
    }

    #if EI_CLASSIFIER_HAS_ANOMALY ==1
    ei_printf("이상 점수:%.3f\n", result.anomaly);
    #endif
    print_results =0;
    }
    if (result.classification[1].value> 0.80){
    servos_selector(0);
    }
    else if (result.classification[2].value> 0.80){
    servos_selector(1);
    }
    else if (result.classification[3].value> 0.80){
    servos_selector(2);
    }
    }

    전기 회로

    전기 회로는 마이크로컨트롤러 Arduino Nano 33 BLE Sense 마이크로컨트롤러를 기반으로 하며 PCA9685를 사용하여 3개의 서보를 구동합니다.

    PCA9685 워크로드는 9v의 외부 배터리로 지원됩니다.

    그게 다야.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    코드
    https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous

    맞춤형 부품 및 인클로저

    회로도

    언어 감지_9RxXhRX5sj.fzz

    제조공정

    1. MPU-6050을 사용한 Arduino 자이로스코프 게임
    2. Arduino 디지털 주사위
    3. 아이언맨
    4. 나를 찾기
    5. Arduino 가습기 제어
    6. arduino를 사용한 소나 및 IDE 처리 시 표시
    7. MobBob:Android 스마트폰으로 제어되는 DIY Arduino 로봇
    8. Arduino Audio Reactive Desk Light
    9. NeoMatrix Arduino Pong
    10. Arduino 조이스틱