Review: Makeblock mBot (Bluetooth version)

     First of all, thanks to Makeblock, Let's Make Robots! and Franciscodr for the opportunity to review this kit.

     This post is primarily a review, but also ends up being a complete tutorial to learn how to manipulate and have fun with mBot.

     I intend to focus on the kit itself and a bit in the software to program it (mBlock), because I think there is enough information (already very well presented) about packaging, delivery, customs and unboxing. But feel free to ask me about anything.

mbot_01.jpg

 

     But before start having fun, it's necessary to know a bit the kit, which can be divided roughly into two lists: mechanics and electronics. So... what's included in the kit? What I thought about the parts?

 

 

     

title_mechanics_0.png

  • 2 × Micro TT motor;
  • 2 × 90T Plastic Wheel;
  • 2 × Velcro;
  • 4 × Brass stud M4 x25;
  • 1 × Chassis;
  • 1 × Universal wheel;
  • all necessary screws and nuts and even some spare.

     My impressions: I always wanted to put my hands in any kit from Makeblock, because they seem to have a great finish and appear to be strong. mBot is the first kit from Makeblock that I could meet physically, and my expectations were not frustrated. The chassis is simple and compact, but has holes that allow it to expand with parts from other kits or Lego parts. It has the great finish what I expected. About the motors there is not much to say, since they are quite common and quite seen in hobby projects. But despite having plastic gears are good motors and also very silent, and has enough torque and speed for this robot (see below note on power source options and its torque and speed), and despite having plastic shafts, I guess it's not so easy to break them.

 

 

     

title_electronics_0.png

  • 1 × mCore;
  • 1 × Battery holder 4 AA;
  • × 6P6C RJ25 cable-20cm;
  • × USB A-Male to B-Male Cable 1m;
  • × Me Ultrasonic sensor;
  • × Me Line follower;
  • × Bluetooth module;
  • × IR controller.

     My impressions: I was also very pleased with the electronics (mCore board and the sensors). The way of attaching using labeled RJ25 cables/ports facilitates the work for beginners, since there is no chance of a wrong connection and cause a short circuit, for example, which is ideal for children.

     The Instruction Book says that the power supply can be from 3.7V to 6V. As I like very much LiPo batteries and the mCore board have a JST connector, I've started with this option. But I was not satisfied with the performance with 3.7V when I play with my custom map with overpass (see below on "having fun"), in line follower mode. The robot barely climbed the overpass. So I decided to test it with other battery options and measure the results with a multimeter, and that's what I got: with full charged LiPo battery (3.7V) got about 3.66V delivered for the motors; with 4XAA NiHM rechargeable batteries full charged (so 4.8V), got about 4.48V delivered for the motors; with 4XAA 1.5V common batteries (so 6V), got about 4.77V delivered for the motors.

     Although a small voltage difference, I had a much better performance with common 1.5V batteries.

 

     Also included in the kit are an Instruction Book, a Line follower map and a reversible screwdriver (for socket cap and philips). I also received parts to repair motor shafts, if eventually broken.

 

 

     

title_assembly.png

     As now we know well the parts, it's time to put it all together.

     The first time that I assembled mBot took longer because I examined each piece. But the second time it took just a few minutes.

     The whole process is shown in the first video I made.

 

 

     

title_programming.png

     For me, assemble the robot is already a great fun, because at this time I know well the components and I always end up learning more about mechanics and electronics.

     But the robot is only complete when we give "life" to it.

     So the programming is necessary, and it's much easier for beginners with the mBlock software. But if you prefer you can use the Arduino IDE (which comes with mBlock when you download it).

     It took me just a few minutes to understand how mBlock works.

     I explored only the "Scripts" part of mBlock, but the software has other possibilities ("Costumes", "Sounds" and others).

     The code that I made shows how to use the light sensor of the mCore board (take a look at the third video that I made).


#include <Arduino.h>
#include <Wire.h>
#include <Servo.h>
#include <SoftwareSerial.h>

#include “mBot.h”
#include “MePort.h”

MeBoard myBoard(mBot);
#include “MeRGBLed.h”
#include “MeDCMotor.h”

double
angle_rad = PI/180.0;
double
angle_deg = 180.0/PI;
MePort lightsensor_8(8);
MeRGBLed rgbled_7(7);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);

void

setup(){
rgbled_7.setNumber(7==7?2:16);

}

void

loop(){
if</span><span class="operator" style="color: #663300; font-weight: bold;">((</span>lightsensor_8<span class="operator" style="color: #663300; font-weight: bold;">.</span>aRead2<span class="operator" style="color: #663300; font-weight: bold;">()) &lt; (</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">  )){</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">2</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    motor_9<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">9</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    motor_10<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">10</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    delay<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1000</span><span class="operator" style="color: #663300; font-weight: bold;">*</span><span class="float" style="color: #996600;">0.5</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">2</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    motor_9<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">9</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    motor_10<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">10</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    delay<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1000</span><span class="operator" style="color: #663300; font-weight: bold;">*</span><span class="float" style="color: #996600;">0.5</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">2</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">20</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">20</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    motor_9<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">9</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    motor_10<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">10</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    delay<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1000</span><span class="operator" style="color: #663300; font-weight: bold;">*</span><span class="float" style="color: #996600;">0.5</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">20</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">20</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">2</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">255</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();</span>
    motor_9<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">9</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(-</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    motor_10<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">10</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">):(</span><span class="int" style="color: #999900;">100</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    delay<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1000</span><span class="operator" style="color: #663300; font-weight: bold;">*</span><span class="float" style="color: #996600;">0.5</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    motor_9<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">9</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">):(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">));</span>
    motor_10<span class="operator" style="color: #663300; font-weight: bold;">.</span>run<span class="operator" style="color: #663300; font-weight: bold;">((</span><span class="int" style="color: #999900;">10</span><span class="operator" style="color: #663300; font-weight: bold;">)==</span>M1<span class="operator" style="color: #663300; font-weight: bold;">?-(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">):(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">));
}</span><span class="flow" style="color: #ff0000;">else</span><span class="operator" style="color: #663300; font-weight: bold;">{</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>setColor<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
    rgbled_7<span class="operator" style="color: #663300; font-weight: bold;">.</span>show<span class="operator" style="color: #663300; font-weight: bold;">();
}

}

 

     Once you upload some code to mBot, you delete the code it initially has (so it will not answer the IR controller or cellphone commands). But you can easily restore the default program.

 

 

     

title_having_fun.png

     I had already downloaded the mBot app on my Samsung Galaxy A5, so immediately after finish the assembling, I paired the cellphone and mBot through Bluetooth and it worked like a charm.

 

     I had almost the same fun with my cellphone and with the IR controller, but the cellphone has a very fun way to control with the “G-Sensor”.

 

     I had also some fun with the line follower mode. Inlcusive I made a custom map with an cardboard overpass (I made an Instructable for it: http://www.instructables.com/id/Map-with-cardboard-overpass-for-line-follower-robo/).

 

     mBot certainly guarantees many hours of fun and learning. When you feel that explored all the possibilities with the kit, you can expand it with parts from other kits and the Electronic Modules from Makeblock. I’m curious about the Me LED Matrix 8x16 module…

https://www.youtube.com/watch?v=bhkjOldya5E

Amazing

As to be expected, Dickel, you’ve nailed it.

I have one or two more videos to shoot/edit/share for mine.

I love this little kit. It is the first robotics I’ve had the opportunity to play with; I, like most people here, started playing with arduinos and scrap :slight_smile:

I love how easy these kits make it to get started and programming. I have yet to really do much with the programming; I keep getting sidetracked and playing with it with the phone app ha ha!