hey guys i have been working on a sumobot project using 2xdc motors & 2xTCRT5000 & L298n motor driver &arduino uno, but when i run the code i find some problems,
shuch the motors move about half revolution up and down, The ultra sonic sencor dosen't detect the objects as it should.
the code i use is a modified one from an online blog.
so please i need help with this code.!
This is a copy of The code i uploaded to my arduino
#include <Ultrasonic.h>
Ultrasonic ultrasonic(4,3);
const int IN1=5;
const int IN2=6;
const int IN3=9;
const int IN4=10;
#define IR_sensor_front A0
#define IR_sensor_back A1
int distance ;
void setup()
{
Serial.begin(9600);
delay (5000);
}
void ROTATE (){
void loop();
int IR_front = analogRead(IR_sensor_front);
int IR_back = analogRead(IR_sensor_back);
distance = ultrasonic.Ranging(CM) ;
analogWrite(IN1,200);
analogWrite(IN2,0);
analogWrite(IN3,200);
analogWrite(IN4,0);
void stop();
if (distance < 20){
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
}
void FORWARD ();
while (distance < 20 ) {
analogWrite(IN1,255);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,255);
distance = ultrasonic.Ranging(CM);
IR_front = analogRead(IR_sensor_front);
IR_back = analogRead(IR_sensor_back);
if ( IR_front > 650 || IR_back > 650 ) { break;}
delay(10); }
}
int IR_front = analogRead(IR_sensor_front);
int IR_back = analogRead(IR_sensor_back);
void loop(){
if (IR_front <= 650 ) ;
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
delay (50);
analogWrite(IN1,0);
analogWrite(IN2,255);
analogWrite(IN3,255);
analogWrite(IN4,0);
delay (500);
if (IR_back <= 650 );
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
delay (50);
analogWrite(IN1,255);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,255);
delay (500);
}
and this is the code i found and modified
#include "Ultrasonic.h"
Ultrasonic ultrasonic(4,3);//المداخل الموصولة مع الحساس
const int IN1=5;
const int IN2=6;
const int IN3=9;
const int IN4=10;
#define IR_sensor_front A0 // الحساس الامامي
#define IR_sensor_back A1 // الحساس الخلفي
int distance ;
void setup()
{
Serial.begin(9600);
delay (5000); // حسب قوانين السومو
}
void loop()
{
int IR_front = analogRead(IR_sensor_front);
int IR_back = analogRead(IR_sensor_back);
distance = ultrasonic.Ranging(CM) ;
ROTATE(200); // يبدأ الروبوت بالدوران
if (distance < 20){
Stop();
while (distance < 20 ) {
FORWARD(255);
distance = ultrasonic.Ranging(CM);
IR_front = analogRead(IR_sensor_front);
IR_back = analogRead(IR_sensor_back);
if ( IR_front > 650 || IR_back > 650 ) { break;}
delay(10); }
}
if (IR_front < 650 ) // اذا كانت القراءة اقل من 650 يعني اللون ابيض
{
Stop();
delay (50);
BACKWARD(255);
delay (500);
}
if (IR_back < 650 ) //
{
Stop();
delay (50);
FORWARD(255);
delay (500);
}
/* ----------- debugging ----------------
Serial.print(ultrasonic.Ranging(CM));
Serial.println("cm");
Serial.println("IR front :");
Serial.println(IR_front);
Serial.println("IR back :");
Serial.println(IR_back);
*/ --------------------------------------
}
//--------------------------------------------
void FORWARD (int Speed){
//When we want to let Motor To move forward,
// just void this part on the loop section .
analogWrite(IN1,Speed);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,Speed);
}
//--------------------------------------------
void BACKWARD (int Speed){
//When we want to let Motor To move forward,
// just void this part on the loop section .
analogWrite(IN1,0);
analogWrite(IN2,Speed);
analogWrite(IN3,Speed);
analogWrite(IN4,0);
}
//--------------------------------------------
void ROTATE (int Speed){
//When we want to let Motor To Rotate ,
// just void this part on the loop section .
analogWrite(IN1,Speed);
analogWrite(IN2,0);
analogWrite(IN3,Speed);
analogWrite(IN4,0);
}
//--------------------------------------------
void Stop(){
//When we want to Motor To stop ,
// just void this part on the loop section .
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
}