Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Software para gravação de arquivos de áudio em chips ISD1700

Componentes e suprimentos

Arduino Nano R3
× 1
Breadboard (genérico)
× 2
Módulo de gravação e reprodução de voz ISD1760
× 1
Cabo USB-A para Mini-USB
× 1
Conector de áudio para telefone, 3,5 mm
× 2
9V 1A Fonte de alimentação de parede comutada
× 1
Fonte de alimentação de placa de ensaio 5V
× 1
Fios de jumpers (genérico)
× 1

Aplicativos e serviços online

Ferramenta de registro ISD1700
Arquive com a ferramenta de registro ISD1700 com o código para ARDUINO e o aplicativo do Windows
Arduino IDE

Sobre este projeto


Em um de meus projetos recentes, precisei adicionar voz às mensagens de texto curtas. Shields como o módulo MP3 com cartão SD me pareceram excessivos, e «ensinar» o Arduino a reproduzir a fala humana significaria gastar todos os recursos do microcontrolador apenas nesta tarefa, que na verdade é auxiliar. Além disso, eu estaria ficando sem memória em qualquer caso.

Uma breve pesquisa revelou chips de gravação e reprodução de voz da série ISD1700, controlados por SPI, capazes de armazenar mensagens de até vários minutos.

As mensagens de voz foram preparadas previamente em arquivos separados. A única questão que permaneceu foi a forma de registrar aqueles na memória do IC. Os programadores para ISD1700 não são amplamente distribuídos e custam muito mais caro do que os próprios chips. Havia algumas informações sobre como construir um (https://laserwar.ru/sound_lasertag.html), mas sou um programador em vez de radioamador, então queria usar hardware padrão - a placa Arduino era excelente para essa função.

Depois de estudar a ficha técnica («ISD1700Design Guide»), percebi que havia uma entrada analógica através da qual os arquivos podiam ser gravados. E para automação de processos, decidi escrever um software especial - ISD1700 Record Tool.

A ferramenta de gravação ISD1700 permite gravar um conjunto de arquivos de áudio no ISD1700 por meio da placa Arduino. O software consiste em duas partes:um esboço para a placa Arduino ( ISD1700.ino ) e aplicativo independente do Windows ( ISD1700.exe )

O esboço em ISD1700.ino foi escrito para uma placa ARUINO baseada em ATMega328P (testada em Arduino Uno e Arduino Nano), mas provavelmente também pode funcionar em outras placas.

Lista de ISD1700s suportados:

1) ISD1730;

2) ISD1740;

3) ISD1750;

4) ISD1760;

5) ISD1790;

6) ISD17120;

7) ISD17150;

8) ISD17180;

9) ISD17210;

10) ISD17240.

O aplicativo do Windows é baseado na biblioteca de áudio BASS, que suporta os formatos mais usados:MP3, WAV, OGG etc.





1. Conexão de hardware


Durante o desenvolvimento do software, usei um módulo de gravação pronto para uso em vez de um IC ISD1700 separado. Antes de tentar quaisquer outras variantes possíveis de conexão, recomendo fortemente a leitura da ficha técnica original do ISD1700.

A Fig. 1–5 mostra meu conjunto de hardware. ARDUINO NANO é usado neste caso.

Em uma pequena placa de ensaio coloquei dois soquetes de 3,5 mm (Fig. 2) para entrada de áudio (esquerda) e fones de ouvido (direita).



Eu recomendo usar uma fonte de alimentação adicional em vez de alimentar todos os componentes por meio da saída de 5 V do Arduino porque tive muitos erros de conexão sem fonte de alimentação externa. No entanto, isso pode ser devido à má qualidade das conexões dos fios ou outra coisa.






2. Flashing Arduino


Conecte a placa Arduino ao seu PC via USB, abra ISD1700.ino no ADUINO IDE e carregue o sketch normalmente (Fig. 6).





3. Interface do usuário do aplicativo


Execute ISD1700.exe . A descrição de cada elemento de controle é mostrada na Fig. 7.





4. Sequência operacional típica


A Fig. 8 mostra a seqüência operacional típica no aplicativo Windows.

Descrição:

1. Abra os arquivos de áudio que deseja gravar no ISD1700. Classifique-os simplesmente arrastando com o mouse ou exclua os arquivos indesejados (tendo verificado-os previamente), se necessário. Além disso, você pode reproduzir cada arquivo e ajustar o nível de volume.

2. Selecione a porta COM à qual a placa ARDUINO está conectada (Fig. 9).

3. Pressione o botão “Detectar ISD1700” e certifique-se de que o modelo do ISD1700 foi exibido na caixa à direita.

4. Certifique-se de que a duração total de todos os arquivos de áudio seja inferior à capacidade ISD1700 em segundos; caso contrário, você não conseguirá iniciar a gravação.

5. Pressione o botão “Iniciar gravação”. Você pode ver o progresso na barra. Pressione “Parar gravação” se necessário.

6. Após a conclusão do processo, você pode copiar os endereços de todas as faixas para a área de transferência.Fig. 10 mostra a diferença entre duas opções.

O uso do módulo de gravação ISD1700 torna-o capaz de reproduzir arquivos de áudio logo após o processo de gravação ser feito com a ajuda de fones de ouvido e botões integrados.

Código

  • código ISD1700 ARDUINO
Código ISD1700 ARDUINO C / C ++
 // Código Arduino para ISD1700 Record Tool // Testado:Arduino Uno, Arduino Nano (ATMega328P) // Copyright:Anton Tsaritsynskyy, agosto de 2019 // E-mail:[email protected]//// This o software é fornecido "tal como está" sem quaisquer garantias.// O autor não é responsável por quaisquer efeitos indesejáveis ​​causados ​​pela utilização deste software.// A distribuição comercial deste software não é permitida.// Bibliotecas e componentes de terceiros são propriedade dos seus respectivos desenvolvedores. # 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 int ISD_CANCEL_OK =3006; const unsigned int ISD_FULL =3004; const unsigned int ISD_RESET_OK =3005; const unsigned int ISD_CANCEL_OK =3006; const unsigned int ISD_FULL =3007; const byte ISD_SS_PIN =8; booleano isdIsUp =false; booleano isdNotifyIfFull =true; booleano isdPowerUp (void) {byte SR0B1 =1; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SR0B1 =SPI.transfer (0x01); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); retornar (SR0B1 &1)! =1; } boolean isdPowerDown (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x07); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction ();} boolean isdReset (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x03); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); atraso (20);} void isdClrInt (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x04); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction ();} boolean isdIsReady (void) {byte SR1 =0; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x05); SPI.transfer (0x00); SR1 =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); return (~ SR1 &1)! =1; } void isdEnableAnaIn (void) {byte APC [2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x44); SPI.transfer (0x00); APC [0] =SPI.transfer (0x00); APC [1] =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); APC [0] &=~ B01010000; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x45); SPI.transfer (APC [0]); SPI.transfer (APC [1]); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction ();} byte isdDeviceID (void) {ID do byte; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x09); SPI.transfer (0x00); ID =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); ID de retorno;} boolean isdIsFull (void) {byte SR0B1 =2; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SR0B1 =SPI.transfer (0x05); SPI.transfer (0x00); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); retorno (SR0B1 &2) ==2; } void isdRec (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x41); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); atraso (40);} void isdStop (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x02); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); atraso (100);} void isdErase (void) {SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x43); SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); while (! isdIsReady ()) {}} unsigned int isdReadRecordPointer (void) {byte DB [2]; SPI.beginTransaction (SPISettings (1000000, LSBFIRST, SPI_MODE3)); digitalWrite (ISD_SS_PIN, LOW); SPI.transfer (0x08); SPI.transfer (0x00); DB [0] =SPI.transfer (0x00); DB [1] =SPI.transfer (0x00); digitalWrite (ISD_SS_PIN, HIGH); SPI.endTransaction (); retorno (DB [1] <<8) | DB [0];} unsigned int isdInit (void) {while (! IsdPowerUp ()) {} delay (100); isdClrInt (); while (! isdIsReady ()) {} isdEnableAnaIn (); retornar 3000 + isdDeviceID ();} void setup () {pinMode (ISD_SS_PIN, OUTPUT); digitalWrite (ISD_SS_PIN, HIGH); Serial.begin (9600); SPI.begin (); } char cmd; void loop () {if (Serial.available ()) {cmd =Serial.read (); switch (cmd) {case 'D':Serial.print (isdInit ()); isdPowerDown (); isdIsUp =false; pausa; case 'E':isdInit (); isdErase (); Serial.print (ISD_ERASE_OK); isdIsUp =true; isdNotifyIfFull =true; pausa; case 'R':isdRec (); Serial.print (ISD_REC_OK); pausa; case 'S':isdStop (); Serial.print (isdReadRecordPointer ()); pausa; case 'X':isdReset (); Serial.print (ISD_RESET_OK); isdIsUp =false; pausa; case 'C':if (isdIsUp) {isdStop (); isdReset (); Serial.print (ISD_CANCEL_OK); isdIsUp =false; } pausa; }} if (isdNotifyIfFull &&isdIsUp) {if (isdIsFull ()) {isdReset (); isdIsUp =false; Serial.print (ISD_FULL); isdNotifyIfFull =false; }}} 

Esquemas


Processo de manufatura

  1. Certificação ISO 26262 para Componentes de Software
  2. Alvo de liga de tungstênio titânio para chips
  3. Alvo de tungstênio de alta pureza para chips semicondutores
  4. Chips de IA em alta, software de IA ganhando destaque
  5. OXÍMETRO DE PULSO para uso de EMERGÊNCIA durante a DOENÇA DE CORONAVIRUS
  6. Arduino Audio Reactive Desk Light
  7. Estação meteorológica ThingSpeak Arduino
  8. Auto-Keyer para Radio Fox Hunting
  9. Health Band - Um Assistente Inteligente para Idosos
  10. Arquivos Hexion para falência