Skip to main content

got the servos, got them working



The servos were delivered today, and I started working on them once I came back home from work. 

The initial set up I had with RPi.GPIO was... a failure. 

When connected, the servo would just twitch and continue to groan with uncertainty about where it should position itself. 

Wanting to see what it should actually do, I fired up my Arduino that's been inactive for quite some time, connected the servo and loaded up the Servo library. It worked like a charm. The difference between a real-time PWM and a soft PWM was very visible. 

For a while, I was thinking about maybe using the Arduino as the servo controller and have the Raspberry Pi just send a single high signal that would trigger the Arduino to move the servo. However, the extra size and power that would be required put me back to my senses.

I have to say I was pretty discouraged. It was probably because I was really expecting whatever I had implemented to work right off the bat. After eating a late dinner, I pushed myself to try more. 

I tried installing the WiringPi library, but after reading about it, it didn't seem much different from RPi.GPIO, so I didn't bother to use it. 

I then thought I should maybe install the Occidentalis OS that is developed by Adafruit, seeing how it comes with servo kernels. Felt like starting from scratch (at least in the Raspberry Pi side) should be a last resort option, so I decided to try to find something else. 

Finally, I landed on ServoBlaster. It relied on writing a duty cycle value to a location in the system, but it worked smoothly, and beautifully. It also did not need to constantly drive the servo a constant signal but activated only when the position was changed (with a timeout value in the initialization parameters). 

echo 5=70 > /dev/servoblaster 

The "70" is the amount of time the signal will be high. The cycles are counted by 10 us (microsecond), making the "70" 700 us, or .7 ms. This would put the servo near the 0 degree position. 

echo 5=230 > /dev/servoblaster

This would put the servo near the 180 degree position.

Had to use system calls through the os module, but once implemented, it finally works.

Comments

Popular posts from this blog

playing with servos

some servos that I had ordered were delivered. the instructions suggested another brand/model of servos, but these were a much more economical (cheap).  I tried adding them to the hand: I'll have to print the "pulley" pieces that will be attached to the servos. meanwhile, I did somewhat (hackily) got the wrist to work, for now: you keep hearing the "usb plugged out" sound in the background, and that's because the servo was being powered by the arduino. the servo's power draw appears to be causing a shutdown of the device. will need a better power source for the servos. it feels like these pieces that are supposed to be plugged into the servo will have size issues. 

dabbling with android

I've been wanting to dabble with Android development recently, and yesterday I realized that there is a Socket.IO client API available for Java/Android. The API is pretty straightforward, so I loaded a test Android project I had made for going through Android basics and connected to the OpenSesame Node server. and it works! I mean, the interface is non-existent and it's really just bare-bones, but having the servo respond through an Android application was pretty refreshing. (the web client and the android client "communicating" with each other--messaging is pretty much for debugging purposes)

chunk update: most parts printed and assembled

currently: stuff that happened are: wired the fingers added screws to necessary assemblies witnessed first failed print during this: servos haven't come yet, but once they do, we can start installing them into the hand/forearm. as always, credit to the Inmoov project.