Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama

Komponen dan Perlengkapan

Aplikasi dan Layanan Online

Tentang Proyek Ini

Ringkasan

Salah satu fitur yang dibutuhkan oleh sebagian besar robot rover otonom adalah pengikutan garis. Tujuan proyek ini adalah untuk membuat robot pengikut garis dan memulai belajar kontroler PID dengan cara yang menyenangkan.

Bagian

Robot berfungsi dengan baik dengan dua motor, Rosbot Baseboard, dan sensor 5 saluran. Berbeda dengan yang lain, Anda tidak perlu membeli driver motor H-bridge tambahan atau berbagai komponen karena Rosbot Baseboard memiliki driver dual H-bridge bawaan 2x. Cukup hubungkan motor ke Rosbot baseboard dan ia akan menyuplai lebih banyak daya daripada Arduino Uno.

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama
Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama

Bingkai keren dan padat yang memiliki banyak lubang montase (4.8mm LEGO Technic), Anda dapat dengan mudah menggunakan kembali bingkai ini untuk proyek menyenangkan lainnya.

Papan utama berbasis Arduino UNO dengan 2 driver motor dual H-bridge papan.

Detektor Inframerah 5-Saluran, lebih akurat dan stabil.

Langkah 1: Rangkaian

Robot ini cukup mudah dirangkaikan, ikuti instruksi dan membutuhkan waktu sekitar 15 menit.

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama

Pertama, pasang motor Anda di sisi bingkai, cukup colokkan roda karet.

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama

Pasang sensor IR 5-Saluran di bagian depan bingkai.

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama

Pasang Rosbot baseboard Anda ke bingkai, kemudian robot siap untuk dihubungkan.

Langkah 2: Kabeling

Berikut adalah koneksi untuk sensor IR 5-Saluran:

Motor DC cukup ke pin A+A- dan pin B+B-.

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama

Koding

Dalam kode, kita memiliki mesin status yang menunjukkan setiap kemungkinan keluaran array sensor. Robot bergerak ke arah tertentu sesuai dengan keluaran array sensor.

void stateMachine(int a) { switch (a) { case B00000: outlineCnt++; break; case B11111: outlineCnt++; break; case B00010: case B00110: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 50, 0)); bias = 1; break; case B00001: case B00011: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 200, 0)); bias = 2; break; case B00100: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 0, 20)); bias = 0; break; case B01000: case B01100: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(50, 0, 0)); bias = -1; break; case B10000: case B11000: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(200, 0, 0)); bias = -2; break; default: Serial.println(a,BIN); outlineCnt++; break; } }

Kami telah menetapkan nilai Error, istilah proporsional, istilah integral, dan istilah turunan.

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama
float Kp = 25; float Ki = 0.15; float Kd = 1200; float error, errorLast, erroInte; float calcPid(float input) { float errorDiff; float output; error = error * 0.7 + input * 0.3; // filter //error = input; errorDiff = error - errorLast; erroInte = constrain(erroInte + error, -50, 50); output = Kp * error + Ki * erroInte + Kd * errorDiff; Serial.print(error); Serial.print(' '); Serial.print(erroInte); Serial.print(' '); Serial.print(errorDiff); Serial.print(' '); Serial.println(output); errorLast = error; return output; }

Manipulasi nilai-nilai untuk menemukan yang paling cocok untuk robot Anda.

Kode

Robot pengikut garisArduino

Dalam kode, kita menyertakan NeoPixel dari Adafruit, tetapi itu opsional.

#include <Adafruit_NeoPixel.h>
#define S_NULL 0
#define S_ONTRACE 1
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(4, 4, NEO_GRB + NEO_KHZ800);
void doDcSpeed(int 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++; break;
    case B11111: outlineCnt++; break;
    case B00010: case B00110: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 50, 0)); bias = 1; break;
    case B00001: case B00011: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 200, 0)); bias = 2; break;
    case B00100: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 0, 20)); bias = 0; break;
    case B01000: case B01100: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(50, 0, 0)); bias = -1; break;
    case B10000: case B11000: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(200, 0, 0)); bias = -2; break;
    default: Serial.println(a,BIN); outlineCnt++; break;
  }
  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; float output;
  error = error * 0.7 + input * 0.3; // filter
  errorDiff = error - errorLast;
  erroInte = constrain(erroInte + error, -50, 50);
  output = Kp * error + Ki * erroInte + Kd * errorDiff;
  Serial.print(error); Serial.print(' '); Serial.print(erroInte); Serial.print(' '); Serial.print(errorDiff); Serial.print(' '); Serial.println(output);
  errorLast = error; return output;
}
int echoTrace() {
  int ret = 0; int a[5];
  for (int i = 0; i < 5; i++) {
    a[i] = constrain((1025 - analogRead(A0 + i)) / 10 - 4, 0, 20);
    if (a[i] > 2) ret += (0x1 << i);
  }
  return ret;
}
void setup() {
  Serial.begin(115200);
  pixels.begin();
}
int pos;
void loop() {
  delay(5);
  pos = echoTrace();
  stateMachine(pos);
}
LinefollowRobot

https://github.com/KittenBot/LinefollowRobot

Skematik

Kit Robot Pengikuti Garis Terkontrol PID – Arduino UNO, Sensor IR, Chassis Tahan Lama

Proses manufaktur

  1. Robotika Abad 21: Sistem Terdistribusi, Telepresensi, dan Eksplorasi Angkasa
  2. Bola Basket: Dari Penemuan Naismith Tahun 1891 hingga Teknik Produksi Modern
  3. Golf: Olahraga Global dengan Warisan Kaya & Daya Tarik Modern
  4. Membuat dan Mengontrol Robot Berbasis Raspberry Pi dengan Streaming Video Langsung
  5. Wittmann Battenfeld Meluncurkan WX153: Garis Robot Canggih untuk Otomatisasi Cetak Injeksi Gaya Tinggi
  6. FANUC Memperluas Garis Robot SCARA: Enam Model, Beban Muatan 3-20 kg, Jangkauan 400-1100 mm
  7. Robot Baris Perakitan: Meningkatkan Efisiensi, Presisi, dan Kualitas
  8. Robot Pengikut Garis Industri untuk Pengiriman Bahan
  9. Menguasai Kontrol PID untuk Gripper Robot 3D di MATLAB/Simulink
  10. Sederhanakan Jaminan Kualitas Kemasan dengan Sistem Kontrol Otomatis Canggih