Faça seu primeiro robô Arduino - O melhor guia para iniciantes!
Componentes e suprimentos
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
![]() |
| × | 3 | |||
![]() |
| × | 3 | |||
![]() |
| × | 8 | |||
| × | 1 |
Ferramentas e máquinas necessárias
![]() |
| |||
![]() |
| |||
|
Aplicativos e serviços online
| ||||
![]() |
| |||
|
Sobre este projeto
Se você é um iniciante no Arduino e tem um plano para fazer seu primeiro robô, aqui está o tutorial para você. Veja as imagens do que você vai construir hoje.


Neste tutorial vou mostrar como fazer um robô Arduino com diferentes funcionalidades. Podemos aprender a usar diferentes programas para diferentes funções, principalmente um robô controlado por telefone inteligente com avoider de obstáculos, seguidor de parede e solucionador de labirintos. Ou você também pode fazer isso para apenas uma função.
Materiais e ferramentas





Etapa 2:construção do chassi


Faça dois furos para o motor:

Conecte dois motores:

Faça três orifícios para o rodízio:

Conecte a roda giratória:

Faça dois furos em cada lado da caixa para conectar os motores e três furos na parte inferior para conectar a roda giratória após medir e marcar o diâmetro correto. Em seguida, instale os motores e o rodízio.
Baterias

Conectando as baterias.

Diagrama de ligação.

Cole as baterias dentro da caixa.

Monte duas baterias de 9 volts dentro da caixa acima do rodízio. Em seguida, conecte-os em paralelo e conecte uma chave conforme mostrado no diagrama acima.
Conectando o Arduino e o Motor Shield

Anexe a blindagem do motor acima do Arduino.

Conecte os fios da bateria ao PWR terminais da blindagem do motor.

Conecte os motores à blindagem do motor.

Remova o jumper desta porta.

Conecte a blindagem do motor acima do Arduino e coloque-a acima da bateria. Em seguida, conecte os fios dos motores e da bateria à blindagem do motor. Verifique o diagrama de conexão antes de conectar, pois é muito importante.
Instruções de ligação:
- Conecte o motor esquerdo a "M1" da blindagem do motor
- Conecte o motor correto ao "M3" da blindagem do motor
- Conecte o fio da bateria ao "ext pwr" da blindagem do motor
Faça dois furos e ligue o Arduino

Marque o local para fazer orifícios.

Faça os furos.

Conecte o clipe da bateria ao conector macho DC à bateria de 9V.

Coloque esta bateria de 9 volts dentro da caixa.

Faça dois furos para acessar a porta USB e a porta de entrada DC do Arduino. Pegue outra bateria de 9 volts e conecte um clipe de bateria a um adaptador de conector DC macho, em seguida, conecte o conector DC macho à porta de entrada do Arduino DC, para alimentar o Arduino. Em seguida, coloque a bateria entre os motores e o Arduino dentro da caixa.
Conectando Módulo Bluetooth e Switch






Conecte o módulo Bluetooth ao Arduino conforme mostrado no diagrama de conexão e coloque-o dentro da caixa. Em seguida, faça um orifício para montar a chave na parte de trás da caixa e conecte a chave (aqui eu mudei a chave que é usada anteriormente por causa de algum problema de solda).
Instruções de fiação do módulo Bluetooth:
- "TX" do Módulo Bluetooth vai para "RX" do Arduino
- "RX" do Módulo Bluetooth vai para "TX" do Arduino
- "VCC" do módulo Bluetooth vai para "5v" do Arduino
- "GND" do Módulo Bluetooth vai para "GND" do Arduino
- Os pinos de estado e chave dos módulos BT não são usados.
Diagrama geral do circuito

Montagem ultrassônica do sensor




Pegue o sensor ultrassônico e cole um pequeno pedaço de plástico em forma de 'L' nele e cole-o no topo da caixa de plástico (ou se você não tiver um bastão de cola, use fita dupla-face). Em seguida, conecte os fios do jumper conforme mostrado no diagrama de circuito acima.
Instruções de fiação do sensor ultrassônico:
- "VCC" do sensor Ultra sônico vai para "+5" do Arduino
- "GND" do sensor ultrassônico vai para "GND" do Arduino
- O pino "Trig" do sensor Ultra sônico vai para o "Pino analógico 1" do Arduino
- O pino "Echo" do sensor Ultra sônico vai para o "pino analógico 0" do Arduino
Terminamos todas as conexões e é hora de programar.
Última etapa - códigos Arduino e edição de aplicativo Bluetooth

Carregue o " Esboço Final "fornecido na seção de código. Se você encontrar algum erro, certifique-se de ter instalado a biblioteca AFmotor.
Agora, aprendemos como programar um Arduino facilmente. Eu mostrei aqui alguns programas para trabalhar este robô como um obstáculo evitando robô, seguidor de parede e controlado por Bluetooth. e, finalmente, combinei essas três funções. Assista ao vídeo para mais detalhes e informações
Introdução ao aplicativo Bluetooth
Um pouco de diversão com o Wall Follower e a prevenção de obstáculos
Visite meu blog aqui - robotechmaker.com
Se você tiver alguma dúvida ou sugestão, comente abaixo.
Código
- Esboço Bluetooth (robô controlado)
- Esboço final (código final)
- Esboço do obstáculo Avoider
- Esboço do seguidor de parede
Bluetooth (robô controlado) Sketch Arduino
/ * Autor:Marcelo Moraes Este projeto contém código de domínio público. A modificação é permitida sem aviso prévio. * /// Libraries # include// ObjectsAF_DCMotor motorRight (1, MOTOR12_64KHZ); // cria o motor # 1, 64KHz pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // cria motor # 3, 64KHz pwm // Constantes e variablechar dataIn ='S'; char determinant; char det; int vel =0; // Configuração do Bluetooth Stuffvoid () {Serial.begin (9600); // configurar a biblioteca serial em 9600 bps // Mensagens de inicialização Serial.println ("ArduinoBymyself - ROVERBot"); Serial.println ("Teste do motor AF!"); // desligue os motores motorRight.setSpeed (0); motorLeft.setSpeed (0); motorRight.run (RELEASE); motorLeft.run (RELEASE); } void loop () {det =check (); // chama a subrotina check () para obter o código serial // switch de análise do código serial (det) {case 'F':// F, move forward motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; caso 'B':// B, retroceder motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (PARA TRÁS); motorLeft.run (PARA TRÁS); det =verificar (); pausa; case 'L':// L, move as rodas para a esquerda motorRight.setSpeed (vel); motorLeft.setSpeed (vel / 4); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'R':// R, mova as rodas para a direita motorRight.setSpeed (vel / 4); motorLeft.setSpeed (vel); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'I':// I, vire à direita para frente motorRight.setSpeed (vel / 2); motorLeft.setSpeed (vel); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'J':// J, volta à direita motorRight.setSpeed (vel / 2); motorLeft.setSpeed (vel); motorRight.run (PARA TRÁS); motorLeft.run (PARA TRÁS); det =verificar (); pausa; case 'G':// G, vire à esquerda para a frente motorRight.setSpeed (vel); motorLeft.setSpeed (vel / 2); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'H':// H, volta à esquerda motorRight.setSpeed (vel); motorLeft.setSpeed (vel / 2); motorRight.run (PARA TRÁS); motorLeft.run (PARA TRÁS); det =verificar (); pausa; case 'S':// S, para motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (RELEASE); motorLeft.run (RELEASE); det =verificar (); pausa; }} // obter o código bluetooth recebido do portint serial check () {if (Serial.available ()> 0) {// se houver dados válidos na porta serial dataIn =Serial.read (); // armazena os dados em a varialbe // verificar o código if (dataIn =='F') {// Forward determinant ='F'; } else if (dataIn =='B') {// Backward determinant ='B'; } else if (dataIn =='L') {// Determinante esquerdo ='L'; } else if (dataIn =='R') {// Determinante direito ='R'; } else if (dataIn =='I') {// Determinante de Froward Right ='I'; } else if (dataIn =='J') {// Determinante para trás à direita ='J'; } else if (dataIn =='G') {// Forward Left determinant ='G'; } else if (dataIn =='H') {// Backward Left determinant ='H'; } else if (dataIn =='S') {// Stop determinant ='S'; } else if (dataIn =='0') {// Velocidade 0 vel =0; } else if (dataIn =='1') {// Velocidade 25 vel =25; } else if (dataIn =='2') {// Velocidade 50 vel =50; } else if (dataIn =='3') {// Velocidade 75 vel =75; } else if (dataIn =='4') {// Velocidade 100 vel =100; } else if (dataIn =='5') {// Velocidade 125 vel =125; } else if (dataIn =='6') {// Velocidade 150 vel =150; } else if (dataIn =='7') {// Velocidade 175 vel =175; } else if (dataIn =='8') {// Velocidade 200 vel =200; } else if (dataIn =='9') {// Velocidade 225 vel =225; } else if (dataIn =='q') {// Velocidade 255 vel =255; } else if (dataIn =='U') {// Luzes de fundo acesas determinant ='U'; } else if (dataIn =='u') {// Luzes de fundo desligadas determinant ='u'; } else if (dataIn =='W') {// Luzes frontais acesas determinante ='W'; } else if (dataIn =='w') {// Luzes frontais desligadas determinante ='w'; } else if (dataIn =='V') {// Horn On determinant ='V'; } else if (dataIn =='v') {// Horn Off determinant ='v'; } else if (dataIn =='X') {// Extra On determinant ='X'; } else if (dataIn =='x') {// Extra Off determinant ='x'; }} determinante de retorno;}
Esboço final (código final) Arduino
/ * Autor:Muhammed Azharvisit - robotechmaker.com * / # include#define trigPin 14 // define os pinos do seu sensor # define echoPin 15 // ObjectsAF_DCMotor motorRight (1, MOTOR12_64KHZ); // cria o motor # 1, 64KHz pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // cria motor # 3, 64KHz pwm // Constantes e variablechar dataIn ='S'; char determinant; char det; int vel =255; // Configuração do Bluetooth Stuffvoid () {Serial.begin (9600); // configurar a biblioteca serial em 9600 bps pinMode (trigPin, OUTPUT); // definir o pino trigonométrico para saída (enviar ondas sonoras) pinMode (echoPin, INPUT); // definir o pino de eco para entrada (receber ondas sonoras) / / Mensagens de inicialização Serial.println ("Mr.robot"); Serial.println ("Reday para trabalhar!"); // desligue os motores motorRight.setSpeed (0); motorLeft.setSpeed (0); motorRight.run (RELEASE); motorLeft.run (RELEASE);} void loop () {det =check (); // chama a subrotina check () para obter o código serial // switch de análise do código serial (det) {case 'F':// F, move forward motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; caso 'B':// B, retroceder motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (PARA TRÁS); motorLeft.run (PARA TRÁS); det =verificar (); pausa; case 'L':// L, move as rodas para a esquerda motorRight.setSpeed (vel); motorLeft.setSpeed (vel / 4); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'R':// R, mova as rodas para a direita motorRight.setSpeed (vel / 4); motorLeft.setSpeed (vel); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'I':// I, vire à direita para frente motorRight.setSpeed (vel / 2); motorLeft.setSpeed (vel); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'J':// J, volta à direita motorRight.setSpeed (vel / 2); motorLeft.setSpeed (vel); motorRight.run (PARA TRÁS); motorLeft.run (PARA TRÁS); det =verificar (); pausa; case 'G':// G, vire à esquerda para a frente motorRight.setSpeed (vel); motorLeft.setSpeed (vel / 2); motorRight.run (FORWARD); motorLeft.run (FORWARD); det =verificar (); pausa; case 'H':// H, volta à esquerda motorRight.setSpeed (vel); motorLeft.setSpeed (vel / 2); motorRight.run (PARA TRÁS); motorLeft.run (PARA TRÁS); det =verificar (); pausa; case 'S':// S, para motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (RELEASE); motorLeft.run (RELEASE); det =verificar (); pausa; case 'm':// para robô seguidor de parede. motorRight.setSpeed (vel); // define a velocidade dos motores, entre 0-255 motorLeft.setSpeed (vel); longa duração, distância; // inicia a varredura digitalWrite (trigPin, LOW); atrasoMicrosegundos (2); // atrasos são necessários para uma operação bem-sucedida do sensor. digitalWrite (trigPin, HIGH); atrasoMicrosegundos (10); // este atraso também é necessário! digitalWrite (trigPin, LOW); duração =pulseIn (echoPin, HIGH); distance =(duration / 2) / 29.1; // converter a distância em centímetros. if (distance <30) / * A distância que precisa manter com a parede * / {Serial.println ("Wall is ditected!"); Serial.println ("Começou seguindo a parede"); Serial.println (" Girando !"); motorRight.setSpeed (vel); motorLeft.setSpeed (0); motorRight.run (FORWARD); motorLeft.run (RELEASE); atraso (500); // aguarde um segundo} else {Serial.println ("Nenhuma parede detectada. girando"); atraso (15); motorRight.setSpeed (0); motorLeft.setSpeed (vel); motorRight.run (RELEASE); motorLeft.run (FORWARD); } pausa; case 'b':// robô que evita obstáculos motorRight.setSpeed (vel); // define a velocidade dos motores, entre 0-255 motorLeft.setSpeed (vel); long Aduration, Adistance; // inicia a varredura digitalWrite (trigPin, LOW); atrasoMicrosegundos (2); // atrasos são necessários para uma operação bem-sucedida do sensor. digitalWrite (trigPin, HIGH); atrasoMicrosegundos (10); // este atraso também é necessário! digitalWrite (trigPin, LOW); Aduração =pulseIn (echoPin, HIGH); Adistance =(Aduration / 2) / 29.1; // converter a distância em centímetros. if (Adistance <25) / * se houver um obstáculo de 25 centímetros, à frente, faça o seguinte:* / {Serial.println ("Fechar obstáculo detectado!"); Serial.println ("Detalhes do obstáculo:"); Serial.print ("Distance From Robot is"); Serial.print (Adistance); Serial.print ("CM!"); // imprimir a distância em centímetros.Serial.println ("O obstáculo é declarado uma ameaça devido à curta distância . "); Serial.println (" Virando! "); motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorLeft.run (PARA TRÁS); // Vire enquanto houver um obstáculo à frente. motorRight.run (FORWARD);} else {Serial.println ("Nenhum obstáculo detectado. indo para a frente"); atraso (15); motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (FORWARD); // se não houver nenhum obstáculo à frente, vá em frente! motorLeft.run (FORWARD); } pausa; }} // obter o código bluetooth recebido do portint serial check () {if (Serial.available ()> 0) {// se houver dados válidos na porta serial dataIn =Serial.read (); // armazena os dados em a varialbe // verificar o código if (dataIn =='F') {// Forward determinant ='F'; } else if (dataIn =='B') {// Backward determinant ='B'; } else if (dataIn =='L') {// Determinante esquerdo ='L'; } else if (dataIn =='R') {// Determinante direito ='R'; } else if (dataIn =='I') {// Determinante de Froward Right ='I'; } else if (dataIn =='J') {// Determinante para trás à direita ='J'; } else if (dataIn =='G') {// Forward Left determinant ='G'; } else if (dataIn =='H') {// Backward Left determinant ='H'; } else if (dataIn =='S') {// Stop determinant ='S'; } else if (dataIn =='0') {// Velocidade 0 vel =0; } else if (dataIn =='1') {// Velocidade 25 vel =25; } else if (dataIn =='2') {// Velocidade 50 vel =50; } else if (dataIn =='3') {// Velocidade 75 vel =75; } else if (dataIn =='4') {// Velocidade 100 vel =100; } else if (dataIn =='5') {// Velocidade 125 vel =125; } else if (dataIn =='6') {// Velocidade 150 vel =150; } else if (dataIn =='7') {// Velocidade 175 vel =175; } else if (dataIn =='8') {// Velocidade 200 vel =200; } else if (dataIn =='9') {// Velocidade 225 vel =225; } else if (dataIn =='b') {// Extra On determinant ='b'; } else if (dataIn =='m') {// Extra On determinant ='m'; }} determinante de retorno;}
Obstáculo Avoider Sketch Arduino
/ * Autor:Muhammed Azharvisit - robotechmaker.com * / # include#define trigPin 14 // define os pinos do seu sensor # define echoPin 15 int vel =255; // Velocidade do robô // ObjectsAF_DCMotor motorRight (1, MOTOR12_64KHZ); // cria o motor # 1, 64KHz pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // cria o motor nº 3, 64 KHz pwmvoid setup () {Serial.begin (9600); // configurar a biblioteca serial em 9600 bps pinMode (trigPin, OUTPUT); // definir o pino trigonométrico para saída (enviar ondas sonoras) pinMode (echoPin, INPUT); // definir o pino de eco para entrada (receber ondas sonoras) / / Mensagens de inicialização Serial.println ("Mr.robot"); Serial.println ("Reday para trabalhar!"); // desligue os motores motorRight.setSpeed (0); motorLeft.setSpeed (0); motorRight.run (RELEASE); motorLeft.run (RELEASE);} void loop () {// robô que evita obstáculos motorRight.setSpeed (vel); // define a velocidade dos motores, entre 0-255 motorLeft.setSpeed (vel); longa duração, distância; // inicia a varredura digitalWrite (trigPin, LOW); atrasoMicrosegundos (2); // atrasos são necessários para uma operação bem-sucedida do sensor. digitalWrite (trigPin, HIGH); atrasoMicrosegundos (10); // este atraso também é necessário! digitalWrite (trigPin, LOW); duração =pulseIn (echoPin, HIGH); distance =(duration / 2) / 29.1; // converter a distância em centímetros. if (distância <25) / * se houver um obstáculo de 25 centímetros, à frente, faça o seguinte:* / {Serial.println ("Fechar obstáculo detectado!"); Serial.println ("Detalhes do obstáculo:"); Serial.print ("A distância do robô é"); Serial.print (distância); Serial.print ("CM!"); // imprime a distância em centímetros.Serial.println ("O obstáculo é declarado uma ameaça devido à curta distância . "); Serial.println (" Virando! "); motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorLeft.run (PARA TRÁS); // Vire enquanto houver um obstáculo à frente. motorRight.run (FORWARD);} else {Serial.println ("Nenhum obstáculo detectado. indo para a frente"); atraso (15); motorRight.setSpeed (vel); motorLeft.setSpeed (vel); motorRight.run (FORWARD); // se não houver nenhum obstáculo à frente, vá em frente! motorLeft.run (FORWARD); }}
Esboço do seguidor de parede Arduino
/ * Autor:Muhammed Azharvisit - robotechmaker.com * / # include#define trigPin 14 // define os pinos do seu sensor # define echoPin 15 int vel =255; // Velocidade do robô // ObjectsAF_DCMotor motorRight (1, MOTOR12_64KHZ); // cria o motor # 1, 64KHz pwmAF_DCMotor motorLeft (3, MOTOR12_64KHZ); // cria o motor nº 3, 64 KHz pwmvoid setup () {Serial.begin (9600); // configurar a biblioteca serial em 9600 bps pinMode (trigPin, OUTPUT); // definir o pino trigonométrico para saída (enviar ondas sonoras) pinMode (echoPin, INPUT); // definir o pino de eco para entrada (receber ondas sonoras) / / Mensagens de inicialização Serial.println ("Mr.robot"); Serial.println ("Reday para trabalhar!"); // desligue os motores motorRight.setSpeed (0); motorLeft.setSpeed (0); motorRight.run (RELEASE); motorLeft.run (RELEASE);} void loop () {// para robô seguidor de parede. motorRight.setSpeed (vel); // define a velocidade dos motores, entre 0-255 motorLeft.setSpeed (vel); longa duração, distância; // inicia a varredura digitalWrite (trigPin, LOW); atrasoMicrosegundos (2); // atrasos são necessários para uma operação bem-sucedida do sensor. digitalWrite (trigPin, HIGH); atrasoMicrosegundos (10); // este atraso também é necessário! digitalWrite (trigPin, LOW); duração =pulseIn (echoPin, HIGH); distance =(duration / 2) / 29.1; // converter a distância em centímetros. if (distance <30) / * A distância que precisa manter com a parede * / {Serial.println ("Wall is ditected!"); Serial.println ("Começou seguindo a parede"); Serial.println ("Virando!"); motorRight.setSpeed (vel); motorLeft.setSpeed (0); motorRight.run (FORWARD); motorLeft.run (RELEASE); atraso (500); // aguarde um segundo} else {Serial.println ("Nenhuma parede detectada. girando"); atraso (15); motorRight.setSpeed (0); motorLeft.setSpeed (vel); motorRight.run (RELEASE); motorLeft.run (FORWARD); }}
Esquemas

Processo de manufatura
- Os melhores acessórios para o seu Raspberry Pi
- Práticas recomendadas de rastreamento de ativos:como aproveitar ao máximo seus dados de ativos arduamente conquistados
- Como tirar o melhor proveito de sua cadeia de suprimentos agora mesmo
- Robô para navegação interna supercool
- Montagens de motor 101:O guia para escolher o melhor material de montagem de motor
- Seu guia definitivo para os melhores produtos agrícolas industriais
- Seu guia para as melhores marcas de guindastes
- O melhor guia de compra de impressora 3D para sua oficina mecânica
- A melhor maneira de construir seu protótipo de IoT
- CNC Wire EDM:seu melhor amigo na oficina