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

finally got around to it (nrf24l0+ and servo)

On a previous post , I used the nrf24l01+ wireless chip to communicate between the Raspberry Pi and an Arduino, but only got lights to turn on. I remember being confused as to why servos would not work, and somewhat left it there. I started messing around with it again, and I am concluding that it might have been just a power issue. Here is the servo moving properly: The Arduino is on the ground due to the short length of the wires powering them. Just as a recap, what is happening is: - a C++ program using the RF24 library is compiled in the Raspberry Pi (connected to an nrf24l01+ chip) to broadcast a message. When executed, it will broadcast the message. - the Arduino (connected to another nrf24l01+ chip) programmed to receive messages receives the message, and upon receipt sends a signal to an Arduino that is wired to the servo to move the servo. Two separate Arduinos are used, as it seems that the servo library and the RF24 library do not seem to run properly toget...

alcohol sensor (and some patience)

Soldered the alcohol sensor into something that is connectable: I tried to connect this to the Arduino, as I had the appropriate circuitry, but I did not get any legitimate output from it. 5V going in, 5V coming out with no variations. Nothing seems to be awry in wiring, as the circuit seems to be grounded properly (and the 5V current is flowing).  There are a couple of potential factors as to why I'm not seeing any results: - I'm using a 10k ohm resistor, while some guides (and the datasheet for the sensor) asks for 100-200k. However, there seems to be a good amount of people using 10k and getting at least some kind of result. A batch of 100k ohm resistors I ordered is on its way, so I guess I can try with them when they come. - This site  claims that these sensors take 24-48 hours for its signals to be stable. It also tells me that I should not be powering the sensor directly from the Arduino, which I have been doing, out of concern that the power draw of ...

how the fingers work

the fingers are moved using wires and tension. each finger is looped through with a wire/string/line in a top-bottom fashion. when the top wire is loosened/bottom wire is tightened, the finger curls in its joints, resulting in a "bent finger".  you don't have precise control of each joint movement, but it is simple enough to be controlled by a single actuator (in this case a servo).  here is me just using my own hands as an actuator: here it is hooked up to as servo and controlled by a potentiometer: the movement is not smooth because 1) it's controlled by a potentiometer that I am controlling, as seen in the background, and I was unable to move it all the way with one smooth finer motion. 2) the tension in the line was not entirely tight. I need to learn how to tie these well. now I have a get a bunch of servos.  much credit and thanks to Inmoov once again.