DFRobot ROB0118 User Manual

Page 1
BasicKitforTurtle2WDSKU:ROB0118
FunctionIntroduction
This Kit will teach you how to build a automatic obstacle - avoidance robot which is achieved on the platform of the Turtle Robot,based on ultrasonic sensor as distance measuring device,and combined with servo.
STEP1:AssembleRobot
Refer to Instruction Manual
http://www.dfrobot.com.cn/image/data/ROB0005/CN/ROB0005%20InstructionManual%20V1.1.pdf
Precautions:
1. Instruction Manual says nothing about how to deal with motor wire. The next pictrue tells it.
Page 2
2. Finished the robot chassis.Then following the connection diagram to wire the hardware.
Motor Connection
Physical map
Page 3
STEP2:DebugMotor
Download the Code
int speedPin_M1 = 5; //M1 Speed Control int speedPin_M2 = 6; //M2 Speed Control int directionPin_M1 = 4; //M1 Direction Control int directionPin_M2 = 7; //M1 Direction Control
void setup(){
}
void loop(){ carAdvance(100,100); delay(1000); carBack(100,100); delay(1000); carTurnLeft(250,250); delay(1000); carTurnRight(250,250); delay(1000); }
void carStop(){ // Motor Stop digitalWrite(speedPin_M2,0); digitalWrite(directionPin_M1,LOW); digitalWrite(speedPin_M1,0); digitalWrite(directionPin_M2,LOW); }
void carAdvance(int leftSpeed,int rightSpeed){ //Move forward analogWrite (speedPin_M2,leftSpeed); //PWM Speed Control
Page 4
digitalWrite(directionPin_M1,HIGH); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,HIGH); }
void carBack(int leftSpeed,int rightSpeed){ //Move backward analogWrite (speedPin_M2,leftSpeed); digitalWrite(directionPin_M1,LOW); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,LOW); }
void carTurnRight(int leftSpeed,int rightSpeed){ //Turn Right analogWrite (speedPin_M2,leftSpeed); digitalWrite(directionPin_M1,LOW); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,HIGH); } void carTurnLeft(int leftSpeed,int rightSpeed){ //Turn Left analogWrite (speedPin_M2,leftSpeed); digitalWrite(directionPin_M1,HIGH); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,LOW); }
STEP3:InstallUpperPlate
1. Prepare the Materials
Page 5
2. Fixed Ultrasonic Sensor Position
Please see the Installation Manual
3. Fixed Servo Position
http://www.dfrobot.com.cn/images/upload/File/20141030183325g7lofm.pdf
STEP4:DebugUltrasonicSensorandServo
1. Hardware Connection
Page 6
Ultrasonic Sensor and Servo Controll
Page 7
2. Download Code Install the library firstly. Metro libray
http://www.dfrobot.com.cn/images/upload/File/20141031110246wu4065.rar
#include <Servo.h> #include <Metro.h> Metro measureDistance = Metro(50); Metro sweepServo = Metro(20);
unsigned long actualDistance = 0;
Servo myservo; // create servo object to control a servo int pos = 60; int sweepFlag = 1;
int URPWM = 3; // PWM Output 025000USEvery 50US represent 1cm int URTRIG= 10; // PWM trigger pin uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command
void setup(){ // Serial initialization myservo.attach(9); Serial.begin(9600); // Sets the baud rate to 9600 SensorSetup(); }
void loop(){ if(measureDistance.check() == 1){ actualDistance = MeasureDistance(); // Serial.println(actualDistance); // delay(100); }
if(sweepServo.check() == 1){ servoSweep();
Page 8
}
}
void SensorSetup(){ pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG digitalWrite(URTRIG,HIGH); // Set to HIGH pinMode(URPWM, INPUT); // Sending Enable PWM mode comm
and for(int i=0;i<4;i++){ Serial.write(EnPwmCmd[i]); } }
int MeasureDistance(){ // a low pull on pin COMP/TRIG triggering a se nsor reading
digitalWrite(URTRIG, LOW); digitalWrite(URTRIG, HIGH); // reading Pin PWM will output
pulses unsigned long distance=pulseIn(URPWM,LOW); if(distance==50000){ // the reading is invalid. Serial.print("Invalid"); }else{ distance=distance/50; // every 50us low level stands for 1cm } return distance; }
void servoSweep(){ if(sweepFlag ){ if(pos>=60 && pos<=120){ pos=pos+1; // in steps of 1 degree myservo.write(pos); // tell servo to go to po
sition in variable 'pos' }
Page 9
if(pos>119) sweepFlag = false; // assign the var iable again
}else { if(pos>=60 && pos<=120){ pos=pos-1; myservo.write(pos); } if(pos<61) sweepFlag = true; } }
STEP5:DebuggingRobot
#include <Servo.h> #include <Metro.h> Metro measureDistance = Metro(50); Metro sweepServo = Metro(20);
int speedPin_M1 = 5; //M1 Speed Control int speedPin_M2 = 6; //M2 Speed Control int directionPin_M1 = 4; //M1 Direction Control int directionPin_M2 = 7; //M1 Direction Control unsigned long actualDistance = 0;
Servo myservo; // create servo object to control a servo int pos = 60; int sweepFlag = 1;
int URPWM = 3; // PWM Output 025000USEvery 50US represent 1cm int URTRIG= 10; // PWM trigger pin uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command
void setup(){ // Serial initialization myservo.attach(9);
Page 10
Serial.begin(9600); // Sets the baud rate to 9600 SensorSetup(); }
void loop(){
if(measureDistance.check() == 1){ actualDistance = MeasureDistance(); // Serial.println(actualDistance); // delay(100); }
if(sweepServo.check() == 1){ servoSweep(); }
if(actualDistance <= 30){ myservo.write(90); if(pos>=90){ // carBack(100,100); //// Serial.println("carBack"); // delay(100); carTurnRight(150,150); // Serial.println("carTurnRight"); delay(100); }else{ // carBack(100,100); //// Serial.println("carBack"); // delay(100); carTurnLeft(150,150); // Serial.println("carTurnLeft"); delay(100); } }else{
Page 11
carAdvance(70,70); // Serial.println("carAdvance"); delay(100); } // carBack(150,150); }
void SensorSetup(){ pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG digitalWrite(URTRIG,HIGH); // Set to HIGH pinMode(URPWM, INPUT); // Sending Enable PWM mode comm
and for(int i=0;i<4;i++){ Serial.write(EnPwmCmd[i]); } }
int MeasureDistance(){ // a low pull on pin COMP/TRIG triggering a sensor r eading
digitalWrite(URTRIG, LOW); digitalWrite(URTRIG, HIGH); // reading Pin PWM will output
pulses unsigned long distance=pulseIn(URPWM,LOW); if(distance==50000){ // the reading is invalid. Serial.print("Invalid"); }else{ distance=distance/50; // every 50us low level stands for 1cm } return distance; }
void carStop(){ // Motor Stop digitalWrite(speedPin_M2,0); digitalWrite(directionPin_M1,LOW);
Page 12
digitalWrite(speedPin_M1,0); digitalWrite(directionPin_M2,LOW); }
void carAdvance(int leftSpeed,int rightSpeed){ //Move forward analogWrite (speedPin_M2,leftSpeed); //PWM Speed Control digitalWrite(directionPin_M1,HIGH); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,HIGH); }
void carBack(int leftSpeed,int rightSpeed){ //Move backward analogWrite (speedPin_M2,leftSpeed); digitalWrite(directionPin_M1,LOW); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,LOW); }
void carTurnRight(int leftSpeed,int rightSpeed){ //Turn Right analogWrite (speedPin_M2,leftSpeed); digitalWrite(directionPin_M1,LOW); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,HIGH); }
void carTurnLeft(int leftSpeed,int rightSpeed){ //Turn Left analogWrite (speedPin_M2,leftSpeed); digitalWrite(directionPin_M1,HIGH); analogWrite (speedPin_M1,rightSpeed); digitalWrite(directionPin_M2,LOW); } void servoSweep(){ if(sweepFlag){ if(pos>=60 && pos<=120){
Page 13
pos=pos+1; // in steps of 1 degree myservo.write(pos); // tell servo to go to po
sition in variable 'pos' } if(pos>119) sweepFlag = false; // assign the var
iable again } else { if(pos>=60 && pos<=120){ pos=pos-1; myservo.write(pos); } if(pos<61) sweepFlag = true; } }
Your own car was born!
https://www.dfrobot.com/wiki/index.php/Basic_Kit_for_Turtle_2WD_SKU:ROB0118 6-1-17
Loading...