Champaign-Urbana Community Fab Lab
University of Illinois at Urbana-Champaign
Champaign-Urbana Community Fab Lab

Author Archive

Iteration Project: Make-a-thon Participation

During the week of the Iteration assignment, I opted participating in the Make-a-Thon.

My team was named “MOVI” and the goal was to design a protective guard for a prosthetic leg. Prosthetic legs are very sophisticated and are extremely valuable. Yet those products are worn at the part of our body with the most movement and thus are exposed to scratches, impact, and lots more other threats in daily life. The reference model, C-leg, cost more than $100K. It has been a pain point among users, especially the active ones. To make the matter worse, people wearing only one of these are told to fell on the prosthetic side when imbalanced. Because, falling to the other side will make it rather difficult, if not impossible, to get up by themselves.

There are some prosthetic leg covers in the market. But most of them are like the same model: a dull thick bulky black cushion covers every section of the prosthetic leg. This leads to a problem, apart from the aesthetics, the back of the prosthetic knee is an area filled with delicate moving parts. The bulky protective sleeve covers that area and makes it very difficult to bend the knee.  


Thus we got the needs of users:

  1. easy for putting it on-and-off
  2. protection against scratches
  3. cushioning of physical impact (mostly in case of a fell)
  4. not blocking knee flex
  5. good looking


Our team started the design with a 3D scanning of the prosthetic leg. The model was then printed using three 3D printers and glued together. 

For the prototype, the team proposed a solution combining a hinge in the front and straps in the back for the top need. The user reported that the phase 1 prototype lacks coverage of the leg. So we created the phase 2 prototype, just to specify the max area of protection that is necessary, considering need 2, 3 and 4. Therefore, we’ve combined the two prototype together and came up with the final design. 

The final design adopted the hinge-straps design and used a two-layer solution for protection and aesthetic needs. A hard shell with patterns is put on the outside. In the future, users should be able to customize and switch the shell for their taste or even the mood at the moment. Two pieces of cushions are fixed inside of the shell. Each cushion used a heavy fabric cover with foam pads inside. To help further protect the user, we’ve inserted a layer of sheet metal between two layers of foam pads inside the cushion. Two extra cushion pads are added to the top for knee protection. Two straps go through holes on the shell. We fixed velcro strips onto the straps. 


Our team was well-paced during the make-a-thon, and each step was well executed throughout the event. After rounds of presentations and expert review, our team got the championship of the competition. 


During the event, I helped in the 3D printing post-process, and led the efforts in the fabric department. Cleaning and gluing the PLA parts were rather easy with the training in class. But I’ve got quite some challenge in the sewing part. I was quite confident before going into it. It was not long before I recognized the challenge. The cushion pad was of an irregular shape, with five corners of varied angles. And there was a significant thickness. For solving this problem, I design the two piece of fabric of different sizes, with all the side panels included in the front piece. While sewing the corners, Duncan gave me some useful tips. Cutting off some fabric inside the corner is key to a smooth outside. I’ve got some of them right, some of them not so. 

Just when I felt a relief finished sewing the cushions, there came the straps. “It’s just an extended square, not so different from the little pouch we’ve done in class!” That thought was so wrong. The fact that we’ve chosen a waterproof rubber coated fabric and a very thin strap width made the task very challenging. Flipping the strap inside out was not far from a mission impossible. It was a combination of stick and brutal force and dedication that helped me finished those two straps.


I am very happy about the results, and the fact that our team has developed something useful in real life. 

Continue Reading

Final Project: PiCrawler

PiCrawler Assembly – Field Test


is my final project for this course. It is a voice-controlled robot that can move in all directions on the ground. 

The robot integrated a Raspberry Pi (as the master for control), an Arduino (as the slave managing servo actions), and a mechanical base with two panels of “legs”. An offline speech recognition module called “Snips” is used for the project. A generated Snips assistant was configured and installed onto the Pi. Then a Python script was coded and set as a native service on the Pi. The script handles internal messages from the Snips assistant and parses them for robot command. The command will be sent to the Arduino using serial communication (USB A male to B male cable). The Arduino will then call servo functions based on the message. Currently, the robot can react to five commands: forward, backward, turn left, turn right, and stop.

The mechanical base was designed using Klann’s Linkage. It has the advantage of smooth progression and heavy load lifting, from the “D” shaped pattern from its legs.  The robot was based on two panels of such linkage, each panel has two sets of legs. The robot can move forward or backward when the panels are all moving in the same direction. And it can make turns when the two panels move in different directions, similar to that of a tank.


Challenge 1: Power Solution

Since I had very limited knowledge of power supply of robots, I decided to take this part of the project first. And it’s proved to be a wise decision.

Each of the servos has a stall current of 1.5 Amps at 6.0 V. The Arduino can be powered with a variety of options. The Pi needs stable 5V and 1.5 to 2.0 Amps for reliable performance. I was thinking a high throughput power bank would be enough for all of these. But after putting everything into a test. It was pretty obvious that even a 15W dual USB output power bank won’t be enough. Then I turned to the idea of auxiliary power supply — using the power bank for the Pi and Arduino (board only), and one to two battery packs of 4x AA batteries for the servos. In theory, two battery packs are needed in a parallel setup, since the AA batteries have a reference current of 1.5 Amps. But in testing, I found that one would be enough for the robot to move. Since the load and frictions were not terribly enormous. 

Power Solution

Challenge 2: Assembly

Proving the movement and leg patterns in software was one thing. But putting everything together and get a useable assembly is another story. With all the printing relief, and those many layers of acrylic parts, and screws, and spacers, I was not very successful in my first attempt. Quite some time were spent on sanding and drilling, reassembling and testing of the linkage. Even getting the screws was a challenge. Because, I used 4mm holes in the design, which would fit M3 screws smoothly. But none of the local stores has enough metric sized screws and nuts for me. So I spent many more hours switching everything to #6-32 screws (from the Imperial size chart).

Legs Panel Testing


In multiple layered mechanical linkage project, extra (I mean, quite a lot extra), precautions should be paid to load balancing, stability, and relief (or spatial allowance). With all the consumer level machines of laser cutting and 3D printing, and all those environmental variations going around, many measurements could go one way or another. And the gears will tilt if the loads are not balanced. There is still a lot to improve of my design. The frame is not stable enough for holding the body. The body design should have put those heavy batteries closer to the center of support. And the gear section needs a redesign, on a certain level, for a stable and smooth power progression. But I did have learned a good deal of lessons from this project.


Test with Voice Command

Continue Reading

Arduino II: Walking Robot


or the second week of Arduino, we’ve learned controlling servos using Arduino. And we’ve been challenged to code different behaviors for two servos. A parallel program. What I came up was this nested loop, with two helper functions. The two servos were not running completely different programs though. They are still linearly related. But a differential function made the two sweeping in different patterns. The trick was to us nested loop and control both servos step by step, rather than wrapping each servo’s behavior in a separate function.

For the locomotive robot assignment, I’ve designed a walking robot with four legs. Inspired by animals like cats and horses. Four legs were divided into two pairs, with two diagonal legs in each pair. The legs push the robot forward by turning the servo backward. While the active pair moves back, the other pair reset to the forward position. And this reset happens when the active legs are perpendicular to the ground, which is the moment when the most clearance to the ground. The coding part was rather simple once the mechanism is designed. The only trial-and-error happened in setting the parameters compensating the rotational orientations for the servos.  

For testing out the concept, I built the chassis (or say frame) first, with the servos and wood sticks only. After powering it up with the arduino, this little walker bot started crawling across my table.

Full Assembly:

The chassis of the walker was rather lean. Good news that there was enough space for mounting all the parts. Several recycled rubber band from grocery helped hold them onto it. With a tiny power bank on the belly and the arduino board on the back, it didn’t take long for everything come together. The walker was ready to walk right after stick the USB cable into the power bank. With all the extra cargo on the robot, it was clear that the robot cannot cross difficult terrain as before, but for flat table and hardwood ground, it walked really well. And the long and stiff serial cable served well as a handle for lifting the robot as well.


Continue Reading

Arduino I: Intro

For the first week of Arduino project, we were introduced into the essentials of the microcontroller, LED controls, and some of its sensors. With the circuit design experience in the Copper Tape project, most of the materials were not that difficult. Although still relied on Google for figuring out the right resistor. I’ve had some Arduino experience years ago, maybe. The lab session was very handy and helped to bring back those almost lost memories.

Triggering one LED within the loop() was easy. But when asked to add multiple reactions, things got a bit different. Because of the simplicity of Arduino, the program is supposed to be a neverending serial process. At a time, I was trying to have two LEDs blink different patterns. But soon I realized that it might need to have some walkaround. Parallel processing might be possible for Arduino, but that’s still out of my capacity. Might be a good point of discussion in class.


For the ideation project, I was thinking about the future of drone deliveries. It would be sweet to know the direction from where they would approach. Maybe not very useful for everyone, but it won’t harm either. And then the notion of a radar system came to my mind–a disk (or other shapes) rotating over and over on a base. Therefore, for the lab’s accessibility, I decided to do a shrunk version based on the availability of materials. Ultrasonic distance sensors on a servo could simulate the most essential form of radar. By periodically rotates the servo, the setup could sense approaching objects with a much wider angle. So in the following week, I’d try this design.

The design has been implemented with UNO x1, servo x1, ultrasonic sensor x2, LED x1, and a resistor. 

The setup was as shown above. The trigger and echo pins from both of the ultrasonic sensors were connected to PWM-capable pins on the board. The code was shown as below. I wrote several functions for this build. The base() function was designed to drive the servo run periodically back and forth. The range was limited to 90-degree because the pin connectors will fight against the servo due to the short arm. This is another shrink from the original sketch. Out of the 360, this ‘radar’ can only scan half of them. So I sliced the two 90-degree sectors into halves–each 45-degree sector represents a geological direction ( North, South, East, and West). This is what the angleToDirection() function was designed for. Then the alarm function was set to be called after each scan, so that if an object is detected within a threshold range,  the alarm (LED) will be triggered. I used both the onboard LED, and another one on the breadboard. Together with single and double blinks, the two LEDs could represent the direction of an approaching object in a very abstract way. Adding to that, I placed a serial output for the alarm message as well. 

As a reflection on this build. The ultrasonic sensors were tricky to deal with. Because it needs to listen for its echo at each step, it is easy to pollute the receiving end with triggers of previous steps. Also, during the test, a delay was necessary each time the servo reverse its rotation direction. Or it tended to generate some irregular signal, could be a false close response, or a far distance. There were a lot of trial and errors in deciding the parameters of the rotation and scanning. But it all worth it.

Continue Reading

Textile Assignment: Sewing and Digital Embroidery

This biweekly project was about sewing machines. For me, it is an interesting area with very limited knowledge/experience before.


Four stages were designed for us to learn the sewing-101. The first one was a very barebone practice: stitch the lines and curves drawn on a piece of cloth.

This stage gave me a hot start on sewing. Stitching feels smooth with the machine. Some reflection out of this experience was that although there are teeth helping to move the cloth while stitching, there is still a great level of freedom for the hands to guide the stitch line. This was a lesson of both bless and curse. It means for getting a beautiful straight line, we need to pay significant attention to the process throughout the operation.

The second stage was a pouch with both an outer cloth and a lining layer. With an extra piece of material, more techniques were then introduced. The old wisdom of hiding the stitch lines was of particular interest to me–stitch two pieces together and then reverse the sewed-together piece inside out. After guided-in the drawstrings with a skewer, I ended up with a useful and not bad looking bag. With very clear step-by-step instructions, I encountered few challenges for getting this pouch.

The third stage was the second lab session, which was about embroidery. This stage brought back some of our learned skills before in the process of fine-tuning the graphic. This mountaineer logo contains 5 colors. In the practice in class, the finished logo looks rather good on the white cloth. But later after I did it again on the yellow cloth for the fourth stage, the gap between the blue sky and the orange ring became more noticeable. It is still fine for classwork, but imagine if this happens for a commercial product. It would look cheap for the brand. This was not reflected in the software planning stage, I’m still not quite sure how to prevent such crack on the finish. Simply extend both colors’ shape has the danger of stacking. Or maybe, I should have zoomed in more in the software.

The last one was quite a challenge. I picked one of the highest difficulty among those pre-approved patterns–a bag with many elements. I’ve made a mistake in choosing the materials. The exterior material was very stiff and the lining was super stretchy. This made the stitching process a total hell. It was almost impossible to lineup two pieces for an acceptable finish. Also, because of the thickness of the yellow material, the button parts can barely hang on. One of them just fell off after one use. This stage taught me alot. Sewing pieces together and create a useful and aesthetically acceptable and durable textile product is not as easy as it looks. Lots of planning and techniques are needed for a good finish.

Continue Reading

3D Printing

The 3D printing assignment is a biweekly project. We’ve learned TinkerCAD and MeshMixer during the first lab session, and 3D scanning during the second. 

Alien on the Wall

For the first project, I used TinkerCAD built the alien-on-the-castle model. The castle was built mimicking a station on the Great Wall. Pretty straight forward–stacking cubes together, cut out the windows, and cut the shooting cutlet on the top. I used the stock rocket man model as the basis for my little alien. Then, after imported the .stl file into MeshMixer, I added horns, arms, and other features from its stock models to the alien. Then I used the sculpture tool for some final finish/smoothing on the details.


Art Piece

For the second project, I chose the third option–turning a famous painting into a 3D model. The original art piece is the iconic portrait of Napoleon — Le Premier Consul franchissant les Alpes au col du Grand Saint-Bernard (The First Consul crossing the Alps via the St. Bernard Pass). This painting projected an idealistic portrait of Napoleon during his campaign to northern Italy in 1800. He led his army crossed the Alps and delivered a surprise attack to the invading Austrian army and further established his status as a liberator and general in Europe. The original art piece was a gift from the reigning Spanish king to Napoleon as a display of goodwill and a starter to improve the diplomatic relationships. The artist, Jacques-Louis David, is a loyal fan of Napoleon himself. Many elements in the painting showed his fond of the rising general. On the rocks in the bottom, he painted the name Bonaparte, Hannibal, and Charlemagne putting Napoleon into the greatest generals hall of fame. The artists portrayed Napoleon on the horse with a posture similar to a sculpture of Alexandar the Great. Such an arrangement, with the flying cloak and many other touches, made Napoleon’s figure glowing in the viewer’s eyes and thus the “short Corsican” is yesterday’s news.

Here for the model, I made a modified version of that painting. The work was done with a 3D scanned upper body of myself, a stock horse model, and some basic geometric shapes. I imported both the horse model and the scanned upper body into TinkerCAD. Then added the torso, right forearm and both legs using primitive shapes with some help of the second working plane and rotations. After imported into MeshMixer, I used sculpture tools smoothed the surface and made joints looked more natural.

I took the design to the MakerLab in BIF. They use Ultimaker 2+ in the lab and PLA as the default material. The entire process took about 4 hours. Cura, the default 3D printing code software at the lab added supports automatically, and a lot was added as a result of the hanging body of the horse. I used the default setting for the printing: 0.6mm nozzle, 20% insert. As shown in the second and third pictures below, it took an hour to remove all the supporting structure. It was difficult for the large portion of supporting and delicate parts on the end, like the two front hoofs.

A Reflection

Crack on Knee

For the modeling part, cracks appeared quite often during the inflation (draw) processes, especially around joints. My solution was to repeatedly inflate and flatten around the crack. 

For example, there was this crack when I was trying to join the two tubes (as the thigh and calf) to create the left leg. It was removed by the repeated treatment in the final model.



And for the printing part,0.6mm could deliver a satisfying satin finish on some surfaces. Therefore, for an easier after work, we should definitely consider this during the design process. It could still be fine for a slightly negative angled surface, but the result would be miserable after a certain threshold. For example, the horse belly is still very good, but the bottom of the arms and boots are really rough. Also, the support generation algorithm might not be the best way to go. I would definitely try to design the support as part of the model next time, especially when there are lots of tiny corners. 

Continue Reading

Copper Tape Paper Circuit

This week, the assignment was about using copper tape to craft three circuits including coin LiPo battery (3V), LEDs, and resistors.

1. Simple Circuit

I named this design the “Sunrise”. It was inspired by the graphic on the piece of paper–a rising sun. The flipped corner is served both as a battery case and the switch. The layout of copper tape is shown in the first photo above, and there are two ports for the tape piercing through to the front side of the paper.

2. Two LEDs with Quote

For the second design, I think this line by the great philosopher Goethe, actually, his last words, fits the scene in a way of beauty. “Licht, mehr Licht”, “Light, more light”. I planted two red LEDs in the back of the paper, one behind each “Licht”.

With the experience from the “Sunrise”, I felt that the back side of the copper tape, with the layer of adhesive, has a lower level of conductivity. So I applied a reversed layer of the copper tape where lines contact. One caveat that I am not quite like was my layout, the far line is put between the two lines of the quote, so there appears a dark black line when it’s activated. Negative for the appearance, I should have thought about the effects from both side.

3. Multi-colour LEDs Layout

Thinking of origami, this old game came to my mind. I planted 2x green LEDs and 2x red LEDs for the design. In a premier testing, I found that 39-ohm resistor will do the work when red and green LEDs are set in a parallel layout. There are two parallel loops, each contains a switch and two LEDs in a parallel setting. The layout is not in a fine form. I used short papercut as a shield for bridging the copper tapes. The two resistors are used as bridges as well. It took me some time finding this functional design.

The circuit layout is shown in the first photo above. But when it’s folded, there will be unintended contact among the copper tapes. So I planted a folded facial tissue for blocking such contact. And it works great in actual playing. Here is a short video (as a gif) showing the design in play.

Continue Reading

Vinyl Sticker

For the vinyl assignment, I’ve tried various techniques. Started with the one in class, simply merging two graphics into a hybrid one. I picked a tiny dragon and a skull for their simple and curvy outlines. Thought it would be cool to have that dragon grow out of the skull.

The end result looks nice and I have put that onto my water bottle.

For the logo sticker, I picked a logo of Star Wars theme. It has three different colours, so that I can exercise my taste of layering vinyl print.

This one took me quite some time in the lab. For a 4 -by-4 print, the letters were really tricky at the time. The hollow areas in letters like ‘P’ was painful. Also, i found that the glossy white vinyl is much harder and thicker the the rest, and the printer was not very well adapted to it. I tried printing it with default setting twice, no way to get it off. Then tried change the blade to 2, instead of 1. Finally made it off the back. Looks not too bad though.

For the final sticker, I picked this owl. Reminds me of DuoLingo. The process in InkSpace was not as smooth as it was for the previous one. Took lots of time manually fixing the outlines. Finalized to a seven layer design with each dedicated to a colour. With practices from the Darth Vader, the assembly took less time and the finish was quite cute.

Continue Reading

Laser Cut Name Tag

During the first lab hours, I made this name tag. The outer shape is mimicking ninja with head cover. The logo in the back was downloaded from the Internet as a vector image. I tried using raster to create shades in the background. But the finish is less than perfect. Although I set the letters of my name as pure black, and the background shades as 50% black (or gray). The burnt effect is not emphasizing the letters from the background. Actually, way different from what it looks like in the software. However, this is a valuable experience, and I enjoyed the process. The burnt smell of the wood was good, as well.

Continue Reading