Arduino – Audio afspelen (WAV)
Het is mogelijk om met de arduino WAV bestanden af te spelen vanaf een SD kaart, wel in een wat lagere kwaliteit dan dat je gewent bent op een CD.
Muziekformaat: Mono, 22050 Hz, 8-bit unsigned.
Wat heb je nodig?
1) SD-Card module (hardware)
2) Arduino TMRpcm bibliotheek (software)
3) Audacity (software) voor het converteren van audio (naar Mono, 22050 Hz, 8-bit unsigned) optioneel.
Sluit het volgende schema aan:
Let op: Gebruik een kleine luidspreker!, de digitale uitgangen van de arduino kunnen tot ca. 20 mA belast worden, gebruik eventueel een voorschakelweerstand om de stroom te beperken.
Pinout
Arduino pin: | Apparaat pin: |
---|---|
3v3 (3.3 volt) | SD Card - 3v3 (3.3 volt) |
GND | SD Card - GND |
GND | Luidspreker (-) |
D4 | SD Card - CS (Chip Select) |
D9 | Luidspreker (+) |
D11 | SD Card - MOSI (Master Output, Slave Input) |
D12 | SD Card - MISO (Master Input, Slave Output) |
D13 | SD Card - SCK (Serial Clock) |
Praktijkvoorbeeld
Scripts
In de library vind je een eenvoudig script als voorbeeld, dit script speelt het bestand 1.wav af (en herhaalt dat) dat op de SD kaart staat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// importeer de SD bibliotheek. #include <SD.h> // Chipselectpin voor de SD Card reader module #define SD_ChipSelectPin 4 // importeer de WAV PCM bibliotheek. #include <TMRpcm.h> // Importeer de bibliotheek voor systeemfucnties. #include <SPI.h> // Maak een object aan TMRpcm TMRpcm audio; void setup(){ // Pin waar luidspreker(+) is aangesloten. audio.speakerPin = 9; // Kijk of de SD Card reader aangesloten is en geinitialiseerd kan worden. if (!SD.begin(SD_ChipSelectPin)) { Serial.println("SD Card gefaald!"); // Ga terug en doe verder niets meer. return; } audio.play("1.wav"); audio.loop(1); } void loop(){ } |
Nummer selecteren via seriële poort
Je kan met dit script de seriële console openen (9600 buad) en een nummer van 1 – 5 intikken, zo worden de bestanden 1.wav – 5.wav afgespeeld:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// importeer de SD bibliotheek. #include <SD.h> // Chipselectpin voor de SD Card reader module #define SD_ChipSelectPin 4 // importeer de WAV PCM bibliotheek. #include <TMRpcm.h> // Importeer de bibliotheek voor systeemfucnties. #include <SPI.h> // Maak een object aan TMRpcm TMRpcm audio; void setup(){ // Pin waar luidspreker(+) is aangesloten. audio.speakerPin = 9; // Start de seriele poort. Serial.begin(9600); // Kijk of de SD Card reader aangesloten is en geinitialiseerd kan worden. if (!SD.begin(SD_ChipSelectPin)) { Serial.println("SD Card gefaald!"); // Ga terug en doe verder niets meer. return; } } void loop(){ if(Serial.available()){ switch(Serial.read()){ case '1': audio.play("1.wav"); break; case '2': audio.play("2.wav"); break; case '3': audio.play("3.wav"); break; case '4': audio.play("4.wav"); break; case '5': audio.play("5.wav"); break; default: break; } } } |
Let op: script met interrupts werken niet goed, als je een interrupt triggert als deze al bezig is, kan het zijn dat naar 5 keer snel achterelkaar dezelfde interrupt de arduino vastloopt en gereset moet worden!
Bron: instructables.com