Monday, 28 April 2014

ARMazing! (Part One: the discovery)

This post will illustrate some ideas we had regarding the making of a robot arm. We are not looking to create something that looks like the human arm.

Not like this
We want to control the the robot hand in the x, y, z axis. The volume of space that the robot can reach does not have to be huge (it is also restricted to the Leap Motion's interaction space). 
Is it too ambitious to build a robot that has so much 'reachable' space
We had some lengthy discussion on whether we should invest time in making a robot arm. We didn't have any mechanical knowledge accept for Engineering first year Dynamics that most of us have forgotten. 

We found some inspiration online and got a lot of support from the work shop where Andrew and Walter works. We wanted to create something simple but strong enough to carry the weight of the 3D printed hand.

Then we found this:

The 'gripper' that we found could rotate about its wrist and the grip can open/close. It uses two stepper motors. After a handful of hours we found that it was not strong enough. It will not be able to support the weight of our 3D printed hand.

Then Andrew found this for us:

 This is our 'discovery'!

This is the official website. Here is more information about it.

As you can see above, we took it apart and connected the motors  directly to the 12volt supply. The motors work! In the next post we will explore the kind of things INSIDE this robot and find out how we can interface it with the Arduino.

Wednesday, 16 April 2014

3D printing: Shells and Infill (Part 3: Printing the 3D model hand)

Before we begin: In part 1 we described what are infills and shells. In Part 2 we did some testing.

We took what we learned from part 1 and part 2 and printed our 3D hand model! For your information, the 'original' model had 15% infill and 2 extra shells. The 'new' model was set to 0% infill and 1 extra shell. Lets look at the results.

The Main Hand Body
Original: 224 grams (24 hours), material: Red PLA
New: 54 grams (6 hours), material: Red PLA
Comments: The New model was four times lighter, more aesthetic and it took significantly less time to print! The improvement in weight was due to no infills. It looked better since we printed the new model standing (as shown in the pictures) but the original model was printed lying flat at the back of the hand with the palm facing upwards. It took only 6 hours to complete compare to 24 hours because less material was used.
New and Original hand body (Palm side)
New and Original Hand Body (Back of Hand)

The Fingers
Original fingers : 118 grams (13 hours), material: Red PLA
New fingers : 128 grams (13 hours), material: transparent PLA
Comments: The weight had increased and it took around the same time as before.  Furthermore, it looks really ugly. Each individual piece did not have a uniform material density. The bottom half of the printouts were solid (even though we set it to zero infill) and the top half had no infill. You can see in the image (bottom right) that the base is very yellow because transparent PLA turns yellow when it is densely printed, hence solid! The top part is slightly transparent because less material was used. We will probably have to print out another batch!
New fingers and Old fingers
Base was solid while the top has no infill

Conclusion: The body of the hand improved in weight however the fingers did not. Something went wrong and we will investigate further.

Tuesday, 8 April 2014

Controlling a servo

I managed to find the angle of the bending finger by taking the dot product of finger direction and palm normal.




In the Javascript code I am using the math library. Also this method enables to find the angle when you move the finger side to side.



Then I used the Johnny-five library to interface with the Arduino. Hope this video helps you. 
Next Job is to identify each finger. 


Viewing Frame Data

This is regarding viewing a frame from the leap motion. I found this web application, it basically basically converts JSON strings to readable format (JSON viewer). http://jsonviewer.net/



Each frame has x,y,z coordinates of Hand(palm) and the Pointables(fingers). 

3D printing: Shells and Infill (Part 2: Testing)

Before we begin: In our last post, namely "3D printing: Shells and Infill (Part 1: Introduction)" we gave a brief account on what shells and infills are in the context of 3D printing. We intend to use this knowledge to reduce the weight of our 3D printed hand.

In this post we tested the 'shell' and 'infill' function and had some fun with more 3D printing!

Test 1: Rectangular cuboid
Infill: NONE
Extra Shells: NONE
Test 1: We found that it was very easy to break. This was MINIMAL material. We thought that we needed extra shells. 
--------------------------------- 

Test 2: 3D finger
Infill: 1%
Extra Shells: 3 layers

Test 2: The extra shells made it much thicker. It was very tough. The 1% infill was negligible. We didn't complete the print.
-------------------------------------

Test 3: Another 3D finger with external defects Test 3: Broke in half to look inside
Infill: NONE
Extra Shells: NONE

Test 3: Easy to break. Some defects visible and will be a problem. Looks like we need more shells to improve its hardiness. 



Conclusion: To reduce the weight of our 3D models we can have ZERO infill and ONE extra shell. We will attempt to print the 3D hand model with these settings. 

Friday, 4 April 2014

Short update on the IR sensing equipment

Hey all! It's been a while - mostly due to the fact that my subsystem is waiting on the most important parts - VIBRATIONAL MOTORS!

We've purchased them from a US company, but there were a couple of complications in the purchasing bureaucracy that has led their shipping to be delayed. In the mean time, though, I've been learning JavaScript for use in NodeJS, which is what we'll be using in the LeapMotion interface. The source I have been using is Eloquent Javascript, quite a useful resource, and I'll be moving on to Node soon enough :)

Furthermore, I've been prototyping the infrared ("IR") sensors that Ray had left over from some design units from the last couple of years. These work quite well in terms of voltage - an Arduino can easily deal with them. However, there were problems we encountered in the process.

Firstly, the IR emitter itself is not strong. The receiver was not able to pick up the response from it very well. Instead, we substituted an IR LED. This was able to give a much stronger response that we could read from the Arduino. Next, the ambient light of a room can affect the response, and thus needs to be taken account in the code. Lastly, the colour of the object being put in front of the sensor matters as well - black is not a good colour for IR sensing as it absorbs so much of it!

Thus, we used a bit of a hack to work out if it was close to something or near something. See the short code snipped below:

#define IRreceive A1 
int IRinitial;
void setup() { 
Serial.begin(9600); 
pinMode(IRreceive, INPUT); 
delay(100); 
IRinitial = analogRead(IRreceive); 
} 

void loop() { 
long IR; IR = analogRead(IRreceive);
 Serial.print("NUMBER: ");
 Serial.println(abs(IRinitial - IR)); 
}

The initial read of the IR sensor is used to assess the ambient light of the room. This is then used to compare to response we receive from the sensor. The response to most colours is usually higher. However, for black, it does not sense that it has been put close to the IR receiver until it is pretty much covered - in which case it will give an even lower response. Thus the need for the in abs the code.

Once the motors have come in, I'll be working on making these IR sensors send information to them and hopefully emulate some sort of haptic feedback.