ChatGPTにarduinoのプログラミングをさせてみるその2です。
模型用のDCブラシモータの回転速度をボリュームを回転させることで制御をさせました。
1.使用部品
・モータドライバ:TA7191P、東芝製(リンク先)
・DCモータ:FE130AV-2270-38-R、ConaughtMotor(リンク先)
・電池ボックス:単三乾電池2本用、メーカー不明(リンク先)
・半固定ボリューム 10kΩ、メーカー不明(リンク先)
いずれも秋月電子から購入可能です。
2.ChatGPTによるプログラミング
ChatGPT(はこっち)にプログラムをしてもらいました。
モータ回転速度を0から最大速度に加速してから0に戻すプログラムでした。
回路図はいつものように出てこない。
モータドライバへの速度入力は、PWM制御が出力できる端子から、アナログ出力で0~255の値を入力することで制御ができます。(255が最大、8ビット)

モータとモータドライバと電池を構成する回路図は、以下のサイトをみて作りました。
モータードライバー(TA7291P)の使い方 [Arduino] (petitmonte.com)
3.DCモータの回転速度制御プログラム
3.1 回路図
2で作った回路図に加えて可変抵抗を追加して分圧回路を構成しています。
分圧回路から出力電圧をアナログ入力0番ピンへ入れて、速度ボリュームとして設定します。

3.2 回路図
PWM制御による速度制御をボリュームから設定できるようにプログラムを修正しました。
// TA7291Pを使用したDCブラシモータの回転速度制御
const int pwm_pin = 9; // PWM信号の出力ピン
const int in1_pin = 8; // IN1のピン
const int in2_pin = 7; // IN2のピン
const int speed_pin =0;
int speed = 0;// モータの速度
void setup() {
pinMode(pwm_pin, OUTPUT); // PWM信号の出力ピンを出力モードに設定
pinMode(in1_pin, OUTPUT); // IN1のピンを出力モードに設定
pinMode(in2_pin, OUTPUT); // IN2のピンを出力モードに設定
Serial.begin(9600);
}
void loop() {
//ボリューム値の読み取り
int aout = analogRead(speed_pin);
int speed = 255* double(aout)/double(1024);//C言語では整数同士の割り算には必須。
//シリアル出力
Serial.println(aout);
Serial.println(speed);
delay(1000);
//モータ速度制御
analogWrite(pwm_pin, speed); // PWM信号を出力
digitalWrite(in1_pin, HIGH); // IN1をHIGHに設定
digitalWrite(in2_pin, LOW); // IN2をLOWに設定
delay(100); // 100ミリ秒待機
}
C言語の場合、型が整数同士の割り算は整数になるため、プログラム上の変数speedの計算手法を工夫します。
出力電圧と入力電圧の比(aout/1024)は0から1の間にあるため、この値を浮動小数点になるような計算をおこないます。

3.まとめ
こちらも難なくできました。
特定のプログラムの癖(C言語の場合、整数同士の割り算は小数点以下が切り捨てられる現象)を説明してくれました。
ChatGPTへ指示方法に工夫は必要なものの、プログラム作成支援ツールとして活用ができると考えています。