Arduino project (HELP!)

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 2
Geregistreerd: 19 Feb 2014, 12:31

Arduino project (HELP!)

Berichtdoor MarcDuc » 19 Feb 2014, 12:42

Beste slimme koppen a.k.a forumleden,

Sinds een week ben ik gestart met mijn opleiding Informatica aan de Haagse Hogeschool in Zoetermeer, zonder enkele ervaring met programmeren.

De eerste week worden we al in het diepe gegooid, we moeten een robot autootje met een arduino uno met een shield er op zodanig programmeren dat het een lijn volgt (kleur onbekend) met een waarschijnlijk donkerblauwe ondergrond. We hebben 2 kleine sensoren (foto's kunnen geplaatst worden). De robot moet een lijn volgen en de finish halen voor een voldoende, maar er lopen ook andere lijnen over deze lijn heen (van dezelfde kleur) die hij moet negeren.

Zo ziet het er uit, alleen de sensoren zijn anders:

http://cdn.instructables.com/FO0/DUGS/HABC7U1K/FO0DUGSHABC7U1K.LARGE.jpg

We hebben een aantal codes maar weten niet precies welke het beste is en wat we er aan moeten veranderen.

Kunnen jullie ons helpen? We hebben nog weinig hoop op een goede afloop! Alvast heel erg bedankt.

Met vriendelijke groet,

Marc
Laatst gewijzigd door MarcDuc op 19 Feb 2014, 12:46, in totaal 1 keer gewijzigd.

Advertisement

Berichten: 2
Geregistreerd: 19 Feb 2014, 12:31

Re: Arduino project (HELP!)

Berichtdoor MarcDuc » 19 Feb 2014, 12:45

Hier zijn de codes:

1:

*/

#include <SoftPWMServo.h>

//Setting up the Hardware pins
// First the line following (IR) sensors
const int irLeft = 2; //Left line sensor is on pin A2
const int irRight = 3; //Right line sensor is on pin A3

//Setting up the Arduino Motor Shield
const int leftDIR = 12;
const int rightDIR = 13;
const int leftPWM = 3;
const int rightPWM = 11;
const int leftBrake = 9;
const int rightBrake = 8;
const char bothSpeed = 100; //sets how fast the motors will spin (0 to 255)

//Here we set up variable that will hold the ADC value representing the line sensor values
int leftSees = 0; //A2 ADC value (0 to 1023)
int rightSees = 0; //A3 ADC value (0 to 1023)

void setup()
{

//Make sure to set all of our control signal pins as output
pinMode(leftDIR, OUTPUT);
pinMode(rightDIR, OUTPUT);
pinMode(leftBrake, OUTPUT);
pinMode(rightBrake, OUTPUT);

//Next we make sure our brake signals are set LOW
digitalWrite(leftBrake, LOW);
digitalWrite(rightBrake, LOW);
}

void loop()
{
//Start by reading the left sensor on A2
int leftEye = analogRead(irLeft);

//delay a little bit
delay(5);

//next read the right sensor connected A3
int rightEye = analogRead(irRight);

//Next, we run the motors based on the sensor reading

//If both sensors see black (ADC value greater than 1000), then back up
if ((leftEye >= 1000)&&(rightEye >= 1000)) reverse();

//Otherwise, if only the left sensor sees black, then turn off the left motor
//so the robot veer to the left
else if ((leftEye >= 1000)&&(rightEye < 1000)) turnLeft();

//Otherwise, if only the right sensor sees black, then turn off the right motor
//so the robot veer to the right
else if ((leftEye < 1000)&&(rightEye >= 1000)) turnRight();

//Otherwise, move forward
else forward();

}

//Turn right by turning off the right motor
//i.e disable the PWM to that wheel
void turnRight(void)
{
digitalWrite(leftDIR, HIGH);
digitalWrite(rightDIR, HIGH);
SoftPWMServoPWMWrite(leftPWM, bothSpeed);
SoftPWMServoPWMWrite(rightPWM, 0);
}

//Turn left by turning off the left motor
//i.e disable the PWM to that wheel
void turnLeft(void)
{
digitalWrite(leftDIR, HIGH);
digitalWrite(rightDIR, HIGH);
SoftPWMServoPWMWrite(leftPWM, 0);
SoftPWMServoPWMWrite(rightPWM, bothSpeed);
}

//Move forward by enabling both wheels
void forward(void)
{
digitalWrite(leftDIR, HIGH);
digitalWrite(rightDIR, HIGH);
SoftPWMServoPWMWrite(leftPWM, bothSpeed);
SoftPWMServoPWMWrite(rightPWM, bothSpeed);
}

//Reverse by enabling both wheels
void reverse(void)
{
digitalWrite(leftDIR, LOW);
digitalWrite(rightDIR, LOW);
SoftPWMServoPWMWrite(leftPWM, bothSpeed);
SoftPWMServoPWMWrite(rightPWM, bothSpeed);
}






2:

#include <QTRSensors.h>

#define Kp 0 // experiment to determine this, start by something small that just makes your bot follow the line at a slow speed
#define Kd 0 // experiment to determine this, slowly increase the speeds and adjust this value. ( Note: Kp < Kd)
#define rightMaxSpeed 200 // max speed of the robot
#define leftMaxSpeed 200 // max speed of the robot
#define rightBaseSpeed 150 // this is the speed at which the motors should spin when the robot is perfectly on the line
#define leftBaseSpeed 150 // this is the speed at which the motors should spin when the robot is perfectly on the line
#define NUM_SENSORS 6 // number of sensors used
#define TIMEOUT 2500 // waits for 2500 us for sensor outputs to go low
#define EMITTER_PIN 2 // emitter is controlled by digital pin 2

#define rightMotor1 3
#define rightMotor2 4
#define rightMotorPWM 5
#define leftMotor1 12
#define leftMotor2 13
#define leftMotorPWM 11
#define motorPower 8

QTRSensorsRC qtrrc((unsigned char[]) { 14, 15, 16, 17, 18, 19} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN); // sensor connected through analog pins A0 - A5 i.e. digital pins 14-19

unsigned int sensorValues[NUM_SENSORS];

void setup()
{
pinMode(rightMotor1, OUTPUT);
pinMode(rightMotor2, OUTPUT);
pinMode(rightMotorPWM, OUTPUT);
pinMode(leftMotor1, OUTPUT);
pinMode(leftMotor2, OUTPUT);
pinMode(leftMotorPWM, OUTPUT);
pinMode(motorPower, OUTPUT);

int i;
for (int i = 0; i < 100; i++) // calibrate for sometime by sliding the sensors across the line, or you may use auto-calibration instead

/* comment this part out for automatic calibration
if ( i < 25 || i >= 75 ) // turn to the left and right to expose the sensors to the brightest and darkest readings that may be encountered
turn_right();
else
turn_left(); */
qtrrc.calibrate();
delay(20);
wait();
delay(2000); // wait for 2s to position the bot before entering the main loop

/* comment out for serial printing

Serial.begin(9600);
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();

for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.println();
*/
}

int lastError = 0;

void loop()
{
unsigned int sensors[6];
int position = qtrrc.readLine(sensors); // get calibrated readings along with the line position, refer to the QTR Sensors Arduino Library for more details on line position.
int error = position - 2500;

int motorSpeed = Kp * error + Kd * (error - lastError);
lastError = error;

int rightMotorSpeed = rightBaseSpeed + motorSpeed;
int leftMotorSpeed = leftBaseSpeed - motorSpeed;

if (rightMotorSpeed > rightMaxSpeed ) rightMotorSpeed = rightMaxSpeed; // prevent the motor from going beyond max speed
if (leftMotorSpeed > leftMaxSpeed ) leftMotorSpeed = leftMaxSpeed; // prevent the motor from going beyond max speed
if (rightMotorSpeed < 0) rightMotorSpeed = 0; // keep the motor speed positive
if (leftMotorSpeed < 0) leftMotorSpeed = 0; // keep the motor speed positive

{
digitalWrite(motorPower, HIGH); // move forward with appropriate speeds
digitalWrite(rightMotor1, HIGH);
digitalWrite(rightMotor2, LOW);
analogWrite(rightMotorPWM, rightMotorSpeed);
digitalWrite(motorPower, HIGH);
digitalWrite(leftMotor1, HIGH);
digitalWrite(leftMotor2, LOW);
analogWrite(leftMotorPWM, leftMotorSpeed);
}
}

void wait(){
digitalWrite(motorPower, LOW);
}








3:

const int Rsense = 3;
const int Lsense = 2;
const int Rmotor = 13;
const int Lmotor = 12;
const int Rbrake = 8;
const int Lbrake = 9;
const char BothOn = 100;

int LeftSee = 0;
int RightSee = 0;

void setup()
{
pinMode(Rmotor, OUTPUT);
pinMode(Lmotor, OUTPUT);
pinMode(Rbrake, OUTPUT);
pinMode(Lbrake, OUTPUT);

digitalWrite(Lbrake, LOW);
digitalWrite(Rbrake, LOW);
}


void loop()
{
int leftEye = analogRead(Lsense);

delay(5);

int rightEye = analogRead(Rsense);

if ((leftEye >= 1000)&&(rightEye < 1000))
{ digitalWrite(Lmotor, LOW);
digitalWrite(Rmotor, HIGH);
}

else if ((leftEye < 1000)&&(rightEye >= 1000))
{ digitalWrite(Lmotor, HIGH);
digitalWrite(Rmotor, LOW);
}
else
{ digitalWrite(Lmotor, HIGH);
digitalWrite(Rmotor, HIGH);
}
}

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten