ELEGOO Arduino用UNO R3スターターキット で始める マイコン+電子工作5

ELEGOO Arduino用UNO R3スターターキット レベルアップ チュートリアル付

前回の続き
引き続きチュートリアルに沿って電子工作入門していく

傾斜ボールスイッチ

使用する機器

  • (1) x Elegoo Uno R3
  • (1) x Tilt Ball switch
  • (2) x F-M wires (Female to Male DuPont wires)

傾斜センサー

傾斜センサ(傾斜ボールスイッチ)を使用すると、向きや傾きを検出できます。それらは小さく、安 価で、低電力で使いやすいものです。正しく使用すると、磨耗しません。彼らのシンプルさは、おも ちゃ、ガジェット、家電製品で人気があります。明らかな理由から、「水銀スイッチ」、「傾斜スイ ッチ」または「ローリングボールセンサー」と呼ばれることもあります。

中に入ってるボールが分側の基部に触れていると通電し、それ以外はOFFになる
よくフィクションで見る爆弾のスイッチに使われてて、銀の玉が触れると爆発!ってある水銀スイッチはこれのことかー!
傾斜センサーとしても使えるがスイッチと見たほうが理解しやすい

構成
スイッチのピンに正負はない

いつものようにサンプルコードをデプロイし

シンプルにスイッチがONの場合は Arduino 本体の LED が光り、OFFの場合は消えることを確認できる
真上、真下にいなくても、筒の太さ、長さ、ボールの大きさからわかるようにちょっとの傾斜でON/OFFになる事がわかる

void loop() 
{  
  int digitalVal = digitalRead(2);
  if(HIGH == digitalVal)
  {
    digitalWrite(ledPin,LOW);//turn the led off
  }
  else
  {
    digitalWrite(ledPin,HIGH);//turn the led on 
  }
}

デジタルの2番ピンをdigitalWrite(2, HIGH)に設定し
コードを見てみると、スイッチによるデジタル入力値digitalRead(2)により
digitalVal が HIGH なら ledPin,LOW、違うなら ledPin,HIGH にしている

サーボ

使用する機器

  • (1) x Elegoo Uno R3
  • (1) x Servo (SG90)
  • (3) x M-M wires (Male to Male jumper wires)

サーボ(SG90)

  • Universal for JR and FP connector
  • Cable length : 25cm
  • No load; Operating speed: 0.12 sec / 60 degree (4.8V), 0.10 sec / 60 degree (6.0V)
  • Stall torque (4.8V): 1.6kg/cm
  • Temperature : -30~60’C
  • Dead band width: 5us
  • Working voltage: 3.5~6V
  • Dimension : 1.26in x 1.18 in 0.47 in (3.2cm x 3cm x 1.2cm)
  • Weight : 4.73 oz (134g)

サーボは 180 度回転することができるギヤードモータの一種です。
UNO R3 ボードから電気パルスを送信することによって制御されます。
これらのパルスは、サーボがどの位置に移動すべきかをサーボに指示する。
Servo には 3 本のワイヤーがあり、茶色のワイヤーはグランドワイヤーで、UNO のGND ポートに接続する必要があり、赤色のワイヤーは電源ワイヤーで、5v ポートに接続し、オレン ジ色のワイヤーは信号ワイヤー Dig#9 ポートに接続する必要があります。

サーボモーターといえば名前は聞いたことあるが普通のモーターと何が違うのか

  • モーター:電力をかけるとひたすら回転
  • サーボモーター:信号に応じて0度からN度の範囲で回転
  • ステッピングモーター:信号に応じてモーターを制限なく制御可能
  • ブラシレスモーター:安定した回転速度などの制御が可能

サーボモーターは PWM パルス幅変調 と RGB LED 時に利用した仕組みを利用して制御する

詳しい動作については下記を参考にするとわかりやすい

SG90 というサーボモーターの場合
周期20ms でデューティーサイクル 0.5~2.4ms なので
周期20msのパルスを0.5ms HIGH にすると0度、2.4ms HIFGH で 180 度動くということらしい

こういうデータシートの見方はちゃんと読めるようにしておきたい
チュートリアルにはそこまで詳しくは説明がないため、「この機器はなんなのか?」「どういう仕組だ?」
という疑問と自分で調べることが求められる

構成

サーボモーターの PWM 対応のオレンジ を ARduinoの PWM対応 9ピンに
GROUND(ー) 対応の 茶色は GND ピンに
Vcc(+)対応の赤は 電源の 5V ピンに

サンプルコードを開き、ブザー時と同様にライブラリを読み込んでいるため
ライブラリを追加してデプロイするとモーターが動き出す
※私の環境では Servo ライブラリはデフォルトでインストールされていた

コードを見てみると

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  Serial.begin(9600);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
 
}

サーボ制御につかう PWM ピンを myservo.attach(9) で指定し
int pos = 0; で現在のモーター位置を原点設定
その後 for 文で pos 値を 0~180 つまり 0度~180度 まで 1度 ずつ増減させながらループさせている
RGB LED 時と違い、PWM の間隔を調整するような記述は無く、Servo ライブラリの関数 myservo を利用することで簡単に制御できるようになっている

こころなしかきっちり 180度 で動いてる気はしないが、そこはモーターの精度の話だろう


よくおもちゃとかであるような簡単な機器が出てきた
へーといいながら作業してたり、データシートをちゃんと調べ始める必要が出てきてる

とりあえず今回はここまで
多分次回に続く

Share Comments
comments powered by Disqus