検索コード

Arduinoを使ってポテンショメータとLCD1602でサーボを制御する

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 wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot

配線手順

部品を配線するには、まずポテンショメータを接続します。ポテンショメータの外側のピンの一方をArduinoの5Vピンに、もう一方の外側のピンをグラウンドに接続します。中央のピンはアナログピンに接続しますA0

次に、サーボモーターの茶色または黒の線をグラウンドに、赤い線を5Vピンに、黄色またはオレンジの線をデジタルピンに接続します。9Arduino上で。LCD1602については、次を接続してくださいVDDピンを5Vに接続,RW接地し、V0コントラスト調整用のポテンショメータの中央ピンに接続してください。RS留める12EN留める11D4留める5D5留める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参照)。

画像

SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot
97-This is the Arduino code for controlling a servo with a potentiometer and an LCD1602.
言語: C++
/*
 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  
}

リソースと参考文献

ファイル📁

ファイルは利用できません。