Aspiradora Robot Arduino

A pesar del hecho de que en geektime ya hay varios artículos sobre aspiradoras robóticas en arduino aquí y aquí , creo que no será superfluo publicar otro proyecto. Además, está un poco más cerca de los modelos de la tienda y, dado que el proyecto se desarrolla constantemente, superará a algunos de ellos en cuanto a funcionalidad con el tiempo. Publico esta publicación con el permiso del desarrollador de esta aspiradora robot, ya que la autora no tiene la oportunidad de publicar artículos de su cuenta. Por lo tanto, el artículo tendrá la forma de una breve entrevista con el creador mezclada con esquemas, fotos y el código de un robot aspirador. Pero comencemos con una demostración en video de limpiar la habitación con esta aspiradora.





Entonces, comencemos con el diseño y el principio de funcionamiento de la aspiradora.



El diagrama muestra que la aspiradora está equipada con 6 sensores infrarrojos. Funcionan cuando la aspiradora se acerca al obstáculo, dando la orden de detenerse y darse la vuelta sin chocar contra ella. Si ninguno de los 6 sensores funcionó y la aspiradora robot choca con un obstáculo, entonces uno de los 2 interruptores que conectan el parachoques (que contiene los sensores IR) y el cuerpo del robot se dispara.

Los lectores atentos han notado que la potencia del robot no se muestra en el diagrama. Aquí la solución es bastante estándar, se utilizan 4 baterías del formato 18650, dos pares conectados en serie a través del controlador de carga y descarga de la batería. Además, los convertidores CC-CC ascendentes y descendentes se conectan desde el controlador a través de un interruptor. + 12 voltios suministra motores de rueda y motores de cepillo frontal. +5 voltios alimenta el resto de la electrónica. La turbina funciona con 7-8 voltios, por lo que no se necesita un convertidor. Parece que este:



Como resultado, la lista de componentes principales tiene este aspecto:

arduino pro mini
L298N Motor módulo de controlador de
ruedas
convertidor elevador
paso hacia abajo convertidor
IR sensor 6 PC
de carga-descarga controlador
impulsor para una turbina (alrededor de 200 rublos)
PVC para fabricar una caja de
batería 18650 4 uds.
2 motores para escobillas (el modelo no es muy importante)
1 motor para turbina
2 interruptores de colisión.
Una de las opciones para un boceto de limpieza caótica.
aquí
#define mot_ena 9 //
#define mot_in1 8 //
#define mot_in2 7 //
#define mot_in3 6 //
#define mot_in4 4 //
#define mot_enb 10 //

#define ir_1 A0 // 1 -
#define ir_2 A1 // 2 -
#define ir_3 A2 // 3 -
#define ir_4 A3 // 4 -
#define ir_5 A4 // 5 -
#define ir_6 A5 // 6 -

#define lev_vik 11 //
#define pra_vik 12 //

//
byte max_skor_lev = 254;
byte max_skor_prav = 244;
//---------------------------------

byte min_skor = 0;

void setup() {

randomSeed(analogRead(A7));
//
pinMode(3, INPUT); //
pinMode(2, INPUT); //
//-------------------------
//
pinMode(mot_ena, OUTPUT);
pinMode(mot_in1, OUTPUT);
pinMode(mot_in2, OUTPUT);
pinMode(mot_in3, OUTPUT);
pinMode(mot_in4, OUTPUT);
pinMode(mot_enb, OUTPUT);
//-------------------------------------------
// -
pinMode(ir_1, INPUT);
pinMode(ir_2, INPUT);
pinMode(ir_3, INPUT);
pinMode(ir_4, INPUT);
pinMode(ir_5, INPUT);
pinMode(ir_6, INPUT);
//-------------------------
//
pinMode(lev_vik, INPUT);
pinMode(pra_vik, INPUT);
//---------------------------
delay(3000);

ROB_VPERED();
}

void loop() {

//
if (digitalRead(lev_vik) == LOW)
{
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
//
if (digitalRead(pra_vik) == LOW)
{
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 2 -
if (digitalRead(ir_2) == LOW)
{
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 3 -
if (digitalRead(ir_3) == LOW)
{
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 4 -
if (digitalRead(ir_4) == LOW)
{
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 5 -
if (digitalRead(ir_5) == LOW)
{
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 1 -
if (digitalRead(ir_1) == LOW)
{
ROB_PRAV();
delay(10);
ROB_VPERED();
}
//-----------------------------------------------
// 6 -
if (digitalRead(ir_6) == LOW)
{
ROB_LEV();
delay(10);
ROB_VPERED();
}
//-----------------------------------------------

}

//
void ROB_PRAV()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
}
//-----------------
//
void ROB_LEV()
{
//
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
//
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
}
//---------------------
//
void ROB_VPERED()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
}
//-------------------------------------
//
void ROB_NAZAD()
{
//
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
}
//------------------------------------
//
void ROB_STOP()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, min_skor);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, min_skor);
}
//--------------------------------

Bueno, una pequeña entrevista con el autor de este proyecto. El nombre del autor es Dmitry Ivanov, vive en Sochi.

- Dmitry, ¿cómo se te ocurrió hacer un robot aspirador?

- Vi un video en YouTube donde un robot aspirador estaba limpiando, quería comprar uno, pero cuando miré el precio, pensé y decidí hacerlo yo mismo. Primero hice la primera versión del robot, tenía motores débiles sobre ruedas, un contenedor fijo para escombros y polvo, pocos sensores de obstáculos, e hice la segunda versión, carente de estas deficiencias.

- ¿Cuánto dinero y tiempo tardó en hacerlo?

“Alrededor de 5000 mil rublos. más dos meses de trabajo ”

. ¿Qué fue lo más difícil durante el proceso de construcción?

Lo más difícil es hacer una carcasa y una turbina, para adaptarse a todos los detalles.

- ¿Algún plan para seguir mejorando el robot?

Los planes son pintar la carcasa, realizar varios modos de limpieza, conectar el módulo bluetooth y escribir un programa para el teléfono en Android (control de modo, control manual, visualización de la carga de la batería). Bueno, haz una luz de fondo azul para la belleza debajo de una aspiradora. Aquí

se puede encontrar una colección de más de 100 materiales de capacitación sobre arduino para principiantes y profesionales . PD: El curso en línea sobre Arduino en Gimetays está aquí. Creo que en este momento optimista terminaremos la historia sobre esta versión del robot aspirador, aunque hay muchos momentos interesantes sin encender. Y así concluimos con una pregunta:

Source: https://habr.com/ru/post/es382131/


All Articles