Servo programming problem

Discussion in 'The Projects Forum' started by KiwiKid, Jun 29, 2011.

  1. KiwiKid

    Thread Starter New Member

    May 12, 2011
    16
    0
    For my electronics project we must create a model barrier arm that is activated when a toy car drives up.

    We must use a servomotor (hextronik hxt900 9gr) a Picaxe08M microprocessor and a LDR voltage drop.

    I have the circuit set up correctly but I am having trouble programming the servo motor. I can get it to go between two postions correctly using the following program. (sorry if not correct, do not remember exactly the program)

    Main: servo 2,2
    wait 2
    servo 2,155
    wait 2
    goto main

    This works but when I use my main program:

    Start: servo 2,2

    Main: readadc 4,b1
    if b1 <150 than Motoron (150 being the value of the LDR when covered)
    servo 2,2
    pause 100
    goto Main

    Motoron: servo 2,155
    wait 5
    goto Main

    This does not work an I do not know why, all that happens is that the servo goes to the starting position and stays here but does not move when the LDR is covered.

    Please explain why if you know and post a suitable replacement program. (Using picaxe commands)
     
  2. KiwiKid

    Thread Starter New Member

    May 12, 2011
    16
    0
    Please post if you can help
     
  3. SgtWookie

    Expert

    Jul 17, 2007
    22,182
    1,728
    I'm just adding CODE tags around your programming to preserve the formatting.
     
  4. SgtWookie

    Expert

    Jul 17, 2007
    22,182
    1,728
    Looking in the PICAXE manual, it seems that you're not using the servo command correctly; it should be used to initialize the servo position, but after that the servopos command should be used instead.
    Also, "Do not use a pulse value less than 75 or greater than 225, as this may cause the
    servo to malfunction." - I see you are using a pulse value of 2; why?

    Also, while "wait n" is in seconds, you are using "pause 100"; pause is in milliseconds, so that's 100mS if your clock speed is as described in the manual. If you're clocking at a faster rate, it might only be 50mS, or some other amount of time. You might simply not have enough time for the servo to respond.

    In your Motoron: routine, you have a 5 second wait delay. During this time, the state of the LDR will be ignored. Same thing with your "pause 100"; it might take up to 100mS before the state of the LDR is again measured.

    I suggest that instead what you do is to constantly poll the LDR, pause for a period of time, say 10mS, and if the LDR stays dark for ~100mS or 10 samples, then the barrier needs to come down for a period of time. Then you might raise the barrier for another period of time to let the car proceed, and then continuing the polling of the LDR to see if it is light or dark.

    You really need to define the series of events how you wish for them to occur.
     
  5. KiwiKid

    Thread Starter New Member

    May 12, 2011
    16
    0
    I used the value of 2 because 2 and 150 were at a angle of 90° to each other (approximately). Why does this cause it to malfunction?

    I understand that pause is in ms bu I merely used this because I heard it was good to have a pause after a servo command.

    The state of the LDr because at this time it is irrelevant. The car drives up, breaks beam of light shining on LDR, arm opens and waits 5 second for car to drive through, however if it is still dark it will sat pen for a further 5 seconds.
    If we shut the gate as soon as the LDR is bright than we may shut the gate on the car because the LDR is not positioned directly below the arm. or for instance the car has a tralier and in between the car and the trailer the LDR is lit up for a moment.
    as for the sequence of series here it is-
    -servo goes on and goes to 90°
    -car drives up, block light
    -servo opens
    -car drives through
    -after 5s the arm closes ONLY if the LDR is lit up again though

    Thanks for response and i will try suggestions at school today and will report back this avo.
     
  6. KiwiKid

    Thread Starter New Member

    May 12, 2011
    16
    0
    I used your suggestions and the servo now works. Thanks

    However when ever the servo moves to a position it make a loud noise as if it is still turning. One of my classmates said something about it being the servo stalling but I thought I'd double check. What is it and how do I stop it?

    If this does not get solved soon I'll just start a new thread specifically for it.

    Thanks
     
  7. SgtWookie

    Expert

    Jul 17, 2007
    22,182
    1,728
    Your servo may be slamming into it's limits of travel.

    Read the PICAXE manual 2, pages 211, 212, and 213, which describe the SERVO and SERVOPOS functions, but perhaps the most relevant piece of information at the moment is this bit from page 211:
     
  8. KiwiKid

    Thread Starter New Member

    May 12, 2011
    16
    0
    K, thanx, will try
     
Loading...