- Materiales necesarios para construir un robot de limpieza de pisos basado en Arduino
- Aspiradora portátil
- Módulo de sensor ultrasónico HC-SR04
- Sensor de piso (sensor de infrarrojos) para detección de escaleras
- Diagrama de circuito del robot limpiador de pisos basado en Arduino
- Construyendo el circuito para el robot de limpieza de pisos basado en Arduino
- Arduino
En el escenario actual, todos estamos tan ocupados con nuestro trabajo que no tenemos tiempo para limpiar nuestra casa adecuadamente. La solución al problema es muy simple, solo necesitas comprar un robot aspirador doméstico como el irobot roomba que limpiará tu casa con solo presionar un botón. Pero estos productos comerciales son un problema común, que es el costo. Así que hoy, decidimos hacer un robot limpiador de pisos simple , que no solo es fácil de hacer sino que cuesta mucho menos en comparación con los productos comerciales disponibles en el mercado. Los lectores frecuentes pueden recordar nuestro robot de limpieza al vacío Arduino, que construimos hace mucho tiempo, pero ese era muy voluminoso y necesitaba una gran batería de plomo-ácido para moverse. La nueva aspiradora Arduino que vamos a construir aquí será compacto y más práctico. Además de eso, este robot tendrá sensores ultrasónicos y un sensor de proximidad IR. El sensor ultrasónico permitirá que el robot evite obstáculos para que pueda moverse libremente hasta que la habitación esté debidamente limpia, y el sensor de proximidad le ayudará a evitar caerse de escaleras. Todas estas características suenan interesantes, ¿verdad? Entonces empecemos.
En uno de nuestros artículos anteriores, creamos muchos bots como el robot autoequilibrante, el robot desinfectante de superficies automatizado y el robot para evitar obstáculos. Échales un vistazo si te parece interesante.
Materiales necesarios para construir un robot de limpieza de pisos basado en Arduino
Como hemos utilizado componentes muy genéricos para construir la sección de hardware del robot aspirador, debería poder encontrarlos todos en su tienda de pasatiempos local. Aquí está la lista completa del material requerido junto con la imagen de todos los componentes.
- Arduino Pro Mini - 1
- Módulo ultrasónico HC-SR04 - 3
- Controlador de motor L293D - 1
- Motores de 5 voltios N20 y soportes de montaje - 2
- Ruedas de motor N20 - 2
- Interruptor - 1
- Regulador de voltaje LM7805 - 1
- Batería de iones de litio de 7,4 V - 1
- Módulo IR - 1
- Perfboard - 1
- Rueda giratoria - 1
- MDF
- Aspiradora portátil genérica
Aspiradora portátil
En la sección de requisitos de componentes, hemos hablado de una aspiradora portátil, las imágenes a continuación muestran exactamente eso. Es una aspiradora portátil de Amazon. Esto viene con un mecanismo muy simple. Tiene tres partes en la parte inferior (una pequeña cámara para almacenar el polvo, la parte media incluye el motor, el ventilador y el enchufe de la batería en la parte superior (hay una tapa o tapa para la batería). Tiene un motor de CC y un ventilador. Este motor está conectado directamente a 3V (2 * baterías AA de 1.5 voltios) a través de un simple interruptor. Como estamos alimentando nuestro robot con una batería de 7.4V, cortaremos la conexión de la batería interna y lo alimentaremos desde los 5V Fuente de alimentación. Entonces, hemos eliminado todas las partes innecesarias y solo el motor con dos cables se mantiene. Puede ver eso en la imagen a continuación.
Módulo de sensor ultrasónico HC-SR04
Para detectar los obstáculos, estamos utilizando el popular sensor de distancia ultrasónico HC-SR04 o podemos llamarlo sensores para evitar obstáculos. El funcionamiento es muy simple, primero, el módulo transmisor envía una onda ultrasónica que viaja a través del aire, golpea un obstáculo y rebota y el receptor recibe esa onda. Calculando el tiempo con Arduino, podemos determinar la distancia. En un artículo anterior sobre el proyecto de sensor de distancia ultrasónico basado en Arduino, hemos discutido el principio de funcionamiento de este sensor muy a fondo. Puede comprobarlo si desea saber más sobre el módulo de sensor de distancia ultrasónico HC-SR04.
Sensor de piso (sensor de infrarrojos) para detección de escaleras
En la sección de características, hemos hablado de una característica en la que el robot puede detectar escaleras y puede evitar caerse. Para hacer eso, estamos usando un sensor de infrarrojos. Haremos una interfaz entre el sensor IR y Arduino. El funcionamiento del Sensor de Proximidad IR es muy sencillo, tiene un LED IR y un fotodiodo, el LED IR emite luz IR y si algún obstáculo se acerca a esta luz emitida, se reflejará y se detectará la luz reflejada por el fotodiodo. Pero el voltaje generado por la reflexión será muy bajo. Para aumentar eso, podemos usar un comparador de amplificador operacional, podemos amplificar y obtener salida. Un módulo de infrarrojostiene tres pines: Vcc, tierra y salida. Por lo general, la salida es baja cuando un obstáculo se encuentra frente al sensor. Entonces, podemos usar esto para detectar el piso. Si por una fracción de segundo detectamos un alto del sensor, podemos detener el robot, darle la vuelta o hacer lo que queramos para evitar que se caiga de la escalera. En un artículo anterior, hicimos una versión de placa de pruebas del módulo de sensor de proximidad IR y explicamos el principio de funcionamiento en detalle, puede verificarlo si desea saber más sobre este sensor.
Diagrama de circuito del robot limpiador de pisos basado en Arduino
Contamos con tres sensores ultrasónicos que detectan obstáculos. Por lo tanto, necesitamos conectar todas las conexiones a tierra de los sensores ultrasónicos y conectarlos a una tierra común. Además, conectamos los tres Vcc del sensor y lo conectamos al pin VCC común. A continuación, conectamos los pines de disparo y eco a los pines PWM del Arduino. También conectamos el VCC del módulo IR a 5V y tierra al pin de tierra de Arduino, el pin de salida del módulo del sensor IR va al pin digital D2 del Arduino. Para el controlador del motor, conectamos los dos pines de habilitación a 5v y también el pin de voltaje del controlador a 5V porque estamos usando motores de 5 voltios. En un artículo anterior, hemos creado un Arduino Motor Driver Shield, puede consultarlo para obtener más información sobre L293D Motor Driver ICy sus operaciones. El Arduino, los módulos ultrasónicos, el controlador del motor y los motores funcionan con 5 voltios, el voltaje más alto lo matará y estamos usando la batería de 7.4 voltios, para convertir eso en 5 voltios, se usa el regulador de voltaje LM7805. Conecte la aspiradora directamente al circuito principal.
Construyendo el circuito para el robot de limpieza de pisos basado en Arduino
Para obtener algunas ideas sobre mi robot, busqué robots aspiradores en línea y obtuve algunas imágenes de robots de forma redonda. Entonces, decidí construir un robot de forma redonda. Para construir la persecución y el cuerpo del robot, tengo muchas opciones como láminas de espuma, MDF, cartón, etc. Pero elijo MDF porque es duro y tiene algunas propiedades resistentes al agua. Si está haciendo esto, puede decidir qué material elegirá para su bot.
Para construir el robot, tomé la hoja de MDF, luego dibujé dos círculos con un radio de 8 CM, y dentro de ese círculo, también dibujé otro círculo con un radio de 4 CMpara colocar la aspiradora. Luego corté los círculos. Además, corté y quité las piezas apropiadas para la trayectoria de la rueda (consulte las imágenes para una mejor comprensión). Finalmente, hice tres pequeños agujeros para la rueda giratoria. El siguiente paso es colocar los motores en la base utilizando sus soportes, también colocar y fijar la rueda giratoria en su posición. Después de eso, coloque los sensores ultrasónicos a la izquierda, a la derecha y al centro del robot. Además, conecte el módulo de infrarrojos a la parte inferior del robot. No olvide agregar el interruptor en el exterior. Se trata de construir el robot, si se está confundiendo en este punto, puede consultar las siguientes imágenes.
Para la parte superior, también dibujé un círculo de 11 CM de radio en la lámina de espuma y lo corté. Para el espacio entre la parte superior e inferior, corté tres piezas de 4 cm de largo de un tubo de plástico. Después de eso, pegué los espaciadores de plástico en la parte inferior y luego pegué la parte superior. Puede cubrir las partes laterales del bot con plástico o materiales similares si lo desea.
Arduino
El código completo de este proyecto se encuentra al final del documento. Este código Arduino es similar al código del sensor de distancia ultrasónico basado en Arduino, el único cambio es en la detección del piso. En las siguientes líneas, estoy explicando cómo funciona el código. En este caso, no estamos utilizando bibliotecas adicionales. A continuación, describimos el código paso a paso. No estamos utilizando bibliotecas adicionales para decodificar los datos de distancia del sensor HC-SR04, porque es muy simple. En las siguientes líneas, describimos cómo. Primero, necesitamos definir el Pin de disparo y el Pin de eco para los tres sensores de distancia ultrasónicos que están conectados a la placa Arduino. En este proyecto, tenemos tres pines Echo y tres pines Trigger. Tenga en cuenta que 1 es el sensor izquierdo, 2 es el sensor frontal y 3 es el sensor derecho.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Luego definimos variables para la distancia que son todas variables de tipo (int) y para la duración, elegimos usar (long). Nuevamente, tenemos tres de cada uno. Además, he definido un número entero para almacenar el estado del movimiento, lo hablaremos más adelante en esta sección.
larga duración1; larga duración2; larga duración3; int distancia izquierda; int distancefront; int distanceright; int a = 0;
A continuación, en la sección de configuración, necesitamos hacer todos los pines de perspectiva como entrada o salida usando la función pinModes () . Para enviar ondas ultrasónicas desde el módulo, necesitamos habilitar el pin de disparo en alto, es decir, todos los pines de disparo deben definirse como SALIDA. Y para recibir el eco, necesitamos leer el estado de los pines de eco para que todos los pines de eco se definan como INPUT. Además, habilitamos el monitor en serie para la resolución de problemas. Para leer el estado de los módulos IR, he definido el irpin como entrada.
pinMode (trigPin1, SALIDA); pinMode (trigPin2, SALIDA); pinMode (trigPin3, SALIDA); pinMode (echoPin1, ENTRADA); pinMode (echoPin2, ENTRADA); pinMode (echoPin3, ENTRADA); pinMode (irpin, ENTRADA);
Y estos pines digitales se definen como SALIDA para la entrada del controlador del motor.
pinMode (4, SALIDA); pinMode (7, SALIDA); pinMode (8, SALIDA); pinMode (12, SALIDA);
En el bucle principal, tenemos tres secciones para tres sensores. Todas las secciones funcionan igual pero cada una para sensores diferentes. En esta sección, leemos la distancia del obstáculo de cada sensor y la almacenamos en cada número entero definido. Para leer la distancia, primero tenemos que asegurarnos de que los pines del gatillo estén despejados, para eso, necesitamos configurar el pin del gatillo en LOW durante 2 µs. Ahora, para generar la onda ultrasónica, debemos girar el pasador de disparo ALTO durante 10 µs. Esto enviará el sonido ultrasónico y con la ayuda de la función pulseIn () , podemos leer el tiempo de viaje y almacenar ese valor en la variable " duración ". Esta función tiene 2 parámetros, el primero es el nombre del pin de eco y para el segundo, puede escribirALTA o BAJA. ALTO significa que la función pulseIn () esperará a que el pin se ponga ALTO causado por la onda de sonido rebotada y comenzará a contar, luego esperará a que el pin vaya a BAJO cuando la onda de sonido termine, lo que detendrá el conteo. Esta función da la longitud del pulso en microsegundos. Para calcular la distancia, multiplicaremos la duración por 0.034 (la velocidad del sonido en el aire es de 340 m / s) y la dividiremos por 2 (esto se debe al viaje de ida y vuelta de la onda de sonido). Finalmente, almacenamos la distancia de cada sensor en los números enteros correspondientes.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distancia izquierda = duración1 * 0.034 / 2;
Después de obtener la distancia de cada sensor, podemos controlar los motores con la ayuda de una declaración if, por lo que controlamos el movimiento del robot. Esto es muy simple, primero, le dimos un valor de distancia de obstáculo, en este caso, es de 15 cm (cambie este valor como desee). Luego dimos condiciones de acuerdo con ese valor. Por ejemplo, cuando un obstáculo se acerca al sensor izquierdo (eso significa que la distancia del sensor izquierdo debe ser inferior o igual a 15 cm) y las otras dos distancias son altas (eso significa que no hay ningún obstáculo frente a esos sensores), luego, con la ayuda de la función de escritura digital, podemos conducir los motores hacia la derecha. Más tarde, verifiqué el estado del sensor de infrarrojos. Si el robot está en el suelo, el valor del pin IR será BAJO, y si no, el valor seráALTA. Luego almacené ese valor en la variable int s . Vamos a controlar el robot de acuerdo con este estado.
Esta sección del Código se utiliza para mover el robot hacia adelante y hacia atrás :
if (s == HIGH) { digitalWrite (4, LOW); escritura digital (7, ALTA); digitalWrite (8, BAJO); escritura digital (12, ALTA); retraso (1000); a = 1; }
Pero hay un problema con este método cuando el motor se mueve hacia atrás, el piso regresa y el bot avanzará, y repetirá haciendo que el bot se atasque. Para superar eso, almacenamos un valor (1) en int después de comprender que floor no está presente. También comprobamos esta condición para otros movimientos.
Después de detectar la ausencia del piso, el robot no avanzará. En cambio, se moverá hacia la izquierda, de esta manera podemos evitar el problema.
if ((a == 0) && (s == BAJA) && (distancia izquierda <= 15 && distancia frente> 15 && distancia derecha <= 15) - (a == 0) && (s == BAJA) && (distancia izquierda> 15 && distancia frente> 15 && distancia derecha> 15))
En la condición anterior. Primero, el robot verificará el estado del piso y el valor entero. El bot solo avanzará si se cumplen todas las condiciones.
Ahora, podemos escribir los comandos para el controlador del motor. Esto impulsará el motor derecho hacia atrás y el motor izquierdo hacia adelante, girando así el robot hacia la derecha.
Esta sección del Código se utiliza para mover el robot a la derecha:
escritura digital (4, ALTA); digitalWrite (7, BAJO); escritura digital (8, ALTA); digitalWrite (12, BAJO);
Si el bot detecta que el piso está ausente, el valor cambia a 1 y el bot se moverá hacia la izquierda. Después de girar a la izquierda, el valor de 'a' cambia de 1 a 0.
if ((a == 1) && (s == BAJO) - (s == BAJO) && (distancia izquierda <= 15 && distancia frente <= 15 && distancia derecha> 15) - (s == BAJA) && (distancia izquierda <= 15 && distancia frente <= 15 && distancia derecha> 15) - (s == BAJA) && (distancia izquierda <= 15 && distancia frente> 15 && distancia derecha> 15) - (distancia izquierda <= 15 && distancia frente> 15 && distancia derecha> 15)) { digitalWrite (4, ALTA); digitalWrite (7, BAJO); digitalWrite (8, BAJO); escritura digital (12, ALTA); retraso (100); a = 0; }
Esta sección del Código se utiliza para mover el robot a la izquierda:
if ((s == BAJA) && (distancia izquierda> 15 && distancia frente <= 15 && distancia derecha <= 15) - (s == BAJA) && (distancia izquierda> 15 && distancia frente> 15 && distancia derecha <= 15) - (s == BAJA) && (distancia izquierda > 15 && distancia frente <= 15 && distancia derecha > 15)) { digitalWrite (4, BAJA); escritura digital (7, ALTA); escritura digital (8, ALTA); digitalWrite (12, BAJO); }
Eso es todo para construir un robot aspirador inteligente basado en Arduino. El funcionamiento completo del proyecto se puede encontrar en el video vinculado al final de esta página. Si tiene alguna pregunta, comente a continuación.