Thursday, November 22, 2007

Test of the Bizchip Servos

Since this time we are using two different kind of servos, thus it is necessary to check the new servos behavior prior to utilising them fully. As such I wrote down the program using PIC to test the Bizchips servos that are used for Base, Wrist, Wrist Rotation and the Gripper.
The reason these four degrees of freedom are chosen is simply because all of them are using a single servo as the mechanism to move.As you can see, I put some remark on S3S4 simply because they are meant for double servos. They would be tested later on since I realized that these Bizchips servos can opened up to more than 180 degree as Futaba S3003. This is meaning that there would be some calculation error for Clockwise and Counter clockwise rotation if I were to use the similar formula with Futaba S3003. As such I will delay the test, and instead I will proceed with the small conveyors installation first.

Wednesday, November 21, 2007

Pick & Place Using 6 DOF Robotic Arm

As the parts required for the Robotic Arm are available already, now we can start to design and built the second RA. This time we are going to built a 6 degrees of freedom RA. This RA will make full use of 6 pieces of Bizchip 13 kgcm torque servos as well as another 2 pieces of Futaba S3003 servos.

Design Concept
There would be two small conveyors that would be use to simulate the actual production conveyors. The first one is supposed to bring the moon cakes and stop at one position, waiting to be pick up by the RA. The second conveyor would carry the empty tray and stop at waiting position. Once both of the moon cake and tray are ready, the RA arm would be initiated from rest position to pick the moon cake and place it inside the tray. The process would continue on and on. In case of emergency, the RA would be reset to rest position and both of the conveyors would stop running. The whole RA body would use aluminum and the base would be moving on 4 roller weight distribution bearing taken from Tamiya ball caster. The gripper would use single movement as for the time being, the making of double gripper would require quite extensive mechanical job.

Design Objectives
The RA should be able to lift the moon cake load to about 260gm.
The RA should be fast enough to work in picking up the moon cake from one conveyor to another and place it inside a tray.
Whenever the emergency button is pressed, the RA should reset to rest position
The moon cake quality should not be affected by RA gripper

Design Constraints
Since the biggest servo could only lift 13kg for 1cm, thus if the shoulder is about to reach 50 cm, then the RA weight must be zero as the 260gm is the required load. Because of this, the weight of the RA should be minimized to allow maximum lifting capacity.
Due to this reason, we planned to use a couple of servos for shoulder as well as the elbow. For the rest of the freedoms, one servo is enough as the length is minimum.

6 DOF
The 6 degrees of freedom are :
i- Base
ii- Shoulder
iii- Elbow
iv-Wrist
v-Wrist Rotation
vi- Gripper

Softwares & Hardwares
As the previous RA, this RA would use Serial Servo Controller (SSC) to run the mechanism. Instead of running directly through a PC, this RA would use a PIC micro controller chip that has been programmed by EPICA hex code where the source code is being written using MicroCode. With this combination, the RA would only need a 9VDC for SSC and 6VDC for the RA servos to run.
As for laboratory prototype, the control of the small conveyors would be done by relays (MY4N & LY2) hardwires. These relays are wired in such a way that they use sensors as input and use their contacts to send signal to the RA to ON and OFF as well as to switch ON and OFF the small conveyors AUTOMATICALLY.
The DC box power supply would be used to supply the DC to the electronics components as well as the relays. As for the SSC, a separate 6VDC power supply would be used as the servos required a higher rating current to work efficiently.

Tuesday, November 06, 2007

Second Stage Parts Acquirement

Servo Motor
Since the Jumbo Servo is not available locally, we decided to purchase the local Bizchip 13kgcm torque servos for seven pieces to built the next working robotic arm that should be abled to lift at least 200gram load. This is the one we purchased for RM90 each.
Ball Bearing Roller
As for the robot base, this time we upgrade a bit to reduce the friction by using the Tamiya roller caster costing RM18 per pair. We used two pairs for our base to balance the load of the robotic arm. This is the one we purchased.

Thursday, November 01, 2007

Mini Robotic Arm Test Run Video Clip



This is the PIC program that is used to run this robotic arm.
'****************************************************************
'* Name : SSC-TEST1.BAS *
'* Author : Nik MJ *
'* Notice : Copyright (c) 2007*
'* : All Rights Reserved *
'* Date : 9/17/2007 *
'* Version : 1.0 *
'* Notes : 9/17/2007 *
'* : Program to test the serial servo controller board *
'* 10/30/2007 *
'* Modify to run 4 servos automatically without PC *
'* (stand alone PIC controller) to lift small *
'* mooncakes from one platform to another at 90 *
'* degree adjacent *
'****************************************************************
'Set Tris State Register A and B
TRISB = %11111111 'Set register B ports all as output
TRISA = 001100

DEFINE OSC 4 'Set Oscillator running at 4MHz

Button_1 VAR PORTA.2

Button_2 VAR PORTA.3
Led VAR PORTA.4

'Loop Sentinel

I0 VAR BYTE
I1 VAR BYTE
I2 VAR BYTE
I3 VAR BYTE
I4 VAR BYTE
I5 VAR BYTE
I6 VAR BYTE
I7 VAR BYTE

'Initalize all servos port out to LOW

LOW PORTB.0
LOW PORTB.1
LOW PORTB.2
LOW PORTB.3
LOW PORTB.4
LOW PORTB.5
LOW PORTB.6
LOW PORTB.7

'Servos

S0 VAR BYTE 'Base
S1 VAR BYTE 'Left Shoulder NOT USED
S2 VAR BYTE 'Right Shoulder NOT USED
S3 VAR BYTE 'Elbow
S4 VAR BYTE 'Left Wrist NOT USED
S5 VAR BYTE 'Right Wrist NOT USED
S6 VAR BYTE 'Wrist Rotation
S7 VAR BYTE 'Gripper

'Servos Default Data Position

S0 = 135
S1 = 111
S2 = 144
S3 = 125
S4 = 127
S5 = 127
S6 = 114
S7 = 40

'Initialize buttons and Led

LOW Button_1
LOW Button_2
LOW Led

Start:

Pos_0: 'Default rest postion
FOR I0 = 1 TO 1000
HIGH Led
S0 = 135
S3 = 125
S7 = 40
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I0
LOW Led

Pos_1: 'Move Elbow downward

FOR I1 = 1 TO 1000
HIGH Led
S0 = 135
S3 = 168
S7 = 40
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I1
LOW Led

Pos_2: 'Close Gripper inward

FOR I2 = 1 TO 1000
HIGH Led
S0 = 135
S3 = 168
S7 = 85
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I2
LOW Led

Pos_3: 'Move Elbow upward (Lift the load)

FOR I3 = 1 TO 2000
HIGH Led
S0 = 135
S3 = 125
S7 = 85
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I3
LOW Led

Pos_4: 'Rotate Base 90CCW

FOR I4 = 1 TO 2000
HIGH Led
S0 = 220
S3 = 125
S7 = 85
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I4
LOW Led

Pos_5a: 'Move Elbow downward

FOR I5 = 1 TO 1000
HIGH Led
S0 = 220
S3 = 145
S7 = 85
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I5
LOW Led

Pos_5b: 'Move Elbow downward (Place the load)

FOR I5 = 1 TO 1000
HIGH Led
S0 = 220
S3 = 158
S7 = 85
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I5
LOW Led

Pos_6: 'Open Gripper outward (Release the load)

FOR I6 = 1 TO 750
HIGH Led
S0 = 220
S3 = 158
S7 = 40
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I6
LOW Led

Pos_7: 'Move Elbow upward (Job finish)

FOR I7 = 1 TO 1000
HIGH Led
S0 = 220
S3 = 125
S7 = 40
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I7
LOW Led

Pos_8: 'Return to default rest postion

FOR I0 = 1 TO 1800
HIGH Led
S0 = 135
S3 = 125
S7 = 40
PULSOUT PORTB.0,S0
PULSOUT PORTB.3,S3
PULSOUT PORTB.6,S6
PULSOUT PORTB.7,S7
NEXT I0
LOW Led

IF Button_1 = 0 AND Button_2 = 0 THEN GOTO Start 'Continue

IF Button_1 = 1 AND Button_2 = 0 THEN GOTO Pos_8 'Hold
IF Button_2 = 1 AND Button_1 = 1 THEN 'Restart
LOW Button_1
LOW Button_2
GOTO Start
ENDIF
IF Button_1 = 0 AND Button_2 = 1 THEN End_Loop 'End

End_Loop:

END


Click here to download this pdf file.

Hangman