Hello!
I am a Master in Design Studies in Technology student at Harvard GSD. My background is in architecture and computer science, and before coming to here, and I worked for a year as a computational designer in an architectural firm as well as a teaching assistant in both departments of architecture and computer science at the American University in Cairo.
Throughout the past year I have been working on projects that attempt to embed intelligence in buildings in both material and space. The former is by researching and designing new passive smart materials that can be used in the building industry as facade systems and potentially large scale roofs and structures that respond to the surrounding context. The latter is by creating a user interactive environment adopting advanced tracking and sensing methods and visualizing them using projection mapping, virtual and augmented reality.
I am a lucky participant of Neil Gershenfeld's "How to Make (Almost) Anything" course at MIT.
Below is the documentation of the class weekly inventions.
        
        
        
        
Project Concept: I am interested in the reseraching in the topic of “Shape Morphing” and “Form Genetics”. I want to experiment on how can a shape change from one state to another for maximum material functionality by giving intelligence to small elements/agents that swarm and self organize to create a variety of bigger more complex structures. I am planing to study various ways to design and mass produce generic intelligent building blocks that could form an infinite number of complex elements in the same way the biological hierarchy works..
Gif from Geometric Shape Mporphing
The project is ispired by the swarming robots in Big Hero 6 and how they can self assemble and transform from one form to anoher.
For now, I am interested in the packing and grid structures that the particles form but not necessarly the form of the modular robot. I started by writing a grasshopper definition of grid of polyhydra that can get assemble in various ways and dencities creating different forms like voxels.
The next step was to see the asthetic of this polyhedrom module. In the future I would be interested in the module being in form of a ribbon/long member that folds. So I deconstructed the polyhedron into a wireframe one to give the same idea of my final project.
I aggregated the polyhedra in 2 ways. One by connecting the hexagon sides together:
The second way is by connecting the square parts together, resulting in a denser structure.
The next step will be studying a way to program the connections between the faces to make the geometry want to aggregate in a way and not another. This Week's Mission: Press Fit Construction
I will explain below how I built a 3d polyhedron grid.
This week we learned how to use a laser cutter and vinyl cutter to take advantage of computer controlled cutting. The assignment was to test different tolerances of cuts using the laser cutter, and create something formed by press fit construction and cardboard.
The first step was to unflatten the polyhedron. Then, I strated creating the fringes that will help the polyhedron close on itself.
I then managed to do this reach this prototype:
I had to do a couple of other trials to fix the size of the fringe and when i reached the right size the next step was to created parts that will help in holding different pieces together.
After I managed to fix the connection with the right size and length. I developped the prototype to a more advanced one with various rotations to create maximum flexibility in connecting the pieces together.
Finally I reached the final prototype for this week!
Vinyl Cutting: Logo Sticker
For the vinyl cutting assignement I decided to do something unrelated to my project as I cut the Harvard GSD logo to put on one of my folders.
I first saved the logo in high resolution then uploaded it and calculated the toolpath to make sure everything will be ok.
Then I cut and removed the vinyl piece.
Because the sticker was very thin, I had to used an intermediate sticky surface to remove it without being torn.
Then I applied it to the folder!
This Week's Assignment: PCB Production
This week we learned how to create the FabISP in-circuit programmer from scratch.
We learned all about the electronics and printed circuit board (or PCB) fabrication. The different components of the process ate:
1. Milling: Use the Modela and shopbot CNC to mill a circuit design onto your PCB board.
2. Stuffing: Solder small surface mount components.
3. Programming: Activating your ciurcuit!
I tried two different designs with a lot of trial and terror. The first one is the hello.ISP.44 hello.ISP.44.res.cad board , which is designed for production within a FabLab. The second design is Andy's FabISP
Step 1: Milling
I used the Shopbot to mill the designs. The first this was to calculate the toolpath using Fab Modules to first engrave the traces and then cut the outline.
I used the shopbot to mill the two designs.
Step 2: Soldering
Next comes the soldering! I collected all of the components and labeled them carefully in my notebook. The main microcontroller is the Atmel ATTINY44A.
Next, I organized all of the necessary tools into a workstation, which consisted of a soldering iron, solder, solder wick, circuit schematic, vice clamp and a multimeter.
Then came the actual soldering!
I practiced the soldeing techniwues first on a board that wasn't milled corectly. There are differnet soldering techniques that I tried. The one that did not work well with me is putting a lot od solder and then remove the excess using the copper braid. It didn't work at first as I didn't master the technique that much, so it was easier for me to do precision soldering from the beginning. What I liked most about soldering is that if you make any mistakes, you can always desolder and try again!
Finally, after much soldering and desoldering my boards were all done!
Step 3: Programming
Now was the moment of truth, to test if my boad has been fabricated properly! To program the ATiny44 on the FabISP board, we needed another in-system programmer.
The process is fairly straightforward:
1. Plug the board to a USB for power.
2. Plug the board to the AVRISPmk2.
3. Load the firmware:
i. make clean
ii. make hex
iii. sudo make fuse
iv. sudo make program
The program didn't work from the first time. I had to use the multimeter to find the problem and solve it. It turned out to be a short because of excess of solder!
Ans it finally worked
the last component of this week is to do the wire with the destressing technique.
I hope you enjoyed this "How To!""
This Week's Mission: Design and 3D print an object that can only be made additively.
3D Printing
This week I learned about all about 3D scanning and Printing. To goal is to make something that highlights the capabilities of additive manufacturing. I used formlab to 3d printed a model of Hod Lipson's self replication robot.
I started by a small print to test the formlab printing. I used the clear resin, however the model didn't turn out to be working because of it was so small and the silicon bed was not clean and it turned out it needed to be changed, or the print should be shifted to the side.
I tried again with a bigger scale and the white resin. this one was way better, but still the gaps needs to be bigger as only one ball connection managed to rotate.
3D Scanning
TI tried a several trials to scan, first i tried on a random rock i found and it was successful.
Then I tried to scan the 3d prints trials I made to see the tolerance. The 3d scanner didn't detect at all the clear piece.
I found out as well that it had problem with the color white. It failed at first to do a full scan. However i managed to get around that By putting it on a bottle so it would track it properly. It worked but it would need some post processing to remove the bottle from the scan result.
This Week's Mission: Make something big!
This week is all about using the ShopBot to CNC mill. The bulk of what I learned this week is in how to translate a 3d design into toolpaths, how to use a machine to cut the parts precisely, and lastly, the process of post-processing and assembling the parts.
Designing Something Big and Transformable
For this week's assignment i wanted to do a dynamic piece of furniture so i chose a piece designed by Robert van EmbicquesI first modeled the piece parametrically using rhino and grasshopper.
The first step was to prepare the cutting files on Pathworks 3d. I had to incomporate tabs for the pieces not fly off.
Now that the design phase was complete, it is time to start milling. The FabLab has an excellent guide on how to use the ShopBot. The basic workflow is as follows:
1. Convert CAD drawing to .dxf and load into PartWorks 2D, which is a software program that generates toolpaths for the ShopBot CNC mill.
2. Using PartWorks 2D, generate a tool path.
3. Refine toolpath by adjusting cutting parameters, which are Pass Depth, Stepover, Spindle Speed, Feed Rate, and Plunge Rate.
4. Generate toolpath, save toolpath.
The next steps involve setting up the ShopBot itself:
5. Select the right collet for your tool, thread collet holder into spindle, and use a collet wrench to snug collet into place.
6. Add the dust collection skirt (also lovingly known as ShopBot's Mustache).
7. Insert key attached to collet into control box to turn it on.
8. Important! Press blue button to reset drivers so that the machine will talk to your computer!
9. Fix the material to be cut onto the bed, preferably securely with screws.
10. Now it is time to zero the cutting tool on X, Y, and Z axis.
11. Set spindle speed.
12. Turn on dust collector.
13. Load toolpath commands.
14. Put on the safety glasses.
15. Press green button to start spindle.
16. Press ok to start cutting.
17. Get pieces and vaccuum the bed of dust and scraps.
After the cutting was done I had to sand the pieces firts as much as I can.
The next step was to drill holes in the top pieces for the mail rod as well as in the connections.
Next I started the assembly process.
Here are some pictures before painting it.
I spray painted it in black and it turned out very nice!
And that concludes this week's adventure in Computer Controlled Machining!
I hope you enjoyed this "How To!"
This week was my first trial into electronics design. I found a lot of useful references and tutorials, including SparkFun Guide and Eagle's Guided Tour. I also studied Tiffany's approach in designing the circuit.
After reading all about components and learning how to use Eagle, I started the design!.
The first step was the draw the schematic of the circuit on Eagle. Once the lines started to be very dense and not readable I strated using labels to make it easier and more readable.
This was followed by laying out traces of the schematic on a board. This can be challenging, trying to find enough room for paths that don't overlap. I used photoshop to fix the traces and create the monochrome pngs of the traces and the interior.
The next step was to mill the board using the shopbot.
Then I listed all the components and put them on a sheet of paper.
After precision soldering, here is my final piece!
And that concludes this week's adventure in creative circuit design!
I hope you enjoyed this "How To!
This week we learned all about molding and casting. I used the same idea of the 3d printing assignment (chain modulular robotics) and texted the same geometry. Below is a diagram showing how the form was generated as well as the molds. I designed two modls for two of the pieces. I had to use a different technique to design the mold to cast both concave and convex forms.
After the the design was finalized, it was time to import the .STL file to ShopBot Partworks3D.
After the toolpaths have been generated, it is time to set up the mill. Glue your block of wax to a peice of OSB with a bead of hot glue along the edges. Drill the OSB to the mill bed. Zero the bit to the X and Y origin of your block.
Here is a gif the wax being milled.
The surface was very smooth and perfectly milled.
My first mixed batch had way too many bubbles. Lucky for me, we had a vaccum in the shop, which was very effective and a lot of manual vibration to release trapped air.
The first mold was straignt forward, I just casted the silicone, but the second piece needed to be cut and glued to the other hald. I did that by using the heat gun to melt the wax and glue it to the other side.
And here is the silcone flexible mold.
My first cast was with the drystone. I had some problem pouring it into the closed mold but it finally worked.
Here are pictures of the final pieces!
And that concludes this week's adventure in Molding and Casting!
I hope you enjoyed this "How To!
After a lot of trials it finally worked!
I found this week's programing tutorial to be useful I used avrdude to send the C program. Here are the commands I used:
avrdude -p t44 -c usbtiny
make -f t44.make
make -f t44.make program-usbtiny
I wrote the C code from scratch to do the blinking light. Here is it:
// ------- Preamble -------- // #include < avr/io.h> #include < util/delay.h> int main(void) { // -------- Inits --------- // DDRB = 0b00000100;
// ------ Event loop ------ // while (1) { PORTB = 0b00000100; _delay_ms(20); PORTB = 0b00000000; _delay_ms(20); } return (0); }
Finally, here is the video of the blinking light:
And that concludes this week's adventure in Embedded Programming!
I hope you enjoyed this "How To!
I started to think about the different modes of actuation I could use for my project to move the small agents. The three options were heat, vibration and magnetic. I though magnetic actuation was more interesting to start with and I will try the rest next semester in my thesis.
I started first by design a board to actuate three eclectromagnets. Since I didn't want to buy the electromagnets I stated by getting screws and cover it with the magnetic wire. Here is the schematic of my board
The next step was to mill and stuff the board.
Debugging and testing tooK a lot of time as my board had a lot of problems. The N mofset got fired a couple of time because the coils.
I tried different sizes and they all acted differently. The coil shouldn't be too thin because it gets hot. it should have a resistance big enough not to draw too much current in the N mofsset.
At the end I managed to get a small acctuation of the metal balls. It is shown the below video.
And that concludes this week's adventure in Output Devices!
I hope you enjoyed this "How To!""
For this week, my objective was to read a distance measurment in an accurate way because I will need that in my final project. Therefore, I first thought of implementing the sonar sensor, however, it will need for the obejct to be facing the the sensor I however will be sensing objects from all directions. Therefore, I decided to try two of the sensors: the magnetic field sensor and the step response (distance between the two plates).
I chose the magnetic field sensor because I will be able to detect objects form all directions (even form up and down) as well as the direction (negative or positive). I however will still have a problem in detecting more than one object. Therefore, I thought that for the final project I could have a series of plates and create a base for the agents to be walking on to track them.
I implemented Neil's hello.mag.45 and hello.txrx.45:
The next step was to program the boards, it is very similar to the embedded programing week, however the next step is to receive the sensor readings from the board and visualize it using python. You first need to know the name of the usb port name and then run the python script.
the magnetic sensor worked perfectly from the begining.
I had problems with the other one and I had to use Rob's bogo pin to program it and it finally worked!
And that concludes this week's adventure in Input Devices!
I hope you enjoyed this "How To!
This week we learned all about creating large light stuctures using composites. I decided to do experiment and do part of the a chair I am making with Gabriel Munoz Moreno for a GSD class "Hybrid Formations". We are making a chair using aluminum sheets. We are planing to mill molds of the form out of wood and use the robots to form the sheets.
We've done a cardboard model of the chair but I thought it would be cool to do a small model of the chair using composites as a proof of concept as there are similarities between the two fabrication techniques.
I started by created a positive and negative form of the three layers of the leg as to see which method will be more succesful and for them possibly to close on each other.
The next step was to mill the form. I decided to scale the model down as I was constrained by the CNC machine bit length and the width of the foam. So the maximum depth was 3 inces and I scalled everything accordigly. I had to glue to layers of foam together and I had to use the vaccum bag to speed up the gluing process.
Then I created the toolpath and milled them using the shopbot. I used only on smoothing path bevause of the time but it turned out pretty nice.
Unfortunately because it was so scalled down I wasn't able to use the negative mold. I wanted to use it as it would have given me a nice finish on the exterior (the side facing the foam) but it was too steep for the vacum bag to get inside. The two parts did fit together but it would have need a lot of sanding and precision to do it that way. Therefore I decided just to use the positive mold.
I covered the milled foam with plastic (release layer) and used pins to put them in place. My plan was to laser cut the linen pieces and put them in place however I heard that the linen doesn't get that well cut with the laser cutter and leaved weird edges so I decided to put bigger pieces and the cut them after they cure.
I used two layers of linen and used the epoxy as instructed in the problem session. Then, I put a cotton layer to absorb the extra eposy followed by another plastic layer that had holes in it to pass the extra epoxy. Then I vaccumed out the air of the bag to create the pressure need to let the linen in place.
I left it cure for 8 hours then removed the piece from the bag.
The next step was to cut the pieces (I used first the bad saw to cut the outer parts then I used sissors to cut the rest).
And here are photos of the final piece! I will do the same process for the other two legs.
As an update on the chair, I used a simlar technique to first mill big plywood molds of the legs. Then, I designed the toolpath and we used the robotic to research how effecient it will be.
And here is a photo of the final piece!
And that concludes this week's adventure in Composites!
I hope you enjoyed this "How To!
This. tutorial was very useful as a first step in learning how to open and read data form serial port in c# in unity
I implemented Neils hello.mag.45.py in C# to get the magnetic field value. I tried to make the visualization related to my project theme: shape morphing. So I wanted to voxel to fly around and form a sphere or cube accroding to the magnetic field values. Here is the final code:
using UnityEngine; using System.Collections; using System; using System.IO.Ports; using System.Threading; using System.Collections.Generic; using System.Collections; public class SerialHandler : MonoBehaviour { public delegate void SerialDataReceivedEventHandler(string message); public event SerialDataReceivedEventHandler OnDataReceived; public string portName = "/dev/tty.usbserial-FT9KZ1P0"; public int baudRate = 9600; private SerialPort serialPort_; private Thread thread_; private bool isRunning_ = false; private string message_; private int byte2=0; private int byte3=0; private int byte4=0; private int byte1=0; private double nsamples=100.0; private double low = 0; private double med = 0; private double high = 0; private double value = 0; private List
spherePos = new List (); private List cubePos = new List (); private int sphereCount = 0; private int cubeCount = 0; private int voxelCount = 0; [SerializeField] private GameObject voxelPrefab; private bool isNewMessageReceived_ = false; void Awake() { Open(); } void Start() { Vector3 center = new Vector3 (0, 0, 0); Vector3 tempScale = new Vector3 (1.0f, 1.0f, 1.0f); float radius=8; for (float i = -radius; i < radius; i++) { for (float j = -radius; j < radius; j++) { for (float k = -radius; k < radius; k++) { Vector3 tempPos = new Vector3 (i, j, k)+center; cubePos.Add (tempPos); createPrefab (voxel, voxelCount, tempPos, tempScale, "Sphere", voxelPrefab); voxelCount++; cubeCount++; } } } radius=10; for (float i = -radius; i < radius; i++) { for (float j = -radius; j < radius; j++) { for (float k = -radius; k < radius; k++) { Vector3 tempPos = new Vector3 (i, j, k)+center; float distance = Vector3.Distance (center, tempPos); if(distance <= radius && sphereCount>=cubeCount) { //cubePos.Add(center); } else if (distance <= radius) { spherePos.Add (tempPos); voxelCount++; sphereCount++; } } } } Debug.Log (spherePos.Count+","+cubePos.Count); } void Update() { for (int i = 0; i < cubeCount; i++) { GameObject tempGO = GameObject.Find ("Sphere" + i); double mappedX = map (value, 0.0, 1000.0, cubePos [i].x, spherePos [i].x); double mappedY = map (value, 0.0, 1000.0, cubePos [i].y, spherePos [i].y); double mappedZ = map (value, 0.0, 1000.0, cubePos [i].z, spherePos [i].z); tempGO.transform.position = new Vector3 ((float)mappedX, (float)mappedY, (float)mappedZ); } if(Input.GetKey(KeyCode.LeftArrow)){ } if (isNewMessageReceived_) { //OnDataReceived(message_); //OnDataReceived(total1.ToString("g") + "a"+ total2.ToString("g") +"a"+ total3 .ToString("g")); } } void OnDestroy() { Close(); } private void Open() { Debug.Log ("here"); serialPort_ = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One); serialPort_.Open(); Debug.Log("open the port "); isRunning_ = true; thread_ = new Thread(Read); thread_.Start(); } private void Close() { isRunning_ = false; if (thread_ != null && thread_.IsAlive) { thread_.Join(); } if (serialPort_ != null && serialPort_.IsOpen) { serialPort_.Close(); serialPort_.Dispose(); } } private void Read() { while (isRunning_ && serialPort_ != null && serialPort_.IsOpen) { try { if (serialPort_.BytesToRead > 0) { byte1=byte2; byte2=byte3; byte3=byte4; byte4=serialPort_.ReadByte(); //Debug.Log("data is coming" + byte1 + ":"+ byte2 + ":"+ byte3 + ":"+ byte4 ); if ((byte1 == 1) & (byte2 == 2) & (byte3 == 3) & (byte4 == 4)) { low=serialPort_.ReadByte(); med=serialPort_.ReadByte(); high=serialPort_.ReadByte(); value=(256.0*256.0*high + 256.0*med + low)/nsamples; Debug.Log("value"+value); //422,1017,0 } isNewMessageReceived_ = true; } } catch (System.Exception e) { Debug.LogWarning(e.Message); } } } public void Write(string message) { try { serialPort_.Write(message); } catch (System.Exception e) { Debug.LogWarning(e.Message); } } double map(double s, double a1, double a2, double b1, double b2) { return b1 + (s-a1)*(b2-b1)/(a2-a1); } }
This is a video of a live stream of the magnetic field data visualized in Unity!
And that concludes this week's adventure in Interface & Application Programming!
I hope you enjoyed this "How To!"
I started to design the main boards and the nodes similar to Neils example boards. Here are the boards with the components.
I started milling the boards.
the next step was stuffing them!
The next step was testing the connection. I used Neil's code as a base and gave each board 3 IDs. When they receive the ID, the correspendent led turn on and if not it will be off. I used coolterm to debug and send and recieve from the serial port.
Here is a video of it working!
And that concludes this week's adventure in Networking and Communication!
I hope you enjoyed this "How To!""
For the machine building week we decided to do a 3d glue gun extruder. We started by sketching the layout of the modules.
We were divided into 3 big teams. Laser cutting, assemble and electronics.
I was part of the assembly team as well as the laser cutting. Sophia and I stayed longer to connect the pieces together for have them ready for the electronics team.
Unfortunatley, according to the lectronics team our piece disappeared from the CBA shop. We later found out that someone took it and left in the Harvard shop which made the electronics team unable to finish their part.
And that concludes this week's adventure in Modular Machines!
I hope you enjoyed this "How To!
Project Concept: I am interested in the reseraching in the topic of “Shape Morphing” and “Form Genetics”. I want to experiment on how can a shape change from one state to another for maximum material functionality by giving intelligence to small elements/agents that swarm and self organize to create a variety of bigger more complex structures. I am planing to study various ways to design and mass produce generic intelligent building blocks that could form an infinite number of complex elements in the same way the biological hierarchy works..
The project is ispired by the swarming robots in Big Hero 6 and how they can self assemble and transform from one form to anoher.
I have been working in a computer science class on reseraching the use of collective artificial intelligence for the 3D geometric assembly and dis-assembly of modular robots/agents. A new emerging trend in robotics is to move away from the design of complex application specific robot to the design and use of a large, generic, simple and inexpensive ones. Here are screen shots of what I managed to achieve.
My first attempt of the thinking about the project is to design and fabricate small effecient modular robots. There has been a lot of great examples of there robots. I howerver wanted the agents to be more simple and cheap by removing the actuation from the robot itself and controlling the agents/elements remotly. The three options I am thinking about is controlling them either by vibration, thermal energy or magnetic field.
After a bit of research, I chose the electromagnetic magnetic fields as the external source of actuation for the robots. I searched around and there are two projects that will be my major inspiration for the project. The first one is the media lab's actuated workbench as well as the following project:
I started the first trial to scetch the major components of the project. The copper coild are used in order to createand control magnetic fields. I however wannted to add a layer of hal magnetic sensors on the top as a feedback of how the agents move in attempt to make it a closed loop design.
Since I started the project late. I had to really plan good the remaining days. I decided to divide the work into these sub categories.
I looked around in previous projects in How to make. I found that Daniel and Tiffany had similar projects. As a first attempt I tried to refabricate the main 3 coil board as to get accainted with the challenges and as a "eagle" excersice as I have been struggling in it in the previous weeks. More about the process in the output and networking week.
In order to fabricate the electromagnet i had to winder the coils using a drill as I didn't have access to the wire winder. It was pretty straight forward.
I was told I am supposed to isolate the coils. I added a layer of electric tape first before starting with the wires. It is important to keep track of the start though.
I decided to design a wooden box that would have built in carved spaces for the elevtronics and strong enough for all the components.
I got the CNC toolpath file using Pathworks 3d and started milling the rough and finishing toopaths.
I laser cut the top parts for the swarming balls and the sensing
I chose to vinyl cut part of the sensing circut as it would be apparent from the top of the magnetic table. I used different techniques to aplly the thin cut vinyl traces on the plexi than the ones in the bottom of the box.
To program the board, I had some trouble understanding Neil's code at first. I read the data sheet and managed to get the MUX value of the pins. This table helped me n programming.
I used Neil's python code to debug.
As for the assembly of the project, it took a lot of patience and precision. I painted the box black first to look elegant and then started by soldering and connecting the traces of the electromagnetic pads.
Then I started by drilling in the first electromagnet and connecting the wires to the pads by sending its endings first.
The project patiently came together.. Here are photos of the final box.
For the project, I mainly elements from the fab inventory. I also bought some extra stuff:
I tested and troubleshooted my project a lot. Here are some of mu conlcusions. The Magnetic field on each pin on its own works. The problem is that it is not strong enough to drag an object from one pin to another. There seems to be a weak magnetic field embedded in the coild even if the coil isn't on. There is a lag which makes it difficult to be that accurate in the movement.
I was and am very intersted in studying the behaviour of a group of ball bearings, I am interested to know which forms are they gonna form, who will move first. The problem is that the shape will settle once it is connected to another coil. However continying my thesis direction from this direction (studying where does the agents want to go than where to direct them) will be the best choice to make!
The feedback sensor resonse will definetly be very useful for me in my thesis. Knoing the behaviour and the real oposition of the agnets is defintly valuable.
Here is a combined Video of my final project!
Thanks for reading my ongoing progress on my final project.
I hope you are enjoying the insights into the creative process!