Introduction: Domino Stack Bot

Pushing over dominoes is a satisfying activity with an excellent visual effect, but first, we need to stack and align the small pieces manually, which is a very long and tedious process.

We have a solution, we built a robot which does just that! The DSB is a robot that stores dominoes and then stack them in a shape that you define previously. You just have to turn it on and there we go! This will allow you to have all the fun of pushing the dominoes over without the hassle and time investment of stacking them yourself.

Ready to start?

Table of Contents

  1. Project Motivation
  2. Robot Concept & Working Modes
  3. High-Level Design
  4. Design of Sub-Systems
  5. Mechanical Systems
  6. Storage
  7. Slide
  8. Pushing mechanism
  9. Suport
  10. Electronics Box
  11. Circuitry & Sensors
  12. Software
  13. Integration guide
  14. Final Result
  15. Review, Problems & Tips
  16. Sustainability
  17. The Dream Team
  18. Repository

Supplies

The materials you will need for this project are:

  • Arduino UNO
  • Battery (12V)
  • Battery (5V) (or anything that can power the arduino)
  • sg90 servo motor (180 degrees)
  • 2 Stepper motors - we used this one
  • 2 Line sensors
  • Switch - we used this one
  • Push button (diameter = 12.5 mm)
  • 2 LEDs with different colors
  • Castor wheel (diameter = 30 mm) - we used this one
  • 2 standard wheels(diameter = 62 mm) - we used this one
  • Resistors (resistance depends on which colour LEDs you use)
  • Jumper wires
  • Bolts and nuts (M3 and M4)
  • Black tape

You will also need the following to produce the physical components:

  • CAD software - we used Autodesk Inventor; not strictly required but useful if you want to make changes
  • Laser cutter
  • PLA filament
  • 3D Printer
  • MDF

The estimated price to realise this project is €108. Of course, if you already have some of the components, the price will be lower. In attachment you can find the bill of materials & prices for each component.

Step 1: Project Motivation

Everyone loves to see the dominoes falling, and that's why the Endemol's Domino Day, organized from 1998 to 2009 was broadcasted for more than 50 million viewers all around the world! This event would attempt every year for the highest number of toppling domino stones, and in the TV show, the viewers could see the dominoes falling. However, the stacking performance wasn't shown, because stacking and aligning the small pieces manually is a very long and boring process. Take the example of Patrick Sinner, Julian, Jan-Eric, Lukas, Dustin and Christian, a group of teenagers that in 2012 spent 40 hours trying to do the biggest spiral of dominoes!

Wouldn't be easier to have a robot to perform the stacking task?

Mark Rober, a former NASA engineer, developed Dominator, a robot capable of stacking 6.141 dominoes in 1 hour which is now registered in the Guinness Book of World Records. But don't worry, you don't need to be a NASA expert to develop your own Domino Stack Bot. Step by step, we will show you how easy it can be to develop a small robot to stack dominoes, and maybe the next Guinness Records will be yours! 🤩

Step 2: Robot Concept & Working Modes

This is how the robot is going to work:

First, the user has to make a shape they want for the dominoes on the floor with black tape. Then, the users need to (re)fill the robot's storagewith 20 dominoes (the storage is removable to be easier to refill), turn on the robot with the switch, position the robot on the line and press the start button. Like this, the robot will start stackingthe dominoes, one by one while following the black line while the green LED is lit. Once the 20 dominoes are stacked, the robot will stop and wait for its storage to be refilled again, while blinking the green LED, and the users just have to press the start button again for the robot to perform another stacking cycle. If the black line at any moment is not found anymore, the robot will stop and the red LED will be turned on.

Step 3: High-Level Design

There are 5 main subsystems in our robot:

  • Storage
  • Slide (or ejecting system)
  • Pushing mechanism
  • Mobility and navigation
  • Electronic box

The storage stores 20 dominoes and is in contact with the pushing mechanism and the slide. The pushing mechanism will push one domino from the storage and insert it on the slide (or ejecting system). The domino will be stacked by the slide mechanism. The electronics box not only holds the pushing mechanism, but also the buttons and LEDs that allow the robot to comunicate its state and the user to control the robot. All of this subsystems are connected to the base plate of the navigation and mobility subsystems, that keep the robot in movement.

Now, let's develop and test each one of these subsystems separately, and then connect all of them together! The working concepts of each subsystem are explained in the next steps.

Step 4: Mechanical Design (Part 1)

1. Storage

First, we need a way to store the dominoes inside the robot. To do this, we made a vertical storage tube that can hold up to 20 tiles. It is important to note that the storage was designed for dominoes of dimensions 4.4x2.7x0.7 cm, so if you use different dominoes, you will have to adjust the CAD drawings. The storage is made of laser cut MDF plates (laser cut because of the simple geometry and speed), connected by finger joints. It consists of four walls and a platform for the dominoes to rest on. There is a hole at the platform for the domino to be pushed out of the storage and one at the top so it can be refilled. The storage is also made so that it can be easily removed from the base of the robot.

To assemble the storage, laser cut "storage front" and "storage side" twice and "storage top" once. Start by joining the sides and the platform to one of the fronts by tapping them with a rubber hammer. The fit may be too close and some filing might be necessary to accomplish this. Afterwards, add the other front.

2. Slide

The next subsystem is the slide, which has to guide the dominoes from the storage to the floor while changing their orientation from lying down to standing up. It consists of a 3D-printed slide (too complex to laser cut) and four laser cut walls, again joined with finger joints. To connect the slide to the walls, two M3 bolts are used. Just like for the storage the slide was designed for a specific domino size mentioned in step two. Changes have to be made if the dimensions of the domino differ.

To assemble everything, you will need to laser cut "slide box side" twice and "slide box front" as well as "slide box top" once. "slide" will have to be 3D-printed, as well as four copies of the "slide box holder" part, which will be used later to connect the slide to the rest of the robot. Once you have all the parts, take one slide box side and join the front and top by tapping with a rubber hammer. Then, join the other side and insert the slide into the box so the holes at the top line up. Finally, fix them together with two M3 bolts. If the holes in the slide were printed to be too big, you can use one long bolt and fix one end with a nut.

Step 5: Mechanical Design (part 2)

3. Pushing mechanism

To move a domino from the storage to the slide some kind of pushing mechanism has to be introduced. To achieve this, a gear was attached to a servomotor. This servo, as it turns, makes a rack move forward and backward. It is this rack that pushes the bottom domino from the storage to the slide.

In order to build this mechanism yourself, you need to use a lasercutter. The files of the gear and rack can be found below, they are named "push gear" and "push rod alt". If the domino is longer, the length of the rack should be extended. To keep the rack in its position, "rod guide" must be 3D printed twice and "rod guide opposite" once. The files for these parts can also be found below. These components will be bolted on top of the electronic box.

4. Mobility and navigation

The mobility and navigation subsystem has to support the rest of the robot, be able to drive around and follow a black line. To achieve this, mostly connections have to be made. The wheels and stepper motors should be connected to each other. This is done by 3D printing the part "Motor_Connection" twice. Alternatively, you can use two small pieces of a metal rod filed to fit the holes and two spring couplings, though this might lead to poor traction.

To connect the sensors with the base plate, some extensions are 3D printed. These parts mainly make sure the sensors are close enough to the ground to have a correct functioning. The file to 3D print is called "sensor adjust" (4 times).

Of course these different components need some kind of support to be attached to. The support is a simple rectangular plate laser cut out of MDF. In this plate multiple holes for the bolts and rectangular holes for the joints were added. To make it, laser cut the "base plate" file. Additionally, "motor support alt" has to be 3D-printed twice to be able to connect the stepper motors to the plate.

Once you have all the components, assembly is quite straightforward. Bolt the motor support to the steppers and the base plate (try to orient the wires so that they lead to the front of the robot so they can be connected easily), connect the wheels and the stepper motors with the motor connection parts (some filing might be necessary to make them fit) and add nuts in the little holes of the sensor adjusts and bolt them to the sensors and the plate. Finally, you can add the castor wheel by bolting it to the four holes in the middle of the plate, but first add some extra nuts between the castor and the base plate so that the robot is level.

At this point, you can try to test the mobility and navigation system by making a small arduino program (or take a part from the final one, listed in a different section below) that drives the stepper motors and reads the signals from the sensors (LOW is off the line, HIGH is on it).

5. Electronics Box

The electronics box is the core of the robot. It’s placed at the front on top of the support. It includes the electronic components, and for the ones that have to be outside such as the batteries or the power bank, they are directly linked to the electronic box.

To make it, you need the laser cutter again for each side of the box as well as the top cover. Cut both “electronic box side“ and “electronic box front“, which constitutes the 4 sides, twice and the “electronic box top“ file once since it’s the cover. If you use a different button and/or switch, the dimensions of the holes for those may need to be changed. For the cover, the indication markings (START, I, O, etc.) can be engraved or cut, whichever you prefer. Note that you don’t need a bottom because it’ll be directly put on the support. To assemble the walls of the box, finger joints are used so you need to join two sides together, a rubber hammer could help here as well.

The cover will not be assembled the same way with the other parts because it has to be removable to access the electronic components inside. Small L-brackets called "slide box holder", have to be 3D printed four times and bolted to each corner of the cover part and then bolted to the assembled front and back of the box.

While being laser cut, some holes have to be made in the parts of the box. That is, for allowing a few wires to come out for the power supplies. As previously mentioned, in the support there are some holes too for the sensors and the motors wires to come out of the electronic box to the components.

On the top cover outside, Positions for the switch, the button and the LEDs are marked and cut. The servo motor and the rack of the pushing system are also placed on it in such a way that they're in front of the storage.

To add all the necessary components to the top, the LEDs have to be glued and the switch and button can be secured by the nuts they come with. To connect the pushing mechanism, start by bolting down the guides for the rack to the four holes that are in a line and bolt the opposite guide on top of the one closest to the button. Use nuts to secure them all in place. The servo can be inserted into the rectangular hole and then bolted down using the circular ones next to it. Next, insert the rack into the guides and then screw the gear onto the servo, either with one screw directly into the middle of it or two screws that bore into a symmetrical arm that comes with it. The second option is less likely to come loose.

Once the top is filled with the necessary components, it can be bolted onto the side of the box with the L-brackets. You can test the push system seperately to make sure it works by making an Arduino program that moves the servo from 0 to 180 degrees. If there is a lot of play on the rack, a small wall on the right wall of the storage might have to be added so it doesn't get stuck.

Step 6: Circuitry & Sensors

Apart from these mechanical designs, some electronics are necessary as well. First two line following sensors were used, allowing to detect a black line. If one of these sensors go off the line, since there are two, we know what way the robot should turn to get back on the line. To connect the sensors, three cables for each sensor are used. Both sensors should be supplied with 5V (V+) and of course a ground (G). The last cable (S) is connected to the arduino (pin 3 for the right sensor and pin 6 for the left sensor). These pins will be seen as inputs and give a HIGH when the line is detected and a LOW when the line is not detected. This will be used later on for the steering of the robot.

To connect the servomotor, the same three wires are needed: One for the 5V (red), one for the ground (brown) and the yellow for the arduino (pin 10). This pin will be used as output and drives the servomotor in the code. The servo will be used to push the domino out using the gear and rack from the previous section.

The electronics of the stepper motors used need a bit more attention. To work with the stepper, a driver is needed. in our case the stepper driver used was A4988. This driver needs to be connected to a 5V power supply (pin 16 and 15 on the driver) but also to an external power supply of 8-35 V (pin 10 and 9). We chose a voltage of 12V. Aside from these also four pins are used to connect the driver and the stepper (pin 11-14). Two pins of the driver are connected with the arduino (pin 7 and 8). One pin takes care of the direction (8) of the stepper and another one takes care of the size of the step (7). Finally two pins should be bridged (pin 5 and 6). To see which pin is what, an image is added with the numbering of the pins. The order of the cables connected to the stepper is also shown in another picture.

To sum up: for the two steppers four arduino pins are required, 8 wires go from drivers to steppers, 4 wires to the 5V supply, 4 wires to the 12V supply and 2 wires connecting pin 5 and 6. Important remark: in between the 12V and the ground a capacitor with high capacity should be placed as a safety measure. This will limit current changes.

The next step is the leds: to get the LEDs working resistors are required. Depending on the colour the resistance differs. The circuit is as follows: the minus of the led is connected with a ground. After the led the resistor is added. The resistor finally goes to a pin of the arduino (pin 9 for red and pin 11 for green).

The switch is placed in between the 12 V of the battery and the supply to the board where the drivers are placed on. The button is placed in between pin 2 of arduino and the ground.

To recap the arduino should have the following connections:

  • pin 2: button
  • pin 3: sensor right
  • pin 6: sensor left
  • pin 5: step stepper left
  • pin 12: direction stepper right
  • pin 7: step stepper right
  • pin 8: direction stepper right
  • pin 9: red LED
  • pin 10: servo motor
  • pin 11: green LED

Step 7: Software

  • Requirements
  • Design process and considerations of functions
  • Code flow diagram
  • Testing if applicable
  • Provide code, with comments

The code can be seen as the brain of the robot. Based on inputs coming from the line sensors and the button, the code will give commands to the actuators and LEDs. The system will start working once the button is pressed. When the two line sensors detect a line, both stepper motors should be turning at the same speed (to drive forward) and the servo motor should make a full (180°) rotation every certain amount of time to place a domino. All this while the green LED glows to show the robot is working. When one of the line sensors goes off the line, the stepper of the opposite side will be turned off temporarly. This means the robot will turn and come back on the line. If neither of them sees the line, the robot doesn't really know what to do meaning an error output should be given (red LED on). This could also mean the end of the line has been reached, at which point the robot has to stop moving anyway. After 20 dominoes are placed, the robot should be idle until the start button is pressed again.

All this is also shown on the above code flow diagram.

Step 8: Integration Guide

Once you have all the subsystems, electronics and software from the previous steps, you can finally assemble the robot and test it out. Start by assembling all the mechanical subsystems: bolt the slide to mobility and navigation system using the "slide box holder" parts mentioned in Step 4, the short side should be on the base plate. Use a long bolt or threaded rod in the hole that is closest to the slide so that it reaches all the way through the slide box. This allows the slide to rest against it and make sure the dominoes come out of the robot in the right orientation. Next, slot the storage into the four holes behind the slide (some filing might be necessary to make it fit). Do the same for the electronics box using the four holes in the front of the base plate.

Now, to add the electronics to the robot, remove the top of the electronics box so you can reach the inside. Here, the arduino, stepper drivers and wires need to be placed. The wires from the stepper motors, sensors, arduino supply (5V) and stepper motor supply (12V) can be threaded through the rectangular openings on the left and right.

Once all the electronics are in place, you can bolt on the cover of the electronics box and upload the program to the arduino.

Step 9: Final Result

If you followed all the previous steps and with a bit of luck, the robot is now ready to start stacking! To power on the robot, connect the 5V supply to the arduino and the 12V supply to the stepper motor drivers and flip the switch to the on position. Lay out a path for the robot to follow with some black tape and fill the storage with some dominoes. Put the robot on the black line so the sensors can detect it, press the start button and watch the magic happen.

Step 10: Review, Problems & Tips

Problems

The prototype fulfilled all the demanded requirements except for:

  • driving at a constant speed while stacking the dominoes (the robot moves until the desired position, stops, stacks one domino, and drives to the next position)
  • the prototype doesn't have a 12 V battery and needs an external lab power supply
  • the storage isn't as easy to remove as we wished
  • the device is quite noisy

Review

Despite this, we consider our robot a good prototype of the product, since it performs the essential task: to stack 20 dominoes while following a black line in the floor. Additionally, the prototype accomplished one wished requirement: the tidiness boxes! If we had more time, we would make sure all the demanded requirements were accomplished and we would add a feature for the robot to follow a path according to the dominoes color. We could also incorporate a rotary storage with multiple tubes, so that it can rotate when one is empty and move on to the next pile, allowing for more dominoes to be placed.

If we were to make the robot again, we would probably use either a bigger electronics box (it's a tight fit currently) or use smaller/less components. For example, we could use an arduino shield with the stepper drivers already integrated. Aside from that, a stiffer base plate might would have been a good improvement, as it tends to bend under the weight of the stepper motors. In general, we could have also benefited from more testing of subsystems, as some things had to be changed later on.

Tips

Designing this robot of course led to some difficulties that needed to be fixed. Below some tips will be given both specific for our robot but also general tips:

  • Make sure you test every subsystem by itself before adding everything together. Certainly electronics and software should be tested in pieces. If you do not do this and there is a bug in the robot, it is very difficult to know which component malfunctions and how to solve this.
  • The machines used to make the parts are not perfect. Always make sure some tolerance is included to make sure the parts fit.
  • Whenever a lot of wires are placed very close to each other, to avoid short circuits, it is a good idea to put an insulator around the metal parts of the wires that are out in the open, such as heat shrink tubing or electrical tape.
  • Making a robot is trial and error meaning the first design you make, certainly isn't the best. For this reason, make sure you have thought about alternative options if the first option fails.
  • Make sure you have some margin in your planning. When making or designing a robot, there will always be problems you didn't expect.
  • Some parts, like the push gear and rack, could also be replaced with standard parts, which saves time on making them yourself.
  • If there is not enough traction on the wheels, add some weight on top of the wheels. This will increase the traction and prevent the wheels from slipping.
  • Make sure the surface you use the robot on, including the tape, is smooth and stable so that the dominoes don't fall over accidentally.

Step 11: Sustainability

To make our robot as sustainable as possible, we used connections that allow for disassembly like screws and bolts. This way, parts can be reused in other projects (as we did for our wheels) or recycled. We also used biodegradable materials, such as PLA for the 3D-printed parts.

To further increase the sustainability, it might be possible to merge some of the components together so we use less material or we can replace the stepper motors with alternatives that consume less power (the steppers consume about 11 W when at full power).

Step 12: The Dream Team!

🍬 Aya Haddouz, from Morocco, BSc in Automotive Eng, already found the best waffle in the city, but still buys the one from the Fablab vending machine, that currently owes her 60 cents. Aya worked on assembling the electronic circuit and transferring it from breadboard to soldered on a PCB board. She also worked on some connections -which may or may not have been not tight enough and had to be redone. Her favorite part of the project is at the first try of the robot assembled, nothing worked and tons of problems were found.

😺 Elias Thiery, from Belgium, BSc in Electromechanical Eng, you may think he's emotionless ("whatever" is his favourite word), but secretly he takes care of his 3 cats in his free time. Elias made the mechanical design of the slide, electronics box and mobility and navigation subsystems and helped laser cutting and 3D-printing some components as well as optimizing the arduino program. His favourite part of the project was seeing his designs come to life when assembling the robot.

Sara Haro, from Spain, undergraduate in Industrial Eng, screws specialist, stays true to her own culture and always has lunch after 4pm. Sara has faced a big challenge doing this project. However, she is proud of all the new things she learnt thanks to this dream team! She helped with the assembly of the robot , with the weekly presentations and the report. Her favourite part of the project was working in a place like Fablab for the first time in her life.

🍪 Stijn Hamelryckx, from Belgium, BSc in Electromechanical Eng, brings every day the exact same cookies for the lectures' breaks, but thinks Mariana is the one who should be more flexible. Stijn made the code for the entire robot. He also made a big part of the electronics circuit. He also helped with some small other tasks in assembly and connections. The favourite part of the project was when the robot finally started working (sort off) and things started falling together.

📱 Mariana Nunes, from Portugal, BSc in Mechanical Eng, text the other members about the project outside the labor hours, even tho that isn't permitted in her country anymore. Mariana contributed with the code for the individual subsystems. She made the design of the storage and extra boxes, and also helped with the assembly. Her favourite part of the project was (re)thinking about solutions for the subsystems and test them!

Step 13: Repository