Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

Composants et fournitures

Composant Quantité
Arduino Nano R3 1
Plaque d'essai (breadboard) générique 2
Module enregistrement/lecture vocal ISD1760 1
Câble USB-A vers Mini-USB 1
Connecteur audio jack 3,5 mm 2
Alimentation murale commutée 9V 1A 1
Module d'alimentation breadboard 5V 1
Fils de liaison (jumper wires) génériques 1

Applications et services en ligne

À propos du projet

Dans l'un de mes projets récents, j'avais besoin d'ajouter la lecture de courts messages vocaux. Les shields comme les modules MP3 avec carte SD me semblaient excessifs, et « apprendre » à l'Arduino à reproduire la parole humaine aurait monopolisé toutes les ressources du microcontrôleur pour une tâche auxiliaire. De plus, j'aurais manqué de mémoire dans tous les cas.

Une brève recherche a révélé les puces d'enregistrement et lecture vocale de la série ISD1700, pilotées en SPI, capables de stocker des messages de plusieurs minutes.

Les messages vocaux étaient préparés à l'avance sous forme de fichiers séparés. La seule question restante était la manière d'enregistrer ces fichiers dans la mémoire du circuit intégré. Les programmeurs pour ISD1700 ne sont pas très répandus et coûtent bien plus cher que les puces elles-mêmes. Il existait des informations sur la façon d'en construire un (lien), mais je suis programmeur plutôt que radio-amateur, donc je voulais utiliser du matériel standard – les cartes Arduino étaient parfaites pour ce rôle.

Après avoir étudié la fiche technique (« ISD1700 Design Guide »), j'ai réalisé qu'il existait une entrée analogique par laquelle les fichiers pouvaient être enregistrés. Pour automatiser le processus, j'ai décidé d'écrire un logiciel spécial : ISD1700 Record Tool.

ISD1700 Record Tool permet d'enregistrer un ensemble de fichiers audio dans l'ISD1700 via une carte Arduino. Le logiciel se compose de deux parties : un sketch pour la carte Arduino (ISD1700.ino) et une application Windows autonome (ISD1700.exe).

Le sketch dans ISD1700.ino est écrit pour les cartes Arduino basées sur l'ATMega328P (testé sur Arduino Uno et Arduino Nano), mais peut probablement fonctionner sur d'autres cartes.

Liste des ISD1700 pris en charge :

  1. ISD1730
  2. ISD1740
  3. ISD1750
  4. ISD1760
  5. ISD1790
  6. ISD17120
  7. ISD17150
  8. ISD17180
  9. ISD17210
  10. ISD17240

L'application Windows est basée sur la bibliothèque audio BASS, qui prend en charge les formats les plus courants : MP3, WAV, OGG, etc.

1. Connexion matérielle

Pendant le développement du logiciel, j'ai utilisé un module d'enregistrement tout fait au lieu d'un CI ISD1700 nu. Avant d'essayer d'autres variantes de connexion, je recommande vivement de lire la fiche technique originale de l'ISD1700.

Les figures 1 à 5 montrent mon montage matériel. Un ARDUINO NANO est utilisé ici.

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

Sur une petite plaque d'essai, j'ai placé deux prises jack 3,5 mm (Fig. 2) pour l'entrée audio (gauche) et les écouteurs (droite).

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows
Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

Je recommande d'utiliser une alimentation supplémentaire plutôt que d'alimenter tous les composants via la sortie 5V de l'Arduino, car j'ai eu de nombreuses erreurs de connexion sans source d'alimentation externe. Cela peut toutefois être dû à la mauvaise qualité des connexions filaires ou à autre chose.

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows
Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

2. Programmation de l'Arduino

Connectez la carte Arduino à votre PC via USB, ouvrez ISD1700.ino dans l'IDE Arduino et téléversez le sketch comme d'habitude (Fig. 6).

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

3. Interface utilisateur de l'application

Lancez ISD1700.exe. La description de chaque élément de contrôle est montrée sur la Fig. 7.

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

4. Séquence opérationnelle typique

La Fig. 8 montre la séquence opérationnelle typique dans l'application Windows.

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

Description :

  1. Ouvrez les fichiers audio que vous souhaitez enregistrer sur l'ISD1700. Triez-les simplement en les faisant glisser, ou supprimez les fichiers indésirables (après les avoir cochés) si nécessaire. Vous pouvez également lire chaque fichier et ajuster le niveau de volume.
  2. Sélectionnez le port COM auquel la carte ARDUINO est connectée (Fig. 9).
  3. Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows
  4. Appuyez sur le bouton « Detect ISD1700 » et assurez-vous que le modèle d'ISD1700 s'affiche dans la case à droite.
  5. Vérifiez que la durée totale de tous les fichiers audio est inférieure à la capacité de l'ISD1700 en secondes ; sinon, vous ne pourrez pas démarrer l'enregistrement.
  6. Appuyez sur le bouton « Start record ». Vous pouvez voir la progression sur la barre. Appuyez sur « Stop record » si nécessaire.
  7. Une fois le processus terminé, vous pouvez copier les adresses de toutes les pistes dans le presse-papiers. La Fig. 10 montre la différence entre les deux options.
Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

L'utilisation du module d'enregistrement ISD1700 permet de lire les fichiers audio juste après la fin de l'enregistrement à l'aide des écouteurs et des boutons intégrés.

Code

Code Arduino ISD1700 (C/C++)
// Arduino code for ISD1700 Record Tool // Tested: Arduino Uno, Arduino Nano (ATMega328P) // Copyright: Anton Tsaritsynskyy, August 2019 // E-mail: tsaritsynskyy.a.a@gmail.com // // This software is provided "as is" without any warranties. // Author is not responsible for any undesired effects caused by using this software. // Commercial distribution of this software is not permitted. // Third-party libraries and components are properties of their respective developers.
#include <SPI.h>
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 = 3007;
const byte ISD_SS_PIN = 8;
boolean isdIsUp = false;
boolean isdNotifyIfFull = true;

boolean 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();
  return (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();
  delay(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) {
  byte ID;
  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();
  return ID;
}

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();
  return (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();
  delay(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();
  delay(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();
  return (DB[1] << 8) | DB[0];
}

unsigned int isdInit(void) {
  while ( !isdPowerUp() ) {}
  delay(100);
  isdClrInt();
  while ( !isdIsReady() ) {}
  isdEnableAnaIn();
  return 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;
        break;
      case 'E':
        isdInit();
        isdErase();
        Serial.print(ISD_ERASE_OK);
        isdIsUp = true;
        isdNotifyIfFull = true;
        break;
      case 'R':
        isdRec();
        Serial.print(ISD_REC_OK);
        break;
      case 'S':
        isdStop();
        Serial.print( isdReadRecordPointer() );
        break;
      case 'X':
        isdReset();
        Serial.print(ISD_RESET_OK);
        isdIsUp = false;
        break;
      case 'C':
        if (isdIsUp) {
          isdStop();
          isdReset();
          Serial.print(ISD_CANCEL_OK);
          isdIsUp = false;
        }
        break;
    }
  }
  if (isdNotifyIfFull && isdIsUp) {
    if (isdIsFull()) {
      isdReset();
      isdIsUp = false;
      Serial.print(ISD_FULL);
      isdNotifyIfFull = false;
    }
  }
}

Schémas

Guide complet : Enregistrement audio ISD1700 avec Arduino et logiciel Windows

Processus de fabrication

  1. Obtenir la certification ISO 26262 pour les composants logiciels automobiles
  2. Cibles en alliage tungstène-titane haute performance pour puces semiconductrices avancées
  3. Cibles tungstène ultra-haute pureté : clés pour couches minces semiconductrices avancées
  4. Les startups puces IA stagnent alors que l'industrie se tourne vers des solutions internes
  5. Oxymètre de pouls portable pour usage d'urgence COVID-19
  6. Construire une lampe de bureau réactive à l'audio avec Arduino Nano
  7. Station météo IoT temps réel – Arduino, ESP8266, DHT11 & ThingSpeak
  8. Health Band : Bracelet intelligent fiable d'assistance pour personnes âgées
  9. Hexion Inc. dépose le bilan sous le Chapter 11 dans le cadre d'une restructuration