JLCPCBを使用したライントレースカー基板の製作

基本的なライントレースカーをArduinoを用いて作成しました。基板を[JLCPCB](https://jlcpcb.jp)に発注し、Arduino、とモータードライバーは秋月から調達という構成です。以下実際に完成した基板です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/873e55b9-22b0-f4e2-115d-d22ec1a10469.png" width="45%">

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/8dfd8bbb-fc55-4eda-bed1-ca8a2a5e443b.jpeg)

裏面
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/065f035b-d797-4437-86d0-80ab137c119e.jpeg)

モータードライバーとArduinoをはめたところ
![IMG_5302 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/f1772164-1833-48a5-8bb7-282e409a29f1.jpeg)

実際に動かす際はこんな感じのコードを想定しています。
```
// センサーピン
const int leftSensor = A0;
const int centerSensor = A1;
const int rightSensor = A2;

// モーター制御ピン
const int ENA = 9;
const int IN1 = 8;
const int IN2 = 7;

const int ENB = 10;
const int IN3 = 6;
const int IN4 = 5;

// 閾値（白と黒の境目）
const int threshold = 500;

void setup() {
  pinMode(leftSensor, INPUT);
  pinMode(centerSensor, INPUT);
  pinMode(rightSensor, INPUT);

  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);

  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  int left = analogRead(leftSensor);
  int center = analogRead(centerSensor);
  int right = analogRead(rightSensor);

  // ライン上にあるか（黒=反射少ない → 値が小さい）
  bool onLeft = (left < threshold);
  bool onCenter = (center < threshold);
  bool onRight = (right < threshold);

  Serial.print("L: "); Serial.print(left);
  Serial.print(" C: "); Serial.print(center);
  Serial.print(" R: "); Serial.println(right);

  // 判定ロジック（例）
  if (onCenter && !onLeft && !onRight) {
    // 直進
    moveForward();
  } else if (onLeft && !onCenter && !onRight) {
    // 左へ
    sharpLeft();
  } else if (onRight && !onCenter && !onLeft) {
    // 右へ
    sharpRight();
  } else if (onLeft && onCenter && !onRight) {
    // 少し左
    turnLeft();
  } else if (onRight && onCenter && !onLeft) {
    // 少し右
    turnRight();
  } else if (!onLeft && !onCenter && !onRight) {
    // すべて白：ラインを見失った
    stopMotors();
  } else {
    // 複数ON（例：T字路など）→ 直進
    moveForward();
  }

  delay(10);
}

// モーター制御関数
void moveForward() {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 180);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, 180);
}

void turnLeft() {
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 150);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, 180);
}

void turnRight() {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 180);
  digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENB, 150);
}

void sharpLeft() {
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 180);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, 120);
}

void sharpRight() {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 120);
  digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENB, 180);
}

void stopMotors() {
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
}
```

[JLCPCB](https://jlcpcb.jp)への発注は、こちらからできます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/873e55b9-22b0-f4e2-115d-d22ec1a10469.png" width="45%">

基板のデザインプロセス
基板のデザインはEagleを使用しました。ライントレースカーに必要な機能を組み込むために、以下の点に注意しました：
センサー配置の最適化
モーター制御回路の設計
電源管理
操作用スイッチの配置

以下のポイントに注意しました：
1. センサー配置の最適化
ライントレースセンサーは車体の前方下部に配置し、地面からの適切な高さを確保しました。センサー間の距離もラインの幅に合わせて調整しています。
2. コンパクト設計
基板サイズを最小限に抑えつつ、必要な機能をすべて詰め込みました。配線の取り回しを工夫し、ノイズの影響を受けにくいレイアウトを心がけました。
3. 拡張性への配慮
将来的な機能追加も視野に入れ、いくつかの未使用ピンをヘッダピンとして出しています。

[JLCPCB](https://jlcpcb.jp/ "JLCPCB")
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/873e55b9-22b0-f4e2-115d-d22ec1a10469.png" width="45%">