Skip to main content

setting up pwm

There's always an obstacle..

I implemented the pwm module as described in the link in the previous post, but oddly enough, it didn't work.

The error I received:

AttributeError: 'module' object has no attribute 'PWM'

After some time scratching my head, I came to the realization that somehow my python was running an older version of the RPi.GPIO library, as PWM control was a pretty recent addition to the library. 

And indeed it was. 

Not really sure what's happening in detail, but it seems that there are two different... entities? that manage libraries for Python. One is through the usual "apt-get" command and the other is "pip." It appears that Python looks at "pip" first, and it currently linked RPi.GPIO to a really old version of the library. 

Uninstalling that older version ("pip uninstall RPi.GPIO") and using the version I obtained through apt-get ("apt-get install python-rpi.gpio") solved this. 

Now, a less-hacky implementation of PWM. 

Note that the PWM offered in this library is a software-driven PWM, meaning that the cycles it counts are based on the cycle count of the process (program). This can be inaccurate because programs can be put "on hold" by the operating system during heavy load, and during this time on hold, it stops counting. Because PWM relies on timing, this could cause "jitters" in the devices that read the signal. A better implementation is a hardware-driven PWM, which uses the clock cycles in the physical board to count. 

For now, I think the software-driven PWM will be fine.

Time's up for working on this today; I'll change messages into JSON next time, I guess.

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.