GR-ADZUKIでモーターを動かす


概要

中学生に電子工作を教える(一緒に学ぶ?)機会ができたので、がじぇるねのGR-ADZUKIを使ったサンプルを作りました。動作の概要は以下。

ボタンを押す→LEDを光らせる→サーボモーターを動かす→DCモーターを動かす

これをきっかけに、がじぇるねボードを使い倒してもらおうと思います。

ハードの準備

本サンプルでは以下を使用します。
DCモーターと電池ボックスは、おもちゃを分解して出てきたギアボックス込みのものを使用していますが、汎用のもので問題ありません。電池ボックスについては、使用したサーボモーターの動作電圧が4.8~5Vとなっているため、1.5Vの乾電池を3段直列にできるものが良いと思います。(3段で4.5Vですが、問題なく動きました。)

以下が回路図です。

プログラムの作成

GR-ADZUKIのプログラムは、IDE for GRを使用してC言語で記述しています。

以下は作成したプログラムでGitHubにも置いています。初心者向けにコメントは丁寧に書いたつもりです。
#include <servo.h> 
// コメント、コメント以外の場所に全角の文字が入らないように注意。特に空白。
/* これもコメント */
const int buttonPin = 2;     // ボタン番号
int buttonState = 0;         // ボタン状態
const int ledPin = 13;       // LED番号
Servo myservo;               // サーボモーターを使用
const int servoPin = 4;      // サーボピン番号
const int dcMotorPin0 = 9;   // DCモーターの端子番号その1
const int dcMotorPin1 = 10;  // DCモーターの端子番号その2

void setup()  { 
  // LEDピンを出力として初期化
  pinMode(ledPin, OUTPUT);

  // ボタンを入力として初期化
  pinMode(buttonPin, INPUT_PULLUP);

  // サーボモーターとサーボピンを関連付ける
  myservo.attach(servoPin);
  // サーボモータの初期角度を0度にする
  myservo.write(0);

  // DCモーターピンを出力として初期化
  pinMode(dcMotorPin0, OUTPUT);
  pinMode(dcMotorPin1, OUTPUT);
  // DCモーターを停止(両方に同じ値を入れると停止)
  analogWrite(dcMotorPin0, 0);
  analogWrite(dcMotorPin1, 0);
}

void loop()  { 
  // ボタン状態を読み込む
  while(digitalRead(buttonPin)){
    // ボタンが押されたらループから出る
    if (buttonState == HIGH) {     
      break; 
    } 
  }

  // LEDの明るさを0から255まで5ずつ増やす
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    // アナログ値としてLEDの明るさをセットする
    analogWrite(ledPin, fadeValue);         
    // 30ミリ秒待つ
    delay(30);                            
  } 

  // LEDの明るさを255から0まで5ずつ減らす
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    // アナログ値としてLEDの明るさをセットする
    analogWrite(ledPin, fadeValue);         
    // 30ミリ秒待つ
    delay(30);                            
  } 

  // Move servo motor
  myservo.write(90);   // サーボモーターを90度にする
  delay(2000);         // 2秒待つ
  myservo.write(180);  // サーボモーターを180度にする
  delay(2000);         // 2秒待つ
  myservo.write(0);    // サーボモーターを0度にする
  delay(2000);         // 2秒待つ

  // DCモーターを3秒間動かす
  analogWrite(dcMotorPin0, 150);
  delay(3000);
  // DCモーターを止める
  analogWrite(dcMotorPin0, 0);
}
上記の通り、setup()関数内に初期設定、loop()関数内にメイン処理を書きます。
プログラムを書いたら、メニューの「ファイル」から「名前をつけて保存」または「保存」で保存します。

動作確認

GR-ADZUKIボード上にある2つのスイッチ状態が、SketchおよびUSBになっていることを確認し、USB B-TypeケーブルでPCとGR-ADZUKIをつなぎます。ここでは電池ボックスは外しておきます。
IDE for GRの右矢印のボタンを押すとコンパイル、書き込み、リセットが実行されます。

2番のボタンを押してLED点灯(もやっと光って消える)と2つのモーターの動作を確認します。
問題なければ、今度はGR-ADZUKIのスイッチをUSB→BATTに切り替え、電池ボックスをつないで2番のボタンを押します。概要の動画のように動作すれば成功です。

参考ページ

コメント

このブログの人気の投稿

SNIPS ネットにつながない音声認識

Linux環境MSYS2でC言語のHello World!