Physical Computing

Network and Information, Senshu Univ.

Menu
  • Home
  • Tips
  • About
  • admin

Month: November 2016

#10 Serial Communication

November 28, 2016
| No Comments
| Class materials

講義日: 2016.11.29 今週は、シリアル通信について学修します。12月1日(木曜日)の演習では、綿貫先生の講演があります。 目次 I. Basics of Communication II. Basics of Serial Communication III. Connect a LPC824 with an Unity App IV. Practical Work I. Basics of Communication まず、通信ということそのものから考えましょう。通信とは、少なくとも2つの何かが情報をやり取りすることです。ここでは話を簡単にするために、AさんとBさんの間での通信だとしましょう。AさんがBさんに何かを伝えたい。その際に、伝える方法は、ほぼ無限にあります。今ならLineでメッセージを送るとか、電話をかけるということになるでしょう。これが100年前であれば、手紙を書くのが普通だったのでしょうね。さらに5千年前であれば、狼煙かもしれません。どんな方法を使うにしても、必ず必要となるものがあります。それが、通信媒体と通信プロトコルです。 通信媒体は、信号を伝達させるのに使う物理的なモノのことです。電話なら電話線、狼煙ならば煙、手紙だったら郵便システムということになるでしょう。これらの物理的なものは、極論すると1bitの情報を識別可能なものです。ある・ない、on・off、1・0、のようなものです。 通信プロトコルというのは、信号の意味を形成するための決まりごとです。狼煙が1本であれば安全、2本であれば危険、のようにAさんとBさんの間で何かの取り決めがされていなければ、情報を伝達することはできません。この通信プロトコルは、通信のインターフェイスに関する決め事といっても良いです。 通信インターフェイスには、レベルがあります。ここでは、コンピュータ同士の通信を考えてみましょう。まず、コンピュータ同士を何かで繋がなければいけません。例えば、電線でつなぐとしましょう。これは、物理的レベルのインターフェイスです。この電線を使ってデジタル通信をするとなると、何Vの電圧を使うかを決めたり、0と1を判別する閾値を決めたりする必要があります。これは、電気的レベルのインターフェイスです。さらに、何bit単位に情報を送るかとか、通信の開始と終了の合図、やり取りする記号列とその順序などを決める必要があります。これがいわゆる通信プロトコルです。 II. Basics of Serial Communication さて、話をAさんBさんから、コンピュータ同士の通信に移しましょう。コンピュータ同士で通信する際には、一般的にはデジタル信号のやり取りをします。この時、何本の線を使って信号を送受信するかが問題となります。1本の線で信号を送る方法をシリアル通信(serial communication)といい、複数の線で信号を送る方法をパラレル通信(parallel communication)といいます。これだけを聞くと、当然パラレル通信の方が効率が良いのではないかと思いますよね。例えば、8本の信号線を使えば、1Byteの情報が一気に送れるわけですから。しかし、実際はそんなに簡単な話ではないのです。事実、コンピュータ間の通信のほとんどがシリアル通信です。パラレル通信にすると色々と厄介なことが起こって、通信速度があげられないのです。というわけで、ここでは、話をシリアル通信に限定します。 先ほど、シリアル通信は1本の信号線を使うと書きました。しかし、双方向の通信を考えた場合には、2本の信号線を使うことがあります。 半二重通信(half duplex communication): 双方向通信はできるが,ある瞬間には片方向への通信しかできない通信方式(糸電話やトランシーバのようなもの) 全二重通信(full duplex communication): 常に双方向に通信できる通信方式 このように、半二重通信であれば1本で良いのですが、全二重通信の場合には2本必要になります。この講義では全二重通信のみを考えますから、信号線は2本必要です。 一方のコンピュータが信号を送信する線(Tx)は、もう一方のコンピュータにとってみれば信号を受信する線(Rx)で、当然2本目の線はその逆ということになります。 Digital Signal デジタル信号の話は、これまでにも何回か出てきましたね。信号を構成する状態が2つしかないもののことです。電気的な信号の場合、電圧の変化を2状態に分けて考えます。つまり、HIGHとLOWを区別するために、ある基準となる電圧を定め、それ以上であればHIGH、それ未満であればLOWとするわけです。この基準を閾値(threshold)と呼びます。 通常、デジタル信号では、ある一定の時、間閾値を超える電圧がかかればHIGHで、ある一定の時間、閾値を下回る電圧しかかからなければLOWになります。この「ある一定の時間」というのが大切で、この時間の長さによって通信速度が変わります。もちろん、長くとれば通信速度は遅くなり、短くとれば通信速度は早くなります。それならば、短ければ短いほど良いように思えますよね。でも、短くすればするほどノイズと信号の差が判別しにくくなり、また、送受信するコンピュータも高速で動作しなければならなくなります。つまり、通信速度は、通信の信頼性とトレードオフの関係にあるわけです。 マイコンで使用するシリアル通信の場合、通信速度はbps(bit […]

Read More »

Posted in Class materials Tagged mbed, physical computing, 専修大学

#9 Analog Input

November 21, 2016
| No Comments
| Class materials

講義日: 2016.11.22 今週は、アナログ入力について勉強します。 目次 I. Basics of Analog Input II. Potentiometer III. CdS IV. Accelerometer V. Practical Work I. Basics of Analog Input デジタル入力は、端子にある一定以上の電圧がかかっているか、かかっていないかという2状態を入力として識別することでした。アナログ入力は、端子にかかる電圧の変化を複数の状態として識別します。 ここでは例として、部屋の明るさを光センサーで測定している場面を考えましょう。部屋の明るさは、太陽の位置等によって滑らかに変化していきます。光センサーは、その変化を電圧の変化に変換します。この時、光センサーからの出力も滑らかに変化します。しかし、マイコンの中では、受け取った明るさデータをデジタルデータとして保持することになります。音楽データも、写真データも、動画データも、コンピュータの中では全てデジタルデータですよね。それと同じことです。つまり、アナログからデジタルへの変換が必要になるということです。マイコンの中でそれを行なってくれるのが、Analog to Digital Convertor(ADC)と呼ばれるデバイスです。一般的には、ADコンバータと呼ばれます。 マイコンでアナログ入力といったときには、端子から入力されるアナログデータをADコンバータを使ってデジタルデータへ変換して、それを入力として扱うということを意味します。LPC824は12ビットの解像度を持つADコンバータを備えているので、4096段階で電圧の変化を表現します。例えば、0.0から1.0の間の数値で考えると、4096の各段階の幅は1.0 / 4096 = 0.000244くらいになります。 Analog Input on LPC824 それでは、実際にLPC824を使って実験してみましょう。まず、以下のような回路を作ります。使っている端子は、15番ピンです。 そして、以下に示すプログラムを転送しましょう。

1
2
3
4
5
6
7
8
9
10
11
12
#include "mbed.h"
 
AnalogIn myInput(dp15);
Serial pc(USBTX, USBRX);
 
int main() {
    while(1) {
        pc.printf("%f\n", myInput.read());
        wait(1);
    }
}
 

PCに出力を送っていますから、MacのTerminalを開きcatコマンドでシリアルポートを開いてください。すると、以下のようになっているはずです。 ほぼ、1.0ですね。 それでは、プログラムの説明をしましょう。AnalogInは、端子をアナログ入力として使うためのクラスです。dp15を指定しています。pc.printf()の中で、myInput.read()というAnalogInのread()メソッドが呼び出されていますね。このread()メソッドを呼び出すと、端子の状態を読み取ってくれます。返値は実数で、0.0から1.0の範囲です。LPC824の場合、アナログ入力で読み取れる最大の電圧は3.3Vまでなので、もし、dp15に3.3Vがかかっていれば1.0になります。回路を良く見て、実際に3.3Vがdp15にかかっていることを確認しましょう。不安であれば、マルチメータを使って測ってみてください。 AnalogInには、端子の状態を読み取るためのメソッドがread()の他にもう1つ用意されています。read_u16()を使うと、端子の状態を16ビット符号なし整数として読み取ります。こちらも試しておきましょう。

1
2
3
4
5
6
7
8
9
10
11
12
#include "mbed.h"
 
AnalogIn myInput(dp15);
Serial pc(USBTX, USBRX);
 
int main() {
    while(1) {
        pc.printf("%d\n", myInput.read_u16());
        wait(1);
    }
}
 

結果は、以下のとおりです。 16ビット符号なし整数の最大値は65535ですから、おおよそ最大の値が読み取れていることがわかります。 II. Potentiometer 可変抵抗(potentiometer) とは、抵抗値を変えることができる抵抗器です。典型的なものとしては、以下の写真に示すようなボリュームつまみのようなものが挙げられます。 このつまみを、回すことによって、抵抗値を小さくしたり大きくしたりすることができます。通常、可変抵抗には3つの端子があります。両端がVccとGNDで、真ん中の端子をその先の電子部品に繋ぎます。 可変抵抗の原理は、抵抗の分圧則によって説明されます。以下の回路図を見てください。 2つの抵抗はそれぞれxΩ、yΩです。このとき、Voutにかかる電圧は以下のように計算されます。 Vout […]

Read More »

Posted in Class materials Tagged mbed, physical computing, 専修大学

#8 Lamp Shade 2

November 14, 2016
| No Comments
| Class materials

講義日: 2016.11.15 今週で、ランプシェードは完成です。17日(木)の5限に発表会を行いますので、それまでには完成させてください。 講義では、最終課題に向けてのマインドマップ作りを行います。 I. A Mind Map For Your Project 12月6日(火)からは、最終課題の制作に入ります。木曜日は4回で、12月8日、15日、22日、1月12日です。1月19日には、NSプログラムとの合同発表会が予定されており、ここで最終課題の発表を行います。 最終課題は、以下の図で示すようなプロセスで進みます。 これを見ればわかる通り、実装だけするわけではありません。実装に使える時間は、3週間分と思ってください。 最終課題では、個人で1つの作品を作ってもらいます。今日は、アイディアをマインドマップで整理しましょう。 II. Practical Work 作業は全てグループ単位で行います。 4限の終わりまでに、ランプシェードを完成させてください。モータよりもLEDを優先させて、最低でも明かりが灯るようにしてください。 最後に、それぞれのグループで5分程度の発表をしてもらいます。 — by 飯田周作、専修大学

Read More »

Posted in Class materials Tagged mbed, physical computing, 専修大学

Special Talk by Prof. Watanuki

November 8, 2016
| No Comments
| Announcement

12月1日の演習では、綿貫先生にお話をしていただきます。綿貫先生は、アメリカの大学でPh.Dを取られた後、長く外資系企業でコンピュータ周辺機器の研究をされていました。貴重なお話が伺えると思います。

Read More »

Posted in Announcement

#7 Lamp Shade 1

November 7, 2016
| No Comments
| Class materials

講義日: 2016.11.8 今週と来週でランプシェードを完成させます。今週の講義では、回路図を作ります。演習では、この回路図に従って実際の回路作成を行います。 I. Designing Your Circuit LED ランプシェードの光源としては、LEDを使います。ただし、mbedをはじめようキットに入っているLEDは、あまり綺麗に光らないので、グループごとに別途高輝度LEDを配布します。配布するLEDは、以下の通りです。 赤色LED、4本 青色LED、4本 緑色LED、4本 白色LED、4本 合計で16本のLEDを配布しますが、これらを全て使う必要はありません。各グループのランプシェードのテーマに従って、何色を何本使うかを決めてください。 各LEDの特性は、以下のようになっています。 赤色LED: 順方向電圧降下1.8V〜2.6V、7000mcd@20mA 青色LED: 順方向電圧降下2.9V〜3.6V、8400mcd@50mA 緑色LED: 順方向電圧降下2.9V〜3.6V、8400mcd@20mA 白色LED: 順方向電圧降下2.9V〜3.4V、10000mcd@30mA これを見ればわかる通り、流す電流がそれぞれ違います。まずは、それぞれのLEDに使う抵抗の値を計算しましょう。以下のような値で計算します。 赤色LED: 順方向電圧降下2.0V、20mA 青色LED: 順方向電圧降下3.0V、30mA 緑色LED: 順方向電圧降下3.5V、20mA 白色LED: 順方向電圧降下3.0V、20mA かなり適当ですが、まあ大丈夫でしょう。計算する際には、以下の計算式を使います。 抵抗値 = (電源電圧 – 順方向電圧降下)/LEDに流したい電流 LEDへは、外部電源を使って電圧をかけます。1.5Vの単3電池4本を使いますから6Vです。そうすると、赤色LEDに使う抵抗は以下のように計算することができます。 抵抗値 = (6V – 2V) / 0.02A = 200Ω 220Ωの抵抗が大学にありますから、これを使います。このようにして、全てのLEDに関して抵抗値を求めてください。求めた値と近い抵抗を使います。 Circuit LED、モータ、モータドライバ、外部電源、LPC824を使うことを前提に、回路図を作成します。Fritzingを使って作成してください。授業内に作成したFritzingの図を提出してもらいます。 LEDとモータは、ともに外部電源を使って電圧をかけます。これらは、並列回路になります。 II. Practical Work […]

Read More »

Posted in Class materials Tagged mbed, physical computing, 専修大学

Recent Posts

  • NE22の学生さんたちへ
  • 13 発表会
  • 12 発表準備
  • 11 実装
  • 10 要素テスト

Archives

  • July 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • July 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016

Categories

  • Announcement
  • Class materials
  • Tips
  • Uncategorized

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

Physical Computing 2023 | Powered by WordPress.