Better than a bunch of photos we have created an Assembly guide video. Some steps, like how to program the Arduino, controlling your robot or Troubleshooting are listed below. The interactive 3D model will help you to get a good idea about how the B-robot EVO looks.

NEW!:
We have improved the wheels switching from GT2 timing belt to nitrile O-rings. The video shows the old GT2 rings, but you got with your KIT 2x rubber O-rings instead. Easier to fit and more durable than the old ones š
Part list:
- DEVIA Robotics control board (or equivalent: schematic info here and electronic diagram)
- USB cable (needed to program the control board)
- 2x High Quality NEMA17 stepper motors + 14 cms cables (pair)
- 2x Stepper motor driver
- 3D printed parts
- Powerful servo (you will need an arm to fight and raise your B-robot…)
- 6x AA Battery case with ON/OFF Switch (batteries not included)
- Bolts+nuts needed to set everything up
- Pair of bumpers (14×5 cms)
- 2x Nitrile O-rings
- Double side tape + googly eyes (optional)
Have questions/ comments? Refer to the B-robot EVO community!

HOW TO UPLOAD the ARDUINO CODE to the DEVIA CONTROL BOARD
(Skip this step if you got the Plug & Play B-robot EVO kit version. The Arduino is already programmed)
a) Install the Arduino IDE on your PC from here (skip this step if you have the Arduino IDE already installed) This B-robot code has been tested and developed on IDE version 1.6.5 and later versions. If you have a problem compiling the code, let us know
b) Download all the arduino files from here . Copy the files inside the BROBOT_EVO2_23_M0 folder in your hard drive
c) Compile and send the code to the DEVIA control board:
- Open your Arduino IDE
- Open the main code in /BROBOT_EVO2_23_M0/BROBOT_EVO2_23_M0.ino
- Connect your DEVIA board with the USB cable to the PC
- Note: If this is the first time you connect an Arduino board to your PC maybe you might need to install the driver.
- Select the board Arduino/Genuino ZERO (native USB port). In the TOOLS menu->board
- Select the serial port that appears on the tools->Serial port
- Send the code to the board (UPLOAD button: Arrow pointing to the RIGHT)


d) Done!
CONTROLLING YOUR B-ROBOT EVO 2:
Android users:
We have developed a FREE APP to control the Brobot (and future JJrobots) for your Android based Smartphone/Tablet:
It works sending UDP packets to the B-robot. It uses a simple layout with Throttle and Steering slicers and several buttons.
Steps to follow:
- Install the JJRobots control APP
- After turning the Brobot EVO ON, connect your smartphone/tablet to the B-robot EVO“s wifi network (remember, the WIFI“s password is 87654321)
- Launch the JJrobots control APP and play with your B-robot EVO!
iOS users. App Store App or TouchOSC :
iOS B-robot control APP
It is quite straightforward to use. Just connect your iPhone/iPad to the B-robot EVOĀ“s wifi (use the password “87654321“) and launch the App.
iOS TouchOSC APP: Alternative way to control the B-robot EVO. Setup guide and files here
USEFUL LINKS:
Arduino CODE (latest version V.23.0) and the GITHUB REPOSITORY
B-robot Challenges (robotics, Academy)
B-robot alternative frames: Stealth version, Compact version (credits to s199)
B-robot EVO 2: 3D MODEL
TROUBLESHOOTING:
I can not insert the servo into the B-robot lateral panel
The armās servo needs to be fully inserted into the side panel. You may need to “erode” or even cut the notchās protrusions of the “socket” in order to keep the servo vertical and tight. Otherwise, the servo will start to get loose and the arm will not respond as intended.
Once the servo has been fully inserted, use the 2 bolts and nuts to fully attach it to the lateral. Photo below: the edge of the notch you may need to erode.

NOTE: If you got the KIT from jjrobots (with the 3D printed parts). At least, one of the provided lateral parts has been already “3D-printed accuracy checked”. So, you will not find difficulties to properly insert the servo head on it.
My B-robot is not responding to the command sent from my smartphone/tablet
Check you are connected to the JJROBOTS_XX network using the correct password (by default: 87654321) and your device has not blocked the data traffic to the B-robot (stay always connected to the robot)
My B-robot lacks of power or fall without reason
Adjust the current delivered by the stepper motors drivers. Use a screwdriver and gently rotate the screws indicated on the photo below. Rotating 10Āŗ-30Āŗ is more than enough.
A good explanation about how to do it here.

Clockwise rotation: increase the power delivered to the motors
My B-robot can not stand up by itself.
If everything is ok, the B-robot only needs a little bit of help from the servo to stand up by itself. Take a look to the video below. If your robot does not behave like in the video, adjust the stepper motor drivers output power (instructions above). Keep in mind that the bumpers have two functions here: protect the electronics+robot and help it to stand up easily.
DEBUG MODE
There is a DEBUG MODE inside the B-robot CODE. This MODE will allow you to debug theĀ behaviorĀ of the robot if you are having issues. Ā Please, refer to the B-robot community if you have problems or questions.
Look at the sketch line ā#define DEBUG 0ā³ and change the 0 to 1ā¦8 depending on what info you want to get. Take a look to the CODE below:
#if DEBUG==8
Serial.print(throttle);
Serial.print(ā ā);
Serial.print(steering);
Serial.print(ā ā);
Serial.println(mode);
#endif
//angle_adjusted_radians = angle_adjusted*GRAD2RAD;
#if DEBUG==1
Serial.println(angle_adjusted);
#endif
//Serial.print(ā\tā);
mpu.resetFIFO(); // We always reset FIFO
// We calculate the estimated robot speed:
// Estimated_Speed = angular_velocity_of_stepper_motors(combined) ā angular_velocity_of_robot(angle measured by IMU)
actual_robot_speed_Old = actual_robot_speed;
actual_robot_speed = (speed_M1 + speed_M2)/2; // Positive: forward
int16_t angular_velocity = (angle_adjusted-angle_adjusted_Old)*90.0; // 90 is an empirical extracted factor to adjust for real units
int16_t estimated_speed = -actual_robot_speed_Old ā angular_velocity; // We use robot_speed(t-1) or (t-2) to compensate the delay
estimated_speed_filtered = estimated_speed_filtered*0.95 + (float)estimated_speed*0.05;
#if DEBUG==2
Serial.print(ā ā);
Serial.println(estimated_speed_filtered);
#endif
// SPEED CONTROL: This is a PI controller.
// input:user throttle, variable: estimated robot speed, output: target robot angle to get the desired speed
//target_angle = (target_angle + speedPControl(estimated_speed_filtered,throttle,Kp_thr))/2.0; // Some filtering : Average with previous output
//target_angle = target_angle*0.3 + speedPIControl(dt,estimated_speed_filtered,throttle,Kp_thr,Ki_thr)*0.7; // Some filtering
target_angle = speedPIControl(dt,estimated_speed_filtered,throttle,Kp_thr,Ki_thr);
target_angle = constrain(target_angle,-max_target_angle,max_target_angle); // limited output
#if DEBUG==3
Serial.print(ā ā);
Serial.println(estimated_speed_filtered);
Serial.print(ā ā);
Serial.println(target_angle);
#endif
#if DEBUG==10
Serial.print(angle_adjusted);
Serial.print(ā ā);
Serial.println(debugVariable);
#endif
#if DEBUG==6 //BATTERY STATUS
Serial.print(āBā);
Serial.println(battery);
Serial.print(ā ā);
#endif
#if DEBUG==7
Serial.print(distance_sensor);
Serial.print(ā Aā);
Serial.println(autonomous_mode_status);
USEFUL INFO: DEVIA CONTROL BOARD & STEPPER MOTOR DRIVER (A4988):
Arduino DEVIA Robotics control board:
- Schematic can be found here
- PINOUT of this Arduino board here
- Electronic diagram here
- MPU onboard the DEVIA CONTROL BOARD (specifications): MPU ICM 20600
Stepper motor driver A4988:
FAQ (frequently asked questions):
Why are you using Stepper motors?
There are several options for motors: DC, Brushless, Steppers⦠We choose stepper motors because they have enough torque, you could connect the wheels directly without gears that generate some backslash (this is a common problem in balancing robots), they have good bearings and you will be able to control the speed of the motors with accuracy. In standard sizes these motors are cheap (we use the same motors used on a regular 3D printers) and the drivers are cheap and easy to interface with Arduino too.
Why you use a Wifi connection?
Using a Wifi connection allow us to work with a lot of devices (Smartphones, Tablets, PCsā¦) Bluetooth devices are cheaper but their range is usually shorter. Old devices are not supported and you could not connect it to Internet easily. The Wifi module that we recommend, allow us to create an Access Point, so you donāt need to use an existing Wifi infrastructure (cheap Wifi modules donĀ“t let you do this). You can connect your device directly to the Robot anywhere but if you prefer you can hack it and use your own infrastructure therefore controlling your robot (or whatever you have created) over the Internet from any remote place in the world! (Cool, isnĀ“t it?)
Why BROBOT?
Self balancing robots are fun to see and play. A self balancing robot requires sensors and control algorithms. You will find all the HOWTO and technical documents which explains the ābehind the scenesā in JJROBOTS. Learn electronics and robotics creating your own BROBOT from scratch!.
There are some commercial solutions to the balancing robot, but here we want to share knowledge and thoughts. You can use the BROBOT parts to create more robots or gadgets, keep in mind all the devices used in a BROBOT are standard devices/electronics with a lot of potential. In the JJROBOTS community we want to show you how! You are now buying a self balancing robot, your are buying your own electronic and ancillary devices!
Thinking about creating a GPS self guidance robot? a modified version of BROBOT is your robot!
How much payload could carry BROBOT?
BROBOT could easily carry your soft-drink cans. We have tested with 500g of payload with success. More weight makes the robot more unstable but this could be fun also, isnāt it?
Why use stepper motors for a balancing robot?
There are several options for motors, DC, Brushless, Steppers⦠We choose stepper motors because they have enough torque, you could connect the wheels directly without gears that generate some backslash, they have good bearings and you could control the speed of the motors very precisely. Also they are cheap and the drivers tooā¦
Could I use rechargeable batteries of Lipo batteries?
Yes, you could use standard AA batteries (alkaline recommended), AA rechargeable batteries (e.g. NiMh) or you could optionally use a 3S Lipo battery. Run Lipo batteries at your own responsibility.
What is the runtime of BROBOT?
With rechargeable AA batteries (e.g. Ni-Mh 2100mAh) you could expect around half to an hour of runtime
Could BROBOT work without the wifi module?
Yes, BROBOT could work and keep its stability. But, of course you could not control it without the module.
Could I change the name of the Wifi network that BROBOT generate?
Yes, on the configuration sketch you could change the name and also some other internet configurations. You could also connect BROBOT with your existing Wifi network
Is this a project for an Arduino beginner?
Well, BROBOT is not an easy “beginner project”, but it has a lot of documentation so you have a platform to grow your skills. You could first mount your BROBOT following the instructions and it should work OK, then you could start understanding some parts of the code and finally writing your own pieces of codeā¦
For example it could be easily (there are tutorials for this) to write your code so the robot automatically move the arm and spin itself if you donāt send a command in 10 secondsā¦
More advanced hacks: Convert to a totally autonomous robot with obstacle avoiding adding a SONAR, convert to a follow line robot, and so onā¦
Why BROBOT electronics are not so cheap?
We are a really small startup (2 persons in our free time) and now we could only run small batch of electronics. As yo know the price of electronics drops quickly in high volume productions but we are starting⦠If we sell many boards and we could run more volume productions we will drop the prices!!. JJROBOTS didnĀ“t born to get money, our spirit is to sell āgood productsā to found our next projects and spread the robotics knowledge
Have fun!