Phidget Devices
The device our team choose was the Servo Motor, the model number of the motor is HS-422 . which one of the most durable , reliable , high impact resin gear train and high performance circuitry servos is offered by Prof Dr jose Reyes. Most of the time these type of servo are use for or as actuator for different mechanical systems such as the steering control for cars , doors on a airplane, elevator, and many more.
This servo motor is a limited rotation servo that has a range of rotation of 180° at maximum speed of 286°/s that produces 3 kg·cm (.22 IB-ft ) of torque and its required 5 volts of battery to run all that glory.
We did had a lot of problems, to being with our USB wasn’t readable by our computer which we running in virtual box even when we allowed it, so we hard installed the Linux in to our computer. After that we couldn’t add the required library to run phidget devices. Finally, after fix everything we couldn’t get the servo to run we then later on find out that we had run the command as a “sudo” in order to work.
The team member are Fredrick Jah, Farjana Lopa and Prina Presila.
Main command:
Gcc lab5.c -of lab5 -l Phidgets 21
Sudo ./ lab5
Code:
//Lab 5 #include #include //Phidget library int CCONV AttachHandler(CPhidgetHandle ADVSERVO, void *userptr) { int serialNo; const char *name; CPhidget_getDeviceName (ADVSERVO, &name); CPhidget_getSerialNumber(ADVSERVO, &serialNo); printf("%s %10d attached!\n", name, serialNo); return 0; } int CCONV DetachHandler(CPhidgetHandle ADVSERVO, void *userptr) { int serialNo;//Declares Serial number const char *name; CPhidget_getDeviceName (ADVSERVO, &name); CPhidget_getSerialNumber(ADVSERVO, &serialNo); printf("%s %10d detached!\n", name, serialNo); return 0; } int CCONV ErrorHandler(CPhidgetHandle ADVSERVO, void *userptr, int ErrorCode, const char *Description) { printf("Error handled. %d - %s\n", ErrorCode, Description); return 0; } int CCONV PositionChangeHandler(CPhidgetAdvancedServoHandle ADVSERVO, void *usrptr, int Index, double Value) { printf("Motor: %d > Current Position: %f\n", Index, Value); return 0;//Displays motor position } //Display the properties of the attached phidget to the screen. We will be displaying the name, serial number and version of the attached device. int display_properties(CPhidgetAdvancedServoHandle phid) { int serialNo, version, numMotors; const char* ptr; CPhidget_getDeviceType((CPhidgetHandle)phid, &ptr); CPhidget_getSerialNumber((CPhidgetHandle)phid, &serialNo); CPhidget_getDeviceVersion((CPhidgetHandle)phid, &version); CPhidgetAdvancedServo_getMotorCount (phid, &numMotors); printf("%s\n", ptr); printf("Serial Number: %10d\nVersion: %8d\n# Motors: %d\n", serialNo, version, numMotors);//Displays the characteristics of the servo return 0; } int servo_simple() { int result; double curr_pos; const char *err; double minAccel, maxVel; //Declares an advanced servo handle CPhidgetAdvancedServoHandle servo = 0; //Creates the Advanced Servo CPhidgetAdvancedServo_create(&servo); //Set the handlers to be ran when the it is plugged in unplugged or closed , or when there is an error. CPhidget_set_OnAttach_Handler((CPhidgetHandle)servo, AttachHandler, NULL); CPhidget_set_OnDetach_Handler((CPhidgetHandle)servo, DetachHandler, NULL); CPhidget_set_OnError_Handler((CPhidgetHandle)servo, ErrorHandler, NULL); //Registers a callback that will run when the motor position is changed. //Requires the handle for the Phidget, the function that will be called, and an arbitrary pointer that will be supplied to the callback function (may be NULL). CPhidgetAdvancedServo_set_OnPositionChange_Handler(servo, PositionChangeHandler, NULL); //Opens the phidget servo CPhidget_open((CPhidgetHandle)servo, -1); //Waits for phidget to be attached printf("Waiting for Phidget to be attached...."); if((result = CPhidget_waitForAttachment((CPhidgetHandle)servo, 10000))) { CPhidget_getErrorDescription(result, &err); printf("Problem waiting for attachment: %s\n", err); return 0; } //Display the properties of the attached device display_properties(servo); //Reads the data printf("Reading.....\n"); //Initial acceleration and velocity values CPhidgetAdvancedServo_getAccelerationMin(servo, 0, &minAccel); CPhidgetAdvancedServo_setAcceleration(servo, 0, minAccel*2); CPhidgetAdvancedServo_getVelocityMax(servo, 0, &maxVel); CPhidgetAdvancedServo_setVelocityLimit(servo, 0, maxVel/2); //Displays current motor position to end position if(CPhidgetAdvancedServo_getPosition(servo, 0, &curr_pos) == EPHIDGET_OK) printf("Motor: 0 > Current Position: %f\n", curr_pos); //keep displaying servo event data until user input is read printf("Press Enter to continue\n"); getchar(); //change the motor position //valid range is -23 to 232, but for most motors ~30-210 //we'll set it to a few random positions to move it around //Step 1: Begin and engage servo at position 20 printf("Press Enter to activate the Motor and start from position 20\n"); getchar(); CPhidgetAdvancedServo_setPosition (servo, 0, 20.00); CPhidgetAdvancedServo_setEngaged(servo, 0, 1); //Step 2: Position 50.00 printf("Press Enter to go to postion 50\n"); getchar(); CPhidgetAdvancedServo_setPosition (servo, 0, 50.00);//20-50 //Step 3: Position 100.00 printf("Press Enter to go to postion 100\n"); getchar(); CPhidgetAdvancedServo_setPosition (servo, 0, 100.00); //Step 4: Position 150.00 printf("Press Enter to go to postion 150\n"); getchar(); CPhidgetAdvancedServo_setPosition (servo, 0, 150.00); //Step 5: Position 200.00 printf("Press Enter to go to postion 200\n"); getchar(); CPhidgetAdvancedServo_setPosition (servo, 0, 200.00); //Step 6: Position 70.00 printf("Press Enter to go to postion 70\n"); getchar(); CPhidgetAdvancedServo_setPosition (servo, 0, 70.00); //Step 7: Position 80.00 printf("Press Enter to go to postion 80\n"); getchar(); CPhidgetAdvancedServo_setPosition (servo, 0, 80); //Step 8: Disengage printf("Press Enter to Disengage\n"); getchar(); CPhidgetAdvancedServo_setEngaged(servo, 0, 0); printf("Press Enter to close program\n"); getchar(); printf("End of Program\n"); CPhidget_close((CPhidgetHandle)servo);//close the phidget CPhidget_delete((CPhidgetHandle)servo);//delete input data return 0; } int main(int argc, char* argv[]) { servo_simple(); return 0; }