A real-time Rock-Paper-Scissors game running on the Arduino UNO Q using an Edge Impulse object detection model.
The camera detects your hand gesture (rock, paper, or scissors) via object detection inference, while the Arduino picks a random move, and the local LLM comments the game. Are you going to win the Arduino?
- Arduino VENTUNO Q with Arduino App Lab
- USB camera connected to the board
- Edge Impulse machine learning model trained to detect
rock,paper, andscissorsas you can find in this public project here. Clone it and re-train it to improve the accuracy with your light and background.
Clone this repository to your local machine.
Or Download as a ZIP file from the Github repository.
Copy the entire Rock Paper Scissors folder to the Arduino UNO Q board:
scp -r Rock-Paper-Scissors-Arduino-VENTUNO-Q/ arduino@<device-ip>:/home/arduino/ArduinoApps/RPS-gameor use the Arduino App Lab Create new App button in the My Apps section and import the ZIP file.
Get into the Rock Paper Scissor app into the Arduino App Lab.
Click in the Brick Video Object Detection and then click Train new AI model in the bottom.
Log In into your Arduino account and the Edge Impulse account and then train your own Rock Paper Scissors model or clone this public project and re-train it.
Go to deploy the model as Arduino VENTUNO Q or as Linux AARCH64 with Qualcomm QNN.
Then the deployed models will appear in the brick of the Arduino App Lab when you will go to the AI models tab. Select the Rock paper scissors model.
Select the brick Large Language Model LLM and then go to the tab AI models.
Download the model that you would like to have. In this case, I downloaded the Gemma 3 1B and it works well.
And check that it's being added in the app.yaml file of the app.
Click on the Rock Paper Scissors application and then click Run.
Alternatively, via SSH you can start the application using the Arduino App Lab CLI.
arduino-app-cli app start user:rock-paper-scissors-gameOnce successfully started, navigate to http://<device-ip>:7000 in your browser and start playing!
Good luck!
- Show your hand gesture (rock, paper, or scissors) to the camera.
- The detection panel on the left shows what the model sees in real-time after running inference on a local object detection Edge Impulse model.
- Click Play Round — your gesture is locked in at that moment.
- The Arduino reveals its random move and the winner is shown
All settings are in python/main.py at the top:
| Setting | Default | Description |
|---|---|---|
CONFIDENCE_THRESHOLD |
0.6 |
Minimum confidence to accept a detection |
COUNTDOWN_SECS |
3 |
Countdown duration before evaluating |
RESULT_HOLD_SECS |
3 |
How long the result stays on screen |
In case that you want to create your own object detection model using Edge Impulse.
Collect data, label it and train the neural network. Test it in Edge Impulse and when you will feel confident, deploy it as an Arduino UNO Q model or Linux aarch64.
Then follow the same instructions that you performed to add it to the app's brick.
Want to learn more about how Edge Impulse ork? Try one of the Edge Impulse courses.
"No gesture detected" every round:
- Check that the brick is initialized: look for
[BRICK] VideoObjectDetection initializedin logs - Check that
App.run()is active: look for[MODE] App runner: yesin logs - Look for
[BRICK-RAW]lines — if absent, the brick callback isn't firing - Ensure your model labels match
rock,paper,scissors(lowercase)
"App runner: no" in logs:
- The
Appclass couldn't be imported. Make sure you're running viaarduino-app-cli app start, notpython3 main.pydirectly
Model not found:
- Verify the
.eimfile exists at the path inapp.yaml - Ensure the file is executable:
chmod +x /home/arduino/.arduino-bricks/ei-models/rcp-model.eim
Feel free to reach out to us on the Edge Impulse forum or the Edge Impulse Discord server if you need help.
This project is intended for educational and experimental purposes only. It is not hardened for production use. Do not deploy in any safety-critical environments without proper security, testing, and validation.





