久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14|回復: 0
收起左側

基于arduino系統的pid循跡小車開發

[復制鏈接]
ID:1155871 發表于 2025-7-3 10:26 | 顯示全部樓層 |閱讀模式
該小車采用Arduino UNO主控制核心,通過傳感器傳來的信號,對當前環境作出判斷,最后對電機做出相應的動作。單片機通過紅外傳感器檢測場地黑線,從而控制電機驅動模塊,改變電機轉速來控制小車方向,從而達到循跡的目的
整個系統包括Arduino UNO主控板、電機驅動模塊L298n、循跡傳感器TCR5000L、鋰電池(建議是可充放電的)和車體。

循跡代碼:
float Kp , Ki = 0, Kd ;                         //pid彎道參數參數
float error = 0, P = 0, I = 0, D = 0, PID_value = 0;      //pid直道參數
float previous_error = 0, previous_I = 0;               //誤差值
static int initial_motor_speed = 70;      //此處值為0-255的值,受電池電壓影響,需要自己調試
int A[5] = {19, 18, 17, 16, 15};
double L, R;
float a, b, c, d, p, m;
int ena = 5;
int enb = 10;
void setup()
{
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  pinMode(ena, OUTPUT);
  pinMode(enb, OUTPUT);

  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);
}

void loop()
{
Kp =3.25;
    Kd =30;               //此處的Kp和Kd也需使用者根據車的結構和既定軌跡調試進行調試,
  m = 0;
  a = 3, b = 6, c = 11, d = 18, p = 1;
  trac_run();
}
void trac()
{
  unsigned char temp = 0b00000;       //臨時變量用于新一輪采集
  for (int i = 0; i < 5; i++)
    temp |= digitalRead(A[ i]) << i;       //輪詢5個傳感器輸出,并將查詢結果轉換為編碼形式
  switch (temp)
  {
    case 0b01111: error = -d; break;
    case 0b00111: error = -c; break;
    case 0b10111: error = -b; break;
    case 0b10011: error = -a, m = 10; break;
    case 0b11011: error = 0, m = 20; break;
    case 0b11001: error = a, m = 10; break;
    case 0b11101: error = b; break;
    case 0b11100: error = c; break;
    case 0b11110: error = d; break;
    default: p = 1; break;
  }
}

void pid()
{
  P = error;
  I = I + error;
  D = error - previous_error;
  PID_value = (Kp * P) + (Ki * I) + (Kd * D);
  previous_error = error;
}

void trac_run()
{
  trac();
  pid();
  L = p * ( initial_motor_speed + PID_value + m);
  R = p * ( initial_motor_speed - PID_value + m);
  if (abs(L) > 255) L = L / abs(L) * 255;
  if (abs(R) > 255) R = R / abs(R) * 255;
  if (abs(L) == 0) L = 1;
  if (abs(R) == 0) R = 1;
  motor();
}

void motor()
{
  if (L > 0 && R > 0)
    analogWrite(enb, L),
                analogWrite(ena, R),
                motordir(0, 1, 1, 0);
  else if (- L > 0 && - R > 0)
    analogWrite(enb, -L),
                analogWrite(ena, -R),
                motordir(1, 0, 0, 1);
  else if (- L > 0 && R > 0)
    analogWrite(enb, -L),
                analogWrite(ena, R),
                motordir(0, 1, 0, 1);
  else if (L > 0 && -R > 0)
    analogWrite(enb, L),
                analogWrite(ena, -R),
                motordir(1, 0, 1, 0);
  else

    motordir(0, 0, 0, 0);
}

void motordir(int out1, int out2, int out3, int out4)   //輸入1 0,控制方向
{
  digitalWrite(6, out1);
  digitalWrite(7, out2);
  digitalWrite(8, out3);
  digitalWrite(9, out4);
}


整體圖

整體圖

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日本在线观看 | 欧美日韩中文字幕在线播放 | 亚洲男人网 | 日本欧美在线观看视频 | 久久精品国产亚洲 | 国产高清一二三区 | 日韩伦理一区二区 | 欧美一区二区三 | 久久久久久久一区二区 | 国产精品视频网 | 精品久久99 | www.色五月.com| 日本精品一区二区 | 性做久久久久久免费观看欧美 | 欧美在线一区二区三区 | 欧美阿v | 午夜影院在线观看 | 九九热在线视频 | 欧美中文字幕在线观看 | 久久久黄色 | 日韩精品一区二区三区久久 | 欧美成视频在线观看 | 久久高清 | 日韩激情免费 | 日韩在线播放中文字幕 | 免费观看av网站 | 欧美激情精品久久久久 | 天堂在线网 | 在线一区| 成人午夜激情 | 亚洲国产精品一区二区三区 | 成人免费视屏 | 日韩精品视频在线观看一区二区三区 | 国产探花在线精品一区二区 | 少妇一级淫片免费播放 | 久久精品一 | 成年人在线观看视频 | 欧美专区日韩 | 91免费高清| 一级黄色片在线免费观看 | 久久精品视频99 |