Final Project

[ROCKBOT]
the sound in the videos was not removed. enjoy the servo noise.
few months after I proposed my final project sketch idea in the first class, first random pick, here I am delivering a project that while it is not exactly what I proposed, yet it stems from it in much of its essences. Alot of hours have been put since the begining of the semster to try to learn as much as possible about fabrication, electronics and programming, much of which I did not have any prior knowledge in before taking this class. In the last few months, the learnings from the weekly assignments were very useful in paving the way for the final project, testing ideas that could work and others that turned out to be alot more challenging than anticipated. Machine week was also a very useful one week push to be able to present a functioning machine. So I was able to get a head start and debug anticipated errors earlier. Since I did not have a 'studio' course this semester, I decided to put the studio effort into how to make and focus the project into what could be a seed for my research trajectory or inline of thesis.

Now more on the project itself. I was always facinated by the assemblage of objects, especially strange ones. I have to admit that I was never a fan of legos or simple building blocks. Simply it did not excite me. I enjoy strange formal qualities, expressive gestures and intricate geometries. Stemming from that, natural objects [example rocks] hold such qualities. Rocks are irregular in shape, so making useful compositions or structures from them is alot more challenging than regular geometeries. The idea of working with found objects as is could also be part of a larger sustainable idea that rejects or skips the refinements process from irregular shape to familiar platonic rectangles or the like, through both hardware and software.


missing link

missing link

[what does the project do]
the machine senses, measures, picks up and assembles rocks. This is done using capacitive sensors, distance sensors, linear stepper rail, a three-servo-arm delta robot and a custom gripper. Besides, it is build over five microprocessor electronic boards that are communicating over I2C protocol.

before getting into the details, here is rockbot and I competing!!



[happy moment - very.]
sharing the berlow video which was the first time all systems work simultaneously. Indeed, this was a very happy moment seeing things work in action. There is always a doubt that something have been done wrong along the process, either with electronics, design or progamming. It is only when things start to move that success could be somewhat confirmed; and here we are. The noise from the motors across was very fulfiling to hear; it was music.


[recalling week 0 initial idea sketch]
below is the initial diagram drawn for week 0 final project sketch. An exaggerated drawing of a machine that stacks or assembles irregular forms [rocks] into useful compositions. This was initially thought to be done using a scanning hardware or possibily through computer vision camera , which I tried in input week. The end effector was thought to be using a pneumatic pump for vaccumm suction connected to perhaps a sand bag. Following are the changes the idea underwent since them. It makes me happy to see that while things changed int he project, it continued to hold its main core idea despite its challenges that was pointed out since my presentation in the second class [laser cutting week].
missing link missing link

[finalized sktech - updated idea]
as seen below, a single linear axis continues to span between the two ends, here connecting the pickup plate and assembly plate. On the axis, a three-arm delta robotic arm traverses between the two plates. Once it detects an object on the capacitive plate, it slides from zero position in the center to around 20cm towards the capacitive plates sides, the delta here picks the objects[rocks] from one of the six plates before traverssing around 45cm to the left where it drops off the object on the build plate. The end effector changed into a single gear - two shafts with a flexible teeth that are coated with smooth 00-30 eco-flex rubber. The fix teeth on each end has a spring embedded behind its raild to give it a much needed flexibility to be able to grap the irregular forms. Perhaps the most significant change it the detection part. It changed from a camera input to a fusion between capcitive force sensors for location detection, and distance sensor or depth.
missing link


[ the process in detail -->

[the frame]
the frame was made of 60x20mm extruded aluminum profiles. The dimension was chosen based on what material was available at the time. The cba mars shop has a large quantity of that dimension. Since I had flexibility changing the frame's dimension, I updated the design to use the available one. I then used the saw machine at the mars shop to cut the profiles into the required lengths, ranging from 60cm to 14cm.
Using specific brackets / connectors for extruded profiles with T-slot nuts and m5 scews, I put the frame together making sure everything was flat [very important to assemble on a perfectly flat surface and use a level to check each component!]. The deep profile (60mm) gave the machine a mauch needed stability and rigidity.
missing link
missing link
aluminum frame read to home other components. Approximetly less than 2 meters of aluimum was used and around 18 corner brackets.
missing link

for the grounding plane, I decided to use two layers of transparent acrylic to give the machine more depth, and to expose the electronics to exaggerate the "machine aesthetics". Despite wiring looking somewhat a mess, I managed to make them alot more refined using standoffs, exact lengths and the same color [yellow] for almost all wires. On the top acrylic layer, I etched construction drawing lines and diagrammatic zoning to break the scale and to add a layer of legibility and explanation to the machine. This would make it more clear and easier to present to ones who have not seen it earlier.
missing link

a test delta model was placed for testing both machine extents and code. This was done mainly for machine week which I was participating in as a machine maker. Quite a challenge, but it was useful to push the project as much as possible during machine week so that the few days after that I was ready to finalize the project main components and details.
missing link

missing link

missing link

[capacitive force sensors]
as the frame testing was done, it was time to add the electronic components. First, I started with capative sensors, since the ground layer need to be wired, I connected that first and wired the cables into the other end over the aluminum channels. Six capacitive pads, each one made of three layers: two copper plates and a eco-flex 00-30 rubber layer. One of the copper plates is connected to group [the buttom one] and the top layer is connected to two pins, one of which is connected to a one mega ohmz resistor [schematic and designed boards below]. Each pad was double sided with copper with around 2mm thickness.
missing link
the video below shows the initial testing with rocks on one of the capacitive force sensors [a1]. Using usb serial to read the data difference received from the two capacitive and tweek it to average what to expect from the rocks.



[pcb boards production]
selection of boards throughout the semester
missing link


[master i2c board]
while the master board was not requied to do much, other than feeding the boards with voltage, gnd, SDA and SCL for the i2c bus protocal, it was important to have enough memory to be able to transfer data between the boards. The SAMD21E17A was enough to do the job. I left the pins exposed incase needed for another input sensor or output device.
missing link
missing link
Download Files: fusion360 design
Download Files: fusion360 schematic


[capacitive sensing board]
i had to work backwards with this board. Knowing how many pins I can use, I chose the number of capacitive plates. Since each plate requires two data pins and a GND, it was important to know how many pins were available. I chose 6, therefore 12 data pins, for two reasons. First, 12 pins were available, but also because the distance between one pad and another would affect the reading. Therefore, after several testing, the 6 was a good balance between both.
missing link
missing link
Download Files: fusion360 design
Download Files: fusion360 schematic


[delta servo control board]
close to the capacitive sensing board, this board leaves most of the pins to be connected to the 4 servos at the delta robot. The board also leaves multiple 5V and GND pins that are also required by the delta servos.
missing link
missing link
Download Files: fusion360 design
Download Files: fusion360 schematic


[stepper motor control board]
the stepper motor board uses a SAMD2117A and the stepper driver DRV8428 along the required capacitors and potentiometers. It takes two voltage inputs. 5V from the main bus to the microprocessor via the voltage regulator, and 24V from the power board directly to the stepper driver, which takes up to 33V.
missing link
missing link
Download Files: fusion360 design
Download Files: fusion360 schematic


[voltage regulation board]
the power board takes in 24V / 2.5A and transfers it to the main board bus down at 5V using a buck converter. It also gives the the stepper motor power input 24V while it SAMD21 microprocessor gets the required 5V from the main bus.
missing link
missing link
missing link
Download Files: fusion360 design
Download Files: fusion360 schematic


the temporary mess: testing the i2c and power connections
missing link



[break: rockbot]
missing link



gripper
the gripper was an essential part of the whole system / machine because of the nature of irregular forms. A regular gripper would be too general to work successfully on average picking rocks for example. So, I had to work on a gripper mechaism that does two main things. First, it had to have high friction at the points of contact with the rocks. This was done by casting 4mm thick strips of eco-flex 00-30 rubber and addig them to the "teeth" on the gripper. Second, the gripper had to be broken into multiple teeth rather than one large surface. This was particularly important so that the shape of the gripper could deform to parallel that of the irregular form [rock]. 5 teeth on each end was designer with a rail and a spring that gives it a +- 10mm deformation. This meant that almost any rock that fits the capacitive pads average size, could be grabbed.
missing link
missing link>



[programming]
the progamming aspect is what brings the projetc to life. It was not challenging working with either the main board i2c, capacitive sensor or stepper motor. The main challenge was programming the delta robot arms. I planned not to use any libraries [I assume they exisit?] but rather write my own inverse kinematics function. To do so, I had to understand the math, constraints and variable as well as the extents I am trying to reach and servos rotational capacity [in my case 270 degrees]. I started by using my 3d model to set the constraints, lengths and working area extents. Using vectors logic along with the set constraints, I was able to simulate the possible angles between the vertical Z axis and the delta arm. The model has to take into account the delta dimensions as well as the frame. It was a step easier since I was using six capacitor pads only. From here the pickup locations were pre defined. The assembly is decided by two factors. First, the horizontal composition, whether they are stacked in a running bond pattern or stacks. Second, is the averaged height which is determined by the distance sensor for every rock. The array would be incrementally increased after every rock based on that distance, therefore the robot is able to stack the rocks. For the purpose of this project demo, I chose rocks that are somewhat not too jagged. They have some formal variation and unique characteristics, but they don't vary in the XY dimension very much. Thanks to TA Joon from the Harvard section a simulation of this on grasshopper 3d was made.
missing link
source: webpress.com


One note that was strangely challenging is programming the 270 degrees servos to zero position before attaching them to the arm. I missed that the first time, and was zeroing them not the right way the second time, so a third time was needed. You can imagine how many screws and parts had to be disassembled for every servo change.
below is a sample code used to understand the difference between certain elements in the servo library. Whether setting an angle via the .write function, .microseconds or by setting limits in the attach function. You can also see below the different osciliscope readings for each.
            #include 
                Servo servo1;
                Servo servo2;
                Servo servo3;
                void setup() 
                { 
                servo1.attach(3);
                servo2.attach(4);
                servo3.attach(5, 1000, 2000);
                
                servo1.write(90); // set servo to mid-point (90°)
                servo2.writeMicroseconds(1500);
                servo3.write(90); // set servo to mid-point (90°)
                } 
                void loop() {}
            
missing link>

Download Files: Rhino 3D Model
Download Files: Grasshopper Simulation
Download Files: Arduino Capacitive Sensor
Download Files: Arduino Delta Robot
Download Files: Arduino Stepper Motor



missing link
missing link