Enregistreur et lecteur de voix ISD1820 avec Arduino

FunduinoDernière mise à jour le

20 Sekunden Ton aufnehmen und per Sensor wieder abspielen

In sprechenden Grußkarten und Spielzeugen steckt oft genau dieser Chip: Der ISD1820 nimmt rund 20 Sekunden Sprache auf und gibt sie auf Knopfdruck wieder. Mikrofon, Verstärker und Speicher sitzen alle auf einer kleinen Platine.

Angesteuert wird das Modul so einfach wie eine Leuchtdiode – eine Bibliothek brauchst du nicht. In dieser Anleitung probierst du es zuerst über die Taster auf der Platine aus, lässt dann den Arduino die Steuerung übernehmen und startest die Wiedergabe am Ende über einen Sensor.

Platine des ISD1820 mit Mikrofon und Bedientastern
Das Sprachrekorder-Modul ISD1820 mit Mikrofon, Lautsprecheranschluss und drei Tastern
Schaltskizze mit Arduino und ISD1820, nur VCC und GND verbunden
Nur die Spannungsversorgung: so bedienst du das Modul über seine eigenen Taster
1 / 2

Material

Für dieses Projekt brauchst du:

  • 1× Mikrocontroller mit passendem USB-Kabel
  • 1× Sprachrekorder-Modul ISD1820 inklusive Lautsprecher
  • Steckkabel männlich/weiblich

Für die Erweiterung im letzten Schritt kommt ein Sensor mit digitalem Ausgang dazu – zum Beispiel ein Bewegungsmelder, ein Lichtschranken- oder ein Feuchtigkeitssensor.

Was das Modul kann

Das Modul basiert auf dem Chip ISD1820. Es nimmt bis zu rund 20 Sekunden Sprache oder Geräusche auf und gibt sie wieder – genau das, was in sprechenden Grußkarten oder Spielzeugen steckt.

Die Ansteuerung ist denkbar einfach: Aufnahme und Wiedergabe werden über ein normales Spannungssignal ausgelöst, so wie du es vom Schalten einer Leuchtdiode kennst. Eine Bibliothek brauchst du nicht.

Die wichtigsten Eigenschaften:

  • Start per Taster am Modul, per kurzem Impuls oder per dauerhaftem Pegel
  • Verstärker für einen 8-Ohm-Lautsprecher bereits integriert
  • Spannungsversorgung mit 3,3 bis 5 Volt
  • Bis zu 20 Sekunden Aufnahmedauer
  • Automatischer Ausschaltmodus nach der Wiedergabe
Platine des ISD1820 mit Mikrofon und Bedientastern
Das Sprachrekorder-Modul ISD1820 mit Mikrofon, Lautsprecheranschluss und drei Tastern

Die Anschlüsse des ISD1820

Das Modul hat diese Anschlüsse:

  • VCC – Spannungsversorgung, 3,3 bis 5 Volt
  • GND – Masse
  • REC – solange hier HIGH anliegt, wird aufgenommen. Der Pegel muss die ganze Aufnahme über HIGH bleiben.
  • P-E – Wiedergabe, flankengesteuert: Ein kurzer Wechsel auf HIGH genügt, danach läuft die Aufnahme von allein bis zum Ende durch.
  • P-L – Wiedergabe, pegelgesteuert: Die Wiedergabe läuft nur, solange hier HIGH anliegt.
  • FT (Feed Through) – schaltet Mikrofon und Lautsprecher gleichzeitig durch; das Modul arbeitet dann als kleiner Verstärker.
  • SP+ und SP− – Lautsprecherausgang für einen 8-Ohm-Lautsprecher
  • MIC – Mikrofoneingang mit eingebautem Vorverstärker

Auf der Platine sitzen außerdem drei Taster: REC für die Aufnahme sowie PLAYE und PLAYL, die den beiden Wiedergabearten P-E und P-L entsprechen. Zwei Jumper ergänzen das Ganze: FT schaltet den Verstärkermodus ein, P-E lässt die Aufnahme in Dauerschleife laufen.

Erste Versuche mit den Tastern am Modul

Für den ersten Test brauchst du nur die Stromversorgung: VCC an 5V und GND an GND des Arduino. Statt des Arduino könnte hier auch jede andere Spannungsquelle stehen – das Modul bedienst du über seine eigenen Taster.

  • Halte die REC-Taste gedrückt und sprich ins Mikrofon. Die Aufnahme läuft, solange du die Taste hältst.
  • Lass die REC-Taste wieder los.
  • Drücke PLAYE einmal kurz – die Aufnahme läuft komplett durch.
  • Oder halte PLAYL gedrückt – die Wiedergabe stoppt, sobald du loslässt.
Schaltskizze mit Arduino und ISD1820, nur VCC und GND verbunden
Nur die Spannungsversorgung: so bedienst du das Modul über seine eigenen Taster

Das Modul per Arduino steuern

Interessanter wird es, wenn der Mikrocontroller die Steuerung übernimmt. Dafür verkabelst du neben der Spannungsversorgung noch zwei Pins:

  • P-E → Pin 7
  • REC → Pin 8

Der erste Sketch nimmt fünf Sekunden auf, spielt die Aufnahme ab und wartet dann 20 Sekunden, bevor er von vorn beginnt.

REC und P-E verhalten sich unterschiedlich: REC nimmt nur auf, solange der Pegel HIGH bleibt – deshalb steht dort ein langes delay zwischen dem Ein- und dem Ausschalten. P-E dagegen genügt ein kurzer Impuls; die Wiedergabe läuft danach von allein weiter. Zu kurz darf der Impuls aber nicht sein, sonst erkennt ihn das Modul nicht.

Sketch 1: Aufnehmen und abspielen im Wechsel
int REC = 8;
int PLAY = 7;

void setup()
{
  pinMode(REC, OUTPUT);
  pinMode(PLAY, OUTPUT);

  // Die Ausgaenge werden beim Start auf LOW (0V) gesetzt,
  // damit nicht versehentlich aufgenommen oder abgespielt wird.
  digitalWrite(REC, LOW);
  digitalWrite(PLAY, LOW);
}

void loop()
{
  digitalWrite(REC, HIGH);  // Aufnahme starten
  delay(5000);              // Aufnahmedauer 5 Sekunden
  digitalWrite(REC, LOW);   // Aufnahme beenden

  delay(500);               // Kurze Pause, bevor die Wiedergabe startet

  // Ein kurzer Impuls auf P-E genuegt: die Aufnahme laeuft danach
  // von allein bis zum Ende durch.
  digitalWrite(PLAY, HIGH);
  delay(50);                // Der Impuls muss lang genug sein, um erkannt zu werden
  digitalWrite(PLAY, LOW);

  delay(20000);             // 20 Sekunden Pause bis zur naechsten Aufnahme
}

Erweiterung: Wiedergabe durch einen Sensor auslösen

Jetzt soll ein Sensor die Wiedergabe starten. Schließe dazu an Pin 6 einen Sensor mit digitalem Ausgang an – zum Beispiel einen Bewegungsmelder, eine Lichtschranke oder einen Feuchtigkeitssensor.

Die Aufnahme nimmst du vorher einmal über die REC-Taste am Modul auf. Sobald der Sensor anschlägt, gibt der Mikrocontroller einen kurzen Impuls auf P-E und die Ansage läuft.

Achte im Sketch auf das doppelte Gleichheitszeichen in der if-Bedingung. Ein einfaches = würde der Variablen den Wert zuweisen, statt sie zu vergleichen – die Bedingung wäre dann immer erfüllt und die Ansage liefe ununterbrochen. Das ist einer der häufigsten Anfängerfehler in C.

Das lange delay nach dem Impuls ist ebenfalls wichtig: Ohne es würde die Schleife die Wiedergabe tausende Male pro Sekunde neu starten und man hörte nur ein Knacken.

Sketch 2: Wiedergabe durch einen Sensor ausloesen
int REC = 8;
int PLAY = 7;
int Sensor = 6;
int Sensorstatus = 0;   // Variable fuer den Status des Sensors

void setup()
{
  pinMode(REC, OUTPUT);
  pinMode(PLAY, OUTPUT);
  pinMode(Sensor, INPUT);

  digitalWrite(REC, LOW);
  digitalWrite(PLAY, LOW);
}

void loop()
{
  Sensorstatus = digitalRead(Sensor);

  // Achtung: hier steht ein doppeltes Gleichheitszeichen.
  // Ein einfaches = wuerde dem Sensorstatus den Wert HIGH zuweisen,
  // statt ihn zu vergleichen - die Bedingung waere dann immer wahr.
  if (Sensorstatus == HIGH)
  {
    // Kurzer Impuls auf P-E startet die Wiedergabe
    digitalWrite(PLAY, HIGH);
    delay(50);
    digitalWrite(PLAY, LOW);

    // Warten, bis die Aufnahme durchgelaufen ist, damit sie nicht
    // sofort wieder von vorne beginnt.
    delay(20000);
  }
}
Évaluer le guide

Commentaires

Poser une question ou partager une expérience

Écris-nous si quelque chose ne fonctionne pas. Indique-nous ton modèle de carte et le message d’erreur.

Nous vérifions chaque commentaire avant sa publication. Ton adresse e-mail reste chez nous.