Skip to main content

duty cycle testing



Now that I saw a physical response, I should try to make it similar to how a servo should be controlled.

Servos are actuators that receive (expect) position input (as opposed to motors, which receive speed/intensity input). Simply put, it registers input as pulses, decoding the ratio of high (a "on" signal) to low in a given period as a position value. 

As I am waiting for my servo to be shipped, I will continue to work with the LED light. 

As opposed to my previous setup of having the light turn on every time the request is given, I will have the light turn on and off in a regular pattern until a request is given, upon which the pattern will change for one "cycle" (on-and-off pair).

The on-and-off logic (previously the LED control logic) will be run in a separate thread:

def dCycle(*args):
   global dCVal
   var = 1
   while var==1:
     dutyCycle = dCVal
     GPIO.output(17, GPIO.HIGH)
     time.sleep(dutyCycle)
     GPIO.output(17, GPIO.LOW)
     time.sleep(2-dutyCycle)

This code says that the total "cycle" will be 2 seconds, with "dutyCycle" being the length of time that the LED will be on. The global value "dCVal" will contain the length of time the light will be on. 

In the beginning, "dCVal" will be set to 0.15 seconds:

if __name__ == "__main__":
   global dCVal
   dCVal = 0.15
.
.
.
  thread.start_new_thread(dCycle,())

Every time the request is received, the value of dCVal will be changed to give it a different cycle pattern:

(in request received logic)
     dCVal = 1
     time.sleep(2)
     dCVal = 0.15

The LED will be on for a solid second when requests are received then return back to the short length once that is achieved. 

The time.sleep value of 2 somewhat resembled a setup/hold time in digital logic (reminded me of it, at least)... but not really at the same time. 

Comments

Popular posts from this blog

GPIO testing

Since the environment of the client-server-target is currently quite functional in the messaging standpoint, I decided to try connecting a simple LED light to the Raspberry Pi to see if it could "open" a door when the command is received. Installed the RPi.GPIO module (a Python module that gives the user command of the GPIO--General-Purpose Input/Output--ports in the Raspberry Pi) and connected the LED light to a GPIO pin. When the target received a request message, it would signal the GPIO pin to drive a current to the LED to light it up for 2 seconds. in main: if __name__ == "__main__":   GPIO.setmode(GPIO.BCM)   GPIO.setup(17, GPIO.OUT) in the on_message's request-received logic:      GPIO.output(17, True)      time.sleep(2)      GPIO.output(17, False) The video is a weak visual result. You can a click when the LED lights up; that was the sound of the key being pressed that sent the request message. Now, tim...

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...

pwm..

I just realized that the RPi.GPIO library (for programming the Raspberry Pi's input/output) already has PWM control, giving me a much more efficient control of duty cycles... At least the previous exercise ("duty cycle testing") refreshed me on it. PWM control on RPi.GPIO: http://code.google.com/p/raspberry-gpio-python/wiki/PWM