Physical Computing

Network and Information, Senshu Univ.

Menu
  • Home
  • Tips
  • About
  • admin

Month: October 2016

#6 Laser Cutter

October 24, 2016
| No Comments
| Class materials

講義日: 2016.10.25 今回の演習では、explaceの方々の協力を得て、レーザーカッターの使い方を学びます。explaceは、平成27年度の栗芝プロジェクトの人たちの活動です。 目次 I. Lamp Shade II. Mind Map III. Practical Work フィジカルコンピューティング開発論のみの履修者は、今回から3回分は少し提出物が変わります。フィジカルコンピューティング開発論の授業内演習は同じものをやりますが、実際にランプシェードを作る部分はやりません。 I. Lamp Shade 今週から3週にわたってランプとランプシェードを作ります。ランプシェードというのは、照明器具の傘のことです。 上記の写真(いずれもhttps://www.pexels.com/より)の下のものが、我々が作ろうとしているものに近いです。このように、黒い紙を切り抜いて光を浮き出させます。この時、黒い紙を切り出すのにレザーカッターを使います。レーザカッターを使うと、細かい切り抜きを正確に行うことができます。 今回作成するランプシェードは、以下のような部品から構成されています。 黒い紙(シェード部分) 透明なプラ板(シェード部分) LPC824 LED複数個 DCモータ + モータドライバ 外部電源単3電池4本 これらの部品を組み合わせて、オリジナルなランプを作ってください。工夫する点としては以下のようなことが考えられますが、これらに限定されるものではありません。 ランプシェードの切り抜きデザイン(レーザーカッターで作成) ランプシェードの回転パターン(モータドライバとPWMで制御) LEDの個数(デジタルピンの個数と電流の総和を念頭に置いて考える) LEDの色の組み合わせ(光の3原色を念頭に置いて考える) LEDの光り方(PWMで制御) スイッチの個数(少なくともON/OFF用のスイッチは必要) 今回作成するランプ及びランプシェードは、マイコンで制御するので組込みシステムです。一般に組込みシステム開発は、以下に示す3つの部分から成るとされています。 メカ: 機械的に駆動する部分。電子レンジで言えば、ドアの開閉、ターンテーブルの機械的仕組みなどが相当します。 エレキ: 電子回路です。 ソフト: マイコンに格納されるソフトウェアです。 II. Mind Map グループで、これから作成するランプシェードについてMind Mapにまとめましょう。必ずランプシェードのテーマを決めてください。そして、そのテーマがより具体的に表現できるようにアイディアを固めてください。 応用演習のグループに分かれて、Mind Mapを作成します。授業後半に、それぞれのグループで作成したMind Mapを発表してもらいます。 III. Practical Work 今週は、実験ではありません。よって、実験レポートではなく、作業として行ったことを報告してください。フォーマットは自由です。 前半の4限は、ランプシェードのメカの部分と、切り抜きデザインを作成します。後半の5限は、レーザーカッターの実習です。できれば、4限に作成したデザインを実際に切ってみましょう。 […]

Read More »

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

#5 PWM

October 17, 2016
| No Comments
| Class materials

講義日: 2016.10.18 今回の講義の目的は、マイコンを使って電圧を制御することです。電圧を上げたり下げたりできると、LEDの光る強さを変えたり、モータの回転速度を変えたりすることができます。 ※10月20日の演習には、未使用の単3電池4本を持参してください。持ってきていない場合には、演習時間内に購入しに行ってもらいますが、コンビニで買うと高いです。 目次 I. PWM II. Basics of Motor III. Practical Work I. PWM マイコンの世界はデジタルなので、プログラムで電圧を制御するのは、ちょっと難しいことです。そこで、PWMという手法が登場します。 Theory マイコンのデジタルピンからの出力は、HIGH(例えば3V)かLOW(例えば0V)のどちらかだけです。しかし、0Vから3Vまでの間の電圧を、自由に変えたいという場合があります。例えば、LEDの明るさを調整したい場合などです。こういう時には、PWM(Pulse Width Modulation)という方法を用います。 PWMの仕組みを一言で説明すると、HIGHとLOWを素早く切り替えることによって、その間の電圧を擬似的に作り出す方法です。以下の図をみてください。 このような短冊形の波形を、パルス波と言います。上記の図で示しているパルス波は、ある一定時間で同じパターンを繰り返していますね。このような繰り返しの間隔を周期と呼び、1秒間に何周期あるかを周波数と呼びます。周期の始まりは、LOWからHIGHに変わる瞬間で、周期の終わりは、次にLOWからHIGHに変わる瞬間です。周波数1kHzと言ったら、1秒間に1000回の周期が起こるような波形を意味します。 図で示したパルス波は、1周期におけるHIGH(3V)とLOW(0V)の間隔が、ちょうど1/2ずつになっています。周波数が十分に高い場合,このデジタルピンにかかる電圧は、3V / 2 = 1.5Vとなります。これがPWMです。実際に電圧を変えるのではなくて、擬似的に電圧を変えているのです。 PWMを使用する場合、どのくらいの周波数が必要かは難しい問題なので、あまり深入りしないことにしますが,1Hzではだめなことは明らかです。これは,このデジタルピンの用途によって変わるとされています。例えばLEDの時,モータの時という具合です。モータの場合には1kHz位が適当だと言われています。LEDだと、その半分くらいでも大丈夫でしょう。とりあえず、この講義では、PWMに必要な周波数は1kHzくらいと思っておきましょう。 PWMを使った場合にデジタルピンにかかる電圧は,デューティ比(duty ratio) によって決まります。デューティ比とは,1周期の間にHIGHになっている割合のことです。HIGHが3Vの場合、デューティ比50%ならば1.5V,10%ならば0.3Vとなります。 PWMを使って電圧を制御するには、パルス波を作り出す必要があります。パルス波は、タイマを使って作ります。非常に微小な時間をタイマによって作りだし,デジタル出力をHIGHにしたりLOWにしたりします。例えば、1kHzの周波数でPWM 制御をしたいとしましょう。1秒間に1,000周期ですから,1周期は1msです。1周期を10段階に分けると、1段階100μsになります。この100μsをタイマを使って作り1単位とすれば、10%刻みでデューティ比が設定できるようになります。 Practice mbedの基本ライブラリには、PWMを簡単に使うためのPwmOutというクラスが用意されています。よって、自分でタイマを使って波形を作る必要はありません。 以下に示すような回路でLEDを光らせることを考えます。定電流ダイオードではなくて、470Ωの抵抗を使っていることに注意してください。 以下のようなプログラムを作成して、実行します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "mbed.h"
 
#define BRIGHTNESS_MAX 100
PwmOut myled(dp16);
 
int main() {
    int brightness = 20;
    int increment = 5;
    myled.period_ms(1);
    while(1) {
        brightness += increment;
        if(brightness > BRIGHTNESS_MAX) {
            brightness = BRIGHTNESS_MAX;
            increment = - increment;
        }
        else if(brightness < 0) {
            brightness = 0;
            increment = - increment;
        }
        myled = brightness / 100.0;
        wait(0.1);
    }
}
 

LEDの明るさが滑らかに変わることが観測されます。 myled.period_ms(1);に注目してください。これは、PWMの周期を、1msの幅に設定しています。1周期が1msということは、1kHzということですね。それでは、これを100msにしたら、どうなるでしょうか。これは、演習で実際に実験することにしましょう。 II. Basics of Motor この講義では、DCモータとサーボモータという2種類のモータを使います。 What is DC Motor? 家庭にある電源コンセントを、AC100Vと呼ぶことは知っていると思います。このACとはAlternating Currentの略で、電流の向きが変わることを意味しています。日本語では、交流あるいは交流電流と言います。 一方、乾電池やUSB電源などは、直流あるいは直流電流と呼ばれます。DCというのは、Direct Currentの略で、直流電流を意味します。直流の場合、電流の向きは常に一定です。 DCモータは、直流電流で動くモータです。模型でよく使用するマブチモータは、皆さんも一度は見たことがあると思います。 […]

Read More »

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

#4 Digital Input

October 10, 2016
| No Comments
| Class materials

講義日: 2016.10.11 今回の講義の目的は、外部から情報をマイコンで受け取る方法をマスターすることです。ただし、今回扱うのはデジタル信号です。具体的には、スイッチが押されたことをマイコンで検知する、ということをやります。 目次 I. Basics of Switch II. Practical Work I. Basics of Switch Switch スイッチというのは、電線を連結したり、切断したりするためのデバイスです。ボタンということもあります。スイッチは、様々な種類が存在しますが、よく使うものはタクトスイッチと、トグルスイッチです。 タクトスイッチ(tactile switch)とは、通常ボタンの形状をしていて、押すと電線が連結され、離すと切断されます。 写真のタクトスイッチはとても小さくて、5ミリ角くらいです。このタイプのものは、そのままブレッドボードに差し込んで使うことができます。 足が4つ付いていますね。これらの足は、2つずつの2グループに分かれていて、同一のグループに属する足は、常に通電されています。どの足とどの足が繋がっているかは、背面にマークがあることが多いです。写真の製品の場合には、背面に線が書いてあって、繋がっている足がわかります。 タクトスイッチが押された時にLEDが光る回路は以下のようになります。電源と抵抗の間にあるのが、タクトスイッチの記号です。 トグルスイッチ(toggle switch)とは、電線の連結と切断を切り替えられるようにしてあるスイッチです。どちらかを選択すると、他を選択し直すまで同じ状態を保ちます。 スイッチの電子部品記号は、いくつかあります。この講義では以下の2つを使います。 おまけとして、ディップスイッチの写真も載せておきます。これは、複数のトグルスイッチが1つのパッケージになったものです。 How to Connect a Tactile Switch スイッチは、直感的にわかりやすいデバイスですが、マイコンへの入力として使うときには少し注意が必要です。以下のように回路を作ると、タクトスイッチが押されたかどうかをマイコンで検知できそうですよね。 しかし、これはやってはいけません。タクトスイッチが押されているときには、dp16が3.3Vにつながりますから検知できます。しかし、タクトスイッチが離されているときには、dp16はどこにも繋がっていない状態になります。このような状態を、オープンになっていると呼び、マイコンのピンでは電圧が測定できません。 そこで、代わりに以下のような回路を組みます。 こうすると、タクトスイッチが押されている時には、dp16では3.3Vが計測され、離されている時には、0Vが計測されます。タクトスイッチが離されている時には、dp16はGNDにだけつながっているので、0Vになるわけです。タクトスイッチが押されている時には、この回路は並列回路になりますから、dp16にも10KΩの抵抗にも同じ3.3Vがかかります。 このような回路をプルダウン回路と呼び、10KΩの抵抗をプルダウン抵抗と呼びます。 プルダウン回路とは逆に、タクトスイッチが離されている時に3.3Vが計測され、押されている時に0Vとなる回路も作れます。 これをプルアップ回路と呼び、10KΩの抵抗をプルアップ抵抗と呼びます。この場合、スイッチが離されている時に3.3Vが計測されます。タクトスイッチを押した状態では、並列回路になります。タクトスイッチが押された状態で、その両端の電圧を計ると0Vです。よってdp16にも0Vがかかります。0Vになる理由は、スイッチはオンの時は、ただの電線と同じと考えてよく、10KΩの抵抗に3.3Vがかかるからです。 Digital Input それでは実際に回路を作って試してみましょう。プルダウン回路にしてみます。 プログラムは、以下の通りです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "mbed.h"
 
DigitalIn mytactile(dp16);
Serial pc(USBTX, USBRX); // tx, rx
 
int main() {
    while(1) {
        if(mytactile.read() == 1) {
            pc.printf("high\n");
        }
        else {
            pc.printf("low\n");
        }
        wait(0.1);
    }
}
 

PC側で、ターミナルを起動して、シリアル通信の結果を表示できるようにしてください。LPC824のリセットボタンを押してプログラムをスタートさせ、適当にタクトスイッチを押してみると、以下のような結果が得られるはずです。 DigitalIn mytactile(dp16);は、dp16でデジタル信号の入力を待つための宣言です。mytactile.read()で、その時のdp16の状態を読み取っています。結果は、1か0です。 Chattering 以下のような回路を作りました。 これは、タクトスイッチをプルダウン回路で作り、dp17にLEDをつないだものです。プログラムは、以下のように作ったとしましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "mbed.h"
 
DigitalIn mytactile(dp16);
DigitalOut myled(dp17);
 
int main() {
    myled = 0;
    while(1) {
        if(mytactile.read() == 1) {
            if(myled == 1) {
                myled = 0;
            }
            else {
                myled = 1;
            }                
        }
        wait(0.1);
    }
}
 

このプログラムは、タクトスイッチが押されるたびにLEDが点灯したり消灯したりすることを意図して作られています。 しかし、実際に実験してみると、思ったようには動きません。タクトスイッチを押しても、LEDの状態が変わらないことがあります。これは、スイッチを使うときに起きるチャタリング(chattering)という現象が原因です。 mbedの公式ページにもjim hamblenという人が解説を書いてくれていますから、時間があったら見ておきましょう。 […]

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.