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

오디오 파일을 ISD1700 칩에 녹음하기 위한 소프트웨어

구성품 및 소모품

Arduino Nano R3
× 1
브레드보드(일반)
× 2
ISD1760 음성 녹음 및 재생 모듈
× 1
USB-A 대 미니 USB 케이블
× 1
전화 오디오 커넥터, 3.5mm
× 2
9V 1A 스위칭 벽 전원 공급 장치
× 1
브레드보드 전원 공급 장치 5V
× 1
점퍼 와이어(일반)
× 1

앱 및 온라인 서비스

ISD1700 기록 도구
ARDUINO 및 Windows 애플리케이션용 코드가 모두 포함된 ISD1700 Record Tool로 아카이브
Arduino IDE

이 프로젝트 정보

최근 프로젝트 중 하나에서 짧은 문자 메시지를 음성으로 추가해야 했습니다. SD 카드가 있는 MP3 모듈과 같은 실드는 나에게 과도하게 보였고 Arduino가 인간의 말을 재생산하도록 «가르친다»는 것은 이 작업에만 마이크로컨트롤러의 모든 리소스를 소비하는 것을 의미합니다. 이는 사실상 보조 작업입니다. 또한 어떤 경우에도 메모리가 부족할 것입니다.

짧은 검색 결과 ISD1700 시리즈의 음성 녹음 및 재생 칩, SPI 제어, 최대 몇 분 길이의 메시지 저장이 가능했습니다.

음성 메시지는 별도의 파일 형태로 미리 준비했습니다. 남은 유일한 문제는 IC 메모리에 이러한 것을 기록하는 방법이었습니다. ISD1700용 프로그래머는 널리 보급되지 않고 칩 자체보다 비용이 훨씬 더 많이 듭니다. 만드는 방법에 대한 정보가 몇 가지 있었지만(https://laserwar.ru/sound_lasertag.html) 라디오 아마추어가 아닌 프로그래머이기 때문에 표준 하드웨어를 사용하고 싶었습니다. Arduino 보드가 그 역할에 탁월했습니다.

데이터시트(«ISD1700Design Guide»)를 살펴본 후 파일을 기록할 수 있는 아날로그 입력이 있다는 것을 깨달았습니다. 그리고 프로세스 자동화를 위해 특별한 소프트웨어인 ISD1700 Record Tool을 작성하기로 결정했습니다.

ISD1700 녹음 도구를 사용하면 Arduino 보드를 통해 오디오 파일 세트를 ISD1700에 녹음할 수 있습니다. 소프트웨어는 두 부분으로 구성됩니다. Arduino 보드용 스케치(ISD1700.ino ) 및 독립 실행형 Windows 애플리케이션(ISD1700.exe ).

ISD1700.ino의 스케치 ATMega328P 기반 ARUINO 보드(Arduino Uno 및 Arduino Nano에서 테스트)용으로 작성되었지만 다른 보드에서도 작동할 수 있습니다.

지원되는ISD1700 목록:

1) ISD1730;

2) ISD1740;

3) ISD1750;

4) ISD1760;

5) ISD1790;

6) ISD17120;

7) ISD17150;

8) ISD17180;

9) ISD17210;

10) ISD17240.

Windows 응용 프로그램은 MP3, WAV, OGG 등 가장 널리 사용되는 형식을 지원하는 BASS 오디오 라이브러리를 기반으로 합니다.

1. 하드웨어 연결

소프트웨어 개발 중에는 별도의 ISD1700 IC 대신 기성품 녹음 모듈을 사용했습니다. 다른 가능한 연결 변형을 시도하기 전에 원본 ISD1700 데이터시트를 읽는 것이 좋습니다.

그림 1–5는 하드웨어 세트를 보여줍니다. 이때 ARDUINO NANO를 사용합니다.

작은 브레드보드에 오디오 입력(왼쪽)과 이어폰(오른쪽)을 위한 2개의 3.5mm 소켓(그림 2)을 배치했습니다.

아두이노의 5V 출력으로 모든 부품에 전원을 공급하는 것보다 외부 전원 없이 연결 오류가 많았기 때문에 별도의 전원 공급 장치를 사용하는 것을 권장합니다. 그러나 이것은 와이어 연결의 품질이 좋지 않거나 다른 문제로 인해 발생할 수 있습니다.

2. 아두이노 플래싱

USB를 통해 Arduino 보드를 PC에 연결하고 ISD1700.ino를 엽니다. ADUINO IDE에서 평소와 같이 스케치를 업로드합니다(그림 6).

3. 애플리케이션 사용자 인터페이스

ISD1700.exe 실행 . 각 제어 요소에 대한 설명은 그림 7과 같습니다.

4. 일반적인 작동 순서

그림 8은 Windows 응용 프로그램의 일반적인 작동 순서를 보여줍니다.

설명:

1. ISD1700에 녹음하려는 오디오 파일을 엽니다. 간단히 마우스로 드래그하여 정렬하거나 필요한 경우 원하지 않는 파일(이전에 확인)을 삭제하십시오. 또한 각 파일을 재생하고 볼륨 레벨을 조정할 수 있습니다.

2. ARDUINO 보드가 연결된 COM 포트를 선택합니다(그림 9).

3. "Detect ISD1700" 버튼을 누르고 오른쪽 상자에 ISD1700 모델이 표시되는지 확인합니다.

4. 모든 오디오 파일의 총 재생 시간이 ISD1700 용량(초) 미만인지 확인하십시오. 그렇지 않으면 녹음을 시작할 수 없습니다.

5. "녹화 시작" 버튼을 누릅니다. 막대에서 진행 상황을 볼 수 있습니다. 필요한 경우 "녹화 중지"를 누르십시오.

6. 처리가 완료되면 모든 트랙의 주소를 클립보드에 복사할 수 있습니다. 10은 두 옵션의 차이점을 보여줍니다.

ISD1700 녹음 모듈을 사용하면 이어폰과 온보드 버튼을 사용하여 녹음 프로세스가 완료된 직후 오디오 파일을 재생할 수 있습니다.

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

코드

<울>
  • ISD1700 ARDUINO 코드
  • ISD1700 ARDUINO 코드C/C++
    // ISD1700 Record Tool용 Arduino 코드// 테스트:Arduino Uno, Arduino Nano(ATMega328P)// 저작권:Anton Tsaritsynskyy, 2019년 8월// 이메일:[email protected]//// 소프트웨어는 보증 없이 "있는 그대로" 제공됩니다.// 작성자는 이 소프트웨어를 사용하여 발생하는 원치 않는 결과에 대해 책임을 지지 않습니다.// 이 소프트웨어의 상업적 배포는 허용되지 않습니다.// 타사 라이브러리 및 구성 요소는 해당 소프트웨어의 자산입니다. 각 개발자.#include const unsigned int ISD_ERASE_OK =3002;const unsigned int ISD_REC_OK =3003;const unsigned int ISD_STOP_OK =3004;const unsigned int ISD_RESET_OK =3005;const unsigned ISD_RESET_OK =3005;const unsign 3007; 상수 바이트 ISD_SS_PIN =8, 부울 isdIsUp =거짓, 부울 isdNotifyIfFull =true, 부울 isdPowerUp(무효) { 바이트 SR0B1 =1; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SR0B1 =SPI.transfer(0x01); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 반환(SR0B1 &1) !=1; } 부울 isdPowerDown(무효) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.전송(0x07); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction();} 부울 isdReset(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.전송(0x03); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 지연(20);} 무효 isdClrInt( 무효) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.전송(0x04); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction();} 부울 isdIsReady(무효) { 바이트 SR1 =0; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.전송(0x05); SPI.transfer(0x00); SR1 =SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 반환(~SR1 &1) !=1; } 무효 isdEnableAnaIn(무효) { 바이트 APC[2]; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.transfer(0x44); SPI.transfer(0x00); APC[0] =SPI.transfer(0x00); APC[1] =SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); APC[0] &=~B01010000; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.transfer(0x45); SPI.전송(APC[0]); SPI.transfer(APC[1]); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction();}byte isdDeviceID(void) { 바이트 ID; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.전송(0x09); SPI.transfer(0x00); 아이디 =SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 반환 ID;} 부울 isdIsFull(무효) { 바이트 SR0B1 =2; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SR0B1 =SPI.transfer(0x05); SPI.transfer(0x00); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 반환(SR0B1 &2) ==2; } 무효 isdRec( 무효) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.transfer(0x41); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 지연(40);} 무효 isdStop( 무효) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.전송(0x02); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 지연(100);} 무효 isdErase( 무효) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.transfer(0x43); SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); while ( !isdIsReady() ) {} }unsigned int isdReadRecordPointer(void) { byte DB[2]; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); 디지털 쓰기(ISD_SS_PIN, LOW); SPI.transfer(0x08); SPI.transfer(0x00); DB[0] =SPI.transfer(0x00); DB[1] =SPI.transfer(0x00); 디지털 쓰기(ISD_SS_PIN, HIGH); SPI.endTransaction(); 반환(DB[1] <<8) | DB[0];}부호 없는 int isdInit(void) { while ( !isdPowerUp() ) {} delay(100); isdClrInt(); 동안 ( !isdIsReady() ) {} isdEnableAnaIn(); return 3000+isdDeviceID();} 무효 설정() { pinMode(ISD_SS_PIN, OUTPUT); 디지털 쓰기(ISD_SS_PIN, HIGH); Serial.begin(9600); SPI.begin(); } 문자 cmd; 무효 루프() { if (Serial.available()) { cmd =Serial.read(); 스위치(cmd) { 케이스 'D':Serial.print( isdInit() ); isdPowerDown(); isdIsUp =거짓; 부서지다; 케이스 'E':isdInit(); isdErase(); Serial.print(ISD_ERASE_OK); isdIsUp =참; isdNotifyIfFull =true; 부서지다; 케이스 'R':isdRec(); Serial.print(ISD_REC_OK); 부서지다; 케이스 'S':isdStop(); Serial.print( isdReadRecordPointer() ); 부서지다; 케이스 'X':isdReset(); Serial.print(ISD_RESET_OK); isdIsUp =거짓; 부서지다; 케이스 'C':if (isdIsUp) { isdStop(); isdReset(); Serial.print(ISD_CANCEL_OK); isdIsUp =거짓; } 부서지다; } } if (isdNotifyIfFull &&isdIsUp) { if (isdIsFull()) { isdReset(); isdIsUp =거짓; Serial.print(ISD_FULL); isdNotifyIfFull =거짓; } }}

    회로도


    제조공정

    1. 소프트웨어 구성 요소에 대한 ISO 26262 인증
    2. 칩용 텅스텐 티타늄 합금 타겟
    3. 반도체 칩용 고순도 텅스텐 타겟
    4. AI 칩의 급증, AI 소프트웨어의 스포트라이트 획득
    5. CORONAVIRUS DISEASE 동안 비상용 펄스 산소 농도계 사용
    6. Arduino Audio Reactive Desk Light
    7. ThingSpeak Arduino 기상 관측소
    8. 라디오 여우 사냥을 위한 자동 키어
    9. Health Band - 노인을 위한 스마트 도우미
    10. 파산을 위한 Hexion 파일