Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Робот-следящий за линией управления ПИД

Компоненты и расходные материалы

Анодированный алюминиевый корпус KittenBot
× 1
KittenBot RosBot Baseboard
× 1
Манипулятор диаметра KittenBot с металлическим шариком (пара)
× 1
Резиновое колесо KittenBot с комплектом ступицы двигателя (пара)
× 1
5-канальный ИК-датчик отслеживания движения по линии KittenBot
× 1
Двигатель постоянного тока (общий)
× 1
Батарея 9 В (стандартная)
× 1
Arduino UNO
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Обзор

Одной из функций, которая нужна большинству автономных роботов-вездеходов, является следование по линии. Цель этого проекта - создать робота-следящего за линией и начать изучение ПИД-регулятора в увлекательной игровой форме.

Детали

Робот правильно работает с двумя двигателями, платой Росбота и 5-канальным датчиком. В отличие от других, вам не нужно покупать дополнительный драйвер двигателя с H-мостом или различные компоненты, так как основная плата Rosbot имеет встроенный двойной драйвер с двумя H-мостами. Просто подключите двигатели к основной плате Rosbot, и она будет обеспечивать больше энергии, чем Arduino Uno.

  • Рама робота: Корпус KittenBot из анодированного алюминия

Классное и прочное шасси с множеством монтажных отверстий (4,8 мм LEGO Technic), вы определенно можете повторно использовать это шасси для других забавных проектов.

  • Мозг робота :Базовая плата RosBot

Материнская плата на базе Arduino UNO с двумя встроенными драйверами двигателя с двойным Н-мостом.

  • Глаза робота :5-канальный ИК-датчик слежения за линией

5-канальный инфракрасный детектор, более точный и стабильный.

Шаг 1. Сборка

Этот робот довольно прост в сборке, следуйте инструкциям, и это займет у вас около 15 минут.

Сначала прикрепите моторы по бокам шасси, просто вставьте резиновое колесо.

Установите 5-канальный ИК-датчик на переднюю часть корпуса.

Прикрепите базовую плату Rosbot к шасси, и робот будет готов к подключению.

Шаг 2. Отжать

Ниже приведены подключения для 5-канального ИК-датчика:

  • VCC на 5 В
  • GND на GND RosBot
  • T1-T4 к контакту A0-A3
  • T5 для закрепления SDA

Двигатели постоянного тока просто подключаются к контактам A + A- и B + B-.

Кодирование

В кодах у нас есть конечный автомат, который указывает каждый возможный выходной сигнал массива датчиков. Робот движется в определенном направлении в соответствии с выходным сигналом матрицы датчиков.

  void stateMachine (int a) {switch (a) {case B00000:outlineCnt ++; ломать; case B11111:outlineCnt ++; ломать; case B00010:case B00110:outlineCnt =0; пикселей.setPixelColor (2, пикселей.Color (0, 50, 0)); смещение =1; ломать; case B00001:case B00011:outlineCnt =0; pixel.setPixelColor (2, пикселей.Color (0, 200, 0)); смещение =2; ломать; case B00100:outlineCnt =0; пикселей.setPixelColor (2, пикселей.Color (0, 0, 20)); смещение =0; ломать; case B01000:case B01100:outlineCnt =0; pixel.setPixelColor (2, пикселей.Color (50, 0, 0)); смещение =-1; ломать; case B10000:case B11000:outlineCnt =0; пикселей.setPixelColor (2, пикселей.Color (200, 0, 0)); смещение =-2; ломать; по умолчанию:Serial.println (a, BIN); OutlineCnt ++; ломать; }  

Мы уже установили значение ошибки, члена пропорции, интегрального члена и производного члена.

  float Kp =25; float Ki =0.15; float Kd =1200; float error, errorLast, erroInte; float calcPid (ввод с плавающей запятой) {float errorDiff; вывод с плавающей точкой; ошибка =ошибка * 0,7 + ввод * 0,3; // фильтр // ошибка =input; errorDiff =error - errorLast; erroInte =ограничение (erroInte + error, -50, 50); output =Kp * error + Ki * erroInte + Kd * errorDiff; Serial.print (ошибка); Серийный.принт (''); Serial.print (erroInte); Серийный.принт (''); Serial.print (errorDiff); Серийный.принт (''); Serial.println (вывод); errorLast =ошибка; возврат вывода;  

Изменяйте значения, чтобы найти наиболее подходящие для вашего робота.

Код

  • Робот-последователь линии
Робот-последователь линии Arduino
В коды мы включаем NeoPixel от Adafruit, но это необязательно.
 #include  #define S_NULL 0 #define S_ONTRACE 1Adafruit_NeoPixel pixels =Adafruit_NeoPixel (4, 4, NEO_GRB + NEO_KHZpeed (int) spdL, int spdR) {spdR =-spdR; если (spdL <0) {analogWrite (5, 0); analogWrite (6, -spdL); } else {analogWrite (5, spdL); analogWrite (6, 0); } если (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 ++; ломать; case B11111:outlineCnt ++; ломать; case B00010:case B00110:outlineCnt =0; пикселей.setPixelColor (2, пикселей.Color (0, 50, 0)); смещение =1; ломать; case B00001:case B00011:outlineCnt =0; pixel.setPixelColor (2, пикселей.Color (0, 200, 0)); смещение =2; ломать; case B00100:outlineCnt =0; пикселей.setPixelColor (2, пикселей.Color (0, 0, 20)); смещение =0; ломать; case B01000:case B01100:outlineCnt =0; pixel.setPixelColor (2, пикселей.Color (50, 0, 0)); смещение =-1; ломать; case B10000:case B11000:outlineCnt =0; пикселей.setPixelColor (2, пикселей.Color (200, 0, 0)); смещение =-2; ломать; по умолчанию:Serial.println (a, BIN); OutlineCnt ++; ломать; } pixel.setPixelColor (0, pixels.Color (outlineCnt * 10, 0, 0)); если (outlineCnt> 10) {doDcSpeed ​​(0,0); } else {float ff =150; float ctrl =calcPid (смещение); doDcSpeed ​​(ff-ctrl, ff + ctrl); } pixel.show ();} float Kp =25; float Ki =0.15; float Kd =1200; float error, errorLast, erroInte; float calcPid (ввод с плавающей запятой) {float errorDiff; вывод с плавающей точкой; ошибка =ошибка * 0,7 + ввод * 0,3; // фильтр // ошибка =input; errorDiff =error - errorLast; erroInte =ограничение (erroInte + error, -50, 50); output =Kp * error + Ki * erroInte + Kd * errorDiff; Serial.print (ошибка); Серийный.принт (''); Serial.print (erroInte); Серийный.принт (''); Serial.print (errorDiff); Серийный.принт (''); Serial.println (вывод); errorLast =ошибка; возврат вывода;} 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); если (a [i]> 2) ret + =(0x1 < 
LinefollowRobot
https://github.com/KittenBot/LinefollowRobot

Схема


Производственный процесс

  1. Будущее робототехники
  2. Баскетбол
  3. Мяч для гольфа
  4. Учебное пособие - sPiRobot:контролируйте и смотрите, что видит ваш робот из любого места
  5. Автоматизация:переработка линии роботов
  6. Расширенная линия робота SCARA
  7. Роботы сборочного конвейера:полное руководство
  8. Последователь промышленной линии для поставки материалов
  9. ПИД-управление захватом робота в Matlab / Simulink
  10. Контроль качества автоматизированной упаковочной линии