iU入学前研修 2025

iU入学前研修 2025

アカウントーセットアップ https://slink.secioss.com/user/

プログラミングを体験しよう

プログラミングシミュレーション

ArduinoIDEのセットアップ

Picocaを使う

Arduinoとpicocaを接続するためのセットアップを行います。

Arduinoを開き、左側にある、赤い枠で囲んだボードのマークをクリックします。

その後、上部のウィンドウに「Raspbery Pi」と入力し、「INSTALL」でインストールを行います。

Prompt

```
// LED
#define LeftLED 11
#define RightLED 10
#define BoardLED 25

// 距離センサ
#define echoPin 15  // Echo Pin
#define trigPin 14  // Trigger Pin
// 音速の設定
int V = 340;

// モーター
#define PWM_A 0
#define A1 1
#define A2 2

#define PWM_B 6
#define B1 7
#define B2 8

#define Left 0
#define Right 1

// 距離センサに計測用信号を送るように命令
void sendTrigger() {
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(11);
  digitalWrite(trigPin, LOW);
}

// 距離センサから距離を読み取る(単位:cm)
int getDepth() {
  sendTrigger();

  unsigned long timeout = micros();
  while (!digitalRead(echoPin)) {
    unsigned long timeout2 = micros() - timeout;
    if (timeout2 > 200000) {
      Serial.println("Depth Sensor Timeout");
      sendTrigger();
      timeout = micros();
    }
  }
  unsigned long t1 = micros();

  while (digitalRead(echoPin)) {
  }
  unsigned long t2 = micros();
  unsigned long t = t2 - t1;
  return V * t / 20000;
}

void drive_A(int v) {
  if (v > 0) {
    v = min(v, 255);
    digitalWrite(A1, HIGH);
    digitalWrite(A2, LOW);
  } else {
    v = max(v, -255);
    digitalWrite(A1, LOW);
    digitalWrite(A2, HIGH);
  }
  analogWrite(PWM_A, abs(v));
}

void drive_B(int v) {
  if (v > 0) {
    v = min(v, 255);
    digitalWrite(B1, HIGH);
    digitalWrite(B2, LOW);
  } else {
    v = max(v, -255);
    digitalWrite(B1, LOW);
    digitalWrite(B2, HIGH);
  }
  analogWrite(PWM_B, abs(v));
}

void setup() {
  // Raspberry Pi Pico内蔵LEDピンを出力に設定して点灯
  pinMode(BoardLED, OUTPUT);
  digitalWrite(BoardLED, HIGH);
  // LEDに接続されているピンを出力に設定
  pinMode(LeftLED, OUTPUT);
  pinMode(RightLED, OUTPUT);
  digitalWrite(LeftLED, HIGH);
  digitalWrite(RightLED, HIGH);
  //モーターのピンを出力に変更
  pinMode(A1, OUTPUT);
  pinMode(A2, OUTPUT);
  pinMode(PWM_A, OUTPUT);
  pinMode(B1, OUTPUT);
  pinMode(B2, OUTPUT);
  pinMode(PWM_B, OUTPUT);

  Serial.begin(9600);  // PCとシリアル接続を開始
  // パソコンから外して使用するときはコメントアウト
  // while (!Serial);    // PCとシリアル接続されるまで待機
  // 距離センサ用にピンの入出力を設定
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  // PCに"Start Pico!"を書き込む
  // Serial.println("Start Pico!");
}

void loop() {
  int depth = 0;

  while (true) {
    depth = getDepth();
    Serial.print(depth);
    Serial.println("cm");

    // depthの値に合わせてモーターの動きを変更
    if (depth < 20) {
      digitalWrite(LeftLED, HIGH);
      digitalWrite(RightLED, HIGH);
      drive_A(150);
      drive_B(150);
    } else {
      digitalWrite(LeftLED, LOW);
      digitalWrite(RightLED, LOW);
      drive_A(-150);
      drive_B(-150);
    }
    delay(500);
  }
}
```
これは、Raspbery Pi Pico を使ったプログラムで、二つのモーター、距離センサを持ったロボットです。
ArduinoIDEを使って開発をしているのですが、内容に沿った、コピペで動くプログラムを作成してください。