Physical Computing

Network and Information, Senshu Univ.

Menu
  • Home
  • Tips
  • About
  • admin

Month: November 2017

9 Analog Input

November 21, 2017
| No Comments
| Class materials

講義日: 2016.11.30 今週は、アナログ入力について勉強します。 目次 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コンバータを使ってデジタルデータへ変換して、それを入力として扱うということを意味します。F303K8は12ビットの解像度を持つADコンバータを備えているので、4096段階で電圧の変化を表現します。0.0から1.0の間の数値で考えると、4096の各段階の幅は1.0 / 4096 = 0.000244くらいになります。 Analog Input on F303K8 それでは、実際にF303K8を使って実験してみましょう。まず、以下のような回路を作ります。3.3Vから抵抗を介して直接A5に接続しています。こうすることで、A5に3.3Vかかった時にアナログ入力で得られる値が実験できるはずです。 以下に示すプログラムを転送しましょう。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
#include "mbed.h"
 
AnalogIn myInput(A5);
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Ωです。このとき、アナログピン(A5)にかかる電圧はyΩの抵抗にかかる電圧と等しくなります。yΩにかかる電圧は以下のように計算されます。 Vout […]

Read More »

Posted in Class materials

How to USE PWM with Nucleo-F303K8

November 15, 2017
| No Comments
| Tips

Nucleo-F303K8のPWMについて説明します。 F303K8とmbed OSを使ってPWMを使う時には少し注意が必要です。F303K8のピンの説明図を見ると、17個のピンがPWMに使えることがわかります。 ただし、この17個が全て同時に使えるかというとそういうわけではありません。上記図の紫色で示されているPWMの名前ですが、PWMn/c[N]という形式になっていてnはタイマの番号、cはチャネルとなっています。[N]はNがついたりつかなかったりなのですが、無視して良いです。このPWMの名前が同じものは、一緒には使えません。例えば、D6とD7はともにPWM1/3Nです。ということはD6とD7はいつも同じ動きをするということです。同様にD11とA6もPWM17/1という同じPWMの名前です。 PWMの名前を表にまとめると以下のようになります。色で同じ名前のPWMを表しています。 これを見ると、同時に使えるPWMは最大13個であることがわかります。 Example 8個のLEDをPWMで制御してみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "mbed.h"
 
#define NUM_OF_LEDS 8
#define LEVEL1 0.5
#define LEVEL2 0.8
 
PwmOut leds[NUM_OF_LEDS] = { D2, D3, D4, D5, D6, D9, D10, D11 };
 
void setLEDs(float);
void initPwm();
 
int main() {
    initPwm();
    setLEDs(1);
    while(1) {
        for(int i = 0; i < NUM_OF_LEDS; i++) {
            leds[i] = 0;
            if(i - 1 >= 0) {
                leds[i - 1] = LEVEL1;
            }
            if(i - 2 >= 0) {
                leds[i - 2] = LEVEL2;
            }
            if(i + 1 < NUM_OF_LEDS) {
                leds[i + 1] = LEVEL1;
            }
            if(i + 1 < NUM_OF_LEDS) {
                leds[i + 2] = LEVEL2;
            }
            wait_ms(50);
            setLEDs(1);
        }
        wait_ms(200);
        for(int i = NUM_OF_LEDS - 1; i >= 0; i--) {
            leds[i] = 0;
            if(i - 1 >= 0) {
                leds[i - 1] = LEVEL1;
            }
            if(i - 2 >= 0) {
                leds[i - 2] = LEVEL2;
            }
            if(i + 1 < NUM_OF_LEDS) {
                leds[i + 1] = LEVEL1;
            }
            if(i + 1 < NUM_OF_LEDS) {
                leds[i + 2] = LEVEL2;
            }
            wait_ms(50);
            setLEDs(1);
        }
        wait_ms(200);
    }
}
 
void setLEDs(float x) {
    for(int i = 0; i < NUM_OF_LEDS; i++) {
        leds[i] = x;
    }
}
 
void initPwm() {
    for(int i = 0; i < NUM_OF_LEDS; i++) {
        leds[i].period_ms(1);
    }
}
 

  — by 綿貫 理明、石井 健太郎、飯田 周作 専修大学ネットワーク情報学部

Read More »

Posted in Tips

8 IoT

November 14, 2017
| No Comments
| Class materials

2017.11.16 今週はIoTの演習です。 目次 I. What does IoT mean? II. Connect Your Mbed to The Internet III. Let’s Try Serial Communication IV. Let’s Try Http Communication V. Examples VI. Practical Work I. What Does IoT Mean? 最近は、普通の新聞等でもIoTという言葉をよく聞きますね。これはInternet Of Thingsの略で、モノとモノがインターネットを通じて通信することで構築されるシステムのことです。ここでいうモノとは、コンピュータと通信機能が搭載された物であればなんでもよくて、家電製品や監視カメラ、センサーを搭載したデバイスなどのことです。少し前までは、インターネットといえば電子メールやWeb、SNS、電子商取引であり、人と人、あるいは人とモノの間のネットワークというイメージが強かったのですが、モノとモノもインターネットにつなげると色々な可能性があるよ、ということです。概念としては全く新しいものではないのですが、マイコンや無線通信のデバイスが安価で小型になったこと、大量のデータを処理することがクラウドコンピューティング技術の進歩によって容易になったこと、AIの進歩などにより様々な応用分野が現れたこと等によって広く認知されたというべきでしょう。語呂が良かったことも流行った一因だと思います。 所詮は流行り言葉なので、IoTという言葉自体はすぐに消えていく運命にありますが、技術それ自体とそれがどのように応用可能であるかはきちんと理解しておく必要があります。この演習では特に、IoTがどのように応用可能であるかに焦点を当てて学修していきます。 What Can We Do with IoT? IoTを活用すると、どんなことができるのでしょうか。製品をベルトコンベア式に生産する工場を考えてみましょう。工場には生産目標があり、そのための生産計画があります。順調に生産が行われていれば利益が出るのですが、ベルトコンベアや生産設備に故障が起こると生産がストップして損が出ます。最適解は故障が起こる直前で生産設備の部品を交換することですが、これはなかなか難しいです。また、問題が発生した時に、どこが壊れたのかが即座にわかると嬉しいです。そのために、生産設備にセンサーをつけて、機器の状態をサーバに逐一送ることが考えられます。例えば、機器の温度を測ったり、機器から発生する音を録音したりして、そのデータを蓄積するわけです。蓄積されたデータを解析することによって、温度が何度になったら故障の前兆であるとか、機器からどんな音がし始めたら故障の前兆であるなどのことが分かるかもしれません。 少し前に話題となったAmazonのDash ButtonもIoTの応用の一例と考えて良いでしょう。Amazonのサイトで、Dashと検索してみましょう。妙なボタンがたくさん出てくるはずです。例えば、コカコーラのボタンとか、じゃがりこのボタンなどがあります。これは、ボタンを押すだけでその商品の注文がAmazonで完了してしまうというものです。 要するにIoTは、監視作業や計測作業の自動化、少し面倒な作業の単純化などをやる仕組みということですね。監視作業や計測作業の自動化をすれば、当然膨大なデータが蓄積されます。これを世の中ではビックデータなどと呼んでいて、そのデータを解析し問題の最適化を行うためにAIを使ったりするというわけです。そいういう文脈でIoTとビックデータ、AIはセットで語られることが多くなっています。 この演習では、データの分析・解析及び最適化については扱いません。モノとモノとが通信するというところだけを取り出して演習をしてみたいと思います。Dash Buttonの簡易版のようなものですね。 II. Connect Your Mbed […]

Read More »

Posted in Class materials

7 Lamp Shade Day 5

November 9, 2017
| No Comments
| Class materials

2017.11.9 今日はいよいよ、Lamp Shadeの最終日です。端末室4に集合してください。5限に発表会を行います。 目次 I. Presentation II. Practical Work Presentation 4限の時間は、システムの完成と発表準備をします。 発表は1グループ5分間です。 スライドを2枚用意します。 実際にランプシェードの実演をしてもらいます。 スライドは以下のように作ってください。 1枚目(システム概要) 誰のために どんなシチュエーションで どんな効果を システムの特徴 2枚目(自己評価) 自己採点(100点満点) 反省点 5限の時間は発表会です。グループごとに発表してもらいます。時間が余ったら全体で振り返りを行いたいと思います。 Practical Work 今日の提出物は、発表に使ったスライドです。   — by 綿貫 理明、石井 健太郎、飯田 周作 専修大学ネットワーク情報学部

Read More »

Posted in Class materials

Lamp Shade Day 4

November 6, 2017
| No Comments
| Class materials

2017.11.7 ※ 今日の集合場所はマルチメディア実習室です。 これはフィジカルコンピューティング開発論(火曜日)の講義資料です。今日は、ソフトウェアも含めてもランプシェード全体を完成させます。今週の木曜日の4限は発表資料の作成を行い、5限に発表会を行います。 目次 I. Practical Work Practical Work マインドマップの最終版と、完成したハードウェアの写真を1つの書類にしてPDFでCoursePowerに提出してください。こうやって、並べると最初のイメージと完成したものを対比することができて、良い振り返りになると思います。   — by 綿貫 理明、石井 健太郎、飯田 周作 専修大学ネットワーク情報学部

Read More »

Posted in Class materials

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.