Robotic Fish - Realistic Movement!

About the project

An Arduino Nano based robotic fish that imitates the swimming motion of an actual fish in the water through multiple joints made of servo motors.

Project info

Difficulty: Moderate

Platforms: WindowsAnycubic

Estimated time: 1 week

License: GNU General Public License, version 3 or later (GPL3+)

Items used in this project

Hardware components

Arduino Nano V3 Arduino Nano V3 x 1
3.7V LiPo battery (680 mAh) 3.7V LiPo battery (680 mAh) x 2
Micro USB 5V 1A LiPo Battery Charger Micro USB 5V 1A LiPo Battery Charger x 1
Infrared Receivers and Transmitters Infrared Receivers and Transmitters x 20
Linear Servo Linear Servo x 1
Servo Motor Servo Motor x 4
Latching Push Switch Latching Push Switch x 1

Software apps and online services

Arduino IDE Arduino IDE

Hand tools and fabrication machines

3D Printer 3D Printer The filament used is PLA. x 1
Basic table tools (boxcutter, scissors, pliers...) Basic table tools (boxcutter, scissors, pliers...) x 1
Flexible balloon Flexible balloon 36 inch, large ballon for the skin. x 1
Hot Glue Gun Hot Glue Gun x 1
Waterproof Duct Tape Waterproof Duct Tape x 1


This is a robotic fish that imitates the movement of a real fish. If you want to see it swim, check out this video:

As you can see in the video above ^ the robot can move forward, and turn right and left. When an obstacle is detected with the "eyes" (made of infrared transmitters and receivers), the robot turns accordingly. Also as demonstrated in the video, it can swim at a variety of speeds. 

It took about a week or so to design, a week to assemble, and a week to test and make adjustments. Overall, I think that anyone can make this in about a week with the right resources. 

First, watch this video on how I made it / how it works:

The robot uses an Arduino Nano. The code explains all the functions. There are two LiPo batteries (3.7 V each), and a LiPo battery charger. The 5V regulator on the Arduino nano is used to provide power to the rest of the fish. 

The mechanism is simple. Essentially, each servo is a joint:

By coding the right values, we can get them to move like a traveling wave. This takes the water at the head of the fish, and pushes it to the back, thus thrusting the fish forward in the pool. 

Lastly, the skin is made of a large (36 inch) ballon. I picked this because it's a waterproof material that's also very thin and stretchy. The downside is that the fish's body doesn't look realistic because of all the flaps. However, after all the failures I had trying to make it look realistic, I went with it anyway. 

The STL files for the mechanism, as well as the code for the Arduino, are attached.

CAD, enclosures and custom parts

Head Piece for Mechanism

Tail Piece for Mechanism

Main Body Pieces


Code for Arduino Nano


Leave your feedback...