En construcción…
Hola que tal, este es un video colaborativo entre el canal de ElectroJuanyu (España) y el mio CarlosVolt Tutoriales(Argentina), veremos como hacer un Robot detector de obstáculos, cada uno de nosotros haremos una versión casera del mismo robot, con los materiales que estén a nuestro alcance, demostrando así que cualquiera que que siga estas instrucciones podrá crear el mismo robot, no importa la distancia.
Este robot cuenta con un sensor ultrasónico hc-sr04, que se coloca en la punta del robot junta a servo sg90, al detectar un objeto detiene la marcha de los moto reductores que poseen las ruedas el servo mueve el sensor hacia la derecha e izquierda toma un valor de cada lugar y determina cual es la distancia mayor hacia un objeto y con eso determina a donde ir, siempre elegirá el lugar con mayor distancia a un objeto, por la simple razón que es menos probable que se encuentre con un objeto en su camino. Cuando detectó un objeto también retrocede unos centímetros antes de girar.
Código fuente
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
#include <Servo.h> Servo miServo; //Crea un objeto servo para el control del servo //Constantes y variables usadas durante el programa #define eco 11 // Pin Eco #define Trigger 12 // Pin Trigger //Motor derecho #define motor_pin2_av 2 #define motor_pin3_re 3 //Motor Izquierdo #define motor_pin4_av 4 #define motor_pin5_re 5 long duracion, distancia; // Duracion para calcular la distancia int val; int izq; int der; void setup(void) { Serial.begin (115200);//Velocidad del puerto serial pinMode(Trigger, OUTPUT);//Pin TRigger como salida pinMode(eco, INPUT);//Pin eco como entrada miServo.attach(9);// Pin donde conectaremos el servo val = map(511, 0, 1023, 0, 120); // Escala para usarlo con el servo (valor entre 0 y 120)Mueve el servo para colocar el sensor HC-SR04 en el centro miServo.write(val); // Ajusta la posición del servo de acuerdo con el valor de la variable val delay(500); pinMode(motor_pin2_av, OUTPUT); //Configura estos piines como salidas para el control de motores pinMode(motor_pin3_re, OUTPUT); pinMode(motor_pin4_av, OUTPUT); pinMode(motor_pin5_re, OUTPUT); digitalWrite(motor_pin2_av, HIGH);// Arranca ambos motores hacia adelante digitalWrite(motor_pin4_av, HIGH); } void loop() { CalculoDistacia(); //Llama a la funcion CalculoDistancia Serial.println(distancia);//Imprime ese valor en el puerto serial if(distancia < 28){ // Si la distancia es menor a 28 Parar();//Esta funcion detiene los motores val = map(0, 0, 1023, 0, 120); // Setea la posición del servo entre 0 a 120 miServo.write(val); // Mueve el servo a la posición Izquierda CalculoDistacia(); // LLama a la función calculo distancia, donde se obtiene la distancia del lado izquierdo izq=distancia; // Se asigna este valor a la varialble izq Serial.println(" izquierda"); delay(1000); val = map(1023, 0, 1023, 0, 120); // Setea la posición del servo entre 0 a 120 miServo.write(val); // Mueve el servo a la posición Derecha CalculoDistacia(); // LLama a la función calculo distancia, donde se obtiene la distancia del lado derecho der=distancia; // Se asigna este valor a la varialble der Serial.print(distancia); Serial.println(" derecha"); if(izq>der){ // Si la variable "izq" es mayor a la variable der se cumple esta condición Serial.println("Ir a Izquierda"); Parar(); //Llamamos a la función Parar que detiene ambos motores delay(500); Retroceder(); //Luego retrocede delay(800); Parar(); // Vuelve a detener los motores delay(500); GirarIzquierda(); // Con esta función giramos a la izquierda delay(800); Parar(); // Vuelve a detener los motores delay(1000); Avanzar();// Se vuelve a poner en marcha ambos motores hacia adelante } if(izq<der){ //Si la variable "der" es mayor a la variable "izq" se cumple esta condición Serial.println("Ir a Derecha"); Parar();//Llamamos a la función Parar que detiene ambos motores delay(500); Retroceder();//Luego retrocede delay(800); Parar();// Vuelve a detener los motores delay(500); GirarDerecha();// Con esta función giramos a la derecha delay(800); Parar();// Vuelve a detener los motores delay(1000); Avanzar();// Se vuelve a poner en marcha ambos motores hacia adelante } } //---Girar el servo al fente------ val = map(511, 0, 1023, 0, 120); // Setea la posición del servo entre 0 a 120 miServo.write(val); // Mueve el servo al centro } void Avanzar(){//Mueve ambos motores hacia adelante digitalWrite(motor_pin2_av, HIGH); digitalWrite(motor_pin3_re, LOW); digitalWrite(motor_pin4_av, HIGH); digitalWrite(motor_pin5_re, LOW); } void Parar(){//Detiene Ambos motores digitalWrite(motor_pin2_av, LOW); digitalWrite(motor_pin3_re, LOW); digitalWrite(motor_pin4_av, LOW); digitalWrite(motor_pin5_re, LOW); } void Retroceder(){//Mueve ambos motores hacia atrás digitalWrite(motor_pin2_av, LOW); digitalWrite(motor_pin3_re, HIGH); digitalWrite(motor_pin4_av, LOW); digitalWrite(motor_pin5_re, HIGH); } void GirarDerecha(){//Mueve un motor hacia adelante y otro hacia atrás digitalWrite(motor_pin2_av, HIGH); digitalWrite(motor_pin3_re, LOW); digitalWrite(motor_pin4_av, LOW); digitalWrite(motor_pin5_re, HIGH); } void GirarIzquierda(){//Mueve un motor hacia adelante y otro hacia atrás digitalWrite(motor_pin2_av, HIGH); digitalWrite(motor_pin3_re, LOW); digitalWrite(motor_pin4_av, LOW); digitalWrite(motor_pin5_re, HIGH); } void CalculoDistacia(){ // Esta función determina la distacia de un objeto con el sensor ultra sónico digitalWrite(Trigger, LOW); delayMicroseconds(2); digitalWrite(Trigger, HIGH);//A través del pin de disparo (Trigger) enviaremos una señal de activación al sensor, lo activaremos durante 10 microsegundos y lo desactivaremos delayMicroseconds(10); digitalWrite(Trigger, LOW); duracion = pulseIn(eco, HIGH); distancia = duracion/58.2; //Calcula la distancia en centimetros basado en la velocidad del sonido. } |
Materiales
Servo motor sg90
2 Motoreductores con rueda
Tabla MDF
Puente H l298n
Arduino Uno
Sensor Ultrasónico HC-SR04
Cables
Batería power bank

Rueda loca

Circuito
Canal de Juan: https://www.youtube.com/user/JUANYU1RUIZ
Apoya a mi canal suscribiendote en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 muchos videos con código fuentes completos y diagramas.







