見出し画像

素人による電子工作の学習記録 7回目〜直流モーターの制御


はじめに

 本稿は連載『素人による電子工作の学習記録』の第7回目です。前稿の第6回目では、NPNトランジスタを用いて、アクティブブザーを鳴らす方法に関して扱いました。そして第7回目の本稿では、直流モーターの制御に関して扱います。

用いた部品

 今回は図1に示した部品を用いました。今回の目的は、下記に挙げた(k)直流モーター(m)押しボタンスイッチによって制御することです。

(a)コントロールボード × 1
(b)ブレッドボード × 1
(c)USBケーブル × 1
(d)Jumper M/M × 8
(d')Jumper F/M × 2
 
⇒下記の画像にはありませんが、この写真を撮って暫くした後に直流モーター周りでJumberのF/Mも必要であることに気がつきました……
(e)バッテリーホルダー × 1 / 単3電池 × 2
(f)抵抗10kΩ × 2
(g)抵抗1kΩ × 1
(h)抵抗220kΩ × 1
(i)NPNトランジスタ × 1
(j)リレー × 1

 ⇒電気的あるいは電子的に回路を開閉するタイプのスイッチです。
(k)直流モーター × 1
 ⇒電気エネルギーを機械エネルギーに変換する装置です。直流モーターが電源に接続されると一方向に回転します。電源の極性を逆にすると、直流モーターは逆方向に回転します。
(l)LED × 1
(m)押しボタンスイッチ × 1
(n)ダイオード
 ⇒電流を一定の方向に流し、電流の逆流を防止します。

図1 用いた部品

電子回路の構成

 今回は図2のように電子回路を構成しました。実はここで手間取っており、本記事の投稿が遅れてしまいました。恐らく何かしらの誤りがまだあるのでしょうが、ひとまず直流モーターは動作させることができました。

図2 電子回路の構成

プログラム

 今回のプログラムは下記の通りです。

int relay_pin = 9;
int relay_state = LOW;

int button_pin = 12;
int button_state = HIGH;
int last_button_state = LOW;

long last_change_time = 0;

void setup() {
  pinMode(relay_pin, OUTPUT);
  digitalWrite(relay_pin, relay_state);
  Serial.begin(9600); 
}

void loop() {
  int present_button_state = digitalRead(button_pin);
  if (present_button_state != last_button_state){
    last_change_time = millis();
  }

  if (millis() - last_change_time > 10){
    if (button_state != present_button_state){
      button_state = present_button_state;
      if (button_state == LOW){
        relay_state != relay_state;
        digitalWrite(relay_pin, relay_state);
        Serial.println("Button is pressed");
      }
      else{
        Serial.println("Button is released");
      }
    }
  }
  last_button_state = present_button_state;
}

・Serial.begin(9600)
 ⇒ボーレート(baud rate)を9600に設定します。ボーレートとは、1秒当たりに変調する回数を指します。

・millis()
 ⇒コンロールボードがプログラムを実行してからのミリセカンド数を返します。

直流モーターの制御

 下記の動画をご覧ください。押しボタンスイッチを押すと直流モーターが回転するのかと思いきや、上述のプログラムをコントロールボードに書き込んだ直後からLEDが赤く光り、直流モーターが回転し始めました。本来であればその問題を解決した後に本記事を投稿したいところですが、「後記」の章で述べる理由により、今回は直流モーターが動作しただけでも十分と考えることにしました。

後記

 本稿の第7回目ではついに、直流モーターの制御に関して扱いました。今回は、電子回路の構成の部分で手間取ってしまい、初めは直流モーターが動作しないだけでなく、LEDも光らない状態にありました。ダイオードの向きが反対であったり、Jumperをブレッドボードに接続する箇所が誤っていることなどが原因でした……電子工作は奥が深い! そのような時に、Freenove(本記事で用いている電子工作キットの販売会社)にメールで質問させていただいたところ、ご丁寧に改善点を教えてくださいました。

 2024年3月23日現在、まだ押しボタンスイッチが正常に動作していないようなのですが、1巡目から新しい分野の内容を完璧に理解することはできませんので、今回は開き直って次に進むことにします。

 本連載の第1回目でも述べた通り、私が電子工作を学習するに至った経緯は、ミニ四駆のようなラジコンカーの操作性を自由に変更できたら面白いと考えたことにあります。まだまだ、ラジコンカーの操作性を自由に変更できるほどの実力には到達していませんが、亀の速度で電子工作の学習を進めてきました。遅筆ではありますが、『素人による電子工作の学習記録 』は次回の第8回目に続きます。気長にお待ちいただけますと幸いです。

***
著者からのお願い
 
この記事がよいと思っていただけましたら、下記にある「スキ」のアイコンをクリックしていただけますと非常に励みになります。「スキ」の数に応じて、今後に執筆する記事の内容を参考にさせていただきます。
 なお、下記のXでは本連載を含むnoteの進捗もtweetしていますので、よろしければフォローしていただけますと嬉しいです。

著者のXアカウント 
ハカセさん@since20230823
https://twitter.com/since20230823

この記事が気に入ったらサポートをしてみませんか?