Module d'enregistrement vocal autonome et pilotable Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Module d'enregistrement vocal autonome et pilotable Arduino

Messagepar tiptop » Mer 18 Déc 2013 19:41

Module d'enregistrement vocal FZ0486 autonome ou piloté par une carte Arduino .

Image

Composants utilisés

Image

Principe de fonctionnement
Ce module d'enregistrement multi messages utilise une puce ISD1760. Il peut fonctionner de façon autonome commandé depuis un clavier à 6 boutons, (avec lecture, enregistrement, effacement, ...) ou être piloté par un micro contrôleur SPI comme une carte Arduino.
Il comporte un microphone incorporé et un entrée analogique.

Nombreuses applications
Ce module prêt à l'emploi permet d'ajouter simplement une partie audio à vos montages électroniques.
Répondeur téléphonique, robot parlant, aide mémoire vocal, jeux, jouets, exposition sonores (musées), bruitages sonores et musicaux, sonnette d'accueil, message de bienvenue automatique, etc...

Caractéristiques techniques
  • Le taux d'échantillonnage de la puce est ajustable de 4 kHz à 12 kHz.
  • La durée d'enregistrement varie de 75 secondes à 6 kHz, 60 secondes à 8 kHz.
  • Fréquence de travail 6 et 8 kHz.
  • Microphone incorporé avec AGC (Automatic Gain Control).
  • Alimentation entre 2.4 à 5.5 V DC (compatible Arduino).
  • LED témoin de nouvel enregistrement (voice alert).
  • Bip sonores (4) personnalisables pour indiquer début, arrêt d'enregistrement, effacement simple ou total.
  • Mémoire flash sans compression pour une bonne qualité sonore et sans consommation quand le module est éteint.
  • Multi segments, peut mémoriser plusieurs sons ou messages.
  • Extinction automatique pour réduire la consommation électrique.
  • Sortie sur haut-parleur, et une voie analogique séparée.
  • Durée de mémorisation flash 100 ans, 100 000 cycles d'enregistrements.

=======================================================================================================

Utilisation autonome du module depuis le clavier
Image

Il y a 6 boutons : VOL, FT, PLAY, REC, ERASE, FWD
Image

Mettre le module sous tension (+5V) par la prise Jack, la LED rouge s'allume.
Brancher un haut parleur (8 ohm) : c'est prêt.

Image

Enregistrement REC
Appuyer et maintenir le bouton REC, la LED (d1) s'allume. Parler dans le micro, la voix ou le son sera enregistré dans le module.
Relâcher la touche après l'enregistrement, la LED s'éteint.
Un nouvel appui permet l'enregistrement suivant.

Ecoute PLAY
Après un enregistrement le pointeur de playback reste sur l'adresse du dernier segment enregistré, la lecture se fera sur ce dernier enregistrement.
Mode EDGE. Appuyer sur le bouton PLAY, la LED (d1) flashe pendant la lecture jusqu'à la fin de l'enregistrement.
Mode Level Trigger. Lecture de tous les messages jusqu'au relâchement du bouton.

Avance rapide FWD
Sauter au début de l'enregistrement suivant.

Effacement ERASE
On efface un enregistrement à la fois, le premier ou le dernier. Appuyer 1 sec le bouton. La led clignote deux fois.
Appuyer ce bouton plus de 3 secondes pour tout effacer d'un coup. La LED flashe 2 fois puis 7 fois pour signaler l'effacement total.

Reset RESET
Cliquer pour annuler l'opération en cours.

Volume VOL
Ajuster le volume du son (maximum après un reset) par pas de 4 dB. Un clic pour faire varier dans un sens, double clic pour varier dans le sens inverse, les changements sont cycliques sur 8 niveaux (0 à -28 dB).

FT
Mettre la broche FT à la masse (passthrough) pour envoyer l'entrée analogique directement vers le haut parleur. Pendant un enregistrement, on enregistre le signal analogique.

=============================================================================================================================

Branchements pour pilotage avec Arduino

Image

  • Prise jack pour alimentation +5V.
  • Connecteur 4 pins (jaune) +5V, GND, A0+, GND.
  • Connecteur 2 pins (jaune) SP-, SP+ pour les deux fils du haut-parleur.
  • Connecteur 8 pins (jaune) MISO, MOSI, SCLK, SS (pour la commande depuis un micro contrôleur), GND, +5V (pour l'alimentation, depuis la carte Arduino), GND, ANAL (entrée analogique éventuelle).
  • Une entrée microphone.
  • Une entrée de signal analogique.

Image

Pilotage du module par SPI (micro contrôleur), une carte Arduino Uno dans cet exemple
On peut accéder en lecture et écriture à n'importe quelle adresse mémoire.

* Alimenter le module (depuis la carte Uno)
* Brancher les 2 fils du haut-parleur.
* Le mode SPI se commande simplement en 4 fils :

Module enregistreur -> carte Arduino
  • MISO --> Master In Slave Ourt --> pin 12 (DATAOUT)
  • MOSI --> MasterOut Slave In --> pin 11 (DATAIN)
  • SCLK --> Clock --> pin 13 (SPICLOCK)
  • SS --> Slave Select --> pin 10 (SLAVESELECT)
  • GND --> masse de l'Arduino (ne pas oublier de relier les masses sinon ça ne marche pas)
  • +5V --> power 5v de l'Arduino

Un exemple de code pour Arduino
On utilise ici la librairie SPI (il n'y a pas besoin de bibliothèque spécifique).

Code: Tout sélectionner
//**************************************************************
//  Module d'enregistrement de son IDS1760 autonome ou piloté par ARDUINO
//  tiptopboards.com
//  Code adapté de  http://forum.arduino.cc/index.php?topic=38867.0
//  Unsped 2008
//  Modifs en français  C Rolland 18 12 2013
//
//**************************************************************
// Broches Arduino utilisées
#define DATAOUT     11   //MOSI (bleu)
#define DATAIN      12   //MISO (vert)
#define SPICLOCK    13   //SCK (marron)
#define SLAVESELECT 10   //SS (rouge)
// Relier aussi les pins +5V et GND

// Codes de commandes de ISD1760 depuis l'Arduino
// Pour plus de détails voir ici http://www.electroniccircuits.gr/files/ISD1700.pdf
#define PU          0x01  //Power Up the device
#define STOP        0x02  //Stop the current operation
#define RESET       0x03  //Reset the device
#define CLR_INT     0x04  //Clear interrupt and OEM bit
#define RD_STATUS   0x05  //Return Returns status bits & current row counter in first 1st 2 bytes and operating status in 3rd byte
#define RD_PLAY_PTR 0x06  //Returns status bits & current row counter in 1st 2 bytes and Play pointer in 3rd & 4th bytes
#define PD          0x07  //Power Down
#define RD_REC_PTR  0x08  //Returns status bits & current row counter in 1st 2 bytes and Record pointer in 3rd & 4th bytes
#define DEVID       0x09  //Read the deivce ID register.
#define PLAY        0x40  //Play from current location without LED action until EOM or STOP command received
#define REC         0x41  //Record from current location without LED action until end of memory or STOP command received
#define ERASE       0x42  //Erase current message to EOM location
#define G_ERASE     0x43  //Erase all messages (not include Sound Effects)
#define RD_APC      0x44  //Returns status bits & current row counter in first 1st 2 bytes and the contents of APC register in 3rd & 4th bytes.
#define WR_APC1     0x45  //Write the data <D10:D0> into the APC register with volume setting from VOL pin
#define WR_APC2     0x65  //Write the data <D10:D0> into the APC register with volume setting from bits <D2:D0>
#define WR_NVCFG    0x46  //Write the contents of APC to NVCFG
#define LD_NVCFG    0x47  //Load contents of NVCFG to APC Register
#define FWD         0x48  //Forward play pointer to start address of next message. Forward will be ignored during operating, except Play
#define CHK_MEM     0x49  //Check circular memory
#define EXTCLK      0x4A  //Enable/disable external clock mode
#define SET_PLAY    0x80  //Play from start address <S10:S0> to end address <E10:E0> or stop at EOM, depending on the D11 of APC
#define SET_REC     0x81  //Record from start address <S10-S0> to end address <E10:E0>
#define SET_ERASE   0x82  //Erase from start address <S10:S0> to end address <E10:E0> [Stop cmd is ignored]


void setup() {
  // Configuration des 4 pins de commande
  byte clr;
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK,OUTPUT);
  pinMode(SLAVESELECT,OUTPUT);
 
  digitalWrite(SLAVESELECT,HIGH); //disable device 
  SPCR = B01111111; //data lsb, clock high when idle, samples on falling
  clr=SPSR;
  clr=SPDR;
  delay(10);

  //Moniteur série
  Serial.begin(9600);
 
  digitalWrite(SLAVESELECT,LOW);  //Mettre le module en route
  spi_transfer(PU); // Power Up
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT,HIGH);
  delay(100); 
  Serial.println("Power Up");

  digitalWrite(SLAVESELECT,LOW);  //Clear
  spi_transfer(CLR_INT); // Clear interupt and EOM bit
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT,HIGH);
  delay(100);
  Serial.println("Clear");
}

void loop() {

  // Lire un son enregistré dans la mémoire flash puis passe au suivant, en boucle
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(PLAY); // PLAY écouter le son pointé par le curseur
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT,HIGH);
  Serial.println("PLAY");
  ready_wait();  //Attendre la fin de ce son
  delay(3000);
 
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(FWD); // Décaler le curseur au son suivant
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT,HIGH);
  Serial.println("FWD");
}

// Fonction ready_wait
void ready_wait(){
  byte byte1;
  byte byte2;
  byte byte3;
  //Pour savoir si le son est terminé, tester le 1er bit du 3eme octet MISO
  while(byte3<<7 != 128){
    digitalWrite(SLAVESELECT,LOW);
    byte1 = spi_transfer(RD_STATUS);
    // Returns status bits & current row counter in first 1st 2 bytes
    // and operating status in 3rd byte
    byte2 = spi_transfer(0x00); // data byte
    byte3 = spi_transfer(0x00); // data byte
    digitalWrite(SLAVESELECT,HIGH);
  }
  delay(100);
  }  //Fin de la fonction

char spi_transfer(volatile char data)
{
  SPDR = data;                    // Start the transmission
  while (!(SPSR & (1<<SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;                    // return the received byte
}


Les commandes
Code: Tout sélectionner
Commande, byte de commande 0x.. suivi d'un byte de data (00)

  • PU PowerUp, allume la carte 0x01
  • STOP arrêt 0x02
  • RESET remise à zéro 0x03
  • PD PowerDown extinction 0x07
  • PLAY lire un son selon la dernière position, du curseur jusqu'au STOP ou OEM 0x40
  • REC enregistrer un son jusqu'à la fin de la mémoire ou STOP 0x41
  • ERASE effacer le son en cours 0x42
  • G_ERASE effacer tout 0x43
  • FWD pointer le curseur sur le son suivant

Le tableau suivant récapitule toutes les commandes disponibles. Elles sont prédéfinies dans notre code en exemple.

Image
Image


Echantillonnage
La fréquence d'échantillonnage est fixée (ici par construction du module) par la résistance de l'oscillateur.

Fréquence 12 8 6.4 5.3 4 kHz
Durée enregistrement 40 60 75 90 120 s
R oscillateur 53 80 100 120 160 kOhm

============================================================================================================================
Références
La datasheet de la puce ISD1760 http://www.alldatasheet.com/datasheet-p ... D1760.html

Image
Image

Puces de la série 1700, avec le détail de la syntaxe pour utiliser toutes les commandes via un micro contrôleur SPI http://www.electroniccircuits.gr/files/ISD1700.pdf

Interfacing a chipcoder ISD1760 (en anglais avec exemple de code, ce sujet de discussion à servi de base à ce tutoriel) http://forum.arduino.cc/index.php?topic=38867.0

Autres discussions pour cette puce (en anglais) :
http://forum.arduino.cc/index.php/topic,37348.0
http://forum.arduino.cc/index.php/topic,52509.0.html
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Module d'enregistrement vocal autonome et pilotable Ardu

Messagepar petrusfr » Dim 29 Juin 2014 18:12

Bonjour,

tuto très bien fait....

clair et concis, bref, exactement le nécessaire pour bien démarrer avec une carte à base de ISD 17XX...

merci à l'auteur.

Pierre
petrusfr
 
Messages: 2
Inscription: Ven 27 Juin 2014 14:08

Re: Module d'enregistrement vocal autonome et pilotable Ardu

Messagepar robert » Jeu 6 Nov 2014 17:33

Bonjour, comment adresser un message précis x selon un évènement précis via poussoir y... merci
robert
 
Messages: 2
Inscription: Mar 4 Nov 2014 00:41

Re: Module d'enregistrement vocal autonome et pilotable Ardu

Messagepar casimopon » Lun 15 Déc 2014 15:46

Bonjour,
Votre tut est tres bien fait ;)
Je voudrais récupérer les fichiers wave enregistrés
Avez-vous une idée de la manière d'opérer ?
perso je bloque :(
Merci!
casimopon
 
Messages: 1
Inscription: Lun 15 Déc 2014 12:46

Re: Module d'enregistrement vocal autonome et pilotable Ardu

Messagepar tiptop » Ven 16 Jan 2015 14:12

On doit pouvoir récupérer les fichiers wave en les enregistrant dans Audacity, en montant une prise Jack à la place du haut parleur et en envoyant cette sortie sur l'entrée audio d'un PC.
Audacity est un excellent enregistreur et éditeur audio gratuit à télécharger ici
http://audacity.fr/
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités