Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Robot seguidor de línea de control PID

Componentes y suministros

Chasis de aluminio anodizado KittenBot
× 1
KittenBot RosBot Zócalo
× 1
Rueda de bola de diámetro KittenBot con bola de metal (par)
× 1
Juego de rueda de goma KittenBot con eje de motor (par)
× 1
Sensor de seguimiento de seguimiento de línea IR de 5 canales KittenBot
× 1
Motor de CC (genérico)
× 1
batería de 9V (genérica)
× 1
Arduino UNO
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Descripción general

Una característica que necesitan la mayoría de los robots autónomos móviles es el seguimiento de línea. El propósito de este proyecto es construir un robot seguidor de línea y comenzar a aprender el controlador PID de una manera divertida.

Piezas

El robot funciona correctamente con dos motores, la placa base Rosbot y un sensor de 5 canales. A diferencia de otros, no tiene que comprar un controlador de motor de puente H adicional o varios componentes, ya que la placa base Rosbot tiene un controlador doble de puente H 2x incorporado. Simplemente conecta los motores a la placa base Rosbot y proporcionará más energía que Arduino Uno.

  • Estructura del robot: Chasis de aluminio anodizado KittenBot

Chasis fresco y sólido que tiene toneladas de orificios de montaje (LEGO Technic de 4.8 mm), definitivamente puedes reutilizar este chasis para otros proyectos divertidos.

  • Cerebro de robot :Zócalo RosBot

Una placa base basada en Arduino UNO con 2x controladores de motor de doble puente H integrados.

  • Ojos de robot :Sensor de seguimiento de línea IR de 5 canales

Detector de infrarrojos de 5 canales, más preciso y estable.

Paso 1:montaje

Este robot es bastante fácil de montar, siga las instrucciones y le llevará unos 15 minutos.

Primero, conecte sus motores a los lados del chasis, simplemente conecte la rueda de goma.

Monte el sensor de infrarrojos de 5 canales en la parte delantera del chasis.

Conecte su placa base Rosbot al chasis, luego el robot estará listo para conectarse.

Paso 2:Escurrir

Las siguientes son las conexiones para el sensor de infrarrojos de 5 canales:

  • VCC a 5V
  • GND a GND de RosBot
  • T1-T4 para fijar A0-A3
  • T5 para fijar SDA

Los motores de CC simplemente van al pin A + A- y al pin B + B-.

Codificación

En los códigos, tenemos una máquina de estado que indica cada posible salida de matriz de sensores. El robot se mueve en una determinada dirección de acuerdo con la salida de la matriz de sensores.

  void stateMachine (int a) {switch (a) {case B00000:outlineCnt ++; descanso; caso B11111:outlineCnt ++; descanso; caso B00010:caso B00110:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 50, 0)); sesgo =1; descanso; caso B00001:caso B00011:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 200, 0)); sesgo =2; descanso; caso B00100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 0, 20)); sesgo =0; descanso; caso B01000:caso B01100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (50, 0, 0)); sesgo =-1; descanso; caso B10000:caso B11000:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (200, 0, 0)); sesgo =-2; descanso; predeterminado:Serial.println (a, BIN); outlineCnt ++; descanso; }  

Ya configuramos el valor de Error, término de proporción, término integral y término derivado.

  float Kp =25; float Ki =0.15; float Kd =1200; float error, errorLast, erroInte; float calcPid (float input) {float errorDiff; salida flotante; error =error * 0,7 + entrada * 0,3; // filtro // error =entrada; errorDiff =error - errorLast; erroInte =restringir (erroInte + error, -50, 50); salida =Kp * error + Ki * erroInte + Kd * errorDiff; Serial.print (error); Serial.print (''); Serial.print (erroInte); Serial.print (''); Serial.print (errorDiff); Serial.print (''); Serial.println (salida); errorLast =error; devolver salida;  

Manipule los valores para encontrar el que mejor se adapte a su robot.

Código

  • Robot seguidor de línea
Robot seguidor de línea Arduino
En los códigos, incluimos un NeoPixel de Adafruit, pero eso es opcional.
 #include  #define S_NULL 0 # define S_ONTRACE 1Adafruit_NeoPixel pixels =Adafruit_NeoPixel (4, 4, NEO_GRB + NEO_KHD800cSpeed ​​do (int spdL, int spdR) {spdR =-spdR; si (spdL <0) {analogWrite (5, 0); analogWrite (6, -spdL); } else {analogWrite (5, spdL); analogWrite (6, 0); } si (spdR <0) {analogWrite (9, 0); analogWrite (10, -spdR); } else {analogWrite (9, spdR); analogWrite (10, 0); }} int sesgo =0; int outlineCnt =0; void stateMachine (int a) {switch (a) {case B00000:outlineCnt ++; descanso; caso B11111:outlineCnt ++; descanso; caso B00010:caso B00110:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 50, 0)); sesgo =1; descanso; caso B00001:caso B00011:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 200, 0)); sesgo =2; descanso; caso B00100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (0, 0, 20)); sesgo =0; descanso; caso B01000:caso B01100:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (50, 0, 0)); sesgo =-1; descanso; caso B10000:caso B11000:outlineCnt =0; píxeles.setPixelColor (2, píxeles.Color (200, 0, 0)); sesgo =-2; descanso; predeterminado:Serial.println (a, BIN); outlineCnt ++; descanso; } píxeles.setPixelColor (0, píxeles.Color (outlineCnt * 10, 0, 0)); if (outlineCnt> 10) {doDcSpeed ​​(0,0); } else {float ff =150; flotador ctrl =calcPid (sesgo); doDcSpeed ​​(ff-ctrl, ff + ctrl); } pixels.show ();} float Kp =25; float Ki =0.15; float Kd =1200; float error, errorLast, erroInte; float calcPid (float input) {float errorDiff; salida flotante; error =error * 0,7 + entrada * 0,3; // filtro // error =entrada; errorDiff =error - errorLast; erroInte =restringir (erroInte + error, -50, 50); salida =Kp * error + Ki * erroInte + Kd * errorDiff; Serial.print (error); Serial.print (''); Serial.print (erroInte); Serial.print (''); Serial.print (errorDiff); Serial.print (''); Serial.println (salida); errorLast =error; retorno de salida;} int echoTrace () {int ret =0; int a [5]; para (int i =0; i <5; i ++) {a [i] =restringir ((1025 - analogRead (A0 + i)) / 10 - 4, 0, 20); si (a [i]> 2) ret + =(0x1 < 
LinefollowRobot
https://github.com/KittenBot/LinefollowRobot

Esquemas


Proceso de manufactura

  1. El futuro de la robótica
  2. Baloncesto
  3. Pelota de golf
  4. Tutorial - sPiRobot:Controle y vea lo que su robot está viendo desde cualquier lugar
  5. Automatización:Línea de robot rediseñada
  6. Línea de robot SCARA ampliada
  7. Robots de línea de montaje:una guía definitiva
  8. Seguidor de línea industrial para suministro de materiales
  9. Robot seguidor de línea de velocidad V4
  10. Control PID de Robot Gripper en Matlab / Simulink
  11. Control de calidad de la línea de envasado automatizado