Arduino 入門
Lesson 08
【チルトスイッチ編】
こんにちは、管理人のomoroyaです。
「Arduino」を使ったマイコンのプログラミングを子供と一緒に学習するブログ。
少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。
本記事はLesson 08 【チルトスイッチ編】です。
※Tilt Switch(チルトスイッチ)またはTilt Sensor(チルトセンサー)と呼ばれる部品です。
日本語で言うと、傾斜スイッチ、傾斜センサーといったところでしょうか。
原理を理解すると、センサーというよりもスイッチというのがしっくりくる部品です。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
チルトスイッチ(傾斜スイッチ)は、名前の通り傾きでONとOFFが切り替わるスイッチです。
原理は筒状の本体の中に、2つの接点、それに固定されていない導電隊(金属球)が入っています。
通常は下部の端子にボールが接触していて、端子間に電気を通すようになっています。
逆さになってボールが端子から外れると電気が通らなくなります。
正確な傾きを調べることはできませんが、傾いているいないの2値の検出には便利です。
倒れたらスイッチを切りたい機器などに使われます。
例えば、ストーブなど、倒れても動いていたら困るものに使われています。
補足ですが、正確な傾きを知るためには、加速度センサを利用します。
Lesson 08目標
チルトスイッチ(傾斜スイッチ)と、発光ダイオード(以下LED)を使用します。
チルトスイッチを傾けたり、戻したりすることでLEDが消灯、点灯する回路を作ります。
上記によりチルトスイッチが「オン」「オフ」しスイッチの役割をになっていることを確認します。
そのスイッチの働きをLEDの点灯、消灯で確認します。
また、今回はpinMode(pin,mode)コマンドにてINPUT_PULLUPを定義します。
デジタル入力のプルアップ機能についてもあわせて理解します。
本Lessonにでてくるコードはこれまで使用したコードばかりです。
そのためスケッチ(コード、プログラム)も理解しやすいです。
本Lessonも、遊ぶというところが今回一番大事なところです。
準備
今回のLessonの準備に取り掛かりましょう。
本Lessonも部品は多くないので、すぐに実践に移ることができます。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - チルトスイッチ(傾斜スイッチ)
- LED 8個(色はお好きな色をお使いください)
- 抵抗 220Ω 1本
- M-M Jumper wire
- M-F Jumper wire
※M-FがないかたはM-Mだけでもできます。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
新たに登場した部品について説明していきます。
本Lessonで新しく登場するのは、チルトスイッチのみです。
チルトスイッチ 実物写真
下の写真が、チルトスイッチ(傾斜スイッチ)です。
振ると中のボールがカチカチと鳴って動いているのがわかります。
今回購入したELEGOO UNO キットに合わせて梱包されています。
チルトスイッチには「+」、「-」極性は特にありません。
ちなみにAmazonで売られているものはこちら。
見た目が違いますが、同じ部品となります。
手持ちがない方は、こちらをどうぞ。
Amazonの中華電子部品が在庫不足?
すぐに、欲しい場合はこちらか・・・。
チルトスイッチ 原理
下記にチルトスイッチの原理図を示します。
センサーというよりスイッチという方がしっくりくるというのがお分かりいただけたでしょうか。
直立時はボールが下部の端子に触れているためボールを介して導通します。
OFF状態
傾けるとボールが端子から離れるため導通が切れます。
チルトスイッチ(傾斜スイッチ)を利用した回路図
番外編 01にてFritzingが使えるようになったので、さっそく回路図を作ってみました。
こちらが回路図。
こちらがブレッドボード図。
※M-M jumper wireのみでできるようにしています。
チルトスイッチを「5V」ではなく「GND」に接続したところです。
実践 回路作成とコード作成
さっそく、部品を接続しコードを書いて、動かしていきましょう。
どんな風に動くのか楽しみです。
接続
下図に示すように、用意した部品を使用して接続しましょう。
ブレッドボード図ではM-M jumper wireのみで書いています。
M-F jumper wireがある場合は、チルトスイッチはM-F jumper wireで接続した方が動かしやすです。
使用するポートは、Digital IOの「2」、「3」、電源の「5V」、「GND」です。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
本記事のコードを参考に書いてみてください。
実際書いてみた方が慣れるのに良いです。
コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で別名で保存しておきましょう。
今回のコードの肝は、pinMode(pin,mode)コマンドの使い方です。
コマンド説明
コードの説明をしていきたいと思います。
復習もかねて、今回の重要コマンドの説明をします。
特に、pinMode(pin,mode)のmodeの所を注目してください。
今回は、modeにINPUT_PULLUPを使用します。
コマンド | 説明 |
---|---|
digitalRead(pin) | 指定したピンの値を読み取ります。 その結果はHIGHまたはLOWとなります。 例:val = deitalRead(pin) 変数valに入力ピンの状態が入ります。 |
pinMode(pin, mode) | pin::設定したいピンの番号 mode:INPUT,OUTPUT,INPUT_PULLUP INPUT_PULLUPは、内部プルアップ抵抗を有効にできます。 INPUTを指定すると、内部プルアップは無効となります。 ※プルアップするとは? ピンに何も繋がっていなくても「High」にできるということです。 UNOのデータシートには20kΩ~50kΩと記載されています。 |
※プルアップについて
指定したピンが20kΩ~50kΩの抵抗を介して5Vにつながっていると考えてください。
サンプルコード
サンプルコードを下記に示します。
下記をUNOに書き込んで動作を確認していきます。
※一部コードに誤記があったので修正しました。@2018年12月23日
//Lesson 08 傾いたらLEDを消灯させて知らせるスケッチ //https://omoroya.com/ int tiltPin = 2;//チルトスイッチ int ledPin = 3;//LED void setup() //初期設定 { pinMode(tiltPin,INPUT_PULLUP); //2番ピンをプルアップありのインプットに指定 pinMode(ledPin,OUTPUT); //3番ピンをアウトプットに指定 } void loop() //ループ関数 { int digitalVal = digitalRead(tiltPin); if(HIGH == digitalVal) //2番ピンがHighならAを実行 { digitalWrite(ledPin,LOW); //A 2番ピンがHighなら傾い導通していないためプルアップ。LED消灯させる。 } else //2番ピンがHighでない場合Bを実行 { digitalWrite(ledPin,HIGH); //B Highでなければ傾いていないのでGNDに接続される。LED点灯させる。 } }
実践 動作確認
では、さっそく動作を確認していきます。
・チルトスイッチ 直立時
LEDが点灯しています。
・チルトスイッチ 傾斜時
LEDが消灯しています。
チルトスイッチの、ON/OFF確認できましたでしょうか?
今回はLEDを利用しましたがLesson 06 で学習した電子ブザーを使ってみるのもおもしろいです。
倒れたらブザーがなる。
実際にそういう機器ありますよね?
子供が「おー、すごい」ということ間違いなし・・・多分。
身近にあるものと関連づけられると楽しみが増します。
とにかく遊ぶことが理解に一番近づく方法です。
なぜ「GND」に接続か
今回、チルトスイッチを「5V」ではなく「GND」に接続しました。
なぜ、「GND」に接続したのか?
これ、結構回路作成で重要だったりします。
「5V」に接続しても作成することはできます。
その場合、チルトスイッチが「ON」しているとき2番ピンは「High」と認識します。
では、チルトスイッチが「OFF」している場合はどうなるか?
2番ピンが浮いた状態になってしまい、High,Lowの状態が正しく認識できません。
認識させるためには、チルトスイッチが「OFF」の時にはプルダウンさせておく必要があります。
しかし、UNOの入力ピンにはプルダウン機能がありません。
そのため、外付けで数十kΩ程度の抵抗を2番ピンに付けてプルダウンを作る必要があります。
※プルダウンの接続方法:2番ピン ー 抵抗 ー GND
部品が1個増えてしまいます。
回路を作成するときは、できるだけ部品数を少なくした方が良いです。
部品が少なければ少ないほど、不具合も少なくなりますしコストも下がります。
※趣味で遊んでいる分には、気にする必要がありませんが・・・。
ちなみにチルトスイッチを5Vに接続し、プルダウンを追加した回路図を載せておきます。
※下図
試しにこちらも遊んでみてください。
今回のコードをそのまま使用した場合、動作が逆になることがわかります。
※ただしプルアップを無効にするために
pinMode(tiltPin,INPUT_PULLUP);
pinMode(tiltPin,INPUT);
に変更してください。
チルトスイッチが直立時、LEDがOFF。
チルトスイッチが傾斜時、LEDがON。
まとめ
今回は以下の内容について理解してもらいました。
特に項目4の遊ぶことが一番の目標でした。
2.チルトスイッチの動きをLEDの点灯、消灯で確認する。
3.デジタル入力のプルアップ機能についてもあわせて理解する。
4.楽しんで遊ぶ。
その他 プルダウンについても、ついでに理解する。
いかがだったでしょうか。
Lesson 08 【チルトセンサー編】はここまで。
ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。
次回、Lesson 09は【サーボモータ編】です。
ラジコンのステアリングのようなことができます。
子供が喜ぶこと間違いありません。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント
みなさんと同じ感想になりますが、5Vからどこにもつながらないジャンパー線でずっと悩んでいました。
組んでるときも「これなんで必要なんだろう?」という疑問があり、結局繋がなくても動作したので……。
(コメントを見てようやく「何か意図があったんだ」ということに気づきました)
以前のレッスン6、レッスン7の場合は、GNDとデジタルPINのみの回路図で動作させていたと思います。
今回のレッスンのみということであれば、その旨を回路図の説明のところに入れておいてもらえると迷わなくてよいかなと思いました!
コメントありがとうございます。
記事に追記しておきました。
迷いの原因になっていたとは気づきませんでした!
また、何かあればコメントいただけると助かります。
よろしくお願いいたします。
最近始めた初心者です。初めまして。
かおちー様と似た質問です。
>実際の接続画像を見ても、arduinoの5Vからブレッボードの+にジャンパ線が繋がれたあと、どこにも繋がっていない
私もここで躓きました。
(PULLUPも個人的に調べましたが理解出来そうで出来ておりません…(*_*;笑)
掲載されてある通りブレッドボードへ配線、コードの記述を済ませ、
問題なく書き込めて動作しております。
そこで上記の配線を不思議に思い、
5V⇔ブレッドボードのプラス間にあるジャンパーワイヤーを外してみましたが
見た目上は問題無く動作しております。
電機はプラスからマイナスに向かって流れる、を前提とし、
USB(5V)→3pin→抵抗→LED→マイナス①→GND
USB(5V)→2pin→チルトスイッチ→マイナス②→GND
(マイナスとGND間のジャンパーワイヤーは1本)
以上の通り、5V⇔ブレッドボード間のジャンパーワイヤー無しで動作しております。
コメントありがとうございます。
回路図の5VとGNDは使う使わないにかかわらず、ブレッドボードにつなぐようにしているだけとなります。
本LessonではArduinoの5V端子を使用しておりません。
3pin、2pinなどのデジタルピンはHigh、LowをOUTPUTする、High、Lowを認識するINPUTとして使うことができるピンです。
ということは、Arduinoのなかでは、最終的には5Vにつながっているということです。
※高抵抗だったり、ドライバー(スイッチ)だったりを介して。
digitalWrite(ledPin,HIGH);
とすることで、そのピンは5Vにつながっていると認識いただいて問題ありません。
pinMode(tiltPin,INPUT_PULLUP);
とすることで、こちらは高抵抗を介して5Vにつながっていると考えて差し支えありません。
答えになっていますでしょうか?
はじめまして。電子工作初心者です。回路図は5Vからチルトスイッチに繋がっていますが、
fritzingのブレッボード図を見ても、実際の接続画像を見ても、arduinoの5Vからブレッボードの+にジャンパ線が繋がれたあと、どこにも繋がっていない(回路が一周せずに途切れている)ように見えるのですが、この状態でなぜ電気が流れるのでしょうか?
コメントありがとうございます。
チルトスイッチは2番ピンに接続しています。
スケッチ上で2番ピンは「プルアップ指定」しており、抵抗を介して5Vに繋がっている状態となります。
イメージとしては、
5V-抵抗-チルトスイッチ-GNDと繋がっています。
「5V-抵抗」の部分が2番ピンをプルアップ指定した場合の役割となります。
fritzingの回路図もチルトスイッチは2番ピンにつないでいるはずです。(1つ目の回路図)
古い情報かもしれませんので、F5を押すなどして一度cash情報を更新してみてください。
ちなみに、後半に記載している2つ目の回路図は、別の説明の回路図となります。