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

Logiciel d'enregistrement de fichiers audio sur des puces ISD1700

Composants et fournitures

Arduino Nano R3
× 1
Planche à pain (générique)
× 2
Module d'enregistrement et de lecture de voix ISD1760
× 1
Câble USB-A vers Mini-USB
× 1
Connecteur audio pour téléphone, 3,5 mm
× 2
Alimentation murale à découpage 9V 1A
× 1
Alimentation Breadboard 5V
× 1
Câbles de raccordement (générique)
× 1

Applications et services en ligne

Outil d'enregistrement ISD1700
Archive avec l'outil d'enregistrement ISD1700 avec le code pour l'ARDUINO et l'application Windows
Arduino IDE

À propos de ce projet

Dans l'un de mes projets récents, j'avais besoin d'ajouter la voix des messages texte courts. Les boucliers comme le module MP3 avec carte SD m'ont semblé excessifs, et «apprendre» à Arduino à reproduire la parole humaine reviendrait à consacrer toutes les ressources du microcontrôleur à cette tâche uniquement, qui est en fait une tâche auxiliaire. De plus, je serais à court de mémoire de toute façon.

Une brève recherche a révélé des puces d'enregistrement et de lecture vocales de la série ISD1700, contrôlées par SPI, capables de stocker des messages jusqu'à plusieurs minutes.

Les messages vocaux ont été préparés au préalable sous forme de fichiers séparés. La seule question qui restait était de savoir comment les enregistrer dans la mémoire IC. Les programmeurs pour ISD1700 ne sont pas très répandus et coûtent beaucoup plus cher que les puces elles-mêmes. Il y avait quelques informations sur la façon d'en construire un (https://laserwar.ru/sound_lasertag.html), mais je suis un programmeur plutôt qu'un radioamateur, donc je voulais utiliser du matériel standard - la carte Arduino était excellente pour ce rôle.

Après avoir étudié la fiche technique («ISD1700Design Guide»), j'ai réalisé qu'il y avait une entrée analogique à travers laquelle les fichiers pouvaient être enregistrés. Et pour l'automatisation des processus, j'ai décidé d'écrire un logiciel spécial - ISD1700 Record Tool.

L'outil d'enregistrement ISD1700 vous permet d'enregistrer un ensemble de fichiers audio dans ISD1700 via la carte Arduino. Le logiciel se compose de deux parties :un croquis pour la carte Arduino (ISD1700.ino ) et application Windows autonome (ISD1700.exe ).

Le croquis dans ISD1700.ino est écrit pour la carte ARUINO basée sur ATMega328P (testée sur Arduino Uno et Arduino Nano), mais peut probablement aussi 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 supporte les formats les plus répandus :MP3, WAV, OGG etc.

1. Connexion matérielle

Pendant le développement du logiciel, j'utilisais un module d'enregistrement prêt à l'emploi au lieu d'un ISD1700 IC séparé. Avant d'essayer d'autres variantes de connexion possibles, je vous recommande fortement de lire la fiche technique ISD1700 d'origine.

Les Fig. 1–5 montrent mon ensemble de matériel. ARDUINO NANO est utilisé dans ce cas.

Sur une petite maquette, j'ai mis deux prises 3,5 mm (Fig. 2) pour l'entrée audio (à gauche) et les écouteurs (à droite).

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

2. Arduino clignotant

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

3. Interface utilisateur de l'application

Exécutez ISD1700.exe . La description de chaque élément de contrôle est indiquée sur la Fig. 7.

4. Séquence opérationnelle typique

La figure 8 montre une séquence opérationnelle typique dans une application Windows.

Descriptif :

1. Ouvrez les fichiers audio que vous souhaitez enregistrer sur ISD1700. Triez-les simplement en les faisant glisser à la souris, ou supprimez les fichiers indésirables (après les avoir préalablement vérifiés) si nécessaire. Vous pouvez également lire chaque fichier et régler le niveau de volume.

2. Sélectionnez le port COM auquel la carte ARDUINO est connectée (Fig. 9).

3. Appuyez sur le bouton « Détecter ISD1700 » et assurez-vous que le modèle d'ISD1700 a été affiché dans la case à droite.

4. Assurez-vous que la durée totale de tous les fichiers audio est inférieure à la capacité ISD1700 en secondes ; sinon vous ne pourrez pas démarrer l'enregistrement.

5. Appuyez sur le bouton « Démarrer l'enregistrement ». Vous pouvez voir les progrès sur la barre. Appuyez sur « Arrêter l'enregistrement » si nécessaire.

6. Une fois le processus terminé, vous pouvez copier les adresses de toutes les pistes dans le presse-papiers.Fig. 10 montre la différence entre deux options.

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

Code

  • Code ARDUINO ISD1700
Code ARDUINO ISD1700C/C++
// Code Arduino pour l'outil d'enregistrement ISD1700// Testé :Arduino Uno, Arduino Nano (ATMega328P)// Copyright :Anton Tsaritsynskyy, août 2019// E-mail :[email protected]//// Ceci le logiciel est fourni "tel quel" sans aucune garantie.// L'auteur n'est pas responsable des effets indésirables causés par l'utilisation de ce logiciel.// La distribution commerciale de ce logiciel n'est pas autorisée.// Les bibliothèques et composants tiers sont la propriété de leurs développeurs respectifs.#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 =3005;const unsigned int ISD_CANCEL; 3007;octet const ISD_SS_PIN =8;booléen isdIsUp =false;booléen isdNotifyIfFull =vrai;booléen isdPowerUp(void) { octet SR0B1 =1; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SR0B1 =SPI.transfer (0x01); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); retour (SR0B1 &1) !=1; }booléen isdPowerDown(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x07); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction();}booléen isdReset(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x03); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); delay(20);}void isdClrInt(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x04); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction();}booléen isdIsReady(void) { octet SR1 =0 ; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x05); SPI.transfer (0x00); SR1 =SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); retour (~SR1 &1) !=1; }void isdEnableAnaIn(void) { octet APC[2] ; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x44); SPI.transfer (0x00); APC[0] =SPI.transfer(0x00); APC[1] =SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); APC[0] &=~B01010000; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x45); SPI.transfer(APC[0]); SPI.transfer (APC[1]); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction();}byte isdDeviceID(void) { byte ID ; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x09); SPI.transfer (0x00); ID =SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); ID de retour ;}booléen isdIsFull(void) { octet SR0B1 =2 ; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SR0B1 =SPI.transfer (0x05); SPI.transfer (0x00); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); retour (SR0B1 &2) ==2; }void isdRec(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x41); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); delay(40);}void isdStop(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x02); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); delay(100);}void isdErase(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x43); SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); while ( !isdIsReady() ) {} }unsigned int isdReadRecordPointer(void) { octet DB[2]; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, BAS); SPI.transfer (0x08); SPI.transfer (0x00); DB[0] =SPI.transfer(0x00); DB[1] =SPI.transfer (0x00); digitalWrite(ISD_SS_PIN, HAUT); SPI.endTransaction(); retour (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, HAUT); Serial.begin(9600); SPI.begin(); }char cmd; void loop() { if (Serial.available()) { cmd =Serial.read(); switch (cmd) { case 'D':Serial.print( isdInit() ); isdPowerDown(); isdIsUp =faux ; Pause; cas 'E' :isdInit(); isdEffacer(); Serial.print(ISD_ERASE_OK); isdIsUp =vrai ; isdNotifyIfFull =vrai ; Pause; cas 'R' :isdRec(); Serial.print(ISD_REC_OK); Pause; cas 'S' :isdStop(); Serial.print( isdReadRecordPointer() ); Pause; cas 'X' :isdReset(); Serial.print(ISD_RESET_OK); isdIsUp =faux ; Pause; case 'C' :if (isdIsUp) { isdStop(); isdReset(); Serial.print(ISD_CANCEL_OK); isdIsUp =faux ; } Pause; } } if (isdNotifyIfFull &&isdIsUp) { if (isdIsFull()) { isdReset(); isdIsUp =faux ; Serial.print(ISD_FULL); isdNotifyIfFull =false; } }}

Schémas


Processus de fabrication

  1. Certification ISO 26262 pour les composants logiciels
  2. Cible en alliage de tungstène et de titane pour puces
  3. Cible de tungstène de haute pureté pour puces à semi-conducteurs
  4. Les puces d'IA montent en flèche, les logiciels d'IA sont sous le feu des projecteurs
  5. OXYMÈTRE DE POULS pour une utilisation D'URGENCE pendant la MALADIE DE CORONAVIRUS
  6. Lampe de bureau réactive audio Arduino
  7. Station météo ThingSpeak Arduino
  8. Bande de santé - Un assistant intelligent pour les personnes âgées
  9. Hexion dépose le bilan