ELECHOUSE / R4 / 2026-10-15

Voice Recognition Module V3

User manual | Train. Load. Recognize.

Voice Recognition Module V3

User manual | English edition | R4

ELECHOUSE Voice Recognition Module V3.
ELECHOUSE Voice Recognition Module V3.

Train short voice commands, load the commands you need, and receive a record ID when a trained command is recognized. VR3 performs recognition on the module and is designed for speaker-dependent operation.

80 stored records7 active commands1.5 s per command
Record IDs 0-79 (decimal).Choose up to seven trained records for the active recognizer.Use a short word or phrase and record it twice during training.

For an Arduino application, use the examples on pages 9-10. For another host controller, use the UART protocol reference on pages 11-24.

Read this first

A map of the manual and the three operations every application needs.

Figure 1. Training, loading and recognition are separate operations. TRAIN Save a record in Flash LOAD Copy it into the active list MATCH Receive an event CLEAR empties the active list. It does not erase the trained voice records. After power-up, load records again or configure power-on auto load.
Figure 1. Training, loading and recognition are separate operations.
SectionPagesUse it when you need to...
Product and concepts3-5Check electrical requirements and understand records, slots and serial routes.
Direct PC testing6-8Connect a USB-TTL adapter, train two commands and read recognition events.
Arduino examples9-10Compile the supplied examples and use their text commands.
UART protocol11-20Build a host driver or inspect complete command frames.
Groups and events21-24Use external group selection, user groups and event decoding.
Troubleshooting and reference25-26Check common failures, test your application and consult the revision history.

Keep these terms separate

Record: a voice template stored in Flash. Slot: one of seven positions in the active recognizer. Signature: a text label associated with a record. Group: a set of record IDs used to replace the active list.

Product specifications

Electrical, mechanical and recognition specifications.

ItemSpecification
Supply voltage4.5-5.5 V
CurrentLess than 40 mA
Digital interface5 V TTL UART and GPIO
Microphone interface3.5 mm mono microphone connector and microphone pin interface
Board size31 mm x 50 mm
Stored voice recordsUp to 80; record IDs 0-79 (decimal)
Simultaneously active recordsUp to 7
Maximum command duration1500 ms; typically a short word or phrase
Recognition accuracy99% under ideal conditions

The current and accuracy specifications do not include detailed measurement conditions. Actual results depend on the operating environment, speaker and microphone placement.

Interfaces and labels

LabelFunction
VCC / GNDModule supply and common ground.
TXD / RXDUART output from VR3 / UART input to VR3. Cross these to the host receiver/transmitter.
IN0-IN2External group-selection inputs.
OUT0-OUT6Recognition-related digital outputs; confirm slot-to-output mapping before integration.

Use the labels printed on your board. Board photographs are for orientation; they are not a dimensioned footprint or a connector pin-number specification.

Records and the active recognizer

Store up to 80 templates; activate up to 7 of them at a time.

Figure 2. Stored records and active slots serve different purposes. Stored records (Flash) 80 records in this manual Record IDs: decimal 0-79 Training saves a voice template 0 1 2 3 4 5 6 7 8 9 10 11 ... up to record 79 LOAD Active recognizer Up to 7 records at one time Only loaded records can match 0 slot 0 1 slot 1 7 slot 2 10 slot 3 - slot 4 - slot 5 - slot 6
Figure 2. Stored records and active slots serve different purposes.

Train a record to store a voice template. Load a trained record to make it eligible for recognition. A trained record that has not been loaded is not part of the current recognition set. Sounds can also be trained; short, distinct words are easier to use consistently.

OperationStored recordsActive recognizer
Train record 7Creates or updates record 7.Training alone does not define your final active list.
Load 0, 1, 7Templates remain stored.Makes those trained records active.
Clear recognizerSaved templates remain available.Empties the list and stops recognition.
Power cycleCheck stored training status after restart.Reload, or use configured power-on auto load.

Groups let you select a different set of records for the same seven-slot recognizer. Loading a group replaces the active list; it does not add another recognition engine.

Choose your serial route

The PC-facing speed and the module-facing speed are different in the Arduino examples.

Figure 3. The Arduino text-command route and the direct PC route. PC Text commands 115200 bit/s Arduino Example sketch Text -> VR3 frames VR3 Module UART 9600 by default USB TTL Arduino route: sigtrain 0 ON / load 0 1 / newline enabled PC Raw HEX frames 9600 bit/s USB-TTL USB to UART No command parser VR3 Module UART 9600 by default Direct route: send the entire frame, including AA, LEN and 0A.
Figure 3. The Arduino text-command route and the direct PC route.
RoutePC sendsSerial setup
Arduino training exampleText such as sigtrain 0 ON. The sketch constructs the module frame.PC to Arduino: 115200, newline enabled. Arduino to VR3: 9600 by default.
Direct USB-TTLComplete binary frames, entered in HEX-send mode.PC to VR3: 9600 by default; 8 data bits, no parity, 1 stop bit, no flow control.
Arduino bridge exampleText containing command/data HEX bytes only. The sketch adds the framing.PC to Arduino: 115200, newline enabled.

Direct PC test: connect and check

Use this route to test VR3 without an Arduino board.

Figure 4. Four-wire USB-TTL connection. The adapter must be compatible with 5 V TTL. USB-TTL USB to PC VR3 Microphone -> module 5V VCC GND GND TXD RXD RXD TXD Logical pin order only. Connect by the labels printed on your board.
Figure 4. Four-wire USB-TTL connection. The adapter must be compatible with 5 V TTL.

1. Disconnect USB power. Connect 5 V to VCC, GND to GND, adapter TXD to VR3 RXD, and adapter RXD to VR3 TXD. Plug the microphone into VR3, then connect USB to the PC.

2. Install the adapter driver if needed and identify its serial port. Open a serial utility that supports raw HEX transmission, such as AccessPort.

SettingValue
Baud rate9600 bit/s by default
Data / parity / stop8 / None / 1
SendHEX; no automatically appended CR or LF; periodic send off
ReceiveHEX for validation; character view for training prompts
TX | Query system settings
AA 02 00 0A

A settings reply starts with AA 08 00 and ends with 0A. Other bytes depend on the saved settings. If there is no reply, check wiring, the port, the signal level and the baud rate before training.

Direct PC test: train two commands

Train one record at a time and follow the module's microphone prompts.

RecordSpoken commandSignature bytes
0OnON = 4F 4E
1OffOFF = 4F 46 46
TX | Train record 0 and assign signature ON
AA 05 21 00 4F 4E 0A
Figure 5. Training prompts and LED indications. 1 Prepare Yellow SYS LED flashes Wait before speaking 2 Speak now Red STATUS LED is on Say the command once 3 Speak again Red LED turns on again Repeat the same command 4 Success Both LEDs flash together Verify the saved record One record = two matching recordings. Keep each command within 1.5 seconds.
Figure 5. Training prompts and LED indications.

When Speak now appears, say "On" once. When Speak again appears, repeat the same command. Use the module microphone, keep a stable voice and wait for the recording indication. If the two recordings do not match, follow the next prompt or retry after timeout.

TX | Train record 1 and assign signature OFF
AA 06 21 01 4F 46 46 0A

Repeat the process, saying "Off" both times. The signature is only a label; it does not determine what you must say. Each spoken command must fit within 1.5 seconds. Both LEDs flash rapidly on failure and more slowly after successful training.

Direct PC test: load and recognize

A successful training operation is followed by loading the trained records.

RX | Successful training examples for records 0 and 1
AA 07 21 01 00 00 4F 4E 0A
AA 08 21 01 01 00 4F 46 46 0A

After 21: N is the successful-training count, followed by the record ID, its result and the signature. For one successful record, N=01 and the result is 00.

TX | Query the training status of records 0 and 1
AA 04 02 00 01 0A

In a 02 reply, inspect each record/status pair: status 01 means trained and 00 means untrained. Do not confuse that status with training-result 00, which means success. See page 14 for the full reply layout.

TX | Clear the active list, then load 0 and 1 (send separately)
AA 02 31 0A
AA 04 30 00 01 0A
RX | Clear acknowledgement and two-record load result
AA 03 31 00 0A
AA 07 30 02 00 00 01 00 0A

Loading starts recognition immediately. Say "On" or "Off". The module reports the matched record without another start command. Keep the port open and view incoming bytes in HEX.

RX | Recognition examples, outside group mode
AA 09 0D 00 FF 00 00 02 4F 4E 0A
AA 0A 0D 00 FF 01 01 03 4F 46 46 0A

In these examples, the record field identifies 0 or 1; the final bytes encode ON or OFF. Unmatched speech may produce no recognition frame.

Arduino: hardware and build

The supplied examples use an UNO and SoftwareSerial on digital pins 2 and 3.

Figure 6. UNO wiring for VR myVR(2,3): D2 is receive, D3 is transmit. Arduino UNO USB to PC VR3 Microphone -> module 5V VCC GND GND D3 (TX) RXD D2 (RX) TXD Logical pin order only. Connect by the labels printed on your board.
Figure 6. UNO wiring for VR myVR(2,3): D2 is receive, D3 is transmit.

Download the official VoiceRecognitionV3 library. In the following example, its folder is named VR3lib. Copy the vr_sample_train example folder beside it. Install Arduino CLI and the Arduino AVR core for an UNO; another board needs its own core and FQBN. A Sensor Shield V07 is optional; direct four-wire connection is sufficient.

CLI | Install the UNO platform, if it is not already installed
arduino-cli core update-index
arduino-cli core install arduino:avr
CLI | Compile the copied training example
arduino-cli compile -b arduino:avr:uno --library VR3lib vr_sample_train
CLI | Upload to the UNO; replace COM5 with the actual board port
arduino-cli upload -b arduino:avr:uno -p COM5 vr_sample_train

Open the UNO serial port at 115200 bit/s in a terminal that can append a newline. The example initializes the module-facing port at 9600 bit/s. The UNO and VR3 share ground and 5 V power as shown above.

Arduino: train and use the examples

Text commands on this page are entered through the Arduino training sketch.

TEXT | Send one line at a time; PC port at 115200
settings
sigtrain 0 ON
sigtrain 1 OFF
load 0 1

For each sigtrain command, wait for Speak now and Speak again and say the intended command twice. Use record 0 for "On" and record 1 for "Off". After load 0 1, say either command and inspect the printed recognition result.

Training-sketch commandPurpose
record 0 1Check whether records 0 and 1 are trained.
vrInspect the active recognizer.
getsig 0Read the label associated with record 0.
clearStop recognition and empty the active list.
helpPrint the sketch's supported command list.

Example selection

ExampleWhat it demonstrates
vr_sample_control_ledUses trained records 0 and 1 to control the UNO LED. Prepare both records before running it.
vr_sample_bridgeAdds framing around HEX command/data text. For settings send 00; for clear send 31; for loading 0/1 send 30 00 01.
vr_sample_multi_cmdUses record 0 as an application-level switch between 0-6 and 0,7-12. Only one set is active at a time.
vr_sample_check_baud_rateHelps find a previously changed module baud rate.

UART frame format

All protocol numbers are HEX bytes unless a value is explicitly marked decimal.

Figure 7. A complete load frame and the length calculation. AA Head 04 LEN 30 Command 00 01 Data: 2 records 0A End LEN = 1 length byte + 1 command byte + 2 data bytes = 4 (HEX 04). Total frame size = LEN + 2 = 6 bytes. AA and the final 0A are excluded from LEN.
Figure 7. A complete load frame and the length calculation.
FieldMeaning
AAFrame head.
LENNumber of bytes in LEN + command + data.
CommandOne command or event byte.
DataZero or more command-specific bytes.
0AFrame terminator at the position determined by LEN.
RULE | Let p be the number of data bytes
LEN = 2 + p
TOTAL_BYTES = LEN + 2

There is no checksum field in the documented frame. HEX-send mode converts each written pair, such as AA, into one byte. Sending the characters "AA" in ordinary text mode sends different bytes.

Receive by length, not by line endings

Find AA, read LEN, then collect LEN more bytes after the first two bytes. Verify that the last byte is 0A and that the command/data layout is valid. A serial read may contain part of a frame, one frame or several frames.

Command map and notation

Use one set of count-based symbols throughout the protocol reference.

CodeCommand familyPurpose
00-03QueriesSettings, recognizer, training status and signature.
10-15System settingsRestore, baud rate, output mode, pulse width, output reset and auto load.
20-22Record operationsTrain, train with signature and edit signature.
30-32Recognizer and groupsLoad, clear and group operations.
0A / 0D / FFModule-originated messagesTraining prompt, recognition event and protocol error.
SymbolDefinition
mNumber of record IDs or record/status pairs in this frame; m is a count, not a last index.
kNumber of signature bytes.
tNumber of prompt bytes, including any CR byte included by the module.
R0...R(m-1)Record IDs. Use 00-4F for the 80-record product range.
NCount/status header described by the relevant command. Do not reuse one command's status meaning for another.
[expression]The numeric value must be calculated and encoded as one HEX length byte. Brackets are not transmitted.

For each command, count the data fields shown in the layout and calculate LEN before sending the frame.

Queries: settings and recognizer

00 reports settings; 01 reports the current active list.

00 | TX and symbolic RX
AA 02 00 0A
AA 08 00 ST BR IOM PW AL GRP 0A
FieldInterpretation
ST00: successful settings-query response; not a record-training status.
BR00 or 03: 9600; 01: 2400; 02: 4800; 04: 19200; 05: 38400 bit/s.
IOM / PWOutput mode / pulse-width level. IOM: 00=Pulse, 01=Toggle, 02=Down/Clear, 03=Up/Set.
ALSaved auto-load bitmap: 00 disables it; 01/03/07/.../7F select active list positions. Erased FF is disabled at boot.
GRPSaved external control mode: 00=off, 01=system, 02=user. Restart to apply a saved change.
01 | TX and symbolic RX
AA 02 01 0A
AA 0D 01 RVN R0 R1 R2 R3 R4 R5 R6 RTN MAP GRPM 0A
FieldInterpretation
RVNNumber of valid active records, at most 7.
R0-R6Record ID occupying each slot; FF denotes an unused/unset slot.
RTN / MAPTotal listed records / valid-slot bitmap. Bit i of MAP corresponds to slot i.
GRPMFF: non-group mode; 00-0A: system-group range; 80-87: user-group indication.

Queries: training status and signature

02 checks stored voice templates; 03 reads a record's text label.

02 | TX: specified records, or all records
AA [2+m] 02 R0 ... R(m-1) 0A
AA 03 02 FF 0A
02 | RX: m record/status pairs in the returned frame
AA [3+2*m] 02 N R0 STA0 ... R(m-1) STA(m-1) 0A
Status in a 02 record/status pairMeaning
00Untrained
01Trained
FFRecord ID outside the supported range

For a specified-record query, N counts trained records in that request. An all-record query returns five pairs per frame and N is cumulative across frames. To check the 80-record product range, query IDs 0-79 explicitly in small batches, such as five records.

02 | TX: check records 0 and 1
AA 04 02 00 01 0A
03 | TX and symbolic RX
AA 03 03 R 0A
AA [4+k] 03 R k SIGNATURE 0A

Here k is the number of signature bytes. The reply includes the record byte and signature-length byte, so LEN=4+k.

03 | Example: query record 0; reply contains signature ON
AA 03 03 00 0A
AA 06 03 00 02 4F 4E 0A

Command 21 stores at most 10 signature bytes and reports F0 on truncation. Command 22 accepts 0-9 bytes. Use short ASCII labels for predictable byte counts.

System settings: restore and baud rate

10 restores settings; 11 changes the module UART rate after restart.

10 | Restore system settings; acknowledgement
AA 02 10 0A
AA 03 10 00 0A
11 | Set baud rate; acknowledgement
AA 03 11 BR 0A
AA 03 11 00 0A
BR (HEX)Baud rate (bit/s)
00 or 039600
012400
024800
0419200
0538400
11 | Example: select 19200 for the next restart
AA 03 11 04 0A

Receive the acknowledgement at the current baud rate. Restart VR3, then change the host to the selected rate and query settings again. If using an Arduino sketch, update the module-facing SoftwareSerial rate as well.

If the saved rate is unknown, try the supported rates using the read-only settings query. Change only the host rate while searching; do not send blind configuration commands.

GPIO configuration commands

12 selects output behavior; 13 selects pulse duration; 14 resets outputs.

12 | Set output mode; acknowledgement
AA 03 12 MODE 0A
AA 03 12 00 0A
MODEOutput behavior
00Pulse: active-low pulse on recognition.
01Flip / Toggle: alternate output state on each event.
02Down / Clear: drive low on recognition; retain until reset.
03Up / Set: drive high on recognition; retain until reset.
13 / 14 | Symbolic commands and acknowledgements
AA 03 13 LEVEL 0A
AA 03 13 00 0A
AA [2+m] 14 IO0 ... IO(m-1) 0A
AA 03 14 00 0A
LEVEL -> widthLEVEL -> widthLEVEL -> widthLEVEL -> width
00 -> 10 ms04 -> 30 ms08 -> 50 ms0C -> 300 ms
01 -> 15 ms05 -> 35 ms09 -> 75 ms0D -> 400 ms
02 -> 20 ms06 -> 40 ms0A -> 100 ms0E -> 500 ms
03 -> 25 ms07 -> 45 ms0B -> 200 ms0F -> 1000 ms

For 14, use output IDs 00-06, or a single FF to reset all outputs. Pulse-width levels range from 00 through 0F.

Understanding the output waveforms

Mode 02 is Down/Clear; mode 03 is Up/Set.

Figure 8. Output states during recognition and reset; timing is not to scale. A: Load B: Match C: Match D: Match E: Reset Pulse Toggle 02 Down / Clear 03 Up / Set Functional timing only; not to scale. Mode 02 = Down/Clear; mode 03 = Up/Set.
Figure 8. Output states during recognition and reset; timing is not to scale.
Marker / modeMeaning
ARecords are loaded; initial output state is shown schematically.
B / C / DThe associated recognition event occurs.
EHost sends output reset.
PulseThe output goes low briefly and returns high after the configured duration.
ToggleEach event changes high to low or low to high.
Down / ClearRecognition makes the output low; reset returns it to its initial high state.
Up / SetRecognition makes the output high; reset returns it to its initial low state.
14 | Examples: reset all outputs / reset IO1 (send separately)
AA 03 14 FF 0A
AA 03 14 01 0A

Power-on auto load

15 stores the record list to activate after the module starts.

15 | Configure m records; symbolic acknowledgement
AA [3+m] 15 BITMAP R0 ... R(m-1) 0A
AA [4+m] 15 00 BITMAP R0 ... R(m-1) 0A
Number of entries mBITMAP (HEX)
0 / disabled00
101
203
307
40F
51F
63F
77F

For a contiguous list of m entries, the bitmap is (1 << m) - 1. It describes list positions, not the record-ID value. Train the records first, then configure auto load.

15 | Example: auto-load records 0 and 1; acknowledgement
AA 05 15 03 00 01 0A
AA 06 15 00 03 00 01 0A
15 | Disable auto load; acknowledgement
AA 03 15 00 0A
AA 04 15 00 00 0A

Record commands: train and label

20 records voice templates; 21 also assigns a signature; 22 edits a signature.

20 | Train m records; final result with m record/status pairs
AA [2+m] 20 R0 ... R(m-1) 0A
AA [3+2*m] 20 N R0 STA0 ... R(m-1) STA(m-1) 0A

During training, the module sends 0A prompt frames. N in the final result is described as the successful-training count. Use a one-record operation first so that prompt and result association is unambiguous.

21 | Train record R with k signature bytes; final result
AA [3+k] 21 R SIGNATURE 0A
AA [5+k] 21 N R STA SIGNATURE 0A
22 | Set signature / delete signature (symbolic TX)
AA [3+k] 22 R SIGNATURE 0A
AA 03 22 R 0A
22 | Signature-set / signature-delete symbolic RX
AA [4+k] 22 00 R SIGNATURE 0A
AA 04 22 00 R 0A
Final training result STAMeaning
00Trained successfully.
F0Command 21 trained successfully; signature truncated to 10 bytes.
FETraining failed after the retry limit.
FFInvalid record value.

Recognizer commands: load and clear

30 activates trained records; 31 removes the current recognition list.

30 | Load m records; reply with m result pairs
AA [2+m] 30 R0 ... R(m-1) 0A
AA [3+2*m] 30 N R0 STA0 ... R(m-1) STA(m-1) 0A
Load resultMeaning
00Loaded successfully
FCRecord already in the active recognizer
FDRecognizer full
FERecord is not trained
FFRecord ID outside the supported range

N is the number loaded successfully. A load operation begins recognition immediately. The active recognizer can hold at most seven valid records. If the old list is no longer wanted, clear it before loading a replacement.

30 | Example: load records 0, 1 and 2; all successful
AA 05 30 00 01 02 0A
AA 09 30 03 00 00 01 00 02 00 0A
31 | Clear active recognizer; acknowledgement
AA 02 31 0A
AA 03 31 00 0A

Clear stops recognition and empties the active list. It does not erase trained templates. The yellow LED flashes slowly during recognition and stays on after the recognizer is cleared.

Groups and external selection

A group is a record list, not another recognition engine.

Figure 9. Fixed system groups versus configurable user groups. System groups Fixed consecutive records Group 0: records 0-6 Group 1: records 7-13 Direct record loading is also available User groups Choose up to 7 record IDs Example group 0: 0, 7, 25 Group 1 may use a different set Loading a group replaces the list OR Decimal IDs in this diagram. Protocol fields use HEX bytes.
Figure 9. Fixed system groups versus configurable user groups.

System groups contain fixed consecutive ranges; user groups contain custom lists of up to seven records. Loading either group replaces the active recognition list. User groups are numbered 0-7.

IN2IN1IN0Selected group (decimal)
LOWLOWLOW7
LOWLOWHIGH6
LOWHIGHLOW5
LOWHIGHHIGH4
HIGHLOWLOW3
HIGHLOWHIGH2
HIGHHIGHLOW1
HIGHHIGHHIGH0

The product supports 80 records, IDs 0-79. System groups 00-0A cover complete seven-record sets through record 76. Load records 77-79 directly by record ID.

Group commands: configure

32 uses a subcommand byte; lengths include that byte.

32 / 00 | Set external group mode; query current mode
AA 04 32 00 MODE 0A
AA 04 32 00 FF 0A
MODESaved configuration
00Disable external group control
01System-group selection by inputs
02User-group selection by inputs; see the integration note below
FFQuery only
32 / 00 | Set acknowledgement / query reply
AA 03 32 00 0A
AA 05 32 00 FF MODE 0A

The command saves the mode to Flash; restart to apply it. Verify external pin-based user-group selection on the target module before integration. For the initial user-group test, use UART command 32/03.

32 / 01 | Set m entries in a user group; delete that group
AA [4+m] 32 01 GID R0 ... R(m-1) 0A
AA 04 32 01 GID 0A
32 / 01 | Example: group 0 contains records 0, 7 and 25
AA 07 32 01 00 00 07 19 0A

25 is decimal here; its HEX record byte is 19. A successful configuration is acknowledged with AA 03 32 00 0A. Editing a group describes its contents; use a load-group command to activate it.

Group commands: load and inspect

Use a loaded-list response to verify which records became active.

32 / 02 and 03 | Load a system group / a user group
AA 04 32 02 GID 0A
AA 04 32 03 GID 0A
32 | Group-load reply layout
AA 0D 32 GID R0 R1 R2 R3 R4 R5 R6 RTN MAP GRPM 0A

GID is the loaded group ID; R0-R6 are the listed records; RTN, MAP and GRPM describe the list. Both system-group and user-group load replies use this layout and LEN=0D.

32 / 04 | Query all user groups / one user group
AA 03 32 04 0A
AA 04 32 04 GID 0A
32 / 04 | One group-content reply
AA 0A 32 GID R0 R1 R2 R3 R4 R5 R6 0A

A query for all groups can return several frames. Associate each frame with its group ID. FF denotes an unset group entry; do not use an untrained or unset record as a recognition template.

32 | Examples: query user group 0, then load user group 0
AA 04 32 04 00 0A
AA 04 32 03 00 0A

Module-originated messages

Training prompts, recognition events and protocol errors can arrive asynchronously.

0A | Training prompt, with t prompt bytes
AA [3+t] 0A R PROMPT 0A

Prompt text includes Speak now, Speak again and Success. A prompt may include a CR byte before the final terminator. Read the length and treat the prompt as bytes. Its length depends on the text; the command byte 0A is separate from the final frame terminator.

0D | Recognition event, with k signature bytes
AA [7+k] 0D 00 GRPM R RI k SIGNATURE 0A
Figure 10. Record 0 recognized with the ASCII signature ON. AA Head 09 LEN 0D Event 00 Fixed FF Group 00 Record 00 Slot 02 Sig len 4F 4E Sig: ON 0A End Use the record ID to select an action. The slot is a position in the current active list.
Figure 10. Record 0 recognized with the ASCII signature ON.

GRPM is FF outside group mode. R is the trained record ID, RI is its active slot and k is the signature length. If k=0, no signature bytes follow. The fixed byte after command 0D is 00.

FF | Error response
AA 03 FF ECODE 0A
ECODEMeaning
FFUndefined command
FECommand length error
FDInvalid data
FCInvalid subcommand
FBCommand usage error

Log the complete frame when an error occurs. Error-frame ECODE and training-result STA belong to different commands; the same byte value need not have the same meaning.

Troubleshooting and validation

Work from electrical checks to communication, training, loading and recognition.

SymptomWhat to check
No serial portUSB data cable, adapter connection and driver installation. Identify the actual port rather than assuming COM5.
No settings replyPower, common ground, crossed TX/RX, compatible TTL level, correct port, HEX mode and complete frame.
Unreadable receive textProtocol bytes are binary. Use HEX view; only the prompt/signature portions are readable text. Verify baud rate.
Training failsMicrophone plugged into VR3, correct timing, quiet environment, stable speech and a command shorter than 1.5 s.
Trained but not recognizedQuery training status, inspect the active list and the load results. Test using the person who trained the record.
Wrong command / false triggerUse more distinct words; retrain at a representative speaking distance and noise level.
Works until power is removedVerify saved training status, baud rate and auto-load settings after restart. Reload records if required.
Unexpected GPIO behaviorCheck the selected mode (02=Down/Clear, 03=Up/Set), output/slot mapping, wiring and reset sequence.

A practical acceptance check

Test both commands at least ten times each and record correct matches, missed matches and wrong matches. Repeat in the intended environment. Use the results to assess your application; this check does not establish the ideal-condition accuracy specification.

Also test power cycling, a deliberately untrained record, an already-loaded record, switching between record lists, and malformed-frame recovery in your own host driver. Save raw HEX logs together with the hardware/firmware identification.

Revision History

Document revisions describe changes to this manual, not a hardware or firmware version.

Rev.DateChanges
R415 Oct 2026Moved change descriptions to this final chapter. Rewrote the main text as current operating instructions. Kept source-review details in the separate Chinese review. No change to R3 protocol definitions or the 80-record capacity.
R315 Oct 2026Aligned the protocol with the confirmed production firmware: GPIO 02=Down/Clear and 03=Up/Set; final training results FE/FF and signature-truncation result F0; active-low group inputs; clarified settings, counts and output-slot mapping. Capacity remains 80 records.
R215 Oct 2026Interim clarification of product capacity and legacy protocol descriptions. Protocol assignments in this edition were superseded by R3.
R115 Oct 2026Rewrote the English manual, separated the direct PC and Arduino routes, added ten explanatory diagrams, and standardized terminology and frame-length notation.

Related documents

The original ELECHOUSE VR3 manual provides the earlier product documentation. The official Arduino library contains host-side examples; Arduino CLI documentation explains the build tool.

The separate Chinese review records source comparisons, protocol corrections, source-file hashes and validation limits. It is an editorial and engineering reference for maintaining this manual.