Apesar do fato de que, nos tempos de geek, já existem vários artigos sobre aspiradores de pó robóticos no arduino aqui e aqui , acho que não será supérfluo publicar outro projeto. Além disso, fica um pouco mais próximo dos modelos de loja e, como o projeto está em constante desenvolvimento, ele ultrapassará alguns deles em funcionalidade ao longo do tempo. Publico este post com a permissão do desenvolvedor deste aspirador de pó robô, pois a autora não tem a oportunidade de publicar artigos de sua conta. Portanto, o artigo terá a forma de uma curta entrevista com o criador, combinada com esquemas, fotos e o código de um robô aspirador de pó. Mas vamos começar com uma demonstração em vídeo de como limpar a sala com este aspirador de pó.
Então, vamos começar com o design e o princípio de operação do aspirador de pó.
O diagrama mostra que o aspirador está equipado com 6 sensores infravermelhos. Eles funcionam quando o aspirador se aproxima do obstáculo, dando o comando para parar e se virar sem colidir com ele. Se nenhum dos 6 sensores funcionou e o aspirador de pó do robô colide com um obstáculo, um dos 2 interruptores que conectam o pára-choque (no qual os sensores de infravermelho estão localizados) e o corpo do robô é acionado.Leitores atentos perceberam que a potência do robô não é mostrada no diagrama. Aqui a solução é bastante padrão: são usadas 4 baterias do formato 18650, dois pares conectados em série através do controlador de descarga de carga da bateria. Além disso, os conversores DC-DC para cima e para baixo são conectados a partir do controlador através de um comutador. + 12 volts fornece motores de roda e motores de escova dianteira. +5 volts alimenta o restante dos eletrônicos. A turbina é alimentada por 7-8 volts, portanto, não é necessário um conversor. Parece assim:
Como resultado, a lista de componentes principais fica assim:arduino pro miniL298N Módulo de driver de motorrodasconversor de impulso conversorstep-downsensor IR sensor de 6 peças
impulsorcontrolador de descarga de cargapara uma turbina (cerca de 200 rublos)PVC para a fabricação de uma caixa debateria 18650 4 peças.2 motores para escovas (o modelo não é muito importante)1 motor para turbina2 interruptores de colisão.Uma das opções para um esboço para limpeza caóticaaqui#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);
}
//--------------------------------
Bem, uma pequena entrevista com o autor deste projeto. O nome do autor é Dmitry Ivanov, vive em Sochi.- Dmitry, como você teve a idéia de fazer um aspirador de pó robô?- Vi um vídeo no YouTube em que um aspirador de pó robô estava limpando, queria comprar um, mas quando olhei o preço, pensei e decidi fazer isso sozinho. Primeiro eu fiz a primeira versão do robô, ele tinha motores fracos sobre rodas, um contêiner fixo para detritos e poeira, poucos sensores de obstáculos e eu fiz a segunda versão, sem essas deficiências.- Quanto dinheiro e tempo foram necessários para fazê-lo?“Cerca de 5000 mil rublos. mais dois meses de trabalho ”- Qual foi o mais difícil durante o processo de construção?O mais difícil é fabricar o corpo e a turbina, para caber em todos os detalhes.- Algum plano para continuar melhorando o robô?Os planos são pintar o estojo, fazer vários modos de limpeza, conectar o módulo bluetooth e escrever um programa para o telefone no android (controle de modo, controle manual, exibição da carga da bateria). Bem, faça uma luz de fundo azul para beleza sob um aspirador de pó.Uma coleção de mais de 100 materiais de treinamento no arduino para iniciantes e profissionais pode ser encontrada aqui .PS O curso on-line sobre Arduino na Gimetays está aqui. Acho que neste momento otimista, terminaremos a história sobre esta versão do aspirador de p30 do robô, embora existam muitos momentos interessantes apagados. E assim concluímos com uma pergunta: