Fusion HAT+ Review – Adding AI voice and servo/motor control to Raspberry Pi for robotics, Smart Home, or education

SunFounder has sent me a review sample of the Fusion HAT+ Raspberry Pi expansion board designed for motor and servo control using audio interactions with its built-in microphone and speaker, as well as LLM models. It can be used as an AI-enabled robot controller, a smart home hub, a voice assistant, or an interactive learning platform.

In this review, after an unboxing and going through the installation of the Fusion HAT+ on a Raspberry Pi 5 2GB, I’ll mainly focus on the voice interaction part using text-to-speech (TTS), speech-to-text (STT), and local and cloud-based LLMs and VLMs, and also quickly test servo control to wave a flag using voice commands.

SunFounder Fusion HAT+ unboxing

I received the sample in the retail package reading “SunFounder Fusion HAT+ for Raspberry Pi” and detailing the key features, namely rechargeable battery, 12x PWM, onboard speaker and microphone, 4x 12-bit ADC, safe shutdown, 4x DC motor drivers, I2C/SPI/UART expansion, and compatibility with Raspberry Pi 5/4/3B+/Zero 2W.

SunFounder Fusion HAT+ for Raspberry Pi package
The package contains the Fusion HAT+ board, three cables for motors, a package content and assembly guide, a 7.4V/2,000mAh Li-Ion battery, and a few screws and nylon standoffs for assembly.

SunFounder Fusion HAT+ unboxing
The Fusion HAT+ itself is powered by a GD32 microcontroller, features battery and USB-C “Charge” connectors, configuration jumpers, a 40-pin GPIO header, PWM and servo connectors, four motor control ports, an I2C connector, a speaker, and a few buttons and LEDs.

Fusion HAT+ board top
The microphone can be found on the bottom side of the board.

SunFounder Fusion HAT+ board bottom

Raspberry Pi 5 and Fusion HAT+ assembly

I’ll use a Raspberry Pi 5 2GB SBC for testing, and assembly is fairly straightforward.

Raspberry Pi 5 Fusion HAT+ screwdriver

First, install the standoffs and secure them with screws. Then insert the Fusion HAT+ on the Raspberry Pi 5, add four more screws, connect the battery, and you’re done. As usual, SunFounder will add a few spare parts in case they get lost during assembly, and I ended up with two short standoffs, two long standoffs, and two screws. I always like it when companies do that, since I’m not a big fan of searching for screws on the floor or under furniture.

Raspberry Pi 5 Fusion HAT+ assembled

A rookie mistake

After the hardware was ready, I connected the kit to a 5V/5A Raspberry Pi USB-C power adapter and followed the instructions to test various demos successfully. But after a little over 24 hours, it all stopped working, even samples that used to work:


The kernel log indicated a hardware issue as the Pi 5 was unable to communicate with the Fusion HAT+ over I2C:


So I turned off the board and tried to readjust the HAT+, but it did not help. In the morning, I noticed the Raspberry Pi 5 had been turned off, but since I could still use it normally after starting it again, I didn’t think much of it. The Online LLM demo with Gemini would work (it doesn’t use the HAT). I could not find a clear solution, so I assumed a hardware failure, but after reading a bit more, I realized that the two orange battery LEDs were supposed to be on when the battery is fully charged, and they were turned off as if they were depleted, although USB power was always connected. I also disconnected the battery to try it again, and the same error occurred.

A facepalm moment happened shortly after, once I realized it was probably not a good idea to have connected the USB-C power supply to the USB-C port on the Raspberry Pi 5…

Raspberry Pi 5 Fusion HAT+ wrong power connection

… instead of the USB-C “Charge” port on the Fusion HAT+. It didn’t seem like a mistake at first since the battery was fully charged and everything worked smoothly until I realized it was depleted the following day.Fusion HAT+ USB-C power charge

That also means the battery is not optional, and must be connected at all times for the Fusion HAT+ to work.

Software installation

I mostly followed the instructions on the documentation website for that part and most of the rest of the review.

The first step is to launch raspi-config, and go to the A11 – Shutdown behavior section:raspi-config shutdown behaviourWe need to select “B1 Full power off” option.

raspi-config full power off

After a reboot, we can now install the fusion-hat package to get the necessary libraries and tools for operating the Fusion HAT hardware:


fusion hat script installation

After one more reboot, we can execute the audio setup script:


Here’s the output of the command for reference:


I didn’t get any audio at that point, but after a reboot, I could confirm audio worked.

Fusion HAT+ Text-to-Speech (TTS) options

SunFounder offers support for several TTS engines. We’ll start with Espeak:


I could hear “Hello! I’m Espeak TTS”.

Users can control the volume, speaking speed, word gap, and pitch:


It works and it’s understandable, but the voice is fairly robotic.

Another option is pico2wave:


I could hear  “Hello! I’m Pico2wave TTS” in a more natural way than Espeak.

Let’s edit the code:


Here’s a demo with both sentences.

CNXSoft was not recognizable here, but it was fine when using a more standard sentence.


The third option is Piper TTS:


I could hear “Hello, I’m Piper TTS” just fine. The output shows it supports a wider range of languages:


I modified the code to change the string:


I find it’s the clearest TTS solution so far.

The final option is OpenAI TTS, but it didn’t work, probably because I didn’t purchase credits:


SunFounder provides a comparison table for all four TTS options, so users can select the most appropriate one for their requirements.

ItemEspeakPico2WavePiperOpenAI TTS
Runs onBuilt-in on Raspberry Pi (offline)Built-in on Raspberry Pi (offline)Raspberry Pi / PC (offline, needs model)Cloud (online, needs API key)
Voice qualityRoboticMore natural than EspeakNatural (neural TTS)Very natural / human-like
ControlsSpeed, pitch, volumeLimited controlsChoose different voices/modelsChoose model and voices
LanguagesMany (quality varies)Limited setMany voices/languages availableBest in English (others vary by availability)
Latency / speedVery fastFastReal-time on Pi 4/5 with “low” modelsNetwork-dependent (usually low latency)
SetupMinimalMinimalDownload .onnx + .onnx.json modelsCreate API key, install client
Best forQuick tests, basic promptsSlightly better offline voiceLocal projects with better qualityHighest quality, rich voice options

Testing Speech-to-Text (STS) with Vosk

Vosk is the only sample provided for Speech-to-Text support:


Here’s the output of the command:


It failed to understand me at times, but it might be because I don’t exactly have a US accent.

This is what the Python code looks like:


Vosk supports over 20 languages and dialects:  English, Indian English, German, French, Spanish, Portuguese, Chinese, Russian, Turkish, Vietnamese, Italian, Dutch, Catalan, Arabic, Greek, Farsi, Filipino, Ukrainian, Kazakh, Swedish, Japanese, Esperanto, Hindi, Czech, Polish, Uzbek, Korean, Breton, Gujarati, Tajik, Telugu, and Kyrgyz.  More languages will be added to the project over time.

Local LLM and VLM testing with Ollama

The next step is to test local LLM (Large Language Model) and VLM (Vision Language Model) demos using Ollama. Since I only have a Raspberry Pi 5 2 GB, I’m not going to run Ollama on the Pi, and instead I installed it on the UP Xtreme i11 Edge mini PC with 16GB RAM:


I disable automatic launch of Ollama and ran it in server mode on the UP Xtreme i11 Edge computer:


I also edit code on Raspberry Pi in ~/fusion-hat/examples/llm_ollama.py to add the server’s IP address and select the model I’ve just installed:


We can type a prompt with the keyboard to get answers.


Vision Language Models are also supported, so I’ve installed llava:7b on the server:


On the Raspberry Pi 5, we change the IP address from localhost to the IP address of our server and set the model in llm_ollama_with_image.py sample:


I connected a Raspberry Pi Camera Module 3 to the Raspberry Pi 5 before running the command:


The description is accurate. Here’s the image saved in /tmp/llm-img.jpg.

llm img

Google Gemini online LLM test

SunFounder provides instructions for OpenAI, Gemini, Qwen, Grok, DeepSeek, and Doubao. I selected Google Gemini, mainly because it looks like it’s the only one with a free tier.

The first step is to log in to Google AI studio, and click Get API.

Google AI Studio Get API Key

I create a new “Fusion HAT” project before clicking “Create key“.

Google AI Studio Create New Project Create New Key

Google AI Studio will generate a Gemini API key we can use for testing.

Google AI Studio API Key

Copy the key and paste it into secret.py:


The llm_gemini.pyasd is using the gemini-2.5-flash model by default, but you can switch to another one:


I like to ask about CNX Software, because most local LLMs will spew out garbage, while online LLMs will usually provide relatively accurate information.

Local voice agent using Piper TTS, Vosk STT, and Ollama with Llama3.1:8b

So far, so good, but connecting to a local or online LLM does not use the Fusion HAT+ board features. Let’s work on that by trying a local voice chatbot demo. First, let’s check out the source code to change the language for the Vosk SST and Piper TTS if not US English, and set the proper parameters for Ollama:


It worked pretty well, although it can get comical with the script hearing “huh” sounds, possibly because of the fan on the UP Xtreme i11 Edge mini PC:


The application will continue listening, and sometimes hears “huh” even when nobody is in the room:

AI voice assistant with Google Gemini

Let’s do something even more advanced by converting our Raspberry Pi 5 into what amounts to a smart speaker using the AI voice assistant demo. Again, I relied on Google Gemini, and edit the voice_assistant.py script with proper parameters:


If you don’t have a camera connected, you’ll also want to set WITH_IMAGE to False.


Since I had the Raspberry Pi Camera Module 3 connected to the board, I also asked it to use the camera:


Pretty neat! No video here, as I’ll showcase that part in another demo using a servo in the section below. Note that sometimes, I had no audio at all, but I noticed running the command:


fixes the audio issue in the voice_assistant.py sample. SunFounder and I are not sure why, and I cannot reproduce it with 100% certainty.

Servo control with TTS

The Fusion HAT+ documentation focuses on audio and LLM/LVM control, but SunFounder is also working on an “AI Fusion Lab Kit” that will ship with the Fusion HAT+, as well as motors, servos, and so on. We can check the documentation for the upcoming kit for instructions on how to control a servo. I connected an SG90 servo to port 0 as shown in the photo below, and added a Thai flag to it for dramatic effect 😉

Fusion HAT+ review LLM servo control camera

Let’s check out the sample code for the AI Lab kit:


and run the servo demo:


The servo will rotate in an infinite loop. We’ve got the low-level stuff sorted out. See relevant Python code:


Let’s use that to mix TTS, Vosk STT, Google Gemini LLM, and servo control. The goal here is to rotate the servo when I say “wave the flag”, and otherwise send the request to Google Gemini. Note that I switched from gemini-2.5-flash to gemini-2.5-flash-lite since I ran out of the 20 daily credits during testing. Another way would be to set up billing and buy some credits.

Google API Rate Limit

Here’s the code for the demo:


The demo below demonstrates wake word support, Gemini LLM with a general question and a description from a photo taken with the Raspberry Pi Camera Module 3, and finally waving the flag with a voice command using TTS.

Output from the command:


Photo from Raspberry Pi Camera Module 3:

google gemini photo raspberry pi camera

My first try with the Gemini 2.5 Flash model was a bit more verbose and would have likely described the Fusion HAT+ for Raspberry Pi package as well. Switching to the Gemini 2.5 Flash Lite model generates shorter answers. I also removed the “Keep answers short, natural, and fun” text from the instructions, and I still got relatively short answers from the Lite model.

It also works on battery, so users can disconnect the USB cable to keep using it on the go for a few hours. The power button that allows a safe shutdown is also very useful, considering most people will run it headless (without a display).

Conclusion

I had fun playing with the Fusion HAT+ connected to a Raspberry Pi 5, as SunFounder provides excellent documentation to get started with text-to-speech (TTS), speech-to-text (STT), local LLM/VLM with Ollama, online LLMs such as Google Gemini, and also to create your own voice assistant.

It also offers motor, servos, and other I/Os interfaces, along with a battery, which makes it especially useful for voice-controlled robots. Having said that, it could also be integrated into a Raspberry Pi-based Smart Home controller, or used for education, especially since the price tag is rather competitive. The motor/servo/IO control documentation is rather limited for the Fusion HAT+ itself, but I could rely on the documentation for the upcoming SunFounder AI Fusion Lab Kit that is much more thorough in that regard, and will ship with accessories to create all sorts of fun demos and projects.

I’d like to thank SunFounder for sending the Fusion HAT+ for review. It is currently sold for $34.99 on AliExpress, Amazon, and the company’s online store, including a battery pack.

Share this:

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress. We also use affiliate links in articles to earn commissions if you make a purchase after clicking on those links.

Radxa Orion O6 Armv9 mini-ITX motherboard
Subscribe
Notify of
guest
The comment form collects your name, email and content to allow us keep track of the comments placed on the website. Please read and accept our website Terms and Privacy Policy to post a comment.
2 Comments
oldest
newest
Boardcon MINI1126B-P AI vision system-on-module wit Rockchip RV1126B-P SoC