検索コード

レッスン14/31-4: Arduinoコーディング map() 例1

レッスン14/31-4: Arduinoコーディング map() 例1

このチュートリアルは、Arduinoプログラミングに関するシリーズの一部であり、map()関数の実用的な使い方に焦点を当てています。このレッスンでは、パーセンテージ値(0〜100)をPWM(パルス幅変調)値(0〜255)に変換してLEDの明るさを制御する方法を学びます。60%が153に相当することを手動で計算する代わりに、map()関数が線形変換を処理してくれるため、コードがよりクリーンで直感的になります。

この技術は、センサーの読み取り値やユーザー入力を異なる範囲に変換する必要がある多くの実世界のアプリケーションで不可欠です。例えば、以下のような用途に使用できます:

  • ポテンショメータの読み取り値に基づいてDCモーターの速度を制御する。
  • 温度センサーの生の値を0〜100%のスケールで表示する。
  • ジョイスティックの座標をサーボモーターの角度にマッピングする。
  • 周囲光センサーに基づいてLEDの明るさを調整する。
  • 0〜5Vのアナログ読み取り値を0〜1023のデジタル値に変換する、またはその逆。

ハードウェア/部品

このプロジェクトを進めるには、以下の部品が必要です:

  • Arduinoボード(Uno、Nanoなど)
  • LED
  • 220オームの抵抗
  • ジャンパーワイヤー
  • ブレッドボード(任意ですが推奨)

配線ガイド

ビデオでは、インストラクターが前のレッスン(LEDフェーディング)の配線セットアップを使用してプロジェクトをデモンストレーションしています。回路は簡単です:LEDのアノード(長い脚)を220オームの抵抗に接続し、その抵抗のもう一方の端をArduinoのデジタルピン3に接続します。LEDのカソード(短い脚)をArduinoのグランド(GND)ピンに直接接続します。

コードの説明

この例のコードは非常に簡潔で、中核となるロジックはsetup()関数にあります。ユーザーが設定可能な部分を詳しく見ていきましょう。

int LEDpin = 3; //LED用のピンを定義

この行は、LEDが接続されているArduinoピンを定義します。この例では、PWM対応ピンであるピン3に設定されており、アナログ出力に必要です。LEDを別のPWMピンに接続する場合は、この番号を変更できます。

int b=8;//60%の明るさ

これは、異なる明るさレベルをテストするために変更する主要な変数です。希望する明るさをパーセンテージで表します。コード内のコメントは「60%」と書かれていますが、ビデオではデモンストレーションの目的で値が8に設定されています。これを0から100の間の任意の整数に変更できます。例えば、b = 60に設定すると、60%の明るさレベルを表します。

int brightness = map(b, 0, 100, 0,255);

これがこのレッスンの核心です。map()関数は、パーセンテージ値(b)を元の範囲(0〜100)から新しいターゲット範囲(0〜255)に変換します。結果はbrightness変数に格納され、LEDピンにアナログ値を書き込むために使用されます。

analogWrite(LEDpin, brightness);// LEDを60%の明るさで点灯

最後に、この行はanalogWrite()を使用してマッピングされた値をLEDピンに送信します。これにより、LEDのデューティサイクルが設定され、明るさが効果的に制御されます。このアプローチの利点は、LEDを制御するためにb変数を変更するだけでよく、map()関数が必要な計算をすべて処理してくれることです。

ライブプロジェクト/デモンストレーション

ビデオでは、インストラクターがコードをアップロードし、b変数を変更したときの効果をデモンストレーションしています。bが8に設定されている場合、シリアルモニターにはマッピングされた値20が表示され、LEDは目に見えて暗くなります。bを90に変更すると、マッピングされた値は229になり、LEDははるかに明るくなります。bを100に設定すると、255にマッピングされ、最大の明るさになります。この実践的なデモンストレーションは、map()関数がユーザーフレンドリーなパーセンテージ値でアナログ出力を制御するプロセスをいかに簡素化するかを明確に示しています。

このビデオからの関連プロジェクト

チャプター

  • [00:00] RobojaxによるArduinoコースの紹介
  • [01:19] millis()とは何か、なぜ使うのか
  • [05:46] 例1:タイマーイベントにmillis()を使用する
  • [08:29] 例2:プッシュボタンでmillis()を使用する
  • [12:14] 例3:遅延後の2回目のボタン押下を検出する
  • [17:20] map()関数の紹介
  • [19:47] map()の例のコード解説
  • [20:41] map()関数のライブデモンストレーション

画像

Sunfounder car assembled
Sunfounder car assembled
919-Lesson 14/31-4: Arduino coding map() example 1
言語: C++
/*
Lesson 14/31: Arduino coding map( ) example-1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialize serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=8;//60% brightness
    int brightness = map(b, 0, 100, 0,255);
    Serial.println(brightness);//print it on serial monitor
    analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }
 

リソースと参考文献

ファイル📁

ユーザーマニュアル