Built with Bennett McDonough for Microprocessors, Microprogramming, and Computer Architecture (April 2025). The concept: a "little guy" who could tell jokes.
The platform is an Arduino Nano RP2040 Connect, chosen for its onboard microphone, WiFi/BT, accelerometer, gyroscope, and IMU. A Cyberon voice recognition library listens for a trigger word via the onboard mic. Once detected, a joke is pulled from a stored array and sent character-by-character to an Emic 2 Text-to-Speech module (Parallax, DecTalk engine), which vocalizes it.
For physical expression: mounted a Furby face and gear train onto a SUNY Poly mascot plushie. An L293D H-Bridge motor driver off the Nano drives the mouth mechanism.
Wiring diagram for Nano RP2040, Emic 2 TTS, and L293D motor driver
Key Technical Notes
The Nano RP2040 runs at 3.3V; the L293D logic inputs are 5V-tolerant but the Nano's outputs are 3.3V, so voltage level compatibility had to be verified carefully
The Emic 2 module communicates via UART serial (Sout → Nano Rx, Sin → Nano Tx); text is sent one character at a time and the module responds with a ':' when ready for the next command
Furby gear train provides mouth and eye movement from a single motor; the gear ratio determines how quickly the face animates relative to speech tempo
Challenges
The Cyberon voice recognition library trial version is unreliable and the full commercial license is expensive. Trigger word detection worked, but false positives were higher than we wanted.
Powering the motor driver effectively: the Nano's 3.3V GPIO needed careful current budget management
Stuffing electronics inside a plushie without shorting anything against the conductive gear train
Coordinating mouth animation timing with speech output: the Emic 2 doesn't provide a real-time phoneme signal, so timing is approximate
Future Work
Solder the circuit onto a perf board for durability
3D-print a vented electronics enclosure to isolate the board from stuffing
Expand the joke library; add a randomized response mode
Explore full-license voice recognition or an alternative offline library