Bouw een 2-wiel stemgestuurde robot met Arduino en BitVoicer Server
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino UNO | 1 | |
| Pololu Dual MC33926 Motor Driver Shield | 1 | Bestuur 5-28V DC motoren, 3A continu per motor |
| SparkFun XBee Shield | 1 | |
| Microchip RN171VX WiFi-module (met antenne) | 1 | |
| SparkFun Electret Microfoon Breakout | 1 | Preamplified, analog, 100x versterking |
| 2WD Robot Car Chassis kit | 1 | Acryl platform, 2 wielen, 360° wiel, 2 DC motoren met tandwiel (1:48), 4xAA batterijhouder, encoder schijven, schroeven |
| Texas Instruments LM1117 (TO-220) spanningsregelaar 3.3V | 1 | Voor referentiespanning ADC |
| Elektrolytische condensator 10 µF | 1 | Ontkoppeling referentiespanning |
| LED (diverse kleuren) | 4 | Statusindicatoren |
| Weerstand 330 Ω | 4 | Voor LED's |
| AA batterijen 1.5V | 4 | Voeding motoren |
| 9V batterij | 1 | Voeding Arduino |
| 9V naar Barrel Jack adapter | 1 | |
| Jumper wires | 17 | |
| Koperdraad | 1 | |
| Schroeven en flexibele plastic klem | 1 | Voor montage |
Benodigde tools en machines
- Soldeerbout
- Tang
- Schroevendraaier
Apps en online diensten
- BitVoicer Server 1.0 (licentie vereist)
Over dit project
Deze tutorial laat zien hoe je een 2WD stemgestuurde robot bouwt. De aanpak is toepasbaar op elke stemgestuurde robot met mechanische beweging (DC, stappenmotor, servo).
Werkwijze
- Geluidsgolven worden opgevangen en versterkt door de SparkFun Electret Breakout.
- Het versterkte signaal wordt gedigitaliseerd en gebufferd door de Arduino ADC.
- Audiostromen worden gestreamd naar BitVoicer Server via de Microchip WiFi-module.
- BitVoicer Server verwerkt de stream en herkent spraak.
- Herkennde spraak wordt gemapt op vooraf gedefinieerde commando's die naar de Arduino worden gestuurd.
- De Arduino identificeert het commando en bepaalt welke motoren, hoe lang en welke snelheid.
- De motordriver activeert de motoren.
Stap 1: Componenten kennen
Arduino UNO R3 – meest populair, makkelijk na te bouwen. Arduino DUE kan ook, en biedt mogelijkheid voor spraakfeedback.
Pololu Dual MC33926 Motor Driver Shield – duidelijke documentatie, Arduino-bibliotheek (setSpeeds functie). Gebruikt pinnen: D4,7,8,9,10,12; A0,A1; GND; 5V. PWM op pinnen 9 en 10 (timer 2), niet conflicterend met BVSMic (timer 1).
Microchip RN171VX WiFi-module – communicatie via seriële poort, XBee-formfactor. Werkt met SparkFun XBee Shield.
Interferentieprobleem: Tijdens WiFi-transmissie ontstond ruis op de audio-ADC. Oplossing: een 3.3V regelaar (LM1117) + 10µF condensator op de XBee-shield gesoldeerd als referentiespanning voor ADC en microfoon. Dit loste piekvolume-problemen op (stilte gaf eerst waarde ~35/100 in Server Monitor).
Status-LED's op XBee-shield: (van links naar rechts)
- BitVoicer Server actief/verbonden
- Data forwarding actief
- Spraakherkenningsmachine (SRE) toegewezen
- Activatiewoord herkend (alleen tijdens geactiveerde periode)
Elektret microfoon: kies analoog, geschikte spanning, voldoende versterking (meestal 100x).
2WD Chassis: goedkoop, populair op eBay. Bevat acryl platform, wielen, motoren, batterijhouder, encoder schijven.
Stap 2: Montage
Monteer alle componenten op het chassis zoals op de foto's. Optioneel: LED's en regelaar op een klein breadboard in plaats van op de XBee-shield. Een ijzeren draadsteun houdt de microfoon; een strip viltstof om het 360° wiel en een sponsje op de microfoondraden verminderen trillingen/geluid.
Stap 3: WiFi-module configureren
De RN171VX wordt volledig via seriële poort geconfigureerd. Stuur "$$$" voor command mode, dan commando's, dan "exit" voor data mode.
Code WiFi Module Setup (zie onderaan) configureert het module in je thuisnetwerk. Wijzig de plaatsen gemarkeerd "XXXXXX":
set wlan ssid XXXXXX→ jouw netwerknaam (SSID)set wlan phrase XXXXXX→ jouw wachtwoordset ip address XXXXXX→ gewenst statisch IP voor module
Authenticatiemethode: standaard WPA2-PSK (set wlan auth 4). Anders aanpassen volgens documentatie.
Belangrijk: De schakelaar op de SparkFun shield:
- DLINE → upload code via USB
- UART → communicatie via WiFi-module (seriële poort gedeeld met USB-chip)
ping [IP].
Stap 4: Robotbewegingen plannen
Zonder rotatiesensoren/ultrasoon is precisie beperkt, maar richting/snelheid controle geeft voldoende nauwkeurigheid. Bepaal gemiddelde snelheid: meet afgelegde afstand na 1-2 seconden vol gas. Bij mij: 13.7 cm/s bij 62.5% max snelheid (250/400). Dus 1 meter = 7299 ms. Overige afstanden: driehoeksberekening. Bocht/cirkel: één wiel sneller. Draai op as: wielen tegenovergesteld. Zie links voor trigonometrie-basis.
Complexe bewegingen (vierkant, driehoek, cirkel) worden gecombineerd in BitVoicer Server Voice Schema, niet in Arduino-code.
Stap 5: Code uploaden naar Arduino
Upload sketch Robot Source Code (BVS_Demo3.ino). Zet schakelaar op DLINE. Installeer eerst BitVoicer Server en Pololu motor driver bibliotheken (Import .zip Library).
Belangrijkste codesegmenten:
- Constanten: motorsnelheden (STOP=0, SLOW=100, NORMAL=250, FAST=400), richtingen (FRONT=-1, BACK=1), commando-byte waarden (0-39).
- Uitvoervariabelen:
motorSpeed,cmdDuration,cmdStartTime,cmdRunning,lastFwdCmd(voor "come back" commando). - WiFi-verbinding: functies
Connect()enDisconnect()zetten module in command mode, openen/sluiten TCP-verbinding met BitVoicer Server (IP/poort). Inloop()wordt verbinding gecontroleerd en hersteld bij timeout. RunCommand(byte cmd): switch-statement voor elk basiscommando; stelt motorsnelheden en duur in; start timer viamillis(). Tijden in ms afgeleid uit stap 4.
Stap 6: BitVoicer Server instellen
Maak een "mixed device" genaamd ArduinoUnoWiFi. Communicatie: TCP/IP met IP van WiFi-module. Cues: Start of Activated Period en End of Activated Period → Int16 SendData commando's naar device, data 1 respectievelijk 0 (LED aan/uit bij activatiewoord).
Bouw Voice Schema: zinnen die herkend worden en byte-commando's sturen. Complexe commando's sturen meerdere bytes met vertraging (delay veld). Tip: standaardcommando instellen in Opties; commando's kopiëren tussen zinnen. Mijn schema had >80 zinnen.
Solution Object bestanden: Device.sof, VoiceSchema.sof (importeer via Importing Solution Objects).
Stap 7: Conclusie
Plaats AA-batterijen, sluit 9V-batterij aan. Na upload: schakelaar op UART! Na opstarten branden status-LED's na enige seconden (WiFi verbinding, SRE toegewezen). Robot is klaar voor commando's.
Spraakherkenning werkt goed, maar niet 100%. Bewegingsprecisie kan verbeterd worden met rotatiesensoren (encoder schijven zitten al in kit) en ultrasoonsensoren voor obstakelvermijding. Dat is voor later.
Code
WiFi Module Setup
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
delay(5000);
Serial.print("$$$"); delay(1000);
Serial.println("set wlan auth 4"); delay(1000);
Serial.println("set wlan phrase XXXXXX"); delay(1000);
Serial.println("set wlan ssid XXXXXX"); delay(1000);
Serial.println("set wlan channel 0"); delay(1000);
Serial.println("set wlan join 1"); delay(1000);
Serial.println("set wlan tx 0"); delay(1000);
Serial.println("set ip dhcp 0"); delay(1000);
Serial.println("set ip address XXXXXX"); delay(1000);
Serial.println("set comm remote 0"); delay(1000);
Serial.println("set comm close 0"); delay(1000);
Serial.println("set comm open 0"); delay(1000);
Serial.println("set comm size 500"); delay(1000);
Serial.println("set comm time 50"); delay(1000);
Serial.println("set uart baud 115200"); delay(1000);
Serial.println("set uart flow 0"); delay(1000);
Serial.println("save"); delay(1000);
Serial.println("exit"); delay(1000);
digitalWrite(13, LOW);
}
void loop() {}
Robot Source Code (BVS_Demo3.ino)
Volledige code in oorspronkelijke beschrijving. Belangrijkste klassen: BVSP, BVSMic, DualMC33926MotorShield. Bevat: constanten, variabelen, setup() (seriële poort, pinnen, BVSP, BVSMic, motor shield), loop() (verbinding, keepAlive, receive, LED-status, audio streaming, commando-afhandeling, timeout, command timer), BVSP_frameReceived (byte commando of int16 voor activeringsperiode), RunCommand (grote switch), Connect/Disconnect (TCP via seriële commando's), AllLEDsOff.
Schema
Schakelschema beschikbaar als afbeelding in oorspronkelijke beschrijving.
Productieproces
- Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
- Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
- Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
- Interactieve gyroscoop LED-display met NeoPixel-ring en Arduino
- Bouw een Android-bestuurd extern voertuig met Raspberry Pi Motor Shield
- Servo-gestuurde obstakelvermijdende robot: Bouw met Arduino & HC-SR04
- Bestuur Je Roomba Create 2 Met Arduino En Android: Stapsgewijze Handleiding
- Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
- Bouw een Stemgecontroleerde Robot met Arduino Nano
- Spraakgestuurde huishoudapparaten: Bluetooth-besturing met Google Assistant
- Spraakherkenning & Synthese Meesteren op Arduino Due