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

Robô seguidor de linha de controle PID

Componentes e suprimentos

Chassi de alumínio anodizado KittenBot
× 1
KittenBot RosBot Rodapé
× 1
Rodízio de esferas de diâmetro KittenBot com esfera de metal (par)
× 1
Roda de borracha KittenBot com conjunto de cubo do motor (par)
× 1
KittenBot 5-Channel IR Line-Follwing Tracker Sensor
× 1
Motor DC (genérico)
× 1
Bateria de 9 V (genérica)
× 1
Arduino UNO
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto





Visão geral


Um recurso de que a maioria dos robôs autônomos rover precisa é o seguimento de linha. O objetivo deste projeto é construir um robô seguidor de linha e começar a aprender o controlador PID de uma forma divertida.





Peças


O robô funciona corretamente com dois motores, o Rosbot Baseboard e um sensor de 5 canais. Ao contrário de outros, você não precisa comprar driver de motor H-bridge extra ou vários componentes, uma vez que o Rosbot Baseboard tem 2x H-bridge dual driver embutido. Simplesmente conecta os motores à placa de base do Rosbot e ele fornecerá mais energia do que o Arduino Uno.


  • Estrutura do robô: Chassi de alumínio anodizado KittenBot

Chassis legal e sólido que tem toneladas de orifícios de montagem (4.8mm LEGO Technic), você pode definitivamente reutilizar este chassi para outros projetos divertidos.
  • Cérebro do robô :Rodapé RosBot

Uma placa-mãe baseada em Arduino UNO com 2 drivers de motor dual H-bridge integrados.
  • Olhos de robô :Sensor rastreador de seguimento de linha IV de 5 canais

Detector infravermelho de 5 canais, mais preciso e estável.





Etapa 1:montagem


Este robô é bastante fácil de montar, siga as instruções e leva cerca de 15 minutos.

Primeiro, prenda seus motores nas laterais do chassi, simplesmente conecte a roda de borracha.

Monte o sensor IR de 5 canais na parte frontal do chassi.

Prenda sua placa de base Rosbot ao chassi, então o robô está pronto para ser conectado.





Etapa 2:torcer


A seguir estão as conexões para o sensor IR de 5 canais:
  • VCC a 5V
  • GND para RosBot's GND
  • T1-T4 para pino A0-A3
  • T5 para fixar SDA

Os motores DC simplesmente vão para os pinos A + A- e B + B-.





Codificação


Nos códigos, temos uma máquina de estado que indica cada saída possível da matriz de sensores. O robô se move para uma determinada direção de acordo com a saída da matriz de sensores.
  void stateMachine (int a) {switch (a) {case B00000:outlineCnt ++; pausa; case B11111:outlineCnt ++; pausa; caso B00010:caso B00110:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (0, 50, 0)); viés =1; pausa; case B00001:case B00011:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (0, 200, 0)); viés =2; pausa; caso B00100:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (0, 0, 20)); polarização =0; pausa; case B01000:case B01100:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (50, 0, 0)); polarização =-1; pausa; case B10000:case B11000:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (200, 0, 0)); polarização =-2; pausa; padrão:Serial.println (a, BIN); esboçoCnt ++; pausa; }  

Já configuramos o valor de Erro, termo de proporção, termo integral e termo derivativo.
  float Kp =25; float Ki =0,15; float Kd =1200; erro float, errorLast, erroInte; float calcPid (entrada flutuante) {float errorDiff; saída flutuante; erro =erro * 0,7 + entrada * 0,3; // filtro // erro =entrada; errorDiff =erro - errorLast; erroInte =restrição (erroInte + erro, -50, 50); saída =Kp * erro + Ki * erroInte + Kd * erroDiff; Serial.print (erro); Serial.print (''); Serial.print (erroInte); Serial.print (''); Serial.print (errorDiff); Serial.print (''); Serial.println (saída); errorLast =erro; retorno de saída;  

Manipule os valores para encontrar o melhor ajuste para o seu robô.

Código

  • Robô seguidor de linha
Robô seguidor de linha Arduino
Nos códigos, incluímos um NeoPixel de Adafruit, mas isso é opcional.
 #include  #define S_NULL 0 # define S_ONTRACE 1Adafruit_NeoPixel pixels =Adafruit_NeoPixel (4, 4, NEO_GRB + int_KHZ800); spdL, int spdR) {spdR =-spdR; if (spdL <0) {analogWrite (5, 0); analogWrite (6, -spdL); } else {analogWrite (5, spdL); analogWrite (6, 0); } if (spdR <0) {analogWrite (9, 0); analogWrite (10, -spdR); } else {analogWrite (9, spdR); analogWrite (10, 0); }} int bias =0; int outlineCnt =0; void stateMachine (int a) {switch (a) {case B00000:outlineCnt ++; pausa; case B11111:outlineCnt ++; pausa; caso B00010:caso B00110:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (0, 50, 0)); viés =1; pausa; case B00001:case B00011:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (0, 200, 0)); viés =2; pausa; caso B00100:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (0, 0, 20)); polarização =0; pausa; case B01000:case B01100:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (50, 0, 0)); polarização =-1; pausa; case B10000:case B11000:outlineCnt =0; pixels.setPixelColor (2, pixels.Color (200, 0, 0)); polarização =-2; pausa; padrão:Serial.println (a, BIN); esboçoCnt ++; pausa; } pixels.setPixelColor (0, pixels.Color (outlineCnt * 10, 0, 0)); if (outlineCnt> 10) {doDcSpeed ​​(0,0); } else {float ff =150; float ctrl =calcPid (polarização); doDcSpeed ​​(ff-ctrl, ff + ctrl); } pixels.show ();} float Kp =25; float Ki =0,15; float Kd =1200; erro de float, errorLast, erroInte; float calcPid (entrada de float) {float errorDiff; saída flutuante; erro =erro * 0,7 + entrada * 0,3; // filtro // erro =entrada; errorDiff =erro - errorLast; erroInte =restrição (erroInte + erro, -50, 50); saída =Kp * erro + Ki * erroInte + Kd * erroDiff; Serial.print (erro); Serial.print (''); Serial.print (erroInte); Serial.print (''); Serial.print (errorDiff); Serial.print (''); Serial.println (saída); errorLast =erro; retorno de saída;} int echoTrace () {int ret =0; int a [5]; para (int i =0; i <5; i ++) {a [i] =restrição ((1025 - analogRead (A0 + i)) / 10 - 4, 0, 20); if (a [i]> 2) ret + =(0x1 < 
LinefollowRobot
https://github.com/KittenBot/LinefollowRobot

Esquemas


Processo de manufatura

  1. O Futuro da Robótica
  2. Basquete
  3. Bola de golfe
  4. Tutorial - sPiRobot:controle e veja o que seu robô está vendo de qualquer lugar
  5. Automação:Linha do robô redesenhada
  6. Linha do robô SCARA expandida
  7. Robôs de linha de montagem:um guia definitivo
  8. Seguidor de linha industrial para fornecimento de materiais
  9. Controle PID da Garra do Robô em Matlab / Simulink
  10. Controle de qualidade da linha de embalagem automatizada