Composants utilisés
- 1 Module d'enregistrement vocal
- 1 Haut parleur standard 8 Ohm
- 1 carte Arduino Uno
- Fils de câblage Dupont mâle femelle
- 1 alimentation 5V (transformateur, ou piles)
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
Il y a 6 boutons : VOL, FT, PLAY, REC, ERASE, FWD
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.
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
- 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.
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.
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
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