Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Robot suiveur de ligne de contrôle PID

Composants et fournitures

Châssis en aluminium anodisé KittenBot
× 1
Plinthe KittenBot RosBot
× 1
Roulette à billes de diamètre KittenBot avec bille en métal (paire)
× 1
Roue en caoutchouc KittenBot avec jeu de moyeux de moteur (paire)
× 1
Capteur de suivi de ligne infrarouge KittenBot à 5 canaux
× 1
Moteur à courant continu (générique)
× 1
Batterie 9V (générique)
× 1
Arduino UNO
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

Présentation

Une caractéristique dont la plupart des robots autonomes rover ont besoin est le suivi de ligne. Le but de ce projet est de construire un robot suiveur de ligne et de commencer à apprendre le contrôleur PID de manière ludique.

Pièces

Le robot fonctionne correctement avec deux moteurs, le Rosbot Baseboard et un capteur à 5 canaux. Contrairement à d'autres, vous n'avez pas besoin d'acheter un pilote de moteur de pont en H supplémentaire ou divers composants, car le Rosbot Baseboard est doté d'un double pilote de pont en H intégré. Connecte simplement les moteurs à la plinthe Rosbot et il fournira plus de puissance qu'Arduino Uno.

  • Cadre du robot : Châssis en aluminium anodisé KittenBot

Châssis cool et solide qui a des tonnes de trous de montage (Lego Technic 4,8 mm), vous pouvez certainement réutiliser ce châssis pour d'autres projets amusants.

  • Le cerveau du robot :Plinthe RosBot

Une carte mère basée sur Arduino UNO avec 2 pilotes de moteur à double pont en H intégrés.

  • Les yeux du robot :Capteur de suivi de ligne IR à 5 canaux

Détecteur infrarouge à 5 canaux, plus précis et stable.

Étape 1 :Assemblage

Ce robot est assez facile à assembler, suivez les instructions et cela vous prend environ 15 minutes.

Tout d'abord, fixez vos moteurs sur les côtés du châssis, branchez simplement la roue en caoutchouc.

Montez le capteur infrarouge à 5 canaux à l'avant du châssis.

Fixez votre plinthe Rosbot au châssis, puis le robot est prêt à être câblé.

Étape 2 :Essorez

Voici les connexions pour le capteur infrarouge à 5 canaux :

  • VCC à 5V
  • GND à GND de RosBot
  • T1-T4 vers broche A0-A3
  • T5 à épingler SDA

Les moteurs à courant continu vont simplement sur les broches A+A- et B+B-.

Codage

Dans les codes, nous avons une machine d'état qui indique chaque sortie de réseau de capteurs possible. Le robot se déplace dans une certaine direction en fonction de la sortie du réseau de capteurs.

void stateMachine(int a) { switch (a) { case B00000:outlineCnt++; Pause; cas B11111 :contourCnt++ ; Pause; cas B00010 :cas B00110 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(0, 50, 0)); biais =1 ; Pause; cas B00001 :cas B00011 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(0, 200, 0)); biais =2 ; Pause; cas B00100 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(0, 0, 20)); biais =0 ; Pause; cas B01000 :cas B01100 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(50, 0, 0)); biais =-1 ; Pause; cas B10000 :cas B11000 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(200, 0, 0)); biais =-2 ; Pause; par défaut :Serial.println(a,BIN); contourCnt++; Pause; } 

Nous avons déjà configuré la valeur de l'erreur, du terme de proportion, du terme intégral et du terme dérivé.

float Kp =25;float Ki =0,15;float Kd =1200;float error, errorLast, erroInte;float calcPid(float input) { float errorDiff; sortie flottante ; erreur =erreur * 0,7 + entrée * 0,3 ; // filtre //erreur =entrée; errorDiff =erreur - errorLast ; erroInte =contrainte(erroInte + erreur, -50, 50); sortie =Kp * erreur + Ki * erroInte + Kd * errorDiff; Serial.print(erreur); Serial.print(' '); Serial.print(erroInte); Serial.print(' '); Serial.print(errorDiff); Serial.print(' '); Serial.println(sortie); erreurDernière =erreur ; renvoie la sortie ; 

Manipulez les valeurs pour trouver la meilleure solution pour votre robot.

Code

  • Robot suiveur de ligne
Robot suiveur de ligneArduino
Dans les codes, nous incluons un NeoPixel d'Adafruit, mais c'est facultatif.
#include #define S_NULL 0#define S_ONTRACE 1Adafruit_NeoPixel pixels =Adafruit_NeoPixel(4, 4, NEO_GRB + NEO_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++; Pause; cas B11111 :contourCnt++ ; Pause; cas B00010 :cas B00110 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(0, 50, 0)); biais =1 ; Pause; cas B00001 :cas B00011 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(0, 200, 0)); biais =2 ; Pause; cas B00100 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(0, 0, 20)); biais =0 ; Pause; cas B01000 :cas B01100 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(50, 0, 0)); biais =-1 ; Pause; cas B10000 :cas B11000 :contourCnt =0; pixels.setPixelColor(2, pixels.Color(200, 0, 0)); biais =-2 ; Pause; par défaut :Serial.println(a,BIN); contourCnt++; Pause; } pixels.setPixelColor(0, pixels.Color(outlineCnt * 10, 0, 0)); if (outlineCnt> 10) { doDcSpeed(0,0); } else { float ff =150; float ctrl =calcPid(bias); 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; sortie flottante ; erreur =erreur * 0,7 + entrée * 0,3 ; // filtre //erreur =entrée; errorDiff =erreur - errorLast ; erroInte =contrainte(erroInte + erreur, -50, 50); sortie =Kp * erreur + Ki * erroInte + Kd * errorDiff; Serial.print(erreur); Serial.print(' '); Serial.print(erroInte); Serial.print(' '); Serial.print(errorDiff); Serial.print(' '); Serial.println(sortie); erreurDernière =erreur ; return output;}int echoTrace() { int ret =0; int a[5] ; for (int i =0; i <5; i++) { a[i] =contrainte((1025 - analogRead(A0 + i)) / 10 - 4, 0, 20); si (a[i]> 2) ret +=(0x1 < 
LinefollowRobot
https://github.com/KittenBot/LinefollowRobot

Schémas


Processus de fabrication

  1. L'avenir de la robotique
  2. Basket-ball
  3. balle de golf
  4. Tutoriel – sPiRobot :Contrôlez et voyez ce que votre robot voit de n'importe où
  5. Automatisation :ligne de robot repensée
  6. Ligne de robots SCARA élargie
  7. Robots de ligne d'assemblage :un guide définitif
  8. Contrôle PID d'un robot préhenseur dans Matlab / Simulink
  9. Contrôle de qualité automatisé de la ligne d'emballage