×

らずらいと姫の挑戦日記(第10回)~折鶴のコントローラーを作るぞ!①~

2016-06-07

今回から新シリーズ「ORIZURUのコントローラを作るぞ!」をお届けします。
このシリーズでは、ORIZURUのコントローラーに使われている部品を一つずつ動かして動作を学びながら、最終的にORIZURUを飛ばしてみたいと思います。

まずは部品の紹介から…

ORIZURUのコントローラは全部で4種類のスイッチとレバーがあります。その中で、まずはプッシュスイッチから動かしてみたいと思います。

1

それぞれの部品情報は以下のようになっていますので、ぜひご参考になさって下さい。

■ジョイスティックユニット ツマミ付ツバメ無線TX26PRR-B10K http://store.shopping.yahoo.co.jp/marutsuelec/18602.html

ジョイスティック

■スーパースライド(TM)(標準タイプ)RS□□1シリーズ RS20111A9A03 http://www.monotaro.com/p/0148/8278/

スライド

■表面実装タイプタクトスイッチ SKHUALE010
http://jp.rs-online.com/web/p/tactile-switches/6827479/

スイッチ1

■NKKスイッチズ 基本レバー形トグルスイッチM-2023 http://www.monotaro.com/p/0707/1373/

OLYMPUS DIGITAL CAMERA

プッシュスイッチの種類

プッシュスイッチというボタンを押していることを検出するボタンです。タクトスイッチとも呼ばれます。PCのキーボードやリモコンのスイッチ、ゲームのコントローラーなどなど様々なところに使用されていますね。他にも、Lazuriteのリセットボタンもプッシュスイッチです。

プッシュスイッチの構造

プッシュスイッチの内部に通電する金属板みたいなものが入っているようで、スイッチを押すと金属板が下がり両端が通電する仕組みになっているようです。 5-2

 

スイッチは次のように抵抗を介して電気を流すことで、押した、離れたを検出することが出来ます。抵抗器は電気を少しだけ流すために使用している部品です。

1213

 

プッシュスイッチの動作原理

電気だとイメージがわきにくいので、水で考えてみたいと思います。洗面台の排水栓のスイッチ(ボタン)で考えてみます♪

洗面台の中の水が増えれば、スイッチが押されたという事、水が減ればスイッチが押されていないという事が解ります。ボタンが押されたか、押されていないかを水の量で調べているという事になりますね。

抵抗器の役目は水の量の調整です。抵抗器が無いと無駄に水を捨てる事になってしまうので、減っている/増えているがわかるくらいの抵抗をつけます。一般には10kΩ〜100kΩくらいとのこと。

37

14

Lazurite8番ピンを見てみよう!

ORIZURUのコントローラの8番ピンとそのスイッチは下の図のような回路になっています。ボード上にはPULLUP抵抗が無いのですが、プログラムのpinModeの「INPUT_PULLUP」のところで、それを使うように命令しているそうです。

ちなみに、電源から電気を少しだけ流すために使う抵抗のことをPULLUP抵抗といい、GNDに少しだけ電気を流す抵抗をPULLDOWN抵抗というそうです。

1633

 

 

ORIZURUのコントローラーのスイッチを押してみよう!!

18

8番ピンは右下のプッシュスイッチにつながっているようなので、実験してみましょう♥

1)ORIZURUコントローラとLazurite Sub-GHzを合体し、PCに繋ぎます。

19

2)Lazirite IDEを開き、『button』プロジェクトを新規作成します。

このプログラムのポイントは、
1. pinModeでINPUT_PULLUPを選択

2. digitalReadで8番ピンの状態を読み込む

3. 結果をシリアル出力する

です。

[c]
void setup() {
// put your setup code here, to run once:
pinMode(8,INPUT_PULLUP);
//8番ピンをPULLUP抵抗を使って入力モードにします
Serial.begin(115200);
//シリアルモニタに表示させる時の決まり文
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println_long(digitalRead(8),DEC);
//シリアルモニタに表示  8番ピンの状態をよむ 10進数で
delay(100);
}
[/c]

3)通信ポートを選択し、マイコンボードに転送!!

4)シリアルモニタを表示させます。

20

ちゃんと、スイッチOFFの時に1(HIGH)  , スイッチONの時に0(LOW) の結果が表示されました♪

今まで色んなスイッチを何気なく押していましたが、内部ではこんな仕組みになっていたんですね!驚きでしたstamp7

INPUTってなんだ???

OUTPUTってLEDが光ったりして、状態を目で見ることが出来たのですが、INPUTって何をしているんだろう。。。。。

  • pinMode・・・Lazuriteのどのピンを、どうやって利用するか設定すること
  • INPUT・・・入力モード

調べてみたら、コンピュータにおいては、装置に情報を与えること操作することで、電子回路や音響機器・映像機器においては、電子回路に電気信号または電気エネルギーを与えること

  • OUTPUT・・・出力モード

コンピュータから周辺装置にデータを送り出すこと、プリンターで印刷することや、ディスプレイにデータを表示させること

OUTPUTって目に見えるのですが、INPUTは改めて考えてみると???状態だったのですが、色々と調べたり実験したりしてみたら解ってきましたので、もう少しお付き合いください。

実験用プログラム

2番ピンにLEDを付けてLチカして、その時の状態を8番ピンで読み取るプログラムを作ってみました。

[c]

void setup() {
// initialize the digital pin as an output.
pinMode(2, OUTPUT);
//2番ピンを出力モードにします
pinMode(8, INPUT_PULLUP);
//8番ピンをPULLUP抵抗を使って入力モードにします
Serial.begin(115200);
}

void loop() {
digitalWrite(2, HIGH);
//2番ピンをHIGHで出力します
Serial.println_long(digitalRead(8),DEC);
//シリアルモニターに表示     8番ピンの状態をよむ 10進数
delay(5000);
//5秒待つ
digitalWrite(2, LOW);
//2番ピンをLOWで出力します
Serial.println_long(digitalRead(8),DEC);
delay(1000);
//1秒待つ
}

[/c]

内容はこんな感じ↓

30

1)Lazurite IDE新規作成で、上記プログラムをコピペ。

2)ケーブルを下記のように繋ぎます。

26   27

3)通信ポートを選択し、マイコンボードに転送。

4)無事にLEDが光りました~♪stamp16

4)シリアルモニタを表示させます。

28

Lチカの復習ですが、結果は以下のようになりました。

HIGHでLED=ONの時
  • LED→5秒点灯し、1秒消灯
  • シリアルモニタ→1が5秒表示され、0が1秒表示
LOWでLED=ONの時
  • LED→1秒点灯し、5秒消灯
  • シリアルモニタ→0が1秒表示され、1が5秒表示

ボタンじゃなく、LEDの状態もINPUTで知ることができました。stamp5

INPUTって、色々な状態を読み取るっていうことだということが解ってきました。確かに、目で景色を読み取るのですが、それはコンピューターではカメラで読み取っています。人は音声を耳で読み取りますが、コンピュータはマイクで読み取っています。ボタンやLEDの状態はピンをINPUTにしてdigitalReadで読み取ることができるということなんですね!!じゃあ、匂いや味はどうやって読み取るんだろう….

INPUT:digitalReadとセット

その端子自体がなにかお仕事(Ledを光らせるなど)をするのではなく、端子に繋がっているもの(ボタンなど)の状態をよんで、その値をマイコンへ教えてあげる

OUTPUT:digitalWriteとセット

その端子自体になにかお仕事(Ledを光らせるなど)をさせる

トグルスイッチについて

基本の構造や仕組みは、プッシュスイッチと同じです。

プッシュスイッチはスイッチから手を離すと、ON・OFFが切り替わりますが、トグルスイッチは手を離してもON・OFFの状態を保持してくれます。

代表的なものに、電気のスイッチがありますね!

31

 

実際に動かしてみましょう!

トグルスイッチはLazuriteの4番ピンに繋がっています。

1)Lazuriteを開き、『button6』のプロジェクトを作成します。

[c]

void setup() {
// put your setup code here, to run once:
pinMode(4,INPUT_PULLUP);//4番ピンをPULLUP抵抗を使い入力もーどにします
Serial.begin(115200);
}

void loop() {
// put your main code here, to run repeatedly:
Serial.println_long(digitalRead(4),DEC);//
//シリアルモニタに表示  4番ピンの状態をよむ 10進数で
delay(100);

}

[/c]

3)通信ポートを選択し、マイコンボードに転送!!

4)シリアルモニタを表示させます。

35

レバーが中心位置だとOFF(1)、奥に倒すとON(0)、手前に倒すとOFF(1)の結果が表示されました♪

プッシュスイッチと同じですが、用途によって使いわけできますね!

今回はとても長くなってしましましたが、LEDの復習もできましたし、プログラムも少し掘り下げましたし、色々と盛りだくさんでした☆

次回は、6月14日(火)続ORIZURUのコントローラを動かすぞ!の予定です。

Laz-princess_footer