らずらいと姫の挑戦日記(第11回)~折鶴のコントローラーを作るぞ!②
2016-06-14

今回はORIZURUの「ジョイスティック」と「スライドボリューム」を動かして、仕組みなどを学んでいきたいと思います☆
ジョイスティックとスライドボリューム
- ジョイスティック・・・ゲームやラジコンのコントローラーなどに使用されていて、レバーが上下左右斜めに動きます。手を離すと中心あたりに戻ってきます。
- スライドボリューム・・・テレビの音量調節や、照明の調節に使用されていて、レバーが上下に動きます。手を離してもその位置にとまってくれます。
レバーの内部を見てみよう!
前回のプッシュスイッチが繋がっていた8番ピンはマイコンに内蔵されているPULLUP抵抗を使ってボタンのON/OFFを読み取りました。今回は、ジョイスティックやスライダーの場所に応じて0V~3.3Vの電圧がマイコンに入ってきます。その値を読み取るにはAD変換回路(アナログ‐デジタル変換回路)を使います。AD変換回路はA0-A5端子で使用することが出来て、analogRead(端子番号)という関数で値を読み取ることが出来るそうです。
さっそくレバーを動かして実験してみましょう!
コントローラーについているもの全て動かしてみましょ~♪
Lazuriteに繋がっているピンは以下のとおりのようなので、それぞれ使用します。
- ジョイスティックの左右操作レバー・・・A0ピン
- ジョイスティックの前後操作レバー・・・A1ピン
- スライドボリューム・・・A2ピン
- トグルスイッチ・・・4番ピン
- プッシュスイッチ・・・8番ピン
1)ORIZURUコントローラとLazurite Sub-GHzを合体し、PCに繋ぎます。
2)Lazirite IDEを開き、プロジェクトを新規作成します。
[c]
void setup() {
// put your setup code here, to run once:
pinMode(8,INPUT_PULLUP);//8番ピンをPULLUP抵抗を使って入力モードにします
pinMode(4,INPUT_PULLUP);//4番ピンをPULLUP抵抗を使って入力モードにします
pinMode(A0,INPUT);//A0を入力モードにします
pinMode(A1,INPUT);//A1を入力モードにします
pinMode(A2,INPUT);//A2を入力モードにします
Serial.begin(115200);//シリアルモニタに表示させる時の決まり文
}
void loop() {
char result8;//結果8はchar型
char result4;//結果4はchar型
result8 = digitalRead(8);//結果8=8番ピンの状態
result4 = digitalRead(4);//結果4=4番ピンの状態
// put your main code here, to run repeatedly:
Serial.print_long(result8,DEC);
//シリアルモニタに表示 結果8を 10進数で
Serial.print(" ");
//シリアルモニタにスペースを表示
Serial.print_long(result4,DEC);
//シリアルモニタに表示 結果4を 10進数で
Serial.print(" ");
//シリアルモニタにスペースを表示
Serial.print_long(analogRead(A0),DEC);
//シリアルモニタに表示 A0ピンの状態をよむ 10進数で
Serial.print(" ");
//シリアルモニタにスペースを表示
Serial.print_long(analogRead(A1),DEC);
//シリアルモニタに表示 A1ピンの状態をよむ 10進数で
Serial.print(" ");
//シリアルモニタにスペースを表示
Serial.println_long(analogRead(A2),DEC);
//シリアルモニタに表示 A2ピンの状態をよむ 10進数で
delay(1000);
//1秒毎に
}
[/c]
3)通信ポートを選択して、マイコンボードへ転送
4)シリアルモニタを表示
まずは、動かしていない状態です。プッシュスイッチ・トグルスイッチともにOFF、ジョイスティックは0~1023の値の真ん中あたり、ボリュームスライダーは下なので0を表示しています。
色々、動かしてみます♪♪♪
このレバーを上手に操作して、ORIZURUは鳥のように天を舞っていたのですね~♪
digitalReadとanalogRead
デジタルとアナログ、普段の生活の中にも沢山出てくる言葉ですね。でも、その意味は全くわかりませんでした・・・でも、ORIZURUのコントローラーを動かしてその結果をみると一目瞭然でした!!
degitalRead・・・結果をON(0)かOFF(1)のみの値にする
analogRead・・・ON/OFFだけではなくて、中間の値をデジタル化(数値化)してくれる
たしかに、コントローラーからORIZURUにジョイスティックとスライダーの位置を伝えるとき、200/1023の場所だよ、とか0/1023の場所だよ、とか数値化して伝えてあげれば、簡単に伝わりますよね。これをやってくれるのがanalogReadということなんですね。
改めて、デジタルとアナログの違いってなんでしょう?
一番簡単な考え方が、デジタルは細かいところを切り捨てて数値化している、ということでしょうか。
CD、DVD、デジタルカメラなどはデジタルで音楽や映像を記録しています。全てのデータが数値化されているので、パソコンで再生したり、メールで送ったり、何回コピーしても劣化することはありません。
VHSやレコードなどのアナログ機器は見たまま、聞いたまま、そのままを記録しているので、何度も使用したり、時間が経つと劣化してしまいます。コピーなどの作業もデジタル機器に比べて時間もかかります。
このような理由から扱いやすいデジタルの時代になっていったのですね!
まとめ
ORIZURUのコントローラーの部品を1つずつ動かしながら、その仕組み・電子回路・プログラムなどを学ぶ事が出来ました。動かしてみた結果がモニタ表示され、それを自分の目で確認できる事で、理解度が増した気がします♪
改めて、コンピューターって素直なんだなぁ、って思いました。自分が指示した事だけを守って頑張ってお仕事をしてくれている!そんな風に考えると、プログラムが少しだけ優しく感じられるでしょうか!?
次回は、実際にORIZURUを操作するためのコントローラーのプログラムを少しずつ勉強していきたいと思います!
おまけ
こんにちは、ラズライトの開発者1号です。マイコン ML620Q504Hには逐次比較型の12bitADコンバータが内蔵されているのですが、Lazuriteの初期設定では10bitで結果を出力してきます。12bitの結果が必要な時には、analogReadResolution(12)を実行して、AD変換結果のビット幅を変更してください。
ちなみに、逐次比較型というのは、最上位ビットから1ビットずつ変換していく方式のAD変換回路です。
まず初めに、半分より大きいか、小さいかを比較して、大きければ1を、小さければ0になります。
その次は、前の結果が1のときは、上半分だけで比較をします。3/4より大きいときは1、それ以下なら0になります。これを12回行って12bit分のデータを作り出していくADコンバータです。