レッスン14/31-5: Arduinoコーディング map() 例2
このチュートリアルでは、Arduinoのmap()関数を使用して、analogWrite()で必要な生の0〜255の範囲ではなく、パーセント値(0〜100%)を使ってLEDの明るさを制御する方法を説明します。これは、任意のバイト値ではなくパーセントで考えることができるため、コードを簡素化し、はるかに直感的にする基本的なテクニックです。
このスキルは、センサーの読み取り値や制御信号をスケーリングする必要があるあらゆるプロジェクトに不可欠です。例えば、次のような用途に使用できます:
- ポテンショメータの読み取り値に基づいてLEDの明るさやモーターの速度を制御する。
- 温度センサーの出力(例:0〜1023)を摂氏または華氏の範囲に変換する。
- ジョイスティックのアナログ入力をマッピングしてサーボモーターの位置を制御する。
- パーセント値を使用してデバイスの電力レベルを設定するシンプルなユーザーインターフェースを作成する。
このレッスンの終わりまでに、読みやすく調整しやすい、よりクリーンで保守しやすいコードを書けるようになります。
ハードウェア/部品
このプロジェクトは最小限の部品セットを使用するため、初心者に最適です。必要なものは次のとおりです:
- Arduinoボード(例:Uno)。
- LED。
- 220オームの抵抗。
- ジャンパーワイヤー。
- ブレッドボード(任意ですが推奨)。
配線ガイド
このプロジェクトの配線は、ビデオ(ビデオの20:47)で示されているように非常に簡単です。LEDは220オームの電流制限抵抗を介してArduinoのピン3に接続されています。
LEDのアノード(長い方の脚)を抵抗を介してピン3に接続します。LEDのカソード(短い方の脚)をArduinoのグランド(GND)ピンに接続します。
コードの説明
この例では、LEDの明るさの制御を簡素化するユーザー定義関数に焦点を当てています。コードは、コードを直感的にする鍵となるpwmValue()というカスタム関数を中心に構築されています。
コードの設定可能な部分を分解してみましょう:
int LEDpin = 3; //LED用のピンを定義
この行は、LEDが接続されているArduinoピンを定義します。数字の3は、ArduinoボードのPWM対応ピンであれば他の番号に変更できます。
プロジェクトの核心は、カスタム関数pwmValue()です。この関数は入力としてパーセント値を受け取り、analogWrite()で使用される0〜255の範囲に変換します。ここでmap()関数がその役割を果たします。
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
この関数を使用するには、希望する明るさのパーセントを指定して呼び出すだけです。関数はanalogWrite()に適した値を返します。例えば、pwmValue(60)は153を返します。これは255の60%に相当します。この関数には、入力パーセントが0〜100の範囲内であることを確認する安全チェックも含まれており、範囲外の場合は0を返します。
setup()関数では、これがどのように使用されるかを確認できます:
int b=5;//60%の明るさ
Serial.println( pwmValue(b) );//シリアルモニターに出力
analogWrite(LEDpin, pwmValue(b));// LEDを60%の明るさで点灯
ここで、変数bは希望する明るさのパーセントに設定されています。関数pwmValue(b)は、マッピングされた値をシリアルモニターに出力するためと、LEDの明るさを設定するために使用されます。LEDの明るさを変更するには、bの値を変更するだけです。map()関数が必要な計算をすべて処理します。
ライブプロジェクト/デモンストレーション
ビデオでは、発表者がb変数の値を変更してコードをArduinoにアップロードすることでプロジェクトをデモンストレーションしています。bが60に設定されている場合、コードはそれを153にマッピングし、LEDは60%の明るさで点灯します。bを90に変更すると229にマッピングされ、LEDが著しく明るくなります。100に設定すると255にマッピングされ、最大の明るさになります。このデモンストレーションは、map()関数を使用して直感的なパーセント値でLEDを制御できる方法を明確に示しており、シリアルモニターはピンに送信されている正確な0〜255の値を確認します(ビデオの21:29)。
このビデオの関連プロジェクト
- レッスン14/31-1:Arduino Millis(delayなし)とmap関数 | SunFounder Robojax
- レッスン14/31-2:イベントを使用したArduinoコーディング millis() 例2
- レッスン14/31-3:プッシュボタンを使用したArduinoコーディング millis() 例3
- レッスン14/31-4:Arduinoコーディング map() 例1
チャプター
- [00:00] Millisとmap関数の紹介
- [01:19] Millisとは何か、なぜ使用するのか
- [05:46] アクションを実行するためのイベントでのMillisの使用
- [08:35] プッシュボタンを使用したMillisの例2
- [12:14] 2回のボタン押下をチェックするMillisの例3
- [17:20] map()関数の紹介
- [19:47] パーセントをLEDの明るさにマッピングするコード例
- [20:47] map()関数のライブデモンストレーション
- [22:41] マッピングを処理するカスタム関数の作成
/*
Lesson 14/31-5: Arduino coding map( ) example-2
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);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
必要かもしれないもの
-
アマゾンSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
アマゾン
-
アマゾン
-
アマゾン
-
他の
リソースと参考文献
-
外部SunFounderの3-in-1スマートカー学習キットを購入するsunfounder.com
ファイル📁
ユーザーマニュアル
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB