In this article we will examine yet another product from a bundle sent for review by Snootlab, a Toulouse, France-based company that in their own words:

… designs and develops electronic products with an Open Hardware and Open Source approach. We are particularly specialized in the design of new shields for Arduino. The products we create are licensed under CC BY-SA v3.0 (as shown in documents associated with each of our creations). In accordance with the principles of the definition of Open Source Hardware (OSHW), we have signed it the 10th February 2011. We wish to contribute to the development of the ecosystem of “do it yourself” through original designs of products, uses and events.

Furthermore, all of their products are RoHS compliant and as part of the Open Hardware commitment, all the design files are available from the Snootlab website.

The subject of the review is the Snootlab Rotoshield – a motor-driver shield for our Arduino systems. Using a pair of L293 half-bridge motor driver ICs, you can control four DC motors with 256 levels of speed, or two stepper motors. However this is more than just a simple motor-driver shield… The PCB has four bi-colour LEDs, used to indicate the direction of each DC motor; there is a MAX7313 IC which offers another eight PWM output lines; and the board can accept external power up to 18V, or (like other Snootlab shields) draw power from a PC ATX power supply line.

However as this is a kit, let’s follow construction, then explore how the Rotoshield could possibly be used. [You can also purchase the shield fully assembled – but what fun would that be?] Assembly was relatively easy, and you can download instructions and the schematic files in English. As always, the kit arrives in a reusable ESD bag:

There are some SMD components, and thankfully they are pre-soldered to the board. These include the SMD LEDs, some random passives and the MAX7313:

Thankfully the silk-screen is well noted with component numbers and so on:

All the required parts are included, including stackable headers and IC sockets:

It is nice to not see any of the old-style ceramic capacitors. The people at Snootlab share my enthusiasm for quality components. The assembly process is pretty simple, just start with the smaller parts such as capacitors:

… then work outwards with the sockets and terminals:

… then continue on with the larger, bulkier components. My favourite flexible hand was used to hold the electrolytics in place:

… followed with the rest, leaving us with one Rotoshield:

If you want to use the 12V power line from the ATX socket, don’t forget to bridge the PCB pads between R7 and the AREF pin. The next thing to do is download and install the snooter library to allow control of the Rotoshield in your sketches. There are many examples included with the library that you can examine, just select File > Examples > snootor in the Arduino IDE to select an example. Function definitions are available in the readme.txt file included in the library download.

[Update]

After acquiring a tank chassis with two DC motors, it was time to fire up the Rotoshield and get it to work. From a hardware perspective is was quite simple – the two motors were connected to the M1 and M2 terminal blocks, and a 6V battery pack to the external power terminal block on the shield. The Arduino underneath is powered by a separate PP3 9V battery.

In the following sketch I have created four functions – goForward(), goBackward(), rotateLeft() and rotateRight(). The parameter is the amount of time in milliseconds to operate for. The speed of the motore is set using the Mx.setSpeed() function in void Setup(). Although the speed range is from zero to 255, this is PWM so the motors don’t respond that well until around 128. So have just set them to full speed. Here is the demonstration sketch:

Arduino

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

#include <Wire.h>

#include <snootor.h>

SnootorDCM1;

SnootorDCM2;

voidsetup()

{

Wire.begin();

M1.init(2);

M2.init(1);

M1.setSpeed(255);

M2.setSpeed(255);

SC.dump();

}

voidgoForward(intduration)

// move forward for 'duration' milliseconds

{

M1.run(FORWARD);

M2.run(FORWARD);

SC.delay(duration);// in milliseconds

M1.stop();

M2.stop();

M1.run(RELEASE);

M2.run(RELEASE);

}

voidgoBackward(intduration)

// move backward for 'duration' milliseconds

{

M1.run(BACKWARD);

M2.run(BACKWARD);

SC.delay(duration);// in milliseconds

M1.stop();

M2.stop();

M1.run(RELEASE);

M2.run(RELEASE);

}

voidrotateLeft(intduration)

// rotate anti-clockwise for 'duration' milliseconds

{

M1.run(BACKWARD);

M2.run(FORWARD);

SC.delay(duration);// in milliseconds

M1.stop();

M2.stop();

M1.run(RELEASE);

M2.run(RELEASE);

}

voidrotateRight(intduration)

// rotate clockwise for 'duration' milliseconds

{

M1.run(FORWARD);

M2.run(BACKWARD);

SC.delay(duration);// in milliseconds

M1.stop();

M2.stop();

M1.run(RELEASE);

M2.run(RELEASE);

}

voidloop()

{

goForward(2000);

rotateLeft(1000);

goForward(2000);

rotateRight(1000);

goBackward(2000);

rotateLeft(1000);

goBackward(2000);

rotateRight(1000);

delay(2000);

}

… and the resulting video:

For support, visit the Snootlab website and customer forum in French (use Google Translate). However as noted previously the team at Snootlab converse in excellent English and have been easy to contact via email if you have any questions. Snootlab products including the Snootlab Rotoshieldare available directly from their website. High-resolution images available on flickr.

As always, thank you for reading and I look forward to your comments and so on. Furthermore, don’t be shy in pointing out errors or places that could use improvement. Please subscribe using one of the methods at the top-right of this web page to receive updates on new posts, follow on twitter, facebook, or join our Google Group.

[Disclaimer – the products reviewed in this article are promotional considerations made available by Snootlab]

5 Responses to “Kit Review – Snootlab Rotoshield”

More of a personal subjective dislike of the older ceramic types, not these ones. I will clarify this in the article. They tend to have a poor tolerance, and with some the ceramic material has trickled down the legs, which makes them difficult to bend into a way to fit holes on PCB.

A little off-topic (I understand it’s not the scope of this example): there’s no feedback, how far the robot actually moved. Rotary encoders on the wheel could at least rule out errors by declining battery power, but still can’t account for wheel/track slip.
Do you know if there exists something similar to an optical mouse you can mount to the bottom of the robot that can track it’s absolute movement?

Perhaps an unpowered wheel with the quadrature encoder? An optical-mouse type sensor would be ok if the surface was flat, etc as the same issues as using the mouse on some surfaces would arise. For more perhaps look around at letsmakerobots.com.