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

websockets and mobile networks and ssl

Gahhh. Just going to ramble on this one: Websockets is unstable going through cellular networks Searched Google and solution seems to be SSL connections Tried to implement, and it works to some extent,  but realized that I'll have to have both Apache, which was running my web front end, and Tornado both listen to 443 which cannot happen Realize finally that Tornado is a SERVER just like Apache Try to implement web client through Tornado It works but Websocket server and the web client still different instances so still can't have both listen, or that's what I'm thinking but I don't have time to think about it at present. Gotta sleep.

nodejs migration

Having been playing around with NodeJS recently,  I (naturally?) started re-writing some of the OpenSesame code using Node last night. I think I've only worked on it around 2 hours so far, but I've already set up a basic client interface (a socket.io chat tutorial rip) with a server that the Raspberry Pi can connect to and receive requests to open the door.  This is probably due to socket.io's socket management (socket.io is the WebSocket module for Node); for my first implementation, I had to manually write up a structure that managed sockets, but that is pretty much handled by socket.io. Also, the servo control logic is pretty much recycled (and the Raspberry Pi code is still Python), and I do remember spending some good time figuring that out.  Cool neverthelss. I'll probably keep both versions around.

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