This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430 F5529 ultrasonic sensor for servo control

Other Parts Discussed in Thread: ENERGIA

I have a code from an arduino to control servo position based on the distance output of the ultrasonic sensor. The servo jst turns back and forth and there's no serial output at all. This is the code. Everything is attached to the appropriate pins. I'm literally brand new at this so i really have no idea how to trouble shoot. Any help would be appreciated.

  • Hi Joshua,

    There are tutorials on the web for interfacing the ultrasonic sensor with specific MSP devices, I provided links below and think they are a good place to start. Additional info on your setup as well as the code so far would be beneficial.

    www.instructables.com/.../
    karuppuswamy.com/.../


    Sincerely,
    Sean
  • I've got it to return values via the serial monitor so i know it works and is hooked up properly. I have the servo at 3v going to pin 2 and the ultrasonic sensor at 5v trig going to pin 3 and echo going to pin 4. This is the code I'm using. 

    #include <Servo.h>



    //Setup the variables for the HC-SR04

    const int trigPin = 3;

    const int echoPin = 4;

    // create servo object to control a servo

    // a maximum of eight servo objects can be created

    Servo myservo;



    // variable to store the servo position

    int pos = 0;

    void setup() {

    // initialize serial communication:

    Serial.begin(9600);



    // attaches the servo on pin 9 to the servo object

    myservo.attach(2);



    }

    void loop()

    {

    // establish variables for duration of the ping,

    // and the distance result in inches and centimeters:

    long duration, inches, cm;



    // The sensor is triggered by a HIGH pulse of 10 or
    // more microseconds.

    // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

    pinMode(trigPin, OUTPUT);

    digitalWrite(trigPin, LOW);

    delayMicroseconds(2);

    digitalWrite(trigPin, HIGH);

    delayMicroseconds(10);

    digitalWrite(trigPin, LOW);



    // Read the signal from the sensor: a HIGH pulse whose

    // duration is the time (in microseconds) from the sending

    // of the ping to the reception of its echo off of an object.

    pinMode(echoPin, INPUT);

    duration = pulseIn(echoPin, HIGH);



    // convert the time into a distance

    inches = microsecondsToInches(duration);

    cm = microsecondsToCentimeters(duration);



    //Tell the Arduino to print the measurement in the serial console

    Serial.print(inches);

    Serial.print("in, ");

    Serial.print(cm);

    Serial.print("cm");

    Serial.println();



    // This if-else statement tells the Arduino at what distance

    // it should trigger the servo, what the servo should do,

    // and what it should do if the distance is too far away.

    if (inches <= 24) {sweep(3);



    }

    else if (inches >= 24) {myservo.write(pos);

    }



    // Tell the Arduino to wait 0.10 seconds before pinging the

    // Ultrasonic Sensor again.

    delay(100);

    }

    // Converts the microseconds reading to Inches

    long microsecondsToInches(long microseconds)

    {

    // According to Parallax's datasheet for the PING))), there are

    // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per

    // second). This gives the distance travelled by the ping, outbound

    // and return, so we divide by 2 to get the distance of the obstacle.

    // See: www.parallax.com/.../28015-PING-v1.3.pdf

    return microseconds / 74 / 2;

    }

    //Converts the Microseconds Reading to Centimeters

    long microsecondsToCentimeters(long microseconds)

    {

    // The speed of sound is 340 m/s or 29 microseconds per centimeter.

    // The ping travels out and back, so to find the distance of the

    // object we take half of the distance travelled.

    return microseconds / 29 / 2;

    }

    //This sub-routein is what dictates the movement of the servo

    void sweep(int NUM_OF_CYCLES)



    {

    // Tells the Arduino to start this loop at 0 and incriment it by 1

    // each time the loop completes. This is how the Arduino knows to

    // stop the loop when a specific number of the
    // Sweep routein has been ran.

    for (int j=0; j<NUM_OF_CYCLES; j++)
    // goes from 0 degrees to 180 degrees
    for(pos = 0; pos < 180; pos += 1)
    { // in steps of 1 degree
    // tell servo to go to position in variable 'pos'
    myservo.write(pos);
    // waits 15ms for the servo to reach the position delay(10); }
    // goes from 180 degrees to 0 degrees
    for(pos = 180; pos>=1; pos-=1) {
    // tell servo to go to position in variable 'pos'
    myservo.write(pos);
    // waits 15ms for the servo to reach the position
    delay(10); } }}

  • Hi Joshua,

    It seems that your code is developed in Energia, I suggest the Energia forums to post this particular servo question as that forum is dedicated specifically for development in Energia.

    forum.43oh.com/.../

    Sincerely,
    Sean
  • Hi Joshua,

    Were you able to fix this problem.?
    I will close this in the mean time pending a reply.

    Regards,
    Charles

**Attention** This is a public forum