Integrate the QTR-8RC Line sensor

Hi,
we really need help to integrate the Pololu QTR-8RC
Line sensor.
We bought the StarterKitV2 set at watterott.com website with all these parts:

Arduino Uno
Motor Shield
Set of Jumper Wires F-F (10 Stück)
Battery holder 4xAA with connector cable
Standard Servo
Sharp Infrared Proximity Sensor (GP2Y0A21YK0F)
Cable for Sharp IR Sensor
GM9 Gear Motor (2 pcs)
Wheels for gear motor (2 pcs)
Laser cutted Plastic parts

But now we want to integrate the QTR-8RC sensor in that
robot.
I installed the library in the Arduino software.

We ve got the source code for the robot without the line sensor.
Could anybody help us to change the source code that we can use the
line sensor??
Thats our code without the QTR sensor:

#include <Servo.h>
#define IR_SENSOR 2 // Der Sharp IR Sesor ist an Pin 2
#define DIR_B 13 // Richtung B
#define DIR_A 12 // Richtung A
#define PWM_B 11 // Geschwindigkeit B
#define BRAKE_A 9 // Bremse A
#define BRAKE_B 8 // Bremse B
#define PWM_A 3 // Geschwindigkeit A
#define SERVO 5 // Servo wird an Pin 5 angesteuert
// Nützliche Einstellungen:
#define FULL_SPEED 128 // Vollgas ist 255, höher geht nicht.
#define TURN_SPEED 255 // schnell Drehen
#define LEFT LOW // Links drehen bei LOW
#define RIGHT HIGH // ... und Rechts bei HIGH
// Bei diesem Wert am IR Sensor soll der Roboter anhalten
// --> Ist der Wert KLEINER hält der Roboter FRÜHER an
#define CLOSEST_DISTANCE 350
// Mit welchem Winkel stößt der Sensor auf dem Servo rechts und links an?
#define SERVO_RIGHT 55 // rechts
#define SERVO_LEFT 125 // links
Servo SensorServo; // Mit diesem Element wird der Servo gesteuert
// An welcher Servo Position ist die Distanz zur Gefahr am geringsten?
int SeekingPositionWithClosestDanger()
{
// Erst mal anhalten
digitalWrite(BRAKE_A, HIGH);
digitalWrite(BRAKE_B, HIGH);
int ServoPosition;
int MinimumDistance = 0;
int MinimumServoPosition = 0;
// Von Rechts (SERVO_RIGHT) nach Links (SERVO_LEFT) alle Servo-Positionen anfahren.
// mit ServoPosition++ wird Wert immer um 1 erhöht
for(ServoPosition = SERVO_RIGHT;ServoPosition <= SERVO_LEFT; ServoPosition++)
{
// Servo Wert einstellen
SensorServo.write(ServoPosition);
delay(10);
// ist der aktuelle Wert näher, als der minimale Wert?
if(analogRead( IR_SENSOR ) > MinimumDistance )
{
// Ja: aktueller Wert ist neues Minimum
MinimumDistance = analogRead( IR_SENSOR );
// Außerdem merken wir uns die Servo Position
MinimumServoPosition = ServoPosition;
}
}
// Die gefundene Position wieder einstellen und Wert zurückgeben
SensorServo.write(MinimumServoPosition);
return MinimumServoPosition;
}
byte ServoPosition = 90;
boolean TurnServo = RIGHT;
// Vorwärts fahren und dabei den Sensor hin und her schwenken
void DriveForward()
{
SensorServo.write( ServoPosition );
//Beide Motoren auf Geradeaus stellen, ...
digitalWrite( DIR_A, HIGH );
digitalWrite( DIR_B, HIGH );
// ... Vollgas und ...
analogWrite( PWM_A, FULL_SPEED );
analogWrite( PWM_B, FULL_SPEED );
// ..Bremsen lösen!
digitalWrite( BRAKE_A, LOW );
digitalWrite( BRAKE_B, LOW );
// Dreht sich der Servo nach Rechts?
if( TurnServo == LEFT )
ServoPosition = ServoPosition+1; // Weiter nach Rechts, Wert um 1 erhöhen
if( TurnServo == RIGHT )
ServoPosition = ServoPosition-1; // Sonst nach Links, 1 vom Wert abziehen
// Hat der Servo das Linke Ende erreicht?
if( ServoPosition > SERVO_LEFT )
TurnServo = RIGHT; // Jetzt nach Rechts drehen
if( ServoPosition < SERVO_RIGHT )
TurnServo = LEFT; // Sonst nach Links drehen...
}
// Drehen! Aber in welche Richtung???
// LEFT für Links (gegen den Uhrzeiger) RIGHT für Rechts (im Uhrzeigersinn)
void Turn( boolean Direction )
{
// Bremsen
digitalWrite( BRAKE_A, HIGH );
digitalWrite( BRAKE_B, HIGH );
delay( 500 );
digitalWrite( DIR_A, Direction ); // Motor A in die "RICHTUNG" drehen
digitalWrite( DIR_B, !Direction ); // Motor B in entgegen der "RICHTUNG" drehen
// Geschwindigkeit für das Drehen einstellen
analogWrite( PWM_A, TURN_SPEED );
analogWrite( PWM_B, TURN_SPEED );
// Bremsen lösen
digitalWrite( BRAKE_A, LOW );
digitalWrite( BRAKE_B, LOW );
// Solange drehen, bis der Sensor eine 10% weitere Entfernung misst
while( ( CLOSEST_DISTANCE * 1 ) < analogRead( IR_SENSOR ) )
{
delay( 50 );
}
// Halt!
digitalWrite( BRAKE_A, HIGH );
digitalWrite( BRAKE_B, HIGH );
delay(1000);
}
// Bevor es los geht... Diese Funktion wird am Anfang genau einmal ausgeführt
void setup( )
{
// Motor A (rechts) initialisieren
pinMode( DIR_A, OUTPUT ); // Pin für Richtung Motor A als Ausgang definieren
pinMode( BRAKE_A, OUTPUT ); // Pin für Bremse Motor A als Ausgang definieren
// Motor B (links) initialisieren
pinMode( DIR_B, OUTPUT ); // Pin für Richtung Motor B als Ausgang definieren
pinMode( BRAKE_B, OUTPUT ); // Pin für Bremse Motor B als Ausgang definieren
// Beide Bremsen anziehen, HIGH = Bremsen!
digitalWrite( BRAKE_A, HIGH );
digitalWrite( BRAKE_B, HIGH );
// Servo initialiseren und auf 90° stellen
SensorServo.attach( SERVO );
SensorServo.write( 90 );
delay( 500 );
// Warten bis etwas vor dem Sensor ist
while( CLOSEST_DISTANCE > analogRead( IR_SENSOR ) )
{
// solange warten...
delay( 100 );
}
// Los geht's!!!
}
// Der eigentliche Programmablauf.
// Nachdem setup() fertig ist wird die Funktion loop() endlos nacheinander ausgeführt.
void loop( )
{
int DangerPosition;
int Distance;
Distance = analogRead( IR_SENSOR ); // was misst der Sensor?
if( Distance > CLOSEST_DISTANCE ) // Hindernis = größerer Wert
{
// Nochmal alles scannen um zu wissen, wo genau die Gefahr am nächsten ist...
DangerPosition = SeekingPositionWithClosestDanger();
// Gefahr Links?
if( DangerPosition <= 90 )
{
Turn( RIGHT ); // Rechts drehen
}
// Oder doch Rechts?
if( DangerPosition > 90 )
{
Turn( LEFT ); // dann Links drehen
}
}
DriveForward(); // Immer gerade aus!!!
delay( 10 );
}

Yours sincerely,

Tom and Andy

Hello.

Have you tried writing some code for the QTR sensors and implementing it into your lengthy code yourself? If you post what you have tried and what problems you are having, I would be happy to look into it for you.

Since it sounds like you have installed the Arduino library for the Pololu QTR Reflectance Sensors, I suggest looking at the example code for the QTR-RC, particularly the code comments explaining how the code works. You can find the code examples under the examples folder on its GitHub page. Looking at the code examples should help you understand how to use the library and how you can implement parts of the examples into your own. Also, you might find it helpful to look at the “QTRSensors Methods & Usage Notes” section in the Arduino Library for the Pololu QTR Reflectance Sensors guide.

- Amanda