Robofish: create your robot fish with Arduino

By on February 26, 2013
Pin It

BELL2

Today we introduce you a robot fish that is able to swim and recognize tank edges and obstacles. We’ll find out how we can easily create it with common insulating material and a few servo motor controlled by Arduino.

 

The mechanical part

For the fish body we used common polystyrene as the one used as insulating material for walls. Inexpensive, very robust and lightweight: it floats easily and is easily moldable. Great deal.

robofish3

To make fish’s swimming more realistic, we need three joints between the trunk and the caudal fin. As actuators we have chosen of common modeling servos: small, powerful enough and easily controlled by a microcontroller.
The servos are ideal because with them you can manage the movement of a small shaft connecting all segments of the fish, varying at will the position, even a few degrees.
The fish body is divided into a central part and three parts, each of which moved by a servo. The caudal fin is made with plastic recycled from supermarket goods packages.

robofish5

The flexibility of the fin allows you to give more realism to movement. To obtain harmonic motion, each part is attached to the next by a servo: the body of the servo should be glued on a body segment while the servo arm (connected to the shaft) shall be glued on the next.

robofish6







Obviously Robofish needs a system to detect obstacles such as the tank edges. To create this, we used two Sharp GP2Y0D805PCB infrared sensors with digital output. These components can detect objects up to 5 cm and are quite easy to manage. Once encased in a plastic bag, can operate in water.

robofish10

Position the sensors on the front, tilted to 45°, one on left and one on the right. Then carve out the room for control, batteries and sensors.
The profile of the fish is at your choice. Don’t worry too about weight as in our prototype we added 460g of further weight to ensure right level of floating.

 

Electrical connections

ROBOFISH2

As control we opted for an Arduino-compatible Board produced by Seeedstudio but any Arduino board will do. Four simple AA batteries will provide a voltage compatible with the servo feed, while the Arduino board derives its tension thanks to its internal 5 volt regulator.
As it is difficult to use a conventional switch (you can’t handle it since everything is covered in plastic) we used a small magnetic contact, such as those used to detect the windows opening. It consists of a Reed contact activated by a small magnet. Place the contact on the outer edge of the robot so by approaching the magnet, you can activate the circuit. This explains that little bump on the head of the robots seen in the video.
Of course, the robot fish will work until the magnet is on his head. Clever and cheap.

 

The firmware

Using Arduino it’s easier as cabling is easy and immediate and the realization of the sketch is deadly simple.
Servo movement is repetitive and follows a precise scheme. We provided the ability to personalize few variables so that you can test different kinds of swimming. The swim takes place by moving the three servos in synchronous, according to a pattern that resembles the letter s: each segment varies slightly out of phase with respect to the previous.
For the servo movement we used servo.h library, already available on the Arduino IDE.  You simply declare the servo and the multi-touch corresponding output using the servo. attach (pin). The servo.detach() method allows to release the output from the servo to use it eventually as PWM output. Commands managing servos movement are two.
The first, ServoWriteMicroseconds, allows you to set the position of the servo command by specifying the length in microseconds. The value in this case should be between 1,000 and 2,000 µs. The midpoint of 1500 corresponds to the neutral position respect the shaft line. The second statement, Write, allows positioning by specifying the angle in degrees: the value of the angle must be between 0 and 180°, 90° intermediate value corresponding to the neutral position of the servo.

The two sens_SX and sens_DX named sensors are wired respectively on pins 5 and 6. In the main loop there’s is a for cycle that increments the i variable at regular intervals from 0 to 360 cyclically, in a total time defined by the variable velocity.
The value of the i variable together with that of phase, determines the position of the servo motors. This value is referred to a full 360° loop and then must be offset, keeping in mind the neutral position of the servo, of the potential shift and that of the maximum deflection you want to give to the movement.
The latter is defined by the variable maxDeflexion (decimal degrees) and defines the maximum deflection of each stroke: the higher this value, the wider will be the movement of the three trunks of the fish.

robofish9

With phase set to 0 mail all the servo will move along; increasing this value introduces a phase shift between the servo position. As a result you will get a movement that is similar to the letter S, the more pronounced the greater the value of phase is.

robofish8

When detecting obstacles, the neutral position of the servo moves gradually on the opposite side of the obstacle. In this way, the fish will describe an arc of circle away from the obstacle.
The arc can be controlled through maxDefobs variable: the higher this value, the more will be the swim line curvature. When the obstacle is no longer being detected (time controlled with lostTime), the servo motion resumes to go regular. Each servo PIN range between-maxDeflexion and + maxDeflexion, while if an obstacle is detected it ranges between the values of -maxDeflexion + maxDefobs and maxDeflexion + maxDefobs.

 

Testing
Before testing the robot into water you must carefully check every mechanical and electrical connection. Turn the fish on and control the movements and ensure that both sensors provide signal to the Arduino. Use a multimeter to measure the voltage on their output: in the absence of obstacles the signal should be high. Checking  voltage supply is not a bad idea: make sure is at least 5.5 V.
At this point we’re ready to waterproof the robot: there are many solutions, we have introduced the robot in a plastic bag (breathe inside to see if it has holes and seal it with duct tape). Use rubber bands to keep the bag lying close to the body of the robot and make sure the servo are free to move.
The swim will take place in surface water: you’ll probably have to weigh down the robot with sufficient wright to keep it at the correct height. As mentioned above, in our prototype, we added like 460 grams. Once the robot floats in the right way you can turn it on by placing the small magnet and let him sinuously swim in digital freedom.

 

From Openstore

Arduino Uno

Servo motors

IR sensor







 

 

About Boris Landoni

Boris Landoni is the technical manager of Open-Electronics.org. Skilled in the GSM field, embraces the Open Source philosophy and its projects are available to the community.

80
Leave a Reply

avatar
47 Comment threads
33 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
37 Comment authors
Jishnu RajNoah Marques200+ Arduino Projects List for Final Year Students- Engineering SolutionsRobot Projeleri | CCS C ile Pic Programlamawaitwait Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
trackback

[…] create your robot fish with Arduino […]

it-hertz
Guest
it-hertz

-what is the complete list of material and method for the robofish..the codes has some error.

BorisLandoni
Guest
BorisLandoni

There isn’t a BOM, Just Arduino and servomotors.
The code is written for the previus version of IDE

it-hertz
Guest
it-hertz

Do you have a codes for written for arduino?

BorisLandoni
Guest
BorisLandoni

The code is written for Arduino

trackback

[…] Today we introduce you a robot fish that is able to swim and recognize tank edges and obstacles. We'll find out how we can easily create it with common insulating material and a few servo motor controlled by Arduino.  […]

trackback

[…] create your robot fish with Arduino […]

xyz
Guest
xyz

codes does not working… I tried all version of ide. too many errors (79 errors) in codes. which version of IDE did you use?

xyz
Guest
xyz

when delete line 73 its works. error in line 73

BorisLandoni
Guest
BorisLandoni

I’m sorry, is a WP problem…

Mark
Guest
Mark

These guys are publishing your article like it were authored by them: http://www.sawers.com.bo/blog/2013/02/robofish/

BorisLandoni
Guest
BorisLandoni

thanks for reporting

trackback

[…] Hi, thank you to publish our post, but please mention the source http://www.open-electronics.org/robofish-create-your-robot-fish-with-arduino/ […]

xyz
Guest
xyz

will u fix the problem?

BorisLandoni
Guest
BorisLandoni

Yes, now it’s ok

trackback

[…] love this project from Open Electronics. The movement is spookily realistic, I’ve just got to build one of these as part of my robot […]

i'm pugkee
Guest
i'm pugkee

Thank you very much. I am a newbie for sth like this.

Svin3t
Guest
Svin3t

Did you use the Arduino uno, if not wich did you use?
And where did you buy the IR sensors?

BorisLandoni
Guest
BorisLandoni

This the sensor
http://store.open-electronics.org/Breakout/Sensor/GP2Y0D805PCB
We use a Seeeduino, but you can use an Arduino

Aitazaz Aijaz
Guest
Aitazaz Aijaz

i am going to present it in my university. so kindly tell me that is this code correct..? and what are components required for this(complete list).. hope you will rep as soon as possible..

BorisLandoni
Guest
BorisLandoni

Hi the code works of course.
It isn’t wtire for the last version of Arduino IDE.
The BOM is ok

sowmya
Guest
sowmya

where did u buy servo motors ??

BorisLandoni
Guest
BorisLandoni
GRW
Guest
GRW

I see that u call pin 13 as an output mode, but I am using the Leonardo. I am trying to incorporate a bi-color led…my led code works fine as a separate code but when I try to incorporate it to this code I get several errors…I am calling pin 13 for my LED by the way? can you help me understand why 13 is being use as an output in this and in the schematic I don’t see it?

BorisLandoni
Guest
BorisLandoni

You are right, the pin 13 isn’t use

grw
Guest
grw

thank you, I was able to incorporate the LED code into this code by the way.

Jyothi VBN
Guest
Jyothi VBN

Hi can you tell me the dimensions of the fish u have done
can you please give me BOM
if diving operation has to be done how is it possible….

BorisLandoni
Guest
BorisLandoni

Hi,

our prototipe is about 40 cm.

In the Electrical connections you can find the materials we used.

Rae
Guest
Rae

Can we have the complete list of the materials needed same with the procedure and the correct code please? We will be doing this as our final requirement and we are really new to this thing. Thank you so much and Godbless!

kae
Guest
kae

Can we have the complete list of the materials needed same with the procedure and the correct code please? We will be doing this as our final requirement and we are really new to this thing. Thank you so much and Godbless!

BorisLandoni
Guest
BorisLandoni

I fixed the code.
You need un arduino some servos and IR sensor

kae
Guest
kae

Thank you! Can I ask where din you purchase the IR sensors? and is there an alternative model for that?

BorisLandoni
Guest
BorisLandoni

From Futurashop.it

kae
Guest
kae

Is it ok if we will use an IR sensors having an analog output? And what should be the specific range of the sensors?

BorisLandoni
Guest
BorisLandoni

yes no problem. The range is ok <5cm

kae
Guest
kae

We just want to clear the specs of the IR sensors because we cannot find the exact product here in our country so we are looking for the alternative model, can we ask which of these models can be use as an alternative? thanks for your immediate response :)
**http://sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y0e03_e.pdf
**http://www.acroname.com/products/R301-GP2Y0A21YK.html
**http://www.acroname.com/products/R144-GP2Y0A02YK.html

droid
Guest
droid

hai Boris Landoni this is dexter I want to do this project the imformation U gave is good but can U give any more Info about parts and circuit clearly

BorisLandoni
Guest
BorisLandoni

We use normal servo motor and Sharp IR sensor, but you can use also other sensor

Shubham Rane'zz
Guest
Shubham Rane'zz

IR sensors work on reflection light right???but light get refracted (changes angle) in water…..then how did you get proper signals???

Matt Faraday
Guest
Matt Faraday

refraction doesn’t matter too much. enough of the light will make it back to the sensor for it to measure the distance.

gaurav kandpal
Guest
gaurav kandpal

Can you plz provide the code for Arduino?

BorisLandoni
Guest
BorisLandoni

The code is in the post

gaurav kandpal
Guest
gaurav kandpal

Did u faced any difficulty for the fish to float….as there where 3 servo motors inside it..wasnt the fish heavy???

BorisLandoni
Guest
BorisLandoni

The body is foam

Nguyễn Tuấn Kiệt
Guest
Nguyễn Tuấn Kiệt

hello , you can tell me sx and dx , which is left and which is right the fish? ( Looking directly at the fish head )
tks u so much :)

BorisLandoni
Guest
BorisLandoni

SX = left
DX = right

Harikishore K A
Guest
Harikishore K A

How can i mold the fish body?

Jen27
Guest
Jen27

Please can U help me do a soft robotic fish ? :)

shef
Guest
shef

how did you made the fish body.??/

BorisLandoni
Guest
BorisLandoni

It is pressed sponge

Faseeh Tauqeer
Guest
Faseeh Tauqeer

Can you please tell me How does the fish move? I mean what is the mechanism????

BorisLandoni
Guest
BorisLandoni

The Servo create the movement of a normal fish

ravella aravind
Guest
ravella aravind

Can we add a water proof camera to this robot??

BorisLandoni
Guest
BorisLandoni

Yes
why not?

Suraj
Guest
Suraj

Is it possible to get the ready made kit for this?
?

BorisLandoni
Guest
BorisLandoni

Sorry,
this is only a project

trackback

[…] as well as obstacles. This is a simple project with servo motors, infrared sensors and Arduino. See here all the steps to build your […]

Swaggers Group
Guest
Swaggers Group

from where you buy fish body

BorisLandoni
Guest
BorisLandoni

We do it ourself

trackback

[…] create your robot fish with Arduino | Open Electronics – Today we introduce you a robot fish that is able to swim and recognize tank edges and obstacles. We’ll find out how we can easily create it with common insulating … […]

Lol Lol(heron)
Guest
Lol Lol(heron)

hello,greetings.I build a diffrent kind.i try to build using a hc 05 module so i can control it using a phone.The problem is i dont know what pin from arduino to servo(which pin to which).In this pic i use a few pins like gnd,5v,rx,and tx for the hc 05 module.Thx i hope you reply soon(im still very young very impatient roftl 13 years old )

Anupam Karn
Guest
Anupam Karn

I want to ask in what condition you have put that servos for such motion?

abraham
Guest
abraham

what kind of servo motors did you use and what are the pin connection to the board

Lee Ying
Guest
Lee Ying

Hi,

where do you get the pressed sponge?
Is it the normal household sponge, high density pressed sponge or the art and craft type that is use for flowers arrangement? Thank you.

jelin
Guest
jelin

can u plz tell me the total cost for this project

Vidit Gautam
Guest
Vidit Gautam

where do you get pink styrofoam?
Also, what are the changes in the code for new ide version?
Also, great work, one of the best simple arduino projects on the internet!

axel frost
Guest
axel frost

can I use that coding for arduino uno?

diksha adtani
Guest
diksha adtani

Yeah

trackback

[…] Robofish: create your robot fish with Arduino […]

axel frost
Guest
axel frost

Actually, my group want do this project for Final Year Project at our university, but we want to change its function. Our group want to make this robot fish control by a controller like rc car. It is possible to do that?

diksha adtani
Guest
diksha adtani

From where we can get this fish body?

Shubham Rane'zz
Guest
Shubham Rane'zz

how did you made servo motors waterproof???

BorisLandoni
Guest
BorisLandoni

With cellophane

ario
Guest
ario

can you tell me what materials need about robofish?

waitwait
Guest
waitwait

actualTime should be a unsigned long type of variable or the program will bug since millis to Int type sometimes passes negative values.

trackback

[…] kontrol ederek robot kolunun seçme ve yerleştirme işlemini gerçekleştirmeyi amaçlamaktadır. Akıllı Robot Balıklarının Uygulanması : Bu projenin temel amacı, sudaki kirletici tehlikeli maddeleri tespit ederek su altı […]

trackback

[…] Robofish – Swimming Arduino Robot: Robo fish- the name itself denote that this project is to build a robofish and controlling it. In this project we design a fish and make it to swim in pool or water like original fish, skipping the obstacles. It uses 3 servos to swim and position sensors to avoid obstacles. […]

Noah Marques
Guest
Noah Marques

codes does not working… I tried all version of ide. too many errors (79 errors) in codes. which version of IDE did you use?

Jishnu Raj
Guest
Jishnu Raj

what are the sensors used here

BorisLandoni
Guest
BorisLandoni