De LED's doen de dezelfde fundamentele dingen die zij deden in mijn laatste project (), maar nu ik de PC draadaansluiting geëlimineerd, zodat ik eindelijk een toespraak geactiveerd Arduino overal mijn draadloze netwerk bereikt.
Hier is de YouTube-video van het project:
Ik gebruikte een WiFly module van Roving netwerken (https://www.sparkfun.com/products/10822), want ik heb ergens gelezen dat het met de XBee schild werken zou had ik (https://www.sparkfun.com/products/9976). Helaas vond ik de harde manier dat een diode tussen de Arduino TX en RX van de WiFly was het blokkeren van het signaal. Ik had een scheidingslijn van de spanning tussen de TX/RX pinnen van de Arduino en de WiFly module toevoegen omdat de RX-pin van de WiFly 3,3 v tolerant is en de Arduino TX op 5V werkt te rippen van de diode. Het lijkt niet de beste aanpak, maar het werkte en ik was in staat om te verzenden en ontvangen van gegevens van de module. Ik heb ontdekt dat Sparkfun een nieuwe versie van de XBee Shield (https://www.sparkfun.com/products/10854 vrijgegeven) en dat de diode level shifter werd vervangen door een meer robuuste MOSFET level shifter. Dit moet het oplossen van het probleem van de diode.
Ik geloof dat elk van de volgende draadloze modules kunnen worden gebruikt. Je hoeft alleen te vinden welke een van hen best past bij uw behoeften:
- http://arduino.cc/en/Main/ArduinoWiFiShield
- http://www.rovingnetworks.com/products/RN171XV
- https://www.sparkfun.com/pages/xbee_guide (je moet een XBee Explorer Dongle aan de XBee verbinden met uw computer: https://www.sparkfun.com/products/9819)
-Vele andere Arduino WiFi Shields kan hier worden gevonden: http://postscapes.com/arduino-wifi
Het setup-proces van de WiFly-module kan worden lastig, dus ik ben ook het toevoegen van een stapsgewijze tutorial over hoe om het te doen. In mijn geval gebruik ik een regelmatige toegang toegangspunt of de router van D-Link om mijn draadloos particulier netwerk worden geïmplementeerd. Dit leerprogramma zou moeten werken met een toegangspunt daar.
1. uw computer verbreken door elk draadloos netwerk
2. Zet de GPIO9 pin van de WiFly module op hoog (3,3 v) op kracht omhoog. Hierdoor adhoc-modus op de module. Ik gebruikte de 3,3 v bron van de Arduino board en de draad van een gewone trui. Direct na de macht omhoog, verwijder de draad en volg de volgende stappen. Module gegevensblad: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/WiFi/WiFly-RN-XV-DS.pdf
3. op uw computer zoeken naar beschikbare netwerken en verbinding maakt met de netwerk module WiFly (WiFly-GSX-XX). Het duurt enkele seconden voordat uw computer een IP-adres van de module krijgt.
4. downloaden en uitvoeren van een gratis software genaamd TeraTerm (http://www.rovingnetworks.com/resources/download/86/Teraterm)
5. Voer de volgende instellingen en klik op OK: IP-adres: 169.254.1.1; TCP-poort: 2000; Service: Telnet; Protocol: IPv4
6. u moeten zien het woord "* HELLO *" op het scherm.
7. type $$$ Voer opdrachtmodus
8. type scan en treffer steken om te zoeken naar beschikbare toegangspunten
9. als uw netwerk gebruikmaakt van WPA-verificatie, gebruikt u de opdracht instellen van wlan zin om in te stellen van de passphrase. Voor WEP, stel de sleutel met behulp van de wlan-sleutel instellen opdracht. Mijn netwerk is WEP beveiligd, dus ik moest de tweede opdracht. Het probleem is dat de sleutel moet worden ingevoerd ASCII/HEX gecodeerd en moet precies 26 karakters. Ik vond deze pagina die tekst wordt geconverteerd naar ASCII/HEX: http://www.string-functions.com/string-hex.aspx.
10. Typ wlan ssid instellen , waarbij XXXX het SSID van je netwerk (Zie de resultaten van stap 8)
11. type Opslaan
12. type join (kijk naar de resultaten van stap 8)
13. de WiFly-GSX-XX zal verdwijnen uit de lijst met windows-netwerk
14. Sluit Teraterm
15. Sluit uw computer aan uw lokale draadloze netwerk
16. zet je Arduino board en terug ON
17. Noteer het IP-nummer toegewezen aan de WiFly module door uw toegangspunt (meestal vindt u deze info op de pagina toegang punt DHCP)
18. open Teratem met behulp van het nieuwe IP-adres en de andere instellingen vanaf stap 5
19. Typ $$$ Voer opdrachtmodus
20. type set comm sluiten 0 en treffer steken
21. type set comm open 0 en treffer steken
22. type comm externe 0 ingesteld en treffer steken
23. type comm grootte 1460 instellen en treffer steken
24. type comm tijd 1000 instellen en treffer steken
25. type comm baud 115200 instellen en treffer steken (de dezelfde baud-rate heb ik in mijn schets gebruikt)
26. type Opslaan en treffer steken
27. type sluit en treffer steken
28. het sluiten van Teraterm
Nu moet uw WiFly module kunnen communiceren met BitVoicer en uw PC. De gebruikershandleiding van de WiFly kan hier gedownload worden: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/WiFi/WiFly-RN-UM.pdf
Dit is de schets die ik gebruikt om te bepalen van de LED's, audio vastleggen en interactie met BitVoicer:
#include < BitVoicer11.h >
De klasse BitVoicerSerial instantieert Winkels true als de Audio Streaming kalibratie tool VOID Setup void loop Deze functie loopt elke keer seriële data beschikbaar is Voert de LED wijzigingen volgens de waarde in
BitVoicerSerial bvSerial = BitVoicerSerial();
wordt uitgevoerd
Boole sampleTest = false;
Het gegevenstype opgehaald door getData() wordt opgeslagen
dataType byte = 0;
Stelt de pinnen en de standaard variabelen
int pinR = 3;
int pinY = 5;
int pinG = 6;
int lightLevel = 0;
{
Hiermee stelt u de analoge verwijzing naar externe (AREF pin)
WAARSCHUWING! Als er iets is verbonden met de AREF pin,
deze functie moet eerst worden aangeroepen. Anders, zal het
schade aan de Raad van bestuur.
bvSerial.setAnalogReference(BV_EXTERNAL);
De microcontroller ingesteld om uit te voeren sneller analoge leest
op de opgegeven pin
bvSerial.setAudioInput(0);
De seriële communicatie begint 115200 bps
Serial.begin(115200);
Stelt de pinModes
pinMode (pinR, OUTPUT);
pinMode (pinY, OUTPUT);
pinMode (pinG, uitvoer);
}
{
Vangt audio en stuurt dit naar de BitVoicer als de Audio
Streaming Kalibratie Tool wordt uitgevoerd
Als (sampleTest == true)
{
De waarde die is doorgegeven aan de functie is de tijd
(in microseconden) die de functie heeft moet worden gewacht voordat
het uitvoeren van de lezing. Het wordt gebruikt om te bereiken over
8000 lezingen per seconde.
bvSerial.processAudio(46);
}
Vangt audio en stuurt dit naar de BitVoicer als de toespraak
Erkenning motor loopt
Als (bvSerial.engineRunning)
{
De waarde die is doorgegeven aan de functie is de tijd
(in microseconden) die de functie heeft moet worden gewacht voordat
het uitvoeren van de lezing. Het wordt gebruikt om te bereiken over
8000 lezingen per seconde.
bvSerial.processAudio(46);
}
}
in de seriële buffer na een lus
VOID serialEvent()
{
De seriële buffer leest en slaat het ontvangen gegevenstype
dataType = bvSerial.getData();
Hiermee wijzigt u de waarde van sampleTest als de ontvangen gegevens waren
de opdracht van de bemonstering start/stop
Als (dataType == BV_COMMAND)
sampleTest = bvSerial.cmdData;
Signalen van BitVoicer de Engine voor spraakherkenning te starten
luisteren naar audio streams na de status engineRunning
werd ontvangen
Als (dataType == BV_STATUS & & bvSerial.engineRunning == true)
bvSerial.startStopListening();
Controleert als het gegevenstype is hetzelfde als degene in de
Schema van de stem
Als (dataType == BV_STR)
setLEDs();
}
bvSerial.strData
VOID setLEDs()
{
Als (bvSerial.strData == "wake")
{
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
digitalWrite (pinR, hoge);
digitalWrite (pinY, hoge);
digitalWrite (pinG, hoge);
delay(200);
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
delay(200);
digitalWrite (pinR, hoge);
digitalWrite (pinY, hoge);
digitalWrite (pinG, hoge);
delay(200);
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
delay(200);
digitalWrite (pinR, hoge);
digitalWrite (pinY, hoge);
digitalWrite (pinG, hoge);
delay(200);
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
lightLevel = 0;
}
else if (bvSerial.strData == "slaap")
{
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
digitalWrite (pinR, hoge);
digitalWrite (pinY, hoge);
digitalWrite (pinG, hoge);
delay(200);
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
delay(200);
digitalWrite (pinR, hoge);
digitalWrite (pinY, hoge);
digitalWrite (pinG, hoge);
delay(200);
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
lightLevel = 0;
}
else if (bvSerial.strData == "RH")
{
digitalWrite (pinR, hoge);
lightLevel = 255;
}
else if (bvSerial.strData == "RL")
{
digitalWrite (pinR, laag);
lightLevel = 0;
}
else if (bvSerial.strData == "YH")
{
digitalWrite (pinY, hoge);
lightLevel = 255;
}
else if (bvSerial.strData == "YL")
{
digitalWrite (pinY, laag);
lightLevel = 0;
}
else if (bvSerial.strData == "GH")
{
digitalWrite (pinG, hoge);
lightLevel = 255;
}
else if (bvSerial.strData == "GL")
{
digitalWrite (pinG, laag);
lightLevel = 0;
}
else if (bvSerial.strData == "ALLON")
{
digitalWrite (pinR, hoge);
digitalWrite (pinY, hoge);
digitalWrite (pinG, hoge);
lightLevel = 255;
}
else if (bvSerial.strData == "ALLOFF")
{
digitalWrite (pinR, laag);
digitalWrite (pinY, laag);
digitalWrite (pinG, laag);
lightLevel = 0;
}
else if (bvSerial.strData == "helderder")
{
Als (lightLevel < 255)
{
lightLevel += 85;
analogWrite (pinR, lightLevel);
analogWrite (pinY, lightLevel);
analogWrite (pinG, lightLevel);
}
}
else if (bvSerial.strData == "donkerder")
{
Als (lightLevel > 0)
{
lightLevel-= 85;
analogWrite (pinR, lightLevel);
analogWrite (pinY, lightLevel);
analogWrite (pinG, lightLevel);
}
}
anders
{
bvSerial.startStopListening();
bvSerial.sendToBV ("fout:" + bvSerial.strData);
bvSerial.startStopListening();
}
}
Het Schema dat ik wordt gebruikt in de stem van de BitVocier kan hier gedownload worden: http://www.justbuss.xpg.com.br/BitVoicerTest3.zip
Hebt u vragen over dit project, post het hier, zodat iemand anders het antwoord kan lezen.