One of my favorite tools is the Makeblock Robot contruction system. I've actually spent more than $7000 on parts, so you can certainly call me a fan! This weekend I'm hosting a robot workshop for kids and based on former experience, I suggested that we'd use the mBot robot kits. That suggestion has cost me quite a bit of time, so I'll take this oppourtunity to review of the kit to tell what's good & bad.
I sincerely hope that Jasen Wang (Makeblock CEO) and others will read this review and find it a useful tool to improve the product. At it's current state the mBot offering is unprofessional and not a good product.
What's good and not
Let me get that out of the way - the hardware and the entire kit itself is great! The build quality is solid and the electronics works like a charm. The mCore electronics board is compatible with Arduino Uno so it's easy to use. The instruction booklet is solid & all that is needed (apart from batteries) is included. What is lacking is two things: documentation and software. In the case of Makeblock, they are targeting the Maker Community and especially kids.
When you unbox the robot and build it the first time, it is pre-programmed with three nice modes: Line follower, obstacle avoidance & IR remote. These all work as they should - until the kid tries to do what is the whole intention with the kit - program the robot. When a kit like this is purchased by a non-technical person and it does not work, it's basically just a piece of trash?
Terrible software and documentation
The accompanying booklet is solid, so assembling is easy but then it's time to download software. Following the link to http://learn.makeblock.com/mbot-get-started/ will let you download either the Mac or Windows version of mBlock. This is based on the now abandoned offline version of Scratch and it really shows that the person that made this does not care very much about user friendliness. The main problem here is that mBot will NOT work in cojunction with the original Scratch commands such as "when Flag clicked". It will only work if you pull out the brick marked with "mBot Program" and stack commands beneath this. All other things will fail silently and you will have a kid sitting there thinking that both the robot and programming is stupid.
Most of the examples on the learning site will not work at all since they are based on non-working parts of Scratch. They do more or less also hint at this since if you check the "Arduino mode" menu item, you can see that other commands are being greyed out so why even have them there? They do after all have the entire source code for the Scratch program available, so it would be super easy to remove all the things that does not work. One such thing is that if you by accident check some of the menu items, your entire code will be corrupt since unsupported code blocks are just set to Undefined and are made red. I bet it's less than an hours job to make this program user friendly for someone that knew the codebase. All they need to do is to remove what does not work.
The Getting Started tutorial is also mixing in the Orion board (the larger Arduino-compatible from Makeblock) and that will confuse the users even more. It's just a mess. The Arduino code preview could have been really useful, but since nobody ever cared how it looked like (code formatting wise) it has very limited educational value. Placing a block of Motor control code at the top of all projects (even if it's not using a motor) just makes it messy, but I found the preview very useful when trying to figure out all the bugs in the software. If you've done something and it does not generate Arduino code, it won't work at all.
Oh - this is based on the Mac OSX version of the latest mBlock software (3.3.7). According to Avast Antivirus the PC version of mBlock is infected with malware so I don't feel like testing that just now… It could be fine though, but there’s room for improvement.
Poorly used support resources
The mBlock website also says that if you go to the Makeblock Forum, you will "Learn advanced techniques and get questions answered". This is very far from the truth. Makeblock used to have people employed for helping people on the forums, but for more than a year, practically all questions go unanswered unless they are answered by other community members (not affiliated with Makeblock). Unless they have fired all in their support team, someone is really not doing their job at all. They do however have a support-chat, but imagine how much more effective it was if these people just helped people in the forums? Then they could save maybe 90% of the requests?
There are lots of long Forum threads with unhappy customers that go completely unanswered and nothing happens when it comes to improving the software. This ensures that absolutely none of the customers will recommend Makeblock to their friends. Here's a great example, a user is so frustrated that he creates his own software that is much better than the original. Another example, a user asks how to blink a LED and is sent to an Instructable with incorrect info and defunkt video links. If the person asking tried to use this example with either his mBot or an Arduino, it wouldn't work.
Pin mapping for Makeblock mCore (mBot main board)
What does work is using the mBot with Arduino, but only if you fix some obvious mistakes in the Makeblock library (see below). It is however impossible to figure out HOW to use the RGB LEDs, light sensor, buzzer, button, IR input and other integrated pheripherals in the mCore board. It's just not documented either on the Wiki or in downloadable documents.
The first four ports are well marked on the mCore board itself: PORT_1, PORT_2, PORT_3, PORT_4. These are where you plug in sensors such as the accompanying Ultrasonic & LineFinder module. The remaining pheripherals is a different story. In a classical Chinese fashion, they are not documented at all. If you have been trying to access any of these, here is my unofficial documentation of how to use these:
PORT_6 Maps to the onboard Light sensor (LDR). Use with the MeLightSensor class.
PORT_7 Maps to the two onboard RGB LEDs. Use with the MeRGBLed class.
PORT_8 Is mapped to the Buzzer, but isn't used in any example. Instead you should just use pin 8 to access the buzzer (as in the default Arduino examples)
PORT_9 Is the same as motor 1. This will work with most sketches since it maps to M1. Use with MeDCMotor.
PORT_10 Is the same as motor 2. This will work with most sketches since it maps to M2. Use with MeDCMotor.
The IR receiver looks to be mapped to pin 3 from the schematics, but if you use the MeIR class like this you don't need to think about it.
To use any of the examples in the Makeblock library with mBot, use the PORT values above + replace the include for "MeOrion.h" with:
That should make most things work, but this should of course either be as comments in the code or be documented in the Makeblock Wiki. Sadly, it is not. The way I figured this out was by reading the schematic (that luckily is public) and some testing. Most people would have given up long before that.
It's not getting better
Code quality has gotten much worse over time with regards to Makeblock. I know they are growing, but their team has lost many talented people that actually had decent English skills. Their current support department is an insult. Language is always a problem, but they also lack basic knowledge about their own products. In terms of software, they regularily steal other peoples code and pass it off as their own by removing license information.
Just to name a single class, the MeStepper class is directly stolen from Mike McCauley's excellent AccelStepper library. They have deleted his version history as well as his copyright notice and replaced it with "Copyright (C), 2012-2016, MakeBlock". Unless they have signed an commercial agreement to use his library, this is just incredibly rude and also downright theft?
It's not just his library that have been stolen. Makeblock have a bad habit of republishing other people's code without following the original license that came with it. Not just that - they will also often make it worse than the original. A good example is that if you download and install the current Makeblock libraries according to their instructions, you'll get nothing but troubles. They've included their own versions of several standard libraries such as the Servo library and they didn't even check to see if it compiled. You can get around this problem by deleting the entire "utilities" folder that they include. This folder holds duplicate versions of files that already come with Arduino and they are not meant to be duplicated like this. You must also update the references to these files in some of the other source files:
to the correct:
The above change will remove errors & ensure things work like they should.
I'll manage to make a good workshop with mBot, but this is DESPITE and not BECAUSE of the quality of the Makeblock's software and documentation. I had to give up on mBlock, fix their library, research to find the missing documentation and I ended up using the Arduino IDE since mBlock is in such a sorry state. I'm amazed that they still have not solved these extremely basic problems within their organisation, so I hope this review can put some fire under somebodys butt before they ruin the last remains of credibility they have. Their last Kickstarter Codeybot was a pure consumer product and if they deliver similar quality - the consumers will completely ruin their entire business with bad reviews. They really need to brighten up!
Update 2 November 2016
I just realised that installing mBot screws up your Arduino IDE installation. It distributes a full Arduino IDE inside their app that will be outdated. This may then cause compilation errors. Not the best way to do this either.