Go to Post Add a little more grease if you aren't sure exactly how much you need. - MrForbes [more]
Home
Go Back   Chief Delphi > Technical > Programming
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #5   Spotlight this post!  
Unread 24-03-2012, 02:24
tb0508 tb0508 is offline
Registered User
no team
 
Join Date: Mar 2012
Location: United States
Posts: 3
tb0508 is an unknown quantity at this point
Re: PID algorithm using Arduino

Thank you for helping. So, I see it is less complicated than I am making it.

So, to get the values that you used of 200 to 800 with the center being 500. Is that the same as me using the min and max of the steering wheel pot?
http://img560.imageshack.us/img560/7...ngwheelpin.jpg
Using this image, you can see I have a pin that allows me to go left and right only a certain distance. I have code wrote to output the value of the current steering input, so I need to find the min, max, and center using this method?
I will be able to use:
target = (input - 500) * (500/300) + 400;
Once I find the values of my pot?

Here is my code for the input arduino('target') and second arduino that is receiving this value.
Code:
int potPin = 0; // select input pin 
int val = 0; // variable to store the value

void setup() {
Serial.begin(9600);
}

void loop() 
{
val = analogRead(potPin); // read the value from the pot
Serial.println( val );
delay(1);
}
second arduino the receives the 'target' through xbee(This arduino also receives the value of the 'current' directly with the bottom wheel pot)
Code:
char string[8]; //can be 4, 8 is fine
int var;
int index;
boolean started=false;
boolean ended=false;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
   while(Serial.available() >= 0) //since 0-1023
    {
      var=Serial.read(); //read the character
      if(var=='<') //not sure what to put in if statement to run until end
      {
        started = true;
        index=0;
        string[index]='\0';
      }
      else if(var=='>')
      {
        ended = true;
        break; //break out of while loop when '>' received
      }
      
      else if(started)
      {
        string[index]=var;
        index++;
        string[index]='\0';
        string[index]=var; //store character
      }
    //x = Serial.read(); //read another string
    }
    
    if(started && ended)
    {
      //convert portion of string to integer representation
      int val=atoi(string); 
      Serial.print("<");
      Serial.print(val);
      Serial.print(">");
      
      //next time
      started = false;
      ended = false;
      
      index = 0;
      string[index]='\0';
    }
  }
This second arduino will be able to compare the 'target' and 'current' values to use the 'P'. I plan to trial and error the Kp. Now it can use the:
current = readSensorValue();
error = target-current;
outputPower = error * kP;

That you mentioned.

Also, I plan to send the outputPower value to the roboclaw to determine left/right and how fast. Is this correct way? And I am a little confused on how exactly to send the value/data to the roboclaw for it to interpret.

Last edited by tb0508 : 24-03-2012 at 03:22.
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 20:12.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi