Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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

  1. Geluidsgolven worden opgevangen en versterkt door de SparkFun Electret Breakout.
  2. Het versterkte signaal wordt gedigitaliseerd en gebufferd door de Arduino ADC.
  3. Audiostromen worden gestreamd naar BitVoicer Server via de Microchip WiFi-module.
  4. BitVoicer Server verwerkt de stream en herkent spraak.
  5. Herkennde spraak wordt gemapt op vooraf gedefinieerde commando's die naar de Arduino worden gestuurd.
  6. De Arduino identificeert het commando en bepaalt welke motoren, hoe lang en welke snelheid.
  7. 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 wachtwoord
  • set 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)
Uploadprocedure: schakelaar op DLINE → upload code → binnen 5 seconden (delay in code) schakelaar naar UART. Module LED's knipperen anders tijdens configuratie (~25 sec). Test met 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() en Disconnect() zetten module in command mode, openen/sluiten TCP-verbinding met BitVoicer Server (IP/poort). In loop() wordt verbinding gecontroleerd en hersteld bij timeout.
  • RunCommand(byte cmd): switch-statement voor elk basiscommando; stelt motorsnelheden en duur in; start timer via millis(). 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

  1. Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
  2. Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
  3. Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
  4. Interactieve gyroscoop LED-display met NeoPixel-ring en Arduino
  5. Bouw een Android-bestuurd extern voertuig met Raspberry Pi Motor Shield
  6. Servo-gestuurde obstakelvermijdende robot: Bouw met Arduino & HC-SR04
  7. Bestuur Je Roomba Create 2 Met Arduino En Android: Stapsgewijze Handleiding
  8. Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
  9. Bouw een Stemgecontroleerde Robot met Arduino Nano
  10. Spraakgestuurde huishoudapparaten: Bluetooth-besturing met Google Assistant
  11. Spraakherkenning & Synthese Meesteren op Arduino Due