- Materiais necessários para construir um robô de limpeza de piso baseado em Arduino
- Aspirador de pó portátil
- Módulo Sensor Ultrassônico HC-SR04
- Sensor de piso (sensor infravermelho) para detecção de escada
- Diagrama de circuito do robô limpador de piso baseado em Arduino
- Construindo o circuito para o robô de limpeza de piso baseado em Arduino
- Arduino
No cenário atual, estamos todos tão ocupados com nosso trabalho que não temos tempo para limpar nossa casa adequadamente. A solução para o problema é muito simples, você só precisa comprar um robô aspirador doméstico como o irobot roomba que limpará sua casa com o apertar de um botão. Mas esses produtos comerciais são um problema comum, que é o custo. Então, hoje, decidimos fazer um robô limpador de piso simples , que além de ser simples de fazer custa muito menos em comparação com os produtos comerciais disponíveis no mercado. Os leitores frequentes devem se lembrar do nosso robô de limpeza a vácuo Arduino, que construímos há muito tempo, mas era muito volumoso e precisava de uma grande bateria de chumbo-ácido para se movimentar. O novo aspirador de pó Arduino que vamos construir aqui será compacto e mais prático. Além disso, este robô terá sensores ultrassônicos e um sensor de proximidade IR. O sensor ultrassônico permitirá que o robô evite obstáculos para que possa se mover livremente até que a sala seja devidamente limpa, e o sensor de proximidade o ajudará a evitar a queda de escadas. Todos esses recursos parecem interessantes, certo? Então vamos começar.
Em um de nossos artigos anteriores, criamos muitos bots como o robô de auto-equilíbrio, o robô de desinfecção de superfície automatizado e o robô para evitar obstáculos. Verifique se isso parece interessante para você.
Materiais necessários para construir um robô de limpeza de piso baseado em Arduino
Como usamos componentes muito genéricos para construir a seção de hardware do robô aspirador de pó, você deve conseguir encontrar todos eles em sua loja local de hobbies. Aqui está a lista completa do material necessário, juntamente com a imagem de todos os componentes.
- Arduino Pro Mini - 1
- Módulo Ultrassônico HC-SR04 - 3
- Motorista L293D - 1
- Motores 5Volt N20 e suportes de montagem - 2
- N20 Motor Wheels - 2
- Switch - 1
- Regulador de tensão LM7805 - 1
- Bateria de íon-lítio 7,4 V - 1
- Módulo IR - 1
- Perfboard - 1
- Roda giratória - 1
- MDF
- Aspirador de pó portátil genérico
Aspirador de pó portátil
Na seção de requisitos de componentes, falamos sobre um aspirador de pó portátil, as imagens abaixo mostram exatamente isso. É um aspirador portátil da Amazon. Isso vem com um mecanismo muito simples. Possui três partes na parte inferior (uma pequena câmara para armazenar a poeira, a parte do meio inclui o motor, o ventilador e o soquete da bateria na parte superior (há uma tampa ou tampa para a bateria). Tem um motor DC e um ventilador. Este motor é conectado diretamente a 3 V (2 baterias de 1,5 volts AA) por meio de um interruptor simples. Como estamos alimentando nosso robô com uma bateria de 7,4 V, cortaremos a conexão da bateria interna e alimentaremos de 5 V Assim, retiramos todas as peças desnecessárias e fica apenas o motor com dois fios, você pode ver na imagem abaixo
Módulo Sensor Ultrassônico HC-SR04
Para detectar os obstáculos, estamos usando o popular sensor de distância ultrassônico HC-SR04 ou podemos chamá-lo de sensores de prevenção de obstáculos. O funcionamento é muito simples, primeiro, o módulo transmissor envia uma onda ultrassônica que viaja pelo ar, atinge um obstáculo e ricocheteia e o receptor recebe essa onda. Calculando o tempo com o Arduino, podemos determinar a distância. Em um artigo anterior sobre o projeto de sensor de distância ultrassônico baseado em Arduino, discutimos o princípio de funcionamento desse sensor muito detalhadamente. Você pode verificar isso se quiser saber mais sobre o módulo sensor de distância ultrassônico HC-SR04.
Sensor de piso (sensor infravermelho) para detecção de escada
Na seção de recursos, falamos sobre um recurso em que o robô pode detectar escadas e evitar que caia. Para fazer isso, estamos usando um sensor de infravermelho. Faremos uma interface entre o sensor IR e o Arduino. O funcionamento do Sensor de Proximidade IR é muito simples, ele possui um LED IR e um fotodiodo, o LED IR emite luz IR e se algum obstáculo passar pela frente desta luz emitida, ele será refletido, e a luz refletida será detectada pelo fotodiodo. Mas a voltagem gerada pela reflexão será muito baixa. Para aumentar isso, podemos usar um comparador de amplificador operacional, podemos amplificar e obter a saída. Um módulo IRtem três pinos - Vcc, terra e saída. Normalmente, a saída é baixa quando um obstáculo surge na frente do sensor. Então, podemos usar isso para detectar o chão. Se por uma fração de segundo, detectarmos uma alta do sensor, podemos parar o robô, virá-lo ou fazer qualquer coisa que quisermos para evitar que ele caia da escada. Em um artigo anterior, fizemos uma versão breadboard do Módulo Sensor de Proximidade IR e explicamos o princípio de funcionamento em detalhes. Você pode verificar isso se quiser saber mais sobre este sensor.
Diagrama de circuito do robô limpador de piso baseado em Arduino
Temos três sensores ultrassônicos que detectam obstáculos. Portanto, precisamos conectar todos os aterramentos dos sensores ultrassônicos e conectá-los ao aterramento comum. Além disso, conectamos todos os três Vcc do sensor e os conectamos ao pino VCC comum. Em seguida, conectamos os pinos de disparo e eco aos pinos PWM do Arduino. Também conectamos o VCC do módulo IR a 5V e o aterramento ao pino terra do Arduino, o pino de saída do módulo sensor IR vai para o pino digital D2 do Arduino. Para o driver do motor, conectamos os dois pinos de habilitação a 5 V e também o pino de tensão do driver a 5 V, porque estamos usando motores de 5 volts. Em um artigo anterior, criamos um Arduino Motor Driver Shield, você pode conferi- lo para saber mais sobre o IC do driver do motor L293De suas operações. O Arduino, os módulos ultrassônicos, o driver do motor e os motores funcionam com 5 Volt, a voltagem mais alta vai matá-lo e estamos usando a bateria de 7,4 volt, para convertê-la em 5 Volt, é usado o regulador de voltagem LM7805. Conecte o aspirador diretamente ao circuito principal.
Construindo o circuito para o robô de limpeza de piso baseado em Arduino
Para ter algumas idéias sobre meu robô, pesquisei por robôs aspiradores de pó online e obtive algumas imagens de robôs redondos. Então, decidi construir um robô de formato redondo. Para construir a perseguição e o corpo do robô, tenho várias opções como folha de espuma, MDF, papelão, etc. Mas escolho o MDF porque é duro e tem algumas propriedades de resistência à água. Se estiver fazendo isso, você pode decidir qual material escolherá para seu bot.
Para construir o robô, peguei a folha de MDF, desenhei dois círculos com um raio de 8 CM e , dentro desse círculo, também desenhei outro círculo com um raio de 4 CMpara instalar o aspirador. Então eu cortei os círculos. Além disso, cortei e retirei as peças adequadas para o caminho da roda (consulte as imagens para melhor compreensão). Por fim, fiz três pequenos orifícios para a roda giratória. O próximo passo é encaixar os motores na base por meio de seus suportes, colocar e fixar a roda giratória em sua posição. Depois disso, coloque os sensores ultrassônicos à esquerda, à direita e no meio do robô. Além disso, conecte o módulo IR à parte inferior do robô. Não se esqueça de adicionar o interruptor externo. Isso é tudo sobre construir o robô, se você está ficando confuso neste ponto, você pode consultar as seguintes imagens.
Para a parte superior, também desenhei um círculo de 11 CM de raio na folha de espuma e o cortei. Para o espaçamento entre a parte superior e a inferior, cortei três pedaços de 4 CM de comprimento de um tubo de plástico. Depois disso, colei os espaçadores de plástico na parte inferior e depois colei a parte superior. Você pode cobrir as partes laterais do robô com plástico ou materiais semelhantes, se desejar.
Arduino
O código completo para este projeto é fornecido no final do documento. Este código do Arduino é semelhante ao código do sensor de distância ultrassônico baseado no Arduino, a única alteração está na detecção de piso. Nas linhas a seguir, estou explicando como o código funciona. Nesse caso, não estamos usando nenhuma biblioteca extra. A seguir, descrevemos o código passo a passo. Não estamos usando nenhuma biblioteca extra para decodificar os dados de distância do sensor HC-SR04, porque é muito simples. Nas linhas a seguir, descrevemos como. Primeiro, precisamos definir o Trigger Pin e o Echo Pin para todos os três sensores de distância ultrassônicos que estão conectados à placa Arduino. Neste projeto, temos três pinos Echo e três pinos Trigger. Observe que 1 é o sensor esquerdo, 2 é o sensor frontal e 3 é o sensor direito.
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;
Em seguida, definimos variáveis para a distância em que todas são variáveis do tipo (int) e para a duração, optamos por usar (longa). Novamente, temos três de cada. Além disso, defini um número inteiro para armazenar o status do movimento, falaremos sobre isso mais tarde nesta seção.
longa duração1; longa duração2; longa duração3; distância interna esquerda; int distancefront; int distanceright; int a = 0;
Em seguida, na seção de configuração, precisamos fazer todos os pinos de perspectiva como entrada ou saída usando a função pinModes () . Para enviar ondas ultrassônicas do módulo, precisamos habilitar o pino do gatilho para alto, ou seja, todos os pinos do gatilho devem ser definidos como OUTPUT. E para receber o eco, precisamos ler o estado dos pinos de eco para que todos os pinos de eco sejam definidos como INPUT. Além disso, ativamos o monitor serial para solução de problemas. Para ler o status dos módulos IR, defini o irpin como entrada.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
E esses pinos digitais são definidos como OUTPUT para a entrada do driver do motor.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
No loop principal, temos três seções para três sensores. Todas as seções funcionam da mesma forma, mas cada uma para sensores diferentes. Nesta seção, lemos a distância do obstáculo de cada sensor e a armazenamos em cada número inteiro definido. Para ler a distância, primeiro temos que nos certificar de que os pinos do gatilho estão claros, para isso, precisamos definir o pino do gatilho para BAIXO por 2 µs. Agora, para gerar a onda ultrassônica, precisamos girar o pino do gatilho para ALTO por 10 µs. Isso enviará o som ultrassônico e com a ajuda da função pulseIn () , podemos ler o tempo de viagem e armazenar esse valor na variável “ duração ”. Esta função tem 2 parâmetros, o primeiro é o nome do pino de eco e para o segundo, você pode escrever qualquer umALTO ou BAIXO. HIGH significa que a função pulseIn () irá esperar que o pino vá para ALTO causado pela onda de som rebatida e começará a contar, então irá esperar que o pino vá para BAIXO quando a onda de som terminar, o que irá parar a contagem. Esta função fornece a duração do pulso em microssegundos. Para calcular a distância, multiplicaremos a duração por 0,034 (a velocidade do som no ar é 340m / s) e dividiremos por 2 (isso se deve ao deslocamento da onda sonora para frente e para trás). Finalmente, armazenamos a distância de cada sensor em inteiros correspondentes.
digitalWrite (trigPin1, LOW); atrasoMicrosegundos (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duração1 = pulseIn (echoPin1, HIGH); distância esquerda = duração1 * 0,034 / 2;
Após obter a distância de cada sensor, podemos controlar os motores com a ajuda de uma instrução if, assim controlamos o movimento do robô. Isto é muito simples, primeiro demos um valor de distância do obstáculo, neste caso é 15cm (altere este valor como desejar). Então, demos condições de acordo com esse valor. Por exemplo, quando um obstáculo passa na frente do sensor esquerdo (isso significa que a distância do sensor esquerdo deve ser inferior ou igual a 15 cm) e as outras duas distâncias são altas (isso significa que nenhum obstáculo está na frente desses sensores), então, com a ajuda da função de gravação digital, podemos acionar os motores para a direita. Mais tarde, verifiquei o status do sensor de infravermelho. Se o robô estiver no chão, o valor do pino IR será BAIXO, e se não, o valor seráALTO. Em seguida, armazenei esse valor na variável int s . Vamos controlar o robô de acordo com este status.
Esta seção do código é usada para mover o robô para frente e para trás :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, ALTO); digitalWrite (8, BAIXO); digitalWrite (12, ALTO); atraso (1000); a = 1; }
Mas há um problema com este método quando o motor se move para trás, o chão volta e o bot se move para frente, e ele se repete fazendo o bot travar. Para superar isso, armazenamos um valor (1) em int depois que o piso não está presente. Também verificamos esta condição para outros movimentos.
Após detectar a ausência do piso, o robô não se moverá para frente. Em vez disso, ele se moverá para a esquerda, dessa forma, podemos evitar o problema.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
Na condição acima. Primeiro, o robô verificará o status do piso e o valor inteiro. O bot só avançará se todas as condições forem satisfeitas.
Agora, podemos escrever os comandos para o driver do motor. Isso fará com que o motor direito para trás e o esquerdo para frente, girando o robô para a direita.
Esta seção do código é usada para mover o robô para a direita:
digitalWrite (4, ALTO); digitalWrite (7, LOW); digitalWrite (8, ALTO); digitalWrite (12, LOW);
Se o bot detectar que o andar está ausente, o valor muda para 1 e o bot se move para a esquerda. Depois de virar à esquerda, o valor de 'a' muda de 1 para 0.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, BAIXO); digitalWrite (12, ALTO); atraso (100); a = 0; }
Esta seção do código é usada para mover o robô para a esquerda:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, ALTO); digitalWrite (8, ALTO); digitalWrite (12, LOW); }
É isso para construir um robô aspirador de pó inteligente baseado em Arduino. O funcionamento completo do projeto pode ser encontrado no vídeo com link no final desta página. Se você tiver alguma dúvida, comente abaixo.