Compre 2 D444 modulo driver motor L298N, 2 D178 Module Ultra Sonic Sensor hc-sr04, 2 d424 modulo de linha robot smart car tcrt5000 por arduino UNO.
El ultra sonic no detecta los obstáculos para poder investir y tirar fuera del judo al otro robot que podría ser el problema?
//Declaración de los pines
int sensDel = 12; //sens IR delantero
int sensTras = 13; //sens IR trasero
int enA = 2;
int enB = 3;
int motorR1 = 4;
int motorR2 = 5; //motor derecho
int motorL1 = 7;
int motorL2 = 6; //motor izquierdo
int sensFder = 8; //sens frontal derecho
int sensFizq = 9; //sens frontal izquierdo
int sensTder = 11; //sens trasero derechp
int sensTizq = 10; //sens trasero izquierdo
float distancia,tiempo;
void setup() {
Serial.begin(9600);
pinMode(enA,OUTPUT);
pinMode(enB,OUTPUT);
pinMode (motorR1, OUTPUT);
pinMode (motorR2, OUTPUT);
pinMode (motorL1, OUTPUT);
pinMode (motorL2, OUTPUT);
pinMode (sensFder, INPUT);
pinMode (sensFizq, INPUT);
pinMode (sensTder, INPUT);
pinMode (sensTizq, INPUT);
delay(5000);
}
void loop() {
float buf1, buf2, valord, valort;
valord=analogRead(sensDel);
valort=analogRead(sensTras);
buf1=valord*500/1024;
buf2=valort*500/1024;
//Algoritmo para el ultrasonido
digitalWrite(sensFder,LOW);
delayMicroseconds(2);
digitalWrite(sensFder,HIGH);
delayMicroseconds(10);
digitalWrite(sensFder,LOW);
tiempo=pulseIn(sensFizq,HIGH);
distancia=(tiempo/2)/29.1;
Serial.print(distancia);
Serial.print("cm");
Serial.println();
digitalWrite(sensTder,LOW);
delayMicroseconds(2);
digitalWrite(sensTder,HIGH);
delayMicroseconds(10);
digitalWrite(sensTder,LOW);
tiempo=pulseIn(sensTizq,HIGH);
distancia=(tiempo/2)/29.1;
Serial.print(distancia);
Serial.print("cm");
Serial.println();
//Le damos un valor al PWM
analogWrite(enA,150);
analogWrite(enB,150);
//El bot se activa al presionar cualquier sensor de impacto
//si toca detecta linea blanca adelante retrocede, gira 4s. a la izquierda
//y continua haca atrás
if(buf1 >= 480) //mayor o igual que 480 es negro
{
atras();
izquierda();
delay(400);
atras();
}
//si detecta linea blanca atras avanza, gira 4s a la izquierda
//y continua haca adelante
if(buf2 >= 480) //mayor o igual de 480 es negro
{
adelante();
izquierda();
delay(400);
adelante();
}
//----------- ACCIONES IMPACTO-------------
if(digitalRead (sensFder)==HIGH )
{
golpeFder();
}
if(digitalRead (sensFizq)==HIGH)
{
golpeFizq();
}
if(digitalRead (sensTder)==HIGH)
{
golpeTder();
}
if(digitalRead (sensTizq)==HIGH)
{
golpeTizq();
}
//Colocamos el valor de distancia al PWM, se puede jugar con esto
if(distancia<5)
{
analogWrite(enA,254);
analogWrite(enB,254);
}
delay(500);
}
//---------------MOVIMIENTOS--------------
int adelante()
{
digitalWrite (motorR1, LOW);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, LOW);
}
int atras()
{
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, LOW);
digitalWrite (motorL1, LOW);
digitalWrite (motorL2, HIGH);
}
int izquierda()
{
digitalWrite (motorR1, LOW);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, LOW);
digitalWrite (motorL2, HIGH);
delay(100);
}
int derecha()
{
digitalWrite (motorR1, HIGH); //L
digitalWrite (motorR2, LOW);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, LOW);//L
delay(100);
}
//--------------GOLPES-------------------
int golpeFder()
{
atras();
delay(1000);
derecha();
delay(300);
adelante();
}
int golpeFizq()
{
atras();
delay(1000) ;
izquierda();
delay(300);
adelante();
}
int golpeTder()
{
adelante();
delay(1000);
izquierda();
delay(300);
atras();
}
int golpeTizq()
{
adelante();
delay(1000);
derecha();
delay(300);
atras();
}
