このチュートリアルはの一部です: サーボモーター
サーボモーターに関連するすべてのビデオをここに掲載しています。他のビデオへのリンクはこの記事の下にあります。
Arduinoを使ってポテンショメータとLCD1602でサーボを制御する
このチュートリアルでは、ポテンショメータ(可変抵抗)を使ってサーボモータを制御し、ポテンショメータの値とサーボ角をLCD1602に表示する方法を学びます。 このプロジェクトは複数の部品を組み合わせ、それらがどのように連携してインタラクティブなシステムを作るかを理解するのに最適です。 チュートリアルの最後には、ツマミでサーボの角度を調整すると同時に値がLCDに表示される、実際に動作するセットアップが完成します。

配線やコードに入る前に、これから使う部品を理解しておくと役に立ちます。ポテンショメータは位置に応じて出力電圧を調整できる可変抵抗として働き、その値を使ってサーボの角度を決定します。LCD1602は現在のポテンショメータの値とそれに対応するサーボの角度を表示します。全体の作業を視覚的に確認したい場合は、ビデオ(00:00)を参照してください。
ハードウェアの解説
このプロジェクトで使用する主なコンポーネントは以下の通りです:
- Arduinoボード:これは、ポテンショメータからの入力を処理し、それらに基づいてサーボの位置を制御するシステム全体のコントローラとして機能します。
- ポテンショメータ:10kΩのポテンショメータを使ってArduinoにアナログ入力を与えます。端子は3つあり、片方が5V、もう片方がグラウンド、中央の端子がArduinoのアナログピン(A0)に接続されます。
- サーボモーター:このサーボは、ポテンショメータの位置に基づいて角度を送ることで制御されます。信号線はArduinoのデジタルピン(ピン9)に接続されます。
- LCD1602ディスプレイ:このディスプレイはポテンショメータの値とサーボの角度を表示します。制御用にArduinoの複数のデジタルピンに接続します。
ポテンショメータは抵抗を変化させることで中央端子の電圧を変え、その電圧をArduinoがアナログ入力として読み取ります。サーボモーターは目的の角度に対応するパルス幅変調(PWM)信号を送ることで制御されます。LCD1602はライブラリを利用しており、ディスプレイを簡単に制御してポテンショメータやサーボに関する情報を表示できます。
データシートの詳細
| 製造元 | さまざまな |
|---|---|
| 部品番号 | LM016L |
| ロジック/入出力電圧 | 5ボルト |
| 電源電圧 | 4.5〜5.5 V |
| 出力電流(チャンネルごと) | 最大2 mA |
| ピーク電流(チャンネルあたり) | 20 mA |
| PWM周波数ガイダンス | 50ヘルツ |
| 入力論理の閾値 | 0.3 × Vcc(低)、0.7 × Vcc(高い) |
| 電圧降下 / RDS(オン) / 彩度 | 最大0.2 V |
| 熱的制限 | 85℃ |
| パッケージ | 16ピンDIP |
| 注記 / バリエーション | 16×2文字ディスプレイ |
- ポテンショメータの中央のピンをアナログピンA0に接続してください。
- サーボに5Vの電源が供給され、デジタルピン9に接続されていることを確認してください。
- LCDに適したライブラリを使用し、Arduino IDEにインストールされていることを確認してください。
- 配線は短絡しないように注意してください。特にサーボの接続には注意が必要です。
- 表示の問題を避けるため、コード内でLCDが正しく初期化されていることを確認してください。

配線手順
部品を配線するには、まずポテンショメータを接続します。ポテンショメータの外側のピンの一方をArduinoの5Vピンに、もう一方の外側のピンをグラウンドに接続します。中央のピンはアナログピンに接続しますA0。
次に、サーボモーターの茶色または黒の線をグラウンドに、赤い線を5Vピンに、黄色またはオレンジの線をデジタルピンに接続します。9Arduino上で。LCD1602については、次を接続してくださいVDDピンを5Vに接続,RW接地し、V0コントラスト調整用のポテンショメータの中央ピンに接続してください。RS留める12、EN留める11、D4留める5、D5留める4,D6ピンで留める3、そしてD7留める2。
もしLEDを使用する場合は、5V電源に接続してLEDと直列に220Ωの抵抗を入れることが推奨されます。さらに、動作中のノイズを抑えるために、サーボの電源ピンとGND間に470 µFのコンデンサを接続することができます。
コード例と解説
コードは、必要なライブラリをインクルードし、LCDとサーボ用のピンを初期化することから始まります。以下の抜粋は、LCDとサーボのセットアップを示しています:
void setup() {
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}このスニペットはLCDを16列×2行用に初期化し、サーボをピン9に接続し、LCDに歓迎メッセージを表示します。そのlcd.clear()この関数は、以前のメッセージがすべて削除されることを保証します。
次に、ループはポテンショメータの値を継続的に読み取り、サーボの位置とLCD表示を更新します:
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
lcd.setCursor(11, 0);
lcd.print(val);
lcd.setCursor(0, 1);
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
}このループはポテンショメータの値を読み取り、それをサーボの対応する角度にマッピングして、ポテンショメータの値とサーボの角度の両方をLCDに更新します。そのdelay(500)ループの最後で、表示があまりにも速く更新されるのを防ぎます。
デモンストレーション/期待される内容
電源を入れると、LCDに「Robojax Servo Knob」が2秒間表示され、その後にポテンショメータの値とサーボの角度が表示されます。ポテンショメータを回すとサーボの角度がそれに応じて変化し、新しいポテンショメータの値がLCDに反映されます。サーボが逆方向に動くなど予期しない動作があった場合は、ポテンショメータとサーボの配線を確認してください(ビデオの10:00参照)。
このチュートリアルはの一部です: サーボモーター
- Arduinoを使ってプッシュボタンでサーボを制御する
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Arduinoを使ってポテンショメータでサーボを制御する
- Arduinoを使った赤外線リモコンによるサーボモーターの制御
- ポテンショメーターを使用したArduinoサーボモーター制御
- Arduino用の手のジェスチャーによるサーボ位置の制御
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- PCA9685 16チャンネル 12ビット サーボコントローラ V1 用の Arduino コードとビデオ
- Build an Arduino Servo Toggle Switch with a Push Button
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 November 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
*/
// May 20, 2018 20:08
// Written by Ahmad S. for Robojax.com at Ajax, Ontario, Canada
// Watch the video for this code at https://youtu.be/DN1LPMSZtNA
// This code is taken from http://robojax.com/learn/arduino
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// start of servo settings *******
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int angle; // the angle servo is sent to
// END of servo settings *******
void setup() {
// Robojax Servo knob with LCD1602 Test
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Robojax Servo knob with LCD1602 Test
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}
void loop() {
// Robojax Servo knob with LCD1602 Test
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
// set the cursor to column 0, line 1
lcd.setCursor(11, 0);
lcd.print(val);
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
// Robojax Servo knob with LCD1602 Test
}
リソースと参考文献
-
外部Arduino用のLCD1602 LCDディスプレイを使用するyoutube.com
-
外部LCD1602ライブラリ(GitHubから)github.com
ファイル📁
ファイルは利用できません。