注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebook上で、仲間と一緒にRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。

なぜ参加するのか?

  • 専門的なサポート:購入後の問題や技術的な課題をコミュニティやチームの助けを借りて解決。

  • 学びと共有:スキルを向上させるためのヒントやチュートリアルを交換。

  • 限定プレビュー:新製品発表や予告編に早期アクセス。

  • 特別割引:最新製品の特別割引を楽しむ。

  • フェスティブプロモーションとプレゼント:プレゼントやホリデープロモーションに参加。

👉 私たちと一緒に探索と創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

レッスン07: 赤外線速度センサーモジュール

このレッスンでは、Arduino Unoを使用して速度センサーモジュールでモーターの速度を測定する方法を学びます。モーターとセンサーのセットアップ、Arduinoのプログラミングによる毎秒回転数の計算、およびデータの表示について説明します。このプロジェクトは、リアルタイムデータ処理とモーター制御の実践的な経験を提供するため、中級学習者に最適です。

必要なコンポーネント

このプロジェクトには以下のコンポーネントが必要です。

キット全体を購入するのが便利です。こちらのリンクからどうぞ:

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

以下のリンクから個別に購入することもできます。

Component Introduction

Purchase Link

Arduino UNO R3 or R4

購入

ブレッドボード

購入

赤外線速度センサーモジュール

購入

TTモーター

-

L9110モータードライバーモジュール

-

配線

../_images/Lesson_07_speed_module_uno_bb.png

コード

コード解析

  1. ピンの設定と変数の初期化。このセクションでは、モーターと速度センサーのピンを定義します。また、モーターの速度を測定および計算するために使用される変数を初期化します。

    // Define the sensor and motor pins
    const int sensorPin = 11;
    const int motorB_1A = 9;
    const int motorB_2A = 10;
    
    // Define variables for measuring speed
    unsigned long start_time = 0;
    unsigned long end_time = 0;
    int steps = 0;
    float steps_old = 0;
    float temp = 0;
    float rps = 0;
    
  2. ``setup()``関数での初期化。このセクションでは、シリアル通信の設定、ピンモードの構成、および初期モーター速度の設定を行います。

    void setup() {
      Serial.begin(9600);
      pinMode(sensorPin, INPUT);
      pinMode(motorB_1A, OUTPUT);
      pinMode(motorB_2A, OUTPUT);
      analogWrite(motorB_1A, 160);
      analogWrite(motorB_2A, 0);
    }
    
  3. ``loop()``関数でのモーター速度の測定。このセクションでは、モーターのステップを1秒間測定します。これらのステップを使用して毎秒回転数(rps)を計算し、その結果をシリアルモニターに表示します。

    ``millis()``関数は、Arduinoボードが現在のプログラムの実行を開始してから経過したミリ秒数を返します。

    void loop() {
      start_time = millis();
      end_time = start_time + 1000;
      while (millis() < end_time) {
        if (digitalRead(sensorPin)) {
          steps = steps + 1;
          while (digitalRead(sensorPin))
            ;
        }
      }
      temp = steps - steps_old;
      steps_old = steps;
      rps = (temp / 20);
      Serial.print("rps:");
      Serial.println(rps);
    }