제조공정
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
|
최근 프로젝트 중 하나에서 짧은 문자 메시지를 음성으로 추가해야 했습니다. 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 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 =거짓; } }}
제조공정
사용하는 3D 인쇄 소프트웨어는 응용 프로그램, 경험 및 발생 가능한 비용에 따라 다릅니다. 일부 3D 인쇄 도구에는 모델을 사용자 지정하고 상세하고 매우 사실적인 결과를 얻을 수 있는 최고의 기능이 있지만 초보자에게는 적합하지 않을 수 있습니다. 모델링 소프트웨어를 사용하면 슬라이싱 도구로 CAD 모델을 슬라이스하여 프린터에 지침을 전달하는 동안 자신의 모델을 설계할 수 있습니다. 다음은 작업에 적합한 도구를 선택하는 데 도움이 되는 최고의 3D 인쇄 소프트웨어 리뷰입니다. 3D 프린팅 소프트웨어란 무엇입니까? 3D
어린이 장난감에서 자동차 부품에 이르기까지 금속 가공 산업에서 대량 생산되는 대부분의 제품은 다이캐스팅 제품입니다. 로봇은 다이캐스팅 프로세스를 자동화했으며 다이캐스팅 소프트웨어를 사용하면 다이캐스팅 주조 공장에서 뜨거운 금속 침, 열 및 모든 윤활유를 처리할 수 있습니다. 용융 금속을 고압으로 금형 캐비티에 밀어넣는 다이캐스팅 공정에서 로봇은 모든 추출, 삽입 및 적재를 처리합니다. 3D CAD(Computer-Aided Design) 로봇 다이캐스트 소프트웨어는 대부분의 제조업체에서 기본적으로 선택합니다. RobotWare D