Enkla prov Betygsätt justerbar enhet
Detta är ett mycket enkelt projekt och detta är också min första Instructables...
Projektbeskrivning:
En resonanslåda som spelar en fil av min röst och gör det möjligt för tittaren att sänka tonhöjden för min röst som filen spelas.
Vad motiverade av lappa:
Ett växande intresse för pedagogiska plattformar sådan Instructables och Maker samhällen att dela resurser och färdigheter - att främja nyfikenhet. Jag är intresserad av de sätt där teknik används, delas, fiktionaliserade och tillämpas. Jag valde att fokusera på akustiska fiction som en startpunkt för en konversation på byrån: placerade jag ett diagram över "spelare" som stakat ut på ett ganska träffande sätt den fysiologiska effekter, myter och program som är resultatet av ljud (tonhöjd och ljudstyrka) dess sänkning i Hz och loudness i dB. med allt från frekvens zon motsvarar ghost observationer, Brown Obs, Vladimir Gavreau sonic vapen och akustiska testning, ljudet av en bebis som gråter, granater, en motorcykel, rösten, etc.
Reservdelslista:
1. waveshield från adafruit: http://www.adafruit.com/products/94
2. arduino uno
3. perf styrelse
4. LED
5. tryckknapp
6. 10 K ohm motstånd (brun svart orange guld)
7. alla små högtalare / / jag använde en tech & go Laddningsbar högtalare: http://www.drugstore.com/tech-and-go-rechargable-portable-speaker-blue/qxp460069
8. projekt box
9. box för högtalare
10. Sugru http://sugru.com
11. audio skum / / skum
12. lödkolv
Första steget:
Löda vinkar sköld och formatera SD-kort om detta. Bra tutorials här:
http://www.robotshop.com/content/PDF/adafruit-Wave-Shield-user-guide.pdf
Observera att biblioteket används i denna tutorial är nu föråldrade. Hänvisa till gitHub att ladda ner den nya WaveHC bibliotek http://code.google.com/p/sdfatlib/downloads/list
Andra steget:
Krets:
Eftersom jag ville göra min lilla spelare så intuitiv som möjligt, jag bestämde mig att lägga till en "play"-knappen som skulle bara spela upp filen (inte avbryta den), ett ljus som skulle vända på bara medan filen spelas och en potentiometer att bromsa samplingsfrekvensen för filen medan den spelas.
Kod:
/*................... Adafruit SampleRateMod.pde exempel ändras för att använda WaveHC.
Fil lekar när knappen trycks. Saktar samplingsfrekvens med pott på analoga 0.
Stort tack till WaveHC Library, Adafruit, David Casey, Tom Jennings!!!
Projekt: Nivå av DB
senast ändrad den 30 April 2013... * /
#include
#include
SdReader kort; Detta objekt innehåller information för kortet
FatVolume vol; Detta innehåller information för partitionen på kortet
FatReader rot. Detta innehåller information för volymer rotmapp
FatReader fil. Det här objektet representerar WAV-fil
WaveHC våg; Detta är enda våg (audio)-objektet, eftersom vi bara kommer att spela en i taget
/*
* Definiera makro för att få felmeddelanden i flash-minne
*/
#define error(msg) error_P(PSTR(msg))
int buttonValue;
CONST int ledPin = 15. Detta är verkligen analog 1 på arduino
void setup() {
pinMode (ledPin, produktionen);
Serial.BEGIN(9600);
Serial.println ("Wave test!");
prova card.init(true) om fel uppstår på V1.0 Wave sköld
om (! card.init()) {
fel ("kort init. misslyckades!");
}
Aktivera optimera Läs - vissa kort kan timeout
card.partialBlockRead(true);
om (! vol.init(card)) {
fel ("ingen partition!");
}
om (! root.openRoot(vol)) {
fel kunde inte ("öppna root");
}
putstring_nl ("filer som hittas:");
root.ls();
}
framåt declarition
void playcomplete (FatReader & file);
void loop() {
uint8_t i, r;
char c, namn [15].
dir_t dir;
buttonValue = digitalRead(7);
root.Rewind();
Bläddra igenom filerna i katalogen
samtidigt (root.readDir(dir) > 0) {
bara spela. WAV-filer
om (! strncmp_P ((char *) & dir.name[8]. PSTR("wav"))) fortsätta;
om (! file.open (vol, dir)) {
putstring kan inte ("öppna");
printEntryName(dir);
Serial.println();
fortsätta;
}
putstring ("\n\rPlaying");
printEntryName(dir);
Serial.println();
om (buttonValue == hög) {
playcomplete(File);
}
digitalWrite (ledPin, låg); måste vara utanför f aktivera led av
}
}
/////////////////////////////////// HELPERS
/*
* skriva ut felmeddelande och stoppa
*/
void error_P (const char * str) {
PgmPrint ("fel:");
SerialPrint_P(str);
sdErrorCheck();
While(1);
}
/*
* skriva ut felmeddelande och stoppa om SD i/o-fel, bra för felsökning!
*/
void sdErrorCheck(void) {
om (! card.errorCode()) återvända;
PgmPrint ("\r\nSD I/O fel:");
Serial.Print(Card.ErrorCode(), HEX);
PgmPrint (",");
Serial.println(Card.errorData(), HEX);
While(1);
}
int16_t lastpotval = 0;
#define HYSTERESIS 3
/*
* spela upp filen med urval ränteförändringar
*/
void playcomplete (FatReader & file) {
int16_t potval;
uint32_t newsamplerate;
om (! wave.create(file)) {
putstring_nl ("inte en giltig WAV");
hemkomst.
}
Wave.Play();
om (wave.isplaying) {
digitalWrite (ledPin, hög);
}
samtidigt (wave.isplaying) {
potval = analogRead(0);
om (((potval-lastpotval) > HYSTERESIS) || ((lastpotval-potval) > HYSTERESIS)) {
putstring ("pot =");
Serial.println (potval, DEC);
putstring ("tickspersam =");
Serial.Print (wave.dwSamplesPerSec, DEC);
putstring ("->");
newsamplerate = wave.dwSamplesPerSec;
newsamplerate * = potval;
newsamplerate = 512; Vi vill dela upp mellan rusade upp och avtog.
om (newsamplerate > 24000) {
newsamplerate = 24000;
}
om (newsamplerate < 1000) {
newsamplerate = 1000;
}
wave.setSampleRate(newsamplerate);
Serial.println (newsamplerate, DEC);
lastpotval = potval;
}
Delay(10);
}
sdErrorCheck();
File.Close();
}
Tredje delen:
Justera modet att utformningen av din låda. Borra hål därefter. Eftersom jag använder en liten högtalare, kan jag driva hela bort av ett 9V batteri som bara gör det enklare att installera som strömkälla är en konsekvent fråga.
Här är en länk till arbetsdokumentering:
https://Vimeo.com/66703542