Taligenkänning med Arduino
Detta projekt är liknande den i min första post (), men nu jag använda audio streaming för att skicka ljud till BitVoicer.
Fritzing schemat jag lagt till detta instructable visar hur jag trådbundna min Arduino ombord.
Jag lägger också ett par bilder och en YouTube-video av projektet körs.
Skissen jag skrev för min första post stöds tyvärr inte längre av den nya versionen av BitVoicer. Här är den nya skissen:
#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();
}
}
BitVoicer röst schemat jag använt kan laddas ner från: http://www.justbuss.xpg.com.br/BitVoicerTest2.zip (du måste ha BitVoicer installerat för att kunna öppna den).
Nu vill jag kontrollera några saker (lampor och celling fläkt) hemma. Förslag är mycket välkomna.