Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Faça seu primeiro robô Arduino - O melhor guia para iniciantes!

Componentes e suprimentos

Arduino UNO
× 1
Adafruit L293D Motor Shield
É um dispositivo de baixo custo e fácil de usar. É um escudo motor comumente disponível que não requer nenhuma habilidade anterior. Também pode ser programado facilmente usando a biblioteca Adafruit.
× 1
Sensor ultrassônico HC-SR4
× 1
Módulo Bluetooth HC-05
× 1
Motor com engrenagem
× 2
Roda
× 2
Roda giratória
× 2
Bateria de 9 V (genérica)
× 3
Clipe de bateria 9V
× 3
Jumper feminino / feminino
× 8
Caixa de plástico
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Pistola de cola quente (genérica)
Chave de fenda

Aplicativos e serviços online

Bluetooth Electronics
Arduino IDE
Adafruit-Motor-Shield-library

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

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