SOFTECH

Carrito esquiva Obstáculos con Arduino

Gatito

Nos complace presentarles a Sparky, un robot autónomo diseñado para enfrentarse a obstáculos y navegar con agilidad en cualquier entorno. Sparky es el resultado de la fusión entre creatividad, tecnología y un enfoque innovador en la robótica de asistencia social. Con un sistema de sensor integrado y un software programado para la detección y evasión de obstáculos, Sparky tiene la capacidad de adaptarse y moverse de manera inteligente en espacios concurridos.

Su diseño liviano y simple, combinado con una interfaz intuitiva, lo convierte en una herramienta ideal para realizar tareas en ambientes donde los objetos en movimiento y diversos obstáculos son factores muy frecuentes.

Su diseño liviano y simple, combinado con una interfaz intuitiva, lo convierte en una herramienta ideal para realizar tareas en ambientes donde los objetos en movimiento y diversos obstáculos son factores muy frecuentes.

Su diseño liviano y simple, combinado con una interfaz intuitiva, lo convierte en una herramienta ideal para realizar tareas en ambientes donde los objetos en movimiento y diversos obstáculos son factores muy frecuentes.

MATERIALES:

ARDUINO UNO R3:

La Arduino Uno R3 es una placa de desarrollo basada en el microcontrolador ATmega328P, diseñada para facilitar el aprendizaje y desarrollo de proyectos electrónicos y de programación. Esta placa es una de las más populares de la familia Arduino debido a su simplicidad, versatilidad y a su gran comunidad de usuarios, quienes han generado una amplia gama de recursos, tutoriales y documentación.

Controlador de Motor L298 Driver Motor DC

CONTROLADOR DE MOTOR L298 DRIVER MOTOR DC:

El controlador de motor L298 es un componente ampliamente utilizado para controlar motores de corriente continua (DC) y motores paso a paso en proyectos de robótica y electrónica. Este controlador permite gestionar el sentido de giro y la velocidad de uno o dos motores DC mediante el uso de un puente H, una configuración de circuitos que facilita el cambio de dirección en los motores.

Controlador de Motor L298 Driver Motor DC

SENSOR ULTRASÓNICO HC-SR04:

El sensor ultrasónico HC-SR04 es un dispositivo ampliamente utilizado para medir distancias en proyectos de electrónica, robótica y automatización. Funciona emitiendo pulsos de sonido a una frecuencia ultrasonora y midiendo el tiempo que tarda el eco en regresar después de reflejarse en un objeto. Esto permite calcular con precisión la distancia a la que se encuentra el objeto, con un rango efectivo de medición que varía entre 2 cm y 400 cm (4 metros) y una precisión aproximada de ±3 mm.

Controlador de Motor L298 Driver Motor DC

Micro Servo SG90 1.5Kg:

El Micro Servo SG90 es uno de los servos más populares y utilizados en proyectos de robótica y modelismo debido a su tamaño compacto y costo accesible. Tiene un torque máximo de 1.5 kg·cm a 4.8V, lo que significa que puede mover objetos ligeros con precisión a una distancia de 1 cm. El SG90 es capaz de mover su eje entre 0° y 180° , lo que lo hace ideal para aplicaciones donde se requiere un rango de movimiento limitado pero preciso, como en robots de pequeña escala o en vehículos teledirigidos.

Controlador de Motor L298 Driver Motor DC

Motor reductor DC 3-6 V. 48:1:

Un motor reductor DC 3-6V con una relación de reducción de 48:1 es un motor de corriente continua (DC) que tiene un sistema de engranajes reductores incorporado. Esto significa que la velocidad de salida del motor será mucho menor que la velocidad del motor sin reducción, pero con un par (torque) mucho mayor. Estos motores son útiles en aplicaciones que requieren un control preciso de velocidad y par, como robots, vehículos de juguete, y sistemas de automatización donde se necesitan movimientos lentos pero fuertes.

Controlador de Motor L298 Driver Motor DC

Mini Protoboard con Autoadhesivo - Blanco 170pts:

La Mini Protoboard con Autoadhesivo (Blanco, 170 puntos) es una herramienta muy útil en proyectos de electrónica y prototipado. Las protoboards, también conocidas como breadboards, son tableros de pruebas donde puedes montar circuitos de manera temporal sin necesidad de soldar los componentes. Son ideales para estudiantes, ingenieros y aficionados a la electrónica que desean probar y ajustar sus circuitos antes de hacer una versión más permanente.

Controlador de Motor L298 Driver Motor DC

CABLES PUENTE:

Los cables puente (también conocidos como jumpers) son cables flexibles que se utilizan en electrónica para realizar conexiones rápidas entre diferentes puntos de un circuito en una protoboard (breadboard). Son herramientas esenciales para el prototipado de circuitos, ya que permiten realizar conexiones temporales de manera sencilla y sin necesidad de soldar.

Controlador de Motor L298 Driver Motor DC

Pila Recargable NI-MH RadioShack 9V 180mAh:

La Pila Recargable NI-MH 9V 180mAh de RadioShack es una batería recargable de tecnología Níquel-Metal Hidruro (Ni-MH), diseñada para ser utilizada en una amplia variedad de dispositivos que requieren una fuente de alimentación de 9V, como radios, controles remotos, juguetes electrónicos, detectores de humo, entre otros.

Controlador de Motor L298 Driver Motor DC

KIT CARRITO ARDUINO:

Este parece ser un kit de chasis de carro robot de 2 ruedas motrices para Arduino. Incluye un chasis de madera con dos ruedas amarillas y negras, así como los componentes necesarios para construir un pequeño robot móvil controlado por Arduino. Este tipo de kits son populares para proyectos de robótica y automatización a nivel principiante o intermedio.

Controlador de Motor L298 Driver Motor DC

MONTAJE:

DIAGRAMA DEL CIRCUITO:

Gatito

Una vez que todos los materiales y componentes necesarios estén listos, pasaremos al proceso de montaje del carrito "Sparky". En esta etapa, se ensamblarán las distintas piezas que conforman el carrito y se conectarán adecuadamente los componentes electrónicos, como los sensores ultrasónicos, motores DC, y la placa Arduino que controlará el funcionamiento del sistema.

Este circuito muestra un montaje con una placa Arduino UNO conectada a un sensor ultrasónico HC-SR04, dos motores DC controlados por un driver L298N y alimentado por baterías de 9V y AAA. El driver controla los motores, mientras que el sensor ultrasónico detecta obstáculos. La protoboard conecta algunos de los cables para facilitar el circuito.

ARMADO DE LA ESTRUCTURA:

Gatito

En este primer paso se montó la estructura principal que es la base del vehículo acompañado de sus 3 llantas (la rueda loca y los dos motores) asi como el portapilas para su fuente de alimentación (batería de 9V), a partir de esta estructura principal continuamos con el siguiente paso que sería las conexiones a los componentes.

CONEXIONES DEL CIRCUITO:

Gatito

En este segundo paso se realizaron todas las conexiones como las del DRIVER controlador de motores, la placa arduino, la batería entre otros, en este paso es sumamete escencial unificar todas las tierras a un solo punto en común, con el propósito que el circuito pueda funcionar de forma óptima y no se tengan errores relacionados a la fuente de alimentación, o, entre otros problemas.

Gatito

PUNTOS FINALES:

Gatito

Como paso final se agregó el servomotor y el sensor ultrasónico, y se realizaron sus respectivas conexiones a una sola tierra a traves de la placa protoboard, posterior a todos estos paso, y asegurandonos en todo momento que las conexiones esten bien echas, pasamos al último momento del desarrollo de Sparky: La programación , “La vida del circuito”

Gatito

PROGRAMACIÓN:


                #include  // Incluimos la librería Servo para
                controlar servomotores
                Servo myservo; // Creamos un objeto servo llamado myservo
                // Pines de control de velocidad de los motores
                int VelocidadMotor1 = 5; // Pin para controlar la velocidad del motor 1
                int VelocidadMotor2 = 6; // Pin para controlar la velocidad del motor 2
                // Pines del sensor de ultrasonido
                int echoPin = 2; // Pin de entrada para el eco del sensor ultrasónico
                int trigPin = 3; // Pin de salida para el trigger del sensor ultrasónico
                // Pines de dirección de motores
                int Motor1A = 13; // Pin para controlar la dirección del motor 1
                int Motor1B = 12; // Pin para controlar la dirección del motor 1
                int Motor2C = 8; // Pin para controlar la dirección del motor 2
                int Motor2D = 10; // Pin para controlar la dirección del motor 2
                long duration; // Variable para almacenar la duración del pulso
                int distance; // Variable para almacenar la distancia medida
                // Variables de distancia para decisiones
                int servoReadLeft = 0; // Distancia medida a la izquierda
                int servoReadRight = 0; // Distancia medida a la derecha
                // Variable para la posición del servo
                int pos = 90; // Posición inicial del servo (90 grados)
                void setup() {
                delay(1000); // Espera 1 segundo antes de comenzar
                myservo.attach(9); // Asocia el servo al pin 9
                pinMode(trigPin, OUTPUT); // Configura el pin del trigger como salida
                pinMode(echoPin, INPUT); // Configura el pin del eco como entrada
                pinMode(Motor1A, OUTPUT); // Configura el pin de dirección del motor 1 como salida
                pinMode(Motor1B, OUTPUT); // Configura el pin de dirección del motor 1 como salida
                pinMode(Motor2C, OUTPUT); // Configura el pin de dirección del motor 2 como salida
                pinMode(Motor2D, OUTPUT); // Configura el pin de dirección del motor 2 como salida
                pinMode(VelocidadMotor1, OUTPUT); // Configura el pin de velocidad del motor 1 como salida
                pinMode(VelocidadMotor2, OUTPUT); // Configura el pin de velocidad del motor 2 como salida
                Serial.begin(9600); // Inicializa la comunicación serial a   9600 bps
                Serial.println("Configuración inicial completada."); //Mensaje de configuración completada
                myservo.write(pos); // Mueve el servo a la posición inicial
                }
                void loop() {
                // Realiza una exploración de 30° a la izquierda y a la derecha de la posición central
                for (int angle = 60; angle <= 120; angle += 5) { // Recorre ángulos de 60 a 120 grados
                myservo.write(angle); // Mueve el servo al ángulo actual
                distance = medirDistancia(); // Mide la distancia usando el sensor ultrasónico
                // Si detecta un obstáculo a menos de 30 cm
                if (distance < 30) { // Si la distancia medida es menor a 30 cm
                stopCar(); // Detiene el carro
                if (angle < 90) {
                servoReadLeft = distance; // Guarda la distancia del lado izquierdo
                } else if (angle > 90) {
                servoReadRight = distance; // Guarda la distancia del lado derecho
                }
                // Evalúa la distancia para decidir la dirección de giro
                if (servoReadLeft > servoReadRight) { // Si la distancia izquierda es mayor
                turnLeftCar(); // Gira a la izquierda
                } else {
                turnRightCar(); // Gira a la derecha
                }
                break; // Sale del loop de exploración si detecta un obstáculo
                } else {
                moveForwardCar(); // Si no hay obstáculo, continúa avanzando
                }
                delay(15); // Espera 15 ms antes de la siguiente iteración
                }
                }
                void stopCar() {
                // Detiene todos los motores
                digitalWrite(Motor1A, LOW);
                digitalWrite(Motor1B, LOW);
                digitalWrite(Motor2C, LOW);
                digitalWrite(Motor2D, LOW);
                }
                void turnRightCar() {
                // Gira el carro a la derecha
                digitalWrite(Motor1A, HIGH); // Motor izquierdo hacia
                adelante
                digitalWrite(Motor1B, LOW);
                digitalWrite(Motor2C, LOW); // Motor derecho hacia atrás
                digitalWrite(Motor2D, LOW);
                delay(1500); // Mantiene el giro durante 1.5 segundos
                stopCar(); // Detiene el carro
                }
                void turnLeftCar() {
                // Gira el carro a la izquierda
                digitalWrite(Motor1A, LOW); // Motor izquierdo hacia atrás
                digitalWrite(Motor1B, LOW);
                digitalWrite(Motor2C, HIGH); // Motor derecho hacia adelante
                digitalWrite(Motor2D, LOW);
                delay(1500); // Mantiene el giro durante 1.5 segundos
                stopCar(); // Detiene el carro
                }
                void moveForwardCar() {
                // Mueve el carro hacia adelante
                digitalWrite(Motor1A, HIGH); // Motor izquierdo hacia
                adelante
                digitalWrite(Motor1B, LOW);
                digitalWrite(Motor2C, HIGH); // Motor derecho hacia adelante
                digitalWrite(Motor2D, LOW);
                analogWrite(VelocidadMotor1, 150); // Establece la velocidad del motor 1
                analogWrite(VelocidadMotor2, 150); // Establece la velocidad del motor 2
                }
                int medirDistancia() {
                // Mide la distancia usando el sensor ultrasónico
                digitalWrite(trigPin, LOW); // Asegura que el pin de trigger esté bajo
                delayMicroseconds(2); // Espera 2 microsegundos
                digitalWrite(trigPin, HIGH); // Envía un pulso de trigger
                delayMicroseconds(10); // Mantiene el pulso durante 10 microsegundos
                digitalWrite(trigPin, LOW); // Termina el pulso de trigger
                duration = pulseIn(echoPin, HIGH); // Lee la duración del pulso de eco
                distance = duration * 0.034 / 2; // Calcula la distancia en cm
                return distance; // Devuelve la distancia medida
                }
        

VIDEOS DE DEMOSTRACIÓN:

fef

fef

GALERÍA DE FOTOS:

Gatito

Gatito

Gatito

Gatito

Gatito

Gatito

Hola soy Justin Douglas Peredo Zumaeta, un estudiante de 15 años del Perú, e creado esta página WEB con la intención y el propósito de que más gente del mundo conozca mi trabajo, y si de alguna forma puedo contribuir en su aprendizaje, o ser de ayuda últil, me alegraría mucho saberlo. Espero hallas disfrutado o te halla parecido interesante este pequeño proyecto en ARDUINO, te invito a que sigas viendo más artículos de mi WEB, cuídate, un abrazo.

¿A qué temperatura estamos?

Trabajando con un LCD y sensor de temperatura

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ac mattis mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sollicitudin semper nisi, vestibulum egestas mauris malesuada ac. Quisque ac aliquam mauris, at porttitor neque. Sed sit amet laoreet mauris. Aliquam laoreet interdum ante vitae rutrum.

Visitar

Maneja tu propia grua!

Trabajando con Servomotores y Joystick

Phasellus faucibus facilisis sapien, sed interdum sapien placerat in. Aenean magna sapien, condimentum ut mattis ac, congue tempor eros. Integer vel sem a diam pretium pulvinar. Quisque diam erat, consequat at nunc nec, luctus hendrerit ex. Maecenas egestas libero felis, ac interdum ante gravida vitae. Donec efficitur lacus placerat, porttitor enim eu, mattis turpis. Etiam sed mollis nunc.

Visitar