Básicamente se trata de un desarrollo muy sencillo formado por un módulo compuesto por dos motores y un detector de distancia.
El funcionamiento se reduce a dos ruedas que avanzan en la misma dirección hasta que se encuentra con un obstáculo a una distancia determinada, entonces el programa hace girar al módulo y esquivar el obstáculo detectado.
Como ya he comentado, se trata de un desarrollo muy sencillo que pretende ser un ejemplo.
El proyecto es fácilmente mejorable si se introducen diversos sensores de distancia a lo largo del módulo, algunas ventajas serían:
- Que se pueda tener una idea mas concreta del entorno que envuelve al pequeño robot. De esta manera lo podríamos dotar de una lógica mas compleja, como por ejemplo, la capacidad de decisión de girar hacia un lado o hacia otro según la distancia a la que se encuentren cada uno de los posibles obstáculos existentes.
- Otro problema que solucionaría la introducción de mas detectores de distancia sería la eliminación de ángulos muertos que hacen que algunas veces el módulo no gire correctamente.
Los elementos físicos que se han utilizado han sido :
- Kit Chasis de Coche Smart Robot para Arduino
- Módulo sensor de medición de distancia ultrasónico HC-SR04
- L298N Stepper Motor Controller Driver Junta Module - Azul
- Placa Arduino Uno
Aquí os dejo el código :
int MOTOR_DER_1 = 8; int MOTOR_DER_2 = 9; int MOTOR_IZQ_1 = 10; int MOTOR_IZQ_2 = 11; long distancia; long tiempo; int TRIG = 7; int ECHO = 6; boolean isRunning = true; void setup() { //INIT MOTOR 1 pinMode(MOTOR_DER_1,OUTPUT); pinMode(MOTOR_DER_2,OUTPUT); //INIT MOTOR 2 pinMode(MOTOR_IZQ_1,OUTPUT); pinMode(MOTOR_IZQ_2,OUTPUT); pinMode(TRIG, OUTPUT); //activación del pin 9 como salida: para el pulso ultrasónico pinMode(ECHO, INPUT); //activación del pin 8 como entrada: tiempo del rebote del ultrasonido } void loop() { //Motor 1 gira hacia adelante digitalWrite(MOTOR_DER_1,LOW); digitalWrite(MOTOR_DER_2,HIGH); //Motor 2 gira hacia adelante digitalWrite(MOTOR_IZQ_1,HIGH); digitalWrite(MOTOR_IZQ_2,LOW); //delay(1000); while(isRunning){ digitalWrite(TRIG,LOW); // Por cuestión de estabilización del sensor delayMicroseconds(5); digitalWrite(TRIG, HIGH); // envío del pulso ultrasónico delayMicroseconds(10); tiempo=pulseIn(ECHO, HIGH); distancia= int(0.017*tiempo); if(distancia <= 15){ break; } } digitalWrite(MOTOR_IZQ_1,LOW); delay(500); digitalWrite(MOTOR_IZQ_1,HIGH); }Y a continuación algunas imágenes y vídeo :
No hay comentarios:
Publicar un comentario