発行済み 2026-04-29
Arduino 開発ボードを使用して、ボタンを使用してサーボの回転角度を制御します。これは電子制作における最も実用的な基本機能の 1 つです。この記事では、完全な解決策を直接提供します。通常のボタンを使用します。サーボを押すと90度回転し、放すと0度に戻ります。必要なのは、Arduino 開発ボード、9g サーボ、ボタン、数本の Dupont ワイヤ、およびブレッドボードだけです。以下の配線図とコードによれば、30分で完了できます。
必要なハードウェアのリスト:
Arduino 開発ボード (任意のモデルを使用できます。この記事では最も一般的なモデルを例として取り上げます)
SG90 9g サーボ (低電力サーボ、エントリーレベルに適しています)
タッチボタン(6x6x5mm 4ピン)
10kΩ抵抗(プルダウン抵抗用)
ブレッドボードとデュポン製ワイヤー
配線手順 (正確である必要があります):
1. サーボ信号線 (通常はオレンジまたは黄色) を Arduino のピン 9 に接続します。
2. サーボ電源ケーブル(赤)を5Vピンに接続します。
3. サーボアース線(茶または黒)をGNDピンに接続します。

4. ボタンの 1 つのピンは 5V に接続され、もう 1 つのピンはピン 2 に接続されます。
5. 押されていないときに入力が LOW になるように、ピン 2 と GND の間に 10 kΩ のプルダウン抵抗を並列に接続します。
よくある間違いは、プルダウン抵抗を省略すると、ボタンの状態が不規則に変化することです。抵抗の一端はピン 2 に接続され、もう一端は GND に接続されます。
#含むサーボ私のサーボ; //サーボオブジェクトを作成 int buttonPin = 2; //ボタン接続ピン int buttonState = 0; //ストレージボタンの状態 intサーボ位置 = 0; // 現在のサーボ角度 void setup() { myServo.attach(9); // サーボ信号線を9番ピンに接続 pinMode(buttonPin, INPUT); // ボタン ピンを入力として設定します myServo.write(0); // サーボ角度を 0 度に初期化します } void loop() { buttonState =digitalRead(buttonPin); // ボタンの状態を読み取ります if (buttonState == HIGH) { // 押されたとき myServo.write(90); // サーボは 90 度回転します late(15); // サーボがその位置に到達するまで待ちます } else { // 押されていない場合 myServo.write(0); // サーボは 0 度に戻りますlay(15); } }
コア コード ロジックは、digitalRead() を使用してピン 2 のレベルを継続的に検出することです。。ボタンが押されると、つまりピンが HIGH 状態になると、サーボは write(90) 操作を実行します。。ボタンを放すとサーボはwrite(0)動作に戻ります。。構造化記述により、プログラムを初期化、読み込み、判定、実行の 4 つのモジュールに明確に分割し、後続のマルチキーまたはマルチアングル制御モードに拡張できます。
Q: サーボが全く動きません。何が原因でしょうか?
電源が不十分です。サーボには個別に電力を供給する必要があります。 9g サーボは Arduino の 5V を直接使用できますが、より大きなサーボは外部電源から電力を供給する必要があります。
Q: ボタンを1回押すとサーボが1回転します。放すとゼロに戻るのでしょうか?
A: コードに論理エラーがあります。押した後に条件を決定するのではなく、上記の if-else 構造を必ず使用してください。
Q: ステアリングギアが震えたり、ステアリングが間違っている場合はどうすればよいですか?

1. 信号線に緩みがないか確認してください。 2. write()の後にdelay(15)を追加します。 3. これにより、サーボに十分な動作時間が提供されます。
Q:一度押すと90度回転し、もう一度押すとゼロに戻るように変更するにはどうすればよいですか?
ステータスを記録するには変数を追加する必要があります。ボタンが押されたことが検出されるたびに、フラグビットが変更され、対応する角度が書き込まれます。
Q: ボタンの反応が遅く、反応しない場合がありますか?
キーの機械的なジッターのため、レベルの変化を検出した後に遅延(10)を追加してジッターを除去するか、Bounce2 ライブラリを使用することができます。。
基本的な 1 ボタン制御をマスターすると、次の高度な機能を簡単に実装できます。
1. 2 つのボタンでそれぞれ順方向と逆方向を制御します。
ボタン A: 押すと 180 度に戻り、放すと 0 度に戻ります。
ボタン B: 押すと 45 度になり、放すと 0 度に戻ります。
コードを変更します: 2 番目のボタン ピンを追加し、個別に判断します。
2. ボタン 1 つで 3 つのアングルを切り替える
// 押すたびに角度が累積されます 0→60→120→0loop int angle[] = {0, 60, 120}; int インデックス = 0; if (buttonState == HIGH && !flag) { // ダブルクリック防止インデックス = (index+1) % 3; myServo.write(angles[index]);フラグ = true; }
3.長押しすると連続的に回転します
ボタンの継続時間を検出し、500ms を超えた後はボタンが放されるまで角度を増加し続けます。
以下は、拡張機能を含む完全なコード例です。原則はすべて、この記事の構造化されたライティング ロジック、つまり明確なインプットに基づいています。この入力はキーの状態で構成され、その後に角度計算などの処理が行われ、最後にサーボ コマンドとして使用される出力が行われます。
核心点の強調: Arduino のサーボボタン制御の本質は、「デジタル信号から PWM 信号へ」の変換です。ボタンでレベルの高低を設定し、レベル値に応じてサーボがあらかじめ設定された角度で回転します。配線が正しく (プルダウン抵抗を省略しないでください)、コード ロジックが if-else またはステート マシンを使用している限り、安定した制御を実現できます。。
すぐに実行できる 3 つのアクションの提案を次に示します。
1. 今夜は基本バージョンを作成します。この記事の配線図とコードに基づいて、ブレッドボードを使用して完全な回路を構築し、ボタンを押したときにサーボが回転するシーンを直接目撃します。
2. 角度の値を変更して実験を探索する: 90 度の状態を 45 度、135 度、180 度などのランダムな数値形式に変更し、観察によって引き起こされるステアリング位置の変化に注意を払い、write() 関数のパラメータ範囲が 0 から 180 度であることを理解します。
3. 2 番目のボタンを追加し、現在のコードを利用してボタン読み取りモジュールをコピーし、さまざまな角度でさまざまなボタンで制御できる実際のインタラクティブな特性を備えた製品プロトタイプを実現します。
ボタン制御のサーボをゼロから実現するための重要な知識はすでにすべて揃っています。次に、Arduino IDE を開いてハードウェアを接続し、各ステップを自分で確認してください。
更新時間:2026-04-29