Hola a todos..
Estoy teniendo dificultades para hacer correctamente el codigo para mi proyecto. La idea es que cuando detecte un obstaculo a 20cm, gire 90 grados y reempreanda la marcha, pero no se por que motivo el codigo del sensor de distancia y el codigo del servomotor que va moviendo el sensor de lado a lado crea algun tipo de conflicto ya que empiezan a hacer ruido los driver de los motores, pero estos no se mueven.. Si dejo solo el codigo de los motores pap si que giran sin problemas.. aunque no he sabido hacer la parte de que cuando detecte un objeto, gire 90 grados...
Este es el codigo que estoy utilizando de momento:
#include <Servo.h>
Servo servo1;
int PUL = 6 ; // definir pulso pin
int DIR = 5 ; // definir Direction pin
int ENA = 4 ; // define Enable Pin
int PUL2 = 12 ; // definir pulso pin
int DIR2 = 11 ; // definir Direction pin
int ENA2 = 10 ; // define Enable Pin
#include "Ultrasonic.h"
int trigPin = 7;
int echoPin = 8;
Ultrasonic ultrasonido(trigPin,echoPin);
int dis = 10;
int pinServo = 9; // Pin digital con PWM para el Servo
int pulsoMin = 650; // Pulso en us para girar un ángulo de 0º
int pulsoMax = 2550; // Pulso en us para girar un ángulo de 180º
int angulo = 0; // Variable para guardar el ángulo del servo
void setup()
{
servo1.attach(pinServo, pulsoMin, pulsoMax);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode (PUL, OUTPUT);
pinMode (DIR, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (PUL2, OUTPUT);
pinMode (DIR2, OUTPUT);
pinMode (ENA2, OUTPUT);
}
void loop()
{
// El Servo avanza de 0º a 120º
for(angulo = 0; angulo <= 120; angulo++)
{
// Avanza 1 grado cada 10 ms
servo1.write(angulo);
delay(15);
}
// El Servo retrocede de 120º a 0º
for(angulo = 120; angulo >= 0; angulo--)
{
// Retrocede 1 grado cada 10 ms
servo1.write(angulo);
delay(15);
}
int distancia;
distancia = ultrasonido.Ranging(CM);
if (distancia < dis){
digitalWrite(DIR,HIGH);
digitalWrite(ENA,HIGH);
digitalWrite(PUL,HIGH);
delayMicroseconds(50);
digitalWrite(PUL,LOW);
delayMicroseconds(50);
digitalWrite(DIR2,LOW);
digitalWrite(ENA2,HIGH);
digitalWrite(PUL2,HIGH);
delayMicroseconds(50);
digitalWrite(PUL2,LOW);
delayMicroseconds(50);
} else {
digitalWrite(DIR,LOW);
digitalWrite(ENA,HIGH);
digitalWrite(PUL,HIGH);
delayMicroseconds(50);
digitalWrite(PUL,LOW);
delayMicroseconds(50);
digitalWrite(DIR2,HIGH);
digitalWrite(ENA2,HIGH);
digitalWrite(PUL2,HIGH);
delayMicroseconds(50);
digitalWrite(PUL2,LOW);
delayMicroseconds(50);
}
}
Este es el diagrama que estoy utilizando para los motores pap y los driver TB6600
Y unas imagenes del cacharro:
Gracias por la ayuda..