著者:太田圭祐
こんにちは。香川大学工学部 学部3 年生の太田です。高校時代にArduino と出会い、L チカやモータの制御などをして遊んできました。今回、記事を書くにあたり、改めてArduinoと向き合ってみました。
Arduino では、ハードウェアの上で動作するソフトウェアの開発用にC/C++ 言語ベースのシンプルなArduino 言語を採用しています。そのためC 言語を使っている人にとって、とても馴染みやすい文法を持っています。更に、開発環境が無料で提供されていることから、ハードウェアプログラミングの学習を始めやすいこともArduino の特徴です。
今回はこのArduino を用いて、鉄道模型を実物同様に加減速制御するコントローラを作っていきましょう。
記事本文掲載のシェルスクリプトマガジンvol.51は以下リンク先でご購入できます。
1 2 3 4 5 6 7 8 9 |
void setup() { Serial.begin(9600); // シリアル通信の確立 } void loop() { int val; val = analogRead(0); // Analog in 0 からAD 変換で抵抗値を読む Serial.println(val); // 抵抗値の出力 delay(500); // 0.5 秒待つ } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
void setup() { pinMode(3, OUTPUT); pinMode(4, OUTPUT); } int speed = 0; // 速度格納 int position(int val); void loop() { int cnt = 0; // カウント変数 int pos = 0; // マスコン位置 while(1) { int val = analogRead(0); int s = position(val); if ( s != pos ) { pos = s; cnt = 0; } else { cnt++; } if ( cnt == 10 ) { break; } delay(5); } speed += pos; // 速度を更新 speed = constrain(speed, 0, 200); // 値の整合 analogWrite(3, speed); // PWM の出力 digitalWrite(4, LOW); delay(300); // 0.3 秒待つ } int position(int val) { switch (val) { case 0 ... 69: return 3; case 70 ... 199: return 2; case 200 ... 409: return 1; case 410 ... 499: return 0; case 500 ... 629: return -2; case 630 ... 799: return -4; case 800 ... 919: return -6; default: return -20; } } |