Trådlös Audio Streaming och taligenkänning med Arduino
Lysdioderna göra samma grundläggande saker de gjorde i mitt förra projekt (), men nu jag bort tråd datoranslutning, så jag äntligen kan ha ett tal aktiverade Arduino någonstans mitt trådlösa nätverk når.
Här är YouTube-video av projektet:
Jag använde en WiFly modul från ambulerande nätverk (https://www.sparkfun.com/products/10822) eftersom jag läste någonstans att det skulle fungera med XBee sköld hade jag (https://www.sparkfun.com/products/9976). Tyvärr, jag grunda ute den hårda vägen att en diod mellan Arduino TX och RX WiFly blockerar signalen. Jag var tvungen att slita ut dioden och lägga till en spänningsavdelare TX/RX stift av Arduino och modulen WiFly eftersom den RX pin av WiFly är tolerant 3.3V och Arduino TX arbetar på 5V. Det verkar inte vara den bästa strategin, men det fungerade och jag kunde skicka och ta emot data från modulen. Jag upptäckte att Sparkfun släppt en ny version av XBee sköld (https://www.sparkfun.com/products/10854) och att dioden nivå shifter ersattes med ett mer robust MOSFET nivå shifter. Detta bör lösa problemet diod.
Jag tror någon av följande trådlösa moduler kan användas. Du måste bara hitta ut som en av dem bästa passar dina behov:
- http://arduino.cc/en/Main/ArduinoWiFiShield
- http://www.rovingnetworks.com/products/RN171XV
- https://www.sparkfun.com/pages/xbee_guide (du behöver en XBee Explorer Dongle att ansluta XBee till din dator: https://www.sparkfun.com/products/9819)
-Många andra sköldar Arduino WiFi kan hittas här: http://postscapes.com/arduino-wifi
Installationsprocessen för WiFly modul kan vara svårt, så jag också lägger till en steg för steg handledning om hur man gör. I mitt fall använder jag en vanlig åtkomstpunkt/router från D-Link för att genomföra mitt privata trådlösa nätverk. Denna tutorial ska fungera med någon åtkomstpunkt ute.
1. Koppla bort datorn från alla trådlösa nätverk
2. upprätta GPIO9 PIN-koden för WiFly modul till hög (3.3V) på effekt. Detta gör att ad hoc-läge på modulen. Jag använde den 3.3V källa från Arduino styrelsen och en vanlig bygel tråd. Direkt efter driva upp, ta bort kabeln och följ stegen. Modul Datablad: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/WiFi/WiFly-RN-XV-DS.pdf
3. på datorn, söka efter tillgängliga nätverk och ansluta till nätverkets WiFly modul (WiFly-GSX-XX). Det kan ta några sekunder innan datorn får en IP-adress från modulen.
4. Ladda ner och kör en fri mjukvaran alarmerat TeraTerm (http://www.rovingnetworks.com/resources/download/86/Teraterm)
5. Ange följande inställningar och klicka på OK: IP-adress: 169.254.1.1; TCP-port: 2000; Service: Telnet; Protokoll: IPv4
6. du borde se ordet "* Hej *" på skärmen.
7. Skriv $$$ för att ange kommando-läge
8. typ Skanna och slå till gå in att söka efter tillgängliga åtkomstpunkter
9. om nätverket använder WPA-autentisering, använder du kommandot Ange wlan frasen att ställa in lösenordsmening. För WEP, ange nyckeln med hjälp av WLAN-nyckeln kommando. Mitt nätverk är WEP säkrade, så jag var tvungen att använda det andra kommandot. Problemet är att nyckeln måste anges ASCII/HEX kodade och det måste ha exakt 26 tecken. Jag hittade denna sida som konverterar text till ASCII/HEX: http://www.string-functions.com/string-hex.aspx.
10. Skriv in wlan ssid , där XXXX är SSID för du nätverk (titta på resultatet för steg 8)
11. Skriv Spara
12. Skriv join (titta på resultatet för steg 8)
13. WiFly-GSX-XX försvinner från listan över windows
14. Stäng Teraterm
15. återansluta datorn till ditt lokala trådlösa nätverk
16. Stäng din Arduino ombord och tillbaka ON
17. skriva ner IP-numret som tilldelats till WiFly modul av åtkomstpunkten (vanligtvis, kan du hitta denna info på sidan DHCP-punkt)
18. öppen Teratem med hjälp av den nya IP-adressen och andra inställningar från steg 5
19. Skriv $$$ för att ange kommando-läge
20. typ set comm nära 0 och slå till gå in
21. typ set comm öppna 0 och slå till gå in
22. typ ställa comm remote 0 och slå till gå in
23. typ ställa comm storlek 1460 och slå till gå in
24. typ comm tid 1000 och slå till gå in
25. typ ställa comm baud 115200 och slå till gå in (samma bithastighet I används i min skiss)
26. typ Spara och slå till gå in
27. typ Avsluta och slå till gå in
28. Stäng Teraterm
Nu bör din WiFly modul kunna kommunicera med BitVoicer och datorn. WiFly Användarhandbok kan laddas ner här: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/WiFi/WiFly-RN-UM.pdf
Detta är den skiss som jag använde för att kontrollera lysdioderna, spela in ljud och interagera med BitVoicer:
#include < BitVoicer11.h >
Instansierar klassen BitVoicerSerial Butiker sant om den Audio Streaming kalibreringsverktyg void setup() void loop() Fångar upp ljud och skickar den till BitVoicer om tal Den här funktionen körs varje gång seriella data är tillgängliga Ändrar värdet för sampleTest om den mottagna datan var Signalerar Bitvoicers taligenkänningsmotorn att starta Kontrollerar om datatypen är samma som den i den Utför de LED ändringarna beroende på värdet i
BitVoicerSerial bvSerial = BitVoicerSerial();
kör
booleska sampleTest = false;
Lagrar datatypen Hämtad av getData()
Datatypen byte = 0;
Ställer in stift och standard variabler
int pinR = 3;
int pinY = 5;
int pinG = 6;
int lightLevel = 0;
{
Anger den analoga hänvisningen till externa (AREF stift)
VARNING! Om något är ansluten till AREF stift,
den här funktionen måste anropas först. Annars kommer det att
skada i styrelsen.
bvSerial.setAnalogReference(BV_EXTERNAL);
Ställer in mikrokontroller för att utföra snabbare analoga läsningar
på angivna PIN-koden
bvSerial.setAudioInput(0);
Börjar seriell kommunikation på 115200 bps
Serial.BEGIN(115200);
Ställer in pinModes
pinMode (pinR, produktionen);
pinMode (pinY, utgång);
pinMode (pinG, utgång);
}
{
Fångar upp ljud och skickar den till BitVoicer om ljud
Streaming kalibreringsverktyg är igång
om (sampleTest == true)
{
Värdet skickas till funktionen är tiden
(i mikrosekunder) som har funktionen att vänta innan
utför behandlingen. Det är för att uppnå om
8000 mätvärden per sekund.
bvSerial.processAudio(46);
}
Motorn är igång
om (bvSerial.engineRunning)
{
Värdet skickas till funktionen är tiden
(i mikrosekunder) som har funktionen att vänta innan
utför behandlingen. Det är för att uppnå om
8000 mätvärden per sekund.
bvSerial.processAudio(46);
}
}
i den seriella bufferten efter en slinga
void serialEvent()
{
Läser den seriella buffert och lagrar den mottagna datatyp
Datatypen = bvSerial.getData();
kommandot starta/stoppa provtagning
om (datatyp == BV_COMMAND)
sampleTest = bvSerial.cmdData;
lyssna på ljud strömmar efter engineRunning status
mottogs
om (datatyp == BV_STATUS & & bvSerial.engineRunning == true)
bvSerial.startStopListening();
Röst-Schema
om (datatyp == BV_STR)
setLEDs();
}
bvSerial.strData
void setLEDs()
{
om (bvSerial.strData == "vakna")
{
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
digitalWrite (pinR, hög);
digitalWrite (pinY, hög);
digitalWrite (pinG, hög);
Delay(200);
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
Delay(200);
digitalWrite (pinR, hög);
digitalWrite (pinY, hög);
digitalWrite (pinG, hög);
Delay(200);
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
Delay(200);
digitalWrite (pinR, hög);
digitalWrite (pinY, hög);
digitalWrite (pinG, hög);
Delay(200);
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
lightLevel = 0;
}
annat if (bvSerial.strData == "sömn")
{
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
digitalWrite (pinR, hög);
digitalWrite (pinY, hög);
digitalWrite (pinG, hög);
Delay(200);
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
Delay(200);
digitalWrite (pinR, hög);
digitalWrite (pinY, hög);
digitalWrite (pinG, hög);
Delay(200);
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
lightLevel = 0;
}
annat if (bvSerial.strData == "RH")
{
digitalWrite (pinR, hög);
lightLevel = 255;
}
annat if (bvSerial.strData == "RL")
{
digitalWrite (pinR, låg);
lightLevel = 0;
}
annat if (bvSerial.strData == "YH")
{
digitalWrite (pinY, hög);
lightLevel = 255;
}
annat if (bvSerial.strData == "YL")
{
digitalWrite (pinY, låg);
lightLevel = 0;
}
annat if (bvSerial.strData == "GH")
{
digitalWrite (pinG, hög);
lightLevel = 255;
}
annat if (bvSerial.strData == "GL")
{
digitalWrite (pinG, låg);
lightLevel = 0;
}
annat if (bvSerial.strData == "ALLON")
{
digitalWrite (pinR, hög);
digitalWrite (pinY, hög);
digitalWrite (pinG, hög);
lightLevel = 255;
}
annat if (bvSerial.strData == "ALLOFF")
{
digitalWrite (pinR, låg);
digitalWrite (pinY, låg);
digitalWrite (pinG, låg);
lightLevel = 0;
}
annat if (bvSerial.strData == "ljusare")
{
om (lightLevel < 255)
{
lightLevel += 85.
analogWrite (pinR, lightLevel);
analogWrite (pinY, lightLevel);
analogWrite (pinG, lightLevel);
}
}
annat if (bvSerial.strData == "mörkare")
{
om (lightLevel > 0)
{
lightLevel-= 85.
analogWrite (pinR, lightLevel);
analogWrite (pinY, lightLevel);
analogWrite (pinG, lightLevel);
}
}
annat
{
bvSerial.startStopListening();
bvSerial.sendToBV ("fel:" + bvSerial.strData);
bvSerial.startStopListening();
}
}
BitVocier röst schemat jag använt kan laddas ner här: http://www.justbuss.xpg.com.br/BitVoicerTest3.zip
Om du har någon fråga om detta projekt, posta det här, så någon annan kan läsa svaret.