제조공정
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 3 | |||
![]() |
| × | 1 |
![]() |
| |||
![]() |
|
![]() |
| |||
![]() |
| |||
![]() |
|
개요
이 프로젝트의 배경은 마이크로컨트롤러에 구현된 신경망/딥 러닝을 사용하여 언어 분류기를 만드는 것입니다. 장치는 이탈리아어, 영어 및 프랑스 언어에 대해 하나의 단어를 식별합니다. 인식할 단어는 "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라는 새로운 옵션을 사용할 수 있습니다. ". 임베디드 머신 러닝 애플리케이션을 위한 최적의 아키텍처를 선택할 수 있습니다.
가능한 모델의 많은 인스턴스를 병렬로 실행하며 각 인스턴스는 다른 구성(다른 신호 디지털 기술 및 다른 신경망 아키텍처)을 사용합니다.
이 옵션을 실행하려면 몇 가지 정보만 필요합니다.
<울>각 인스턴스에 대해 몇 가지 분류 성능 메트릭, 계산에 걸리는 시간, 램의 양, 마이크로컨트롤러 파일 시스템에서 사용되는 파일 시스템 공간을 제공합니다.
이 프로젝트에서 우리는 분류 정확도에 대해 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="코드">제조공정
구성품 및 소모품 Arduino Nano R3 × 1 회전 전위차계(일반) × 7 SparkFun 푸시버튼 스위치 12mm × 7 MIDI 포트 × 1 저항 221옴 × 4 LED(일반) × 2 이 프로젝트 정보 2019년 3월 11일 업데이트 안녕하세요, 저는 아르페지에이터를 위한 새 펌웨어를 만들었습니다. 소스 코드가 완전히 다시 작성되었습니다. 이제 모듈식 구조를 통해 Arduino뿐만
구성품 및 소모품 Arduino UNO × 1 Adafruit RGB 백라이트 LCD - 16x2 × 1 브레드보드(일반) × 1 저항 220옴 × 1 SparkFun 푸시버튼 스위치 12mm × 1 점퍼 와이어(일반) × 1 USB-A-B 케이블 × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 필요한 부품은 위의 그림과