Greetings to all. My project It is a robotics project, a radar prototype made with an ultrasonic sensor and a HC-SR04 bipolar stepper motor, but it turns out that the stepper motor advance process (AND the delays) (from 25 to 25°) it slows down the sensor scan, I could really hand it over like this and there would be no problem, but I would like to know the solution to this problem. By the way, I am using an Arduino UNO
es un proyecto de robótica, un prototipo de radar hecho con un sensor ultrasonido y un motor paso a paso bipolar HC-SR04, pero resulta que el proceso (Y los delays) de avance del motor paso a paso (de 25 a 25°) ralentiza el escaneo del sensor, realmente podría entregarlo así y no habría problema, pero me gustaría conocer la solución a este problema. Por cierto, estoy usando un Arduino UNO
Code/Código
#include <Stepper.h>
#define STEP 4 // pin STEP de A4988 a pin 4
#define DIR 6 // pin DIR de A4988 a pin 5
const int Trigger = 2;
const int Echo = 3;
void setup(){
Serial.begin(9600);
pinMode(Trigger, OUTPUT);
pinMode(Echo, INPUT);
digitalWrite(Trigger, LOW);
pinMode(STEP, OUTPUT); // pin 4 como salida
pinMode(DIR, OUTPUT); // pin 5 como salida
}
void loop(){
MotorP();
sensor();
// demora de 2 segundos
}
void MotorP(){
int i = 0;
digitalWrite(DIR, HIGH); // giro en 25
for(int i = 0; i < 25; i++){ // 100 pasos para motor de 0.9 grados de angulo de paso
digitalWrite(STEP, HIGH);
delay(10); // nivel alto
digitalWrite(STEP, LOW);
delay(10); // nivel bajo
} // por 10 mseg
delay(1000);
digitalWrite(DIR, HIGH);
for(int i = 25; i < 50; i++){ // 100 pasos para motor de 0.9 grados de angulo de paso
digitalWrite(STEP, HIGH);
delay(10); // nivel alto
digitalWrite(STEP, LOW);
delay(10); // nivel bajo
} // por 10 mseg
delay(1000);
digitalWrite(DIR, HIGH);
for(int i = 50; i < 75; i++){ // 100 pasos para motor de 0.9 grados de angulo de paso
digitalWrite(STEP, HIGH);
delay(10); // nivel alto
digitalWrite(STEP, LOW);
delay(10); // nivel bajo
} // por 10 mseg
delay(1000);
digitalWrite(DIR, HIGH);
for(int i = 75; i < 100; i++){ // 100 pasos para motor de 0.9 grados de angulo de paso
digitalWrite(STEP, HIGH);
delay(10); // nivel alto
digitalWrite(STEP, LOW);
delay(10); // nivel bajo
} // por 10 mseg
delay(1000);
i="";
digitalWrite(DIR, LOW); // giro en sentido opuesto
for(int i = 0; i < 25; i++){
digitalWrite(STEP, HIGH);
delay(5);
digitalWrite(STEP, LOW);
delay(5);
}
delay(1000);
digitalWrite(DIR, LOW); // giro en sentido opuesto
for(int i = 25; i < 50; i++){
digitalWrite(STEP, HIGH);
delay(5);
digitalWrite(STEP, LOW);
delay(5);
}
delay(1000);
digitalWrite(DIR, LOW); // giro en sentido opuesto
for(int i = 50; i < 75; i++){
digitalWrite(STEP, HIGH);
delay(5);
digitalWrite(STEP, LOW);
delay(5);
}
delay(1000);
digitalWrite(DIR, LOW); // giro en sentido opuesto
for(int i = 75; i < 100; i++){
digitalWrite(STEP, HIGH);
delay(5);
digitalWrite(STEP, LOW);
delay(5);
}
delay(1000);
i="";
}
void sensor(){
long t;
long d;
digitalWrite(Trigger, HIGH);
delayMicroseconds(5);
digitalWrite(Trigger, LOW);
t = pulseIn(Echo, HIGH);
d = t/59;
Serial.print("Distancia: ");
Serial.print(d);
Serial.print("cm");
Serial.println();
if(d<20){
Serial.print("Obstácuo adelante ");
}
}
