Upload
Download free for 30 days
Login
Submit Search
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
2 likes
7,957 views
Makoto Hirahara
Processingと連携する。 Unity 3Dと連携する。 Ethernetにつなぐ tone関数 PCM Audio Library WaveShield コンデンサマイク
Technology
Read more
1 of 123
Download now
Downloaded 15 times
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
More Related Content
PDF
Zynq+PyCoRAM(+Debian)入門
Shinya Takamaeda-Y
PPTX
Polyphony の行く末(2018/3/3)
ryos36
PPTX
研究者のための Python による FPGA 入門
ryos36
PDF
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
Shinya Takamaeda-Y
PDF
C++による数値解析の並列化手法
dc1394
PDF
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
PDF
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
FFRI, Inc.
PDF
Linux Kernel Seminar in tripodworks
tripodworks
Zynq+PyCoRAM(+Debian)入門
Shinya Takamaeda-Y
Polyphony の行く末(2018/3/3)
ryos36
研究者のための Python による FPGA 入門
ryos36
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
Shinya Takamaeda-Y
C++による数値解析の並列化手法
dc1394
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
FFRI, Inc.
Linux Kernel Seminar in tripodworks
tripodworks
What's hot
(20)
PDF
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
Shinya Takamaeda-Y
PDF
組み込みシステムのセキュリティ
FFRI, Inc.
PDF
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
Computational Materials Science Initiative
PDF
FPGA+SoC+Linux実践勉強会資料
一路 川染
PDF
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 1
Computational Materials Science Initiative
PPTX
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
PDF
FPGAX6_hayashi
愛美 林
PPTX
FPGAって、何?
Toyohiko Komatsu
PDF
Python physicalcomputing
Noboru Irieda
PDF
Adk2012
magoroku Yamamoto
PDF
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
Shinya Takamaeda-Y
PDF
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
Shinya Takamaeda-Y
PDF
ぐだ生システム#2
magoroku Yamamoto
PDF
4章 Linuxカーネル - 割り込み・例外 4
mao999
PDF
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Shinya Takamaeda-Y
PDF
4章 Linuxカーネル - 割り込み・例外 3
mao999
PDF
Mosesdecoderコード解読の勘所
Jun-ya Norimatsu
PDF
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
PDF
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
PDF
4章 Linuxカーネル - 割り込み・例外 2
mao999
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
Shinya Takamaeda-Y
組み込みシステムのセキュリティ
FFRI, Inc.
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
Computational Materials Science Initiative
FPGA+SoC+Linux実践勉強会資料
一路 川染
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 1
Computational Materials Science Initiative
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
FPGAX6_hayashi
愛美 林
FPGAって、何?
Toyohiko Komatsu
Python physicalcomputing
Noboru Irieda
Adk2012
magoroku Yamamoto
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
Shinya Takamaeda-Y
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
Shinya Takamaeda-Y
ぐだ生システム#2
magoroku Yamamoto
4章 Linuxカーネル - 割り込み・例外 4
mao999
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Shinya Takamaeda-Y
4章 Linuxカーネル - 割り込み・例外 3
mao999
Mosesdecoderコード解読の勘所
Jun-ya Norimatsu
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
4章 Linuxカーネル - 割り込み・例外 2
mao999
Ad
Viewers also liked
(19)
PDF
SFC デザイン言語WS(電子工作)第1回「オリエンテーション」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第7回「インプット・アウトプットを繋ぐ」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第5回「LED/駆動部品を使う」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第4回「センサーを使う」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第3回「電子工作の作法」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第2回「まずは使ってみる」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第10回「無線通信」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第8回「アイデア」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第9回「ハンダ付け実習」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第13回「最終課題制作」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第14回「最終課題発表」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第12回「制作工程事例」
Makoto Hirahara
PDF
SFC デザイン言語WS(電子工作)第11回「基盤制作」
Makoto Hirahara
PDF
深層学習(講談社)のまとめ(1章~2章)
okku apot
PDF
AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」
Kenji Hiranabe
PDF
ヒトがメタファー(表現)を使う理由: Reasons for use of metaphor(ic expression)s by human
Kow Kuroda
PDF
ダブル配列の実装方法
Higashiyama Masahiko
PDF
デザインの歴史と分析的な見方【後編】フラットデザインにつながるタイポグラフィーとスペースのとらえ方 先生:佐藤 好彦
schoowebcampus
PPTX
Trump and Hitler Compared
Tom Richey
SFC デザイン言語WS(電子工作)第1回「オリエンテーション」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第7回「インプット・アウトプットを繋ぐ」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第5回「LED/駆動部品を使う」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第4回「センサーを使う」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第3回「電子工作の作法」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第2回「まずは使ってみる」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第10回「無線通信」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第8回「アイデア」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第9回「ハンダ付け実習」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第13回「最終課題制作」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第14回「最終課題発表」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第12回「制作工程事例」
Makoto Hirahara
SFC デザイン言語WS(電子工作)第11回「基盤制作」
Makoto Hirahara
深層学習(講談社)のまとめ(1章~2章)
okku apot
AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」
Kenji Hiranabe
ヒトがメタファー(表現)を使う理由: Reasons for use of metaphor(ic expression)s by human
Kow Kuroda
ダブル配列の実装方法
Higashiyama Masahiko
デザインの歴史と分析的な見方【後編】フラットデザインにつながるタイポグラフィーとスペースのとらえ方 先生:佐藤 好彦
schoowebcampus
Trump and Hitler Compared
Tom Richey
Ad
Similar to SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
(20)
PDF
Arduinoで遊ぼう #1Processingと連携する
Yasunori Sannomiya
PDF
ArduinoとProcessingの連携
Aki Sato
PDF
KOGEI & KAIT Funnel WS
Shigeru Kobayashi
PPTX
イチからはじめるUSB Host API
ksk sue
PDF
さわってみようTOPPERS/SSP
NSaitoNmiri
PDF
Processing workshop v3.0
Wataru Kani
PDF
3台以上のarduinoでのspi通信 2017 07-20
first name chibaf
PPTX
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
tomitomi3 tomitomi3
PPTX
Arduino 入門
mitunaga
PDF
Arduino入門
Junichi Minamino
PDF
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
aitc_jp
PDF
20apr2012 kernelvm7-main
Shotaro Uchida
PDF
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
Junpei Tsuji
PDF
ものづくりプロジェクトII 一日でわかるArduino入門
Yoichi Yamazaki
PDF
Imaocande LT
Imaoka Micihihiro
PDF
20140910 Arduino for beginners
Kenichi Ohwada
PPTX
2015/05/23 シニア技術者プログラム第3弾 「第二回IoT勉強会&交流会」 15:00~15:20 Arduinoで簡単回路作成実演
aitc_jp
PDF
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
PDF
Arduino を PHP で制御する
Kenichi Ahagon
KEY
プロペラブForth発表osc愛媛
titoi2
Arduinoで遊ぼう #1Processingと連携する
Yasunori Sannomiya
ArduinoとProcessingの連携
Aki Sato
KOGEI & KAIT Funnel WS
Shigeru Kobayashi
イチからはじめるUSB Host API
ksk sue
さわってみようTOPPERS/SSP
NSaitoNmiri
Processing workshop v3.0
Wataru Kani
3台以上のarduinoでのspi通信 2017 07-20
first name chibaf
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
tomitomi3 tomitomi3
Arduino 入門
mitunaga
Arduino入門
Junichi Minamino
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
aitc_jp
20apr2012 kernelvm7-main
Shotaro Uchida
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
Junpei Tsuji
ものづくりプロジェクトII 一日でわかるArduino入門
Yoichi Yamazaki
Imaocande LT
Imaoka Micihihiro
20140910 Arduino for beginners
Kenichi Ohwada
2015/05/23 シニア技術者プログラム第3弾 「第二回IoT勉強会&交流会」 15:00~15:20 Arduinoで簡単回路作成実演
aitc_jp
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
Arduino を PHP で制御する
Kenichi Ahagon
プロペラブForth発表osc愛媛
titoi2
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
1.
Makoto Hirahara 第6回 PCとの連携・音 5.15
2015 DIY ELECTRONICS デザイン言語ワークショップ(電子工作)
2.
2 今日の内容 • Processingと連携する。 • Unity
3Dと連携する。 • Ethernetにつなぐ • tone関数 • PCM Audio Library • WaveShield • コンデンサマイク
3.
PROCESSING
4.
4 Processing http://processing.org/ Processing(プロセッシング)は、 Javaをベースに描画機能に特化した開 発環境。 開発者のCasey Reas と
Benjamin Fry はMITメディアラボ ジョン前田の元で 学び、Design By Numbers から着想 を得た。
5.
5 プログラムの構成 void setup(){ 初期化処理 } void draw(){ 繰り返される描画処理 }
6.
6 Firmata Firmata(フェルマータ)はSerial通信の汎用的なプロトコル。 Arduinoにファームウェアを入れておけば、Processingをはじめ openFrameworksやPureDataなどから値を読み取ったり出力ができる。 FirmataFarmWare Processing openFrameworksPd Unity3D
7.
7 Firmata Arduinoでピンの状態を調べるのと同じように、Processingから情報を取得で きる。 pinMode( 0, INPUT
); digitalRead( 0 ) analogRead( 0 ) arduino.pinMode( 0, Arduino.INPUT ); arduino.digalRead( 0 ) arduino.analogRead( 0 )
8.
8 サンプル回路
9.
9 サンプル回路
10.
10 Arduinoのセットアップ [ファイル]- [Examples]- [Firmata]- [StandardFirmata]を開く。 Arduinoに書き込む。
11.
11 Processingのセットアップ Processingのサイトから アプリケーションをダウンロード。 解凍して任意の場所にコピー。 アプリケーションを立ち上げる。
12.
12 ライブラリ http://playground.arduino.cc/interfacing/processing 下記のサイトから、 ProcessingでArduinoを使うための ライブラリをダウンロード。
13.
13 ライブラリのインストール ダウンロードしたファイルを解凍して、以下のフォルダにコピー Mac 書類Processinglibraries Win C:Documents and Settings
*** My DocumentsProcessinglibraries
14.
14 サンプルスケッチ Processingを再起動。 [ファイル]-[Examples]を選択。 Java Examplesというウィンドウが開 く。 [Contributed Libraries]-[Arduino]- [arduino_input]を選択。
15.
15 サンプルスケッチ 三角矢印ボタンを押して実行。 メッセージウィンドウに、 Arduinoを接続するときに使う デバイス名がある事を確認。 例)/dev/tty.usbmodem1411
16.
16 サンプルスケッチ デバイス名を 先ほど確認した名前に変える。 コメントアウト コメント解除
17.
17 インプットサンプルスケッチ 三角矢印ボタンを押して実行。 13個のデジタル入力(上)と 6個のアナログ入力(下)が 表示される。 12 0 A0 A5 2
1・・・・・
18.
18 インプットサンプルスケッチ import processing.serial.*; import cc.arduino.*; Arduino
arduino; color off = color(4, 79, 111); color on = color(84, 145, 158); シリアル通信のライブラリと Arduinoライブラリを読み込む。 Arduinoにアクセスするための オブジェクトを宣言。
19.
19 インプットサンプルスケッチ void setup() { size(470,
280); println(Arduino.list()); // arduino = new Arduino(this, Arduino.list()[0], 57600); arduino = new Arduino(this, "/dev/tty.usbmodem1411", 57600); for (int i = 0; i <= 13; i++) arduino.pinMode(i, Arduino.INPUT); } Arduinoにアクセスするためのオブジェクト を生成。デバイス名と通信速度を設定。 arduinoオブジェクトの pinModeメソッドを実行。指 定したピンを入力に使うか、出 力に使うかを設定する。
20.
20 インプットサンプルスケッチ void draw() { background(off); stroke(on); for
(int i = 0; i <= 13; i++) { if (arduino.digitalRead(i) == Arduino.HIGH) fill(on); else fill(off); rect(420 - i * 30, 30, 20, 20); } noFill(); for (int i = 0; i <= 5; i++) { ellipse(280 + i * 30, 240, arduino.analogRead(i) / 16, arduino.analogRead(i) / 16); } } Arduinoの中でプログラムする時と同 じように、digitalReadでそれぞれの ピンにアクセスできる。 analogReadも使える。
21.
21 アウトプットサンプルスケッチ [Contributed Libraries]-[Arduino]-[arduino_output]を実行。 ウィンドウの矩形をクリックすると、LEDが点灯する。 13 011
22.
22 アウトプットサンプルスケッチ void mousePressed() { int pin
= (450 - mouseX) / 30; // Toggle the pin corresponding to the clicked square. if (values[pin] == Arduino.LOW) { arduino.digitalWrite(pin, Arduino.HIGH); values[pin] = Arduino.HIGH; } else { arduino.digitalWrite(pin, Arduino.LOW); values[pin] = Arduino.LOW; } } digitalWriteで、ピンのHigh,Lowを コントロールできる。
23.
23 PWMサンプルスケッチ [Contributed Libraries]-[Arduino]-[arduino_pwm]を実行。 ウィンドウ上のマウスの座標によって、LEDの明るさが変化する。
24.
24 PWMサンプルスケッチ void draw() { background(constrain(mouseX
/ 2, 0, 255)); arduino.analogWrite(9, constrain(mouseX / 2, 0, 255)); arduino.analogWrite(11, constrain(255 - mouseX / 2, 0, 255)); } analogWriteで、256段階の出力をコントロールできる。
25.
25 サンプルと組み合わせてみる。 http://youtu.be/V7vMPJaHcfo
26.
26 サンプルスケッチ 授業ページから、サンプルスケッチをダウンロード、 「ParticlesWithPot_Sample」をProcessingで実行。
27.
27 サンプルスケッチ import processing.serial.*; import cc.arduino.*; Arduino
arduino; … void setup() { arduino = new Arduino(this, Arduino.list()[5], 57600); … } void draw () { ps.setEmitter(arduino.analogRead(0),mouseY); … } シリアル通信のライブラリとArduinoライブラリを取り込む。 Arduinoにアクセスするためのオブジェクトを宣言。 Arduinoにアクセスするためのオブジェク トを生成。デバイス名と通信速度を設定。 必要な箇所で、Arduinoオブジェクトにアクセスして使う使う。
28.
UNITY 3D
29.
29 Unity3D Unity3DはUnity Technologies社が提 供しているゲームエンジン。 クロスプラットフォーム、物理エンジ ン、アニメーションなど高度な機能を 備えながら安価(機能を限定したバー ジョンは無料)に利用できる事から、 企業・個人共に利用が広がっている。 http://japan.unity3d.com/
30.
30 UNIDUINO Unity3DとArduinoを連動するプラグイ ン。Asset Storeで販売している。 Asset Storeとは 3Dモデル、シェーダー、エフェクトな ど、Unityで使える素材を販売している マーケット。 http://u3d.as/4oP
31.
31 デモ映像 https://www.youtube.com/watch?v=XzhVY5I_rwE
32.
32 インストール 下記のページにアクセス https://www.assetstore.unity3d.com/jp/#!/ content/6804 Buyボタンをクリックして、アカウン ト、クレジットカード情報を入力。
33.
33 サンプル ダウンロードが終わったら、新規プロ ジェクトを作ってから、インポート。 Projectパネル Asset/Uniduino/UniduinoTestPanel/ UniduinoTestPanel を読み込む。
34.
34 サンプル 初回のみシリアルポートを利用するプ ラグインのインストールが必要。 終わったらUnity3Dを再起動し、 UniduinoTestPanelを読み込み直す。 デジタル0∼13, アナログ0∼5 の状態 が確認できる。
35.
35 サンプル2 Projectパネル Asset/Uniduino/Tutorials/ Analog Read/AnalogRead を読み込む。 可変抵抗の操作で、3Dオブジェクトを回転 できる。
36.
36 サンプル2 Uniduinoオブジェクトに アタッチされているArduino スクリプトが、シリアル通 信をしている。 ポート名などは自動で取得 してくれる。
37.
37 サンプル2 AnalogReadオブジェクト にアタッチされている AnalogReadスクリプトが、 アナログピンの値を読み取 り、キューブを回転させて いる。
38.
38 サンプル2 Arduinoオブジェクトを取得 Arduinoオブジェクトをセットアップ
39.
39 サンプル2 Cubeオブジェクトを名前で検索
40.
40 サンプル2 Arduinoの指定したピンをanalogRead 読み取ったアナログ値に応じて、 Cubeオブジェクトを回転。
41.
41 サンプル3 https://youtu.be/AnEnG3tbPzo
42.
42 サンプル3 第4回授業資料の加速度センサーを参考に回路を組む。 授業ページから、サンプルスケッチをダウンロード、 「UNIDUIONO_Sample」をUnity3Dで実行。
43.
ETHERNET
44.
44 Ethernet Shield ArduinoをLANにつなぐためのシール ド。 TCPやUDP,HTTPなどのプロトコルで 通信することができる。 https://www.switch-science.com/catalog/2270/
45.
45 Ethernetのメリット ・転送距離が長い(CAT5で100m以上。USBでは5mが限度) ・さまざまな環境に接続できる。
46.
46 サンプルスケッチ Arduino [ファイル]- [スケッチの例]- [Ethernet]- [UDPSendReceiveString]
47.
47 サンプルスケッチ #include <SPI.h> #include <Ethernet.h> #include
<EthernetUdp.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 177); unsigned int localPort = 8888; char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; char ReplyBuffer[] = "acknowledged"; EthernetUDP Udp; ライブラリの読み込み
48.
48 サンプルスケッチ #include <SPI.h> #include <Ethernet.h> #include
<EthernetUdp.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 177); unsigned int localPort = 8888; char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; char ReplyBuffer[] = "acknowledged"; EthernetUDP Udp; このEtherShieldのMACアドレス, IPアドレ ス, ポート番号を指定。
49.
49 サンプルスケッチ #include <SPI.h> #include <Ethernet.h> #include
<EthernetUdp.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 177); unsigned int localPort = 8888; char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; char ReplyBuffer[] = "acknowledged"; EthernetUDP Udp; 受信したUDPメッセージを入れるバッファ。 返信するメッセージ UDP通信するオブジェクトを宣言
50.
50 サンプルスケッチ void setup() { Ethernet.begin(mac,ip); Udp.begin(localPort); Serial.begin(9600); } 最初に設定したMACアドレスと IPアドレスで通信開始
51.
51 サンプルスケッチ void loop() { int
packetSize = Udp.parsePacket(); if(packetSize) { Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remote = Udp.remoteIP(); for (int i =0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(", port "); Serial.println(Udp.remotePort()); Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE); Serial.println("Contents:"); Serial.println(packetBuffer); Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } delay(10); } UDPの受信サイズを確認。 何かデータを受け取っていれば、処理を進める UDPの送り主のIPアドレスを取得
52.
52 サンプルスケッチ void loop() { int
packetSize = Udp.parsePacket(); if(packetSize) { Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remote = Udp.remoteIP(); for (int i =0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(", port "); Serial.println(Udp.remotePort()); Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE); Serial.println("Contents:"); Serial.println(packetBuffer); Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } delay(10); } UDPの送り主のIPアドレスを10進数でSerialに出力
53.
53 サンプルスケッチ void loop() { int
packetSize = Udp.parsePacket(); if(packetSize) { Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remote = Udp.remoteIP(); for (int i =0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(", port "); Serial.println(Udp.remotePort()); Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE); Serial.println("Contents:"); Serial.println(packetBuffer); Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } delay(10); } UDPの受信内容を読み込み UDPの送り主のIPアドレス、 ポート番号に向けて、パケッ トを用意。
54.
54 サンプルスケッチ void loop() { int
packetSize = Udp.parsePacket(); if(packetSize) { Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remote = Udp.remoteIP(); for (int i =0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(", port "); Serial.println(Udp.remotePort()); Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE); Serial.println("Contents:"); Serial.println(packetBuffer); Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } delay(10); } 先ほど用意した返信用メッセー ジ “acknowledged”を送信。
55.
SOUND
56.
56 発音デバイスの種類 ブザー 発振回路が内蔵されていて、電源を入 れるだけで特定の高さの音が鳴る。 http://akizukidenshi.com/ catalog/g/gP-04572/ http://akizukidenshi.com/ catalog/g/gP-00160/ 圧電スピーカー 高音のビープ音の再生に向く。 サンプリングした音には向かない。 http://akizukidenshi.com/ catalog/g/gP-04120/ http://akizukidenshi.com/ catalog/g/gP-01251/
57.
57 発音デバイスの種類 8Ωスピーカー 広い音域、大きな音量を鳴らせる。外形が大きいほど、音量も大きい。 8Ω 0.5W http://www.sengoku.co.jp/mod/ sgk_cart/detail.php?code=5A4R- N8H5 8Ω 1W http://www.sengoku.co.jp/mod/ sgk_cart/detail.php?code=5A4R- N8H5 http://akizukidenshi.com/catalog/c/cspk/ 秋月のスピーカー
58.
TONE
59.
59 音がなる仕組み 可聴域の周波数(20Hzから2万Hz(20kHz))でスピーカーをon/offすると、振 動板が空気を振るわせ、音として聞こえる。 void loop() { digitalWrite(13,
HIGH); delay(5); digitalWrite(13, LOW); delay(5); } 0.01秒周期でHigh/Lowが繰り返される。 周波数100Hz
60.
60 サンプル回路
61.
61 サンプル回路
62.
62 tone関数 tone( ピン番号, 周波数,
継続時間 ); アウトプットピンから指定した周波数のパルスを出す事ができる。 例: tone( 13, 440, 1000 ); 13番ピンに圧電スピーカーをつなぐと440Hzの音が1秒間鳴る。 tone( 13, NOTE_A4, 1200 ); あらかじめ定義しておけば、音階で指定する事もできる。
63.
63 サンプルスケッチ [ファイル] - [スケッチの例]
- [02.Digital] - [toneMelody] を開く。 PIN8とGNDにスピーカーを繋ぎ、 実行するとメロディが流れる。
64.
64 参考動画 http://youtu.be/giPMbLicJqc
65.
65 サンプルスケッチ #include "pitches.h" int melody[]
= { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { for (int thisNote = 0; thisNote < 8; thisNote++) { int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(8); } } 音階と周波数の定義ファイルを読み込む。 スケッチファイル(.ino)と同じフォルダに入れる。
66.
66 サンプルスケッチ #include "pitches.h" int melody[]
= { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { for (int thisNote = 0; thisNote < 8; thisNote++) { int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(8); } } メロディーのデータ 音の長さのデータ
67.
67 サンプルスケッチ #include "pitches.h" int melody[]
= { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { for (int thisNote = 0; thisNote < 8; thisNote++) { int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(8); } } メロディの個数分、繰り返す。
68.
68 サンプルスケッチ #include "pitches.h" int melody[]
= { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { for (int thisNote = 0; thisNote < 8; thisNote++) { int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(8); } } noteDurationsに登録したデータ から、音の長さを計算。 noteDurations[0] = 4 1000/4 = 250ms melodyに登録した音階を、計算した長さ で鳴らす。 melody[0] -> NOTE_C4 -> 262Hz
69.
69 サンプルスケッチ #include "pitches.h" int melody[]
= { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { for (int thisNote = 0; thisNote < 8; thisNote++) { int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(8); } } noteDurationsに登録したデータ から、音の長さを計算。 noteDurations[0] = 4 1000/4 = 250ms 音が鳴り終わるまで処理を止める。
70.
PCM AUDIO
71.
71 PCM Audio 音楽や録音した音を、文字列に変換 し、Arduinoに書き込んで再生する。 圧電スピーカーでは、音が割れて聞 き取りにくいので、8Ωのスピーカー を使う。 http://playground.arduino.cc/Code/PCMAudio 8-bit, 8000
Hz audio playback on a PC speaker.
72.
72 再生時間 Arduinoのプログラム領域に書き込むため、合計で最大3秒程度。 Arduinoに書き込みをした時に表示される最大容量が上限。 Uno R3の場合32kB。 Arduino Due
の場合、 512kB ≒ 50秒
73.
73 参考動画 http://youtu.be/IyfezcXH0GI
74.
74 サンプル回路
75.
75 サンプルスケッチ サンプルスケッチの 「PCM」をArduinoに書き込む。 PCM.ino(再生プログラム) PCMData.h(音声を数値で表現したデータ)
76.
76 サンプルスケッチ(PCM.ino) #include "PCMData.h" int ledPin
= 13; int speakerPin = 11; // Can be either 3 or 11, two PWM outputs connected to Timer 2 volatile uint16_t sample; byte lastSample; 音声データを読み込む スピーカーを繋ぐPINを選択。 内臓ハードを使うため3Pinまたは 11Pinのみ。
77.
77 サンプルスケッチ void stopPlayback(){ ∼
} ISR(TIMER1_COMPA_vect) { ∼ } void startPlayback() { ∼ } 停止する関数 8000Hzで呼び出される処理。 サンプリングデータを一つずつ とり出す。 再生する関数
78.
78 サンプルスケッチ void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin,
HIGH); startPlayback(); } void loop() { while (true); } 再生開始 何もせずにくりかえす。
79.
79 録音した音声を変換する 1.波形編集ソフト「Audacity」で音声データを作成。 Audacity : http://audacity.sourceforge.net/download/ 2.Processingのスケッチ「PCMDataConverter」でヘッダファイルに変換。 PCMDataConverter
: 授業ページよりダウンロード 3.Arduinoに書き込み
80.
80 録音した音声を変換する 1 Audacityを起動しファイルを新規作成。 プロジェクトのサンプリング周波数を 8000に設定。 マイク入力をモノラルに設定。
81.
81 録音した音声を変換する 2. 録音するか既存の音声ファイルを開く。 再生可能な時間は3秒程度。 複数のサウンドファイルを扱う場合は 合計が3秒以内。
82.
82 録音した音声を変換する 3. [ファイル] - [書き出し]を選択。 Format
「その他の非圧縮ファイル」 を選択。
83.
83 録音した音声を変換する 4. [オプション]をクリックして、 設定ダイアログを開く。
84.
84 録音した音声を変換する 5. ヘッダ: RAW(header-less) エンコーディング: Unsigned 8 bit
PCM
85.
85 録音した音声を変換する 6. PCMDataConverterのdataフォルダ の中に、「PCMData.raw」というファ イル名で保存。
86.
86 録音した音声を変換する 7. PCMDataConverter.pde を Processingで実行。 音声データをテキストデータに変換す る。 Macではフォルダ名に日本語が含まれ ていると正しく実行できない。
87.
87 録音した音声を変換する 8. PCMDataConverterのフォルダにでき たPCMData.hをサンプルのPCMフォ ルダへ移動する。 ArduinoにPCM.inoを書き込み。
88.
88 増幅回路 オーディオアンプICを使って信号を増幅する。 LM386 http://akizukidenshi.com/catalog/ g/gI-01295/
89.
89 サンプル回路
90.
90 サンプル回路 電解コンデンサ セラミックコンデンサ 62 3 4 5
91.
91 コンデンサ 一時的に電気を溜める部品。ノイズを吸収したり、信号を取り出したり、様々 な用途がある。 容量 電気を溜められる量。単位はF(ファラッド) 耐圧 耐えられる電圧。 電解コンデンサ 積層セラミックコンデンサ 足が長い方が プラス 白いラインの 方がマイナス 極性無し
92.
92 部品表 オーディオアンプIC LM386 http://akizukidenshi.com/catalog/g/gI-01295/ ダイナミックスピーカー 8Ω56mmΦ http://akizukidenshi.com/catalog/g/gP-05411/ 電解コンデンサー220μF25V85℃(ルビコンPK) http://akizukidenshi.com/catalog/g/gP-03179/ 積層セラミックコンデンサー 0.047μF50V http://akizukidenshi.com/catalog/g/gP-05250/ カーボン抵抗(炭素皮膜抵抗) 1/4W10Ω (100本入) http://akizukidenshi.com/catalog/g/gR-25100/ 可変抵抗 10kΩ
93.
93 2つの音を交互に再生すサンプル 1:サンプルをダウンロード(PCM_multi) 2:展開してできたファイル(PCM_multi.ino)をArduinoに書き込む。 3:13番ピンに繋いだスイッチを押す度に、「わん」と「にゃー」と鳴く。 http://youtu.be/bT3n2EWlEJk
94.
WAVE SHIELD
95.
95 Wave Shield SDカードに保存した.wavファイル を再生できるシールド。 https://learn.adafruit.com/adafruit-wave-shield- audio-shield-for-arduino
96.
96 Wave Shield https://www.switch-science.com/catalog/1139/ http://www.galileo-7.com/?pid=14733131
97.
97 基板の組み立て パーツと基板の状態で届くので、 公式サイトの[Make it!!]を読んで、 自分でハンダ付けする。 写真付きで詳しく説明されているので、 慎重に作業すれば制作できる。 ICがソケットではなく直づけなので、 方向を間違わないように気をつける。 SDカードスロットはやや細かい。 https://learn.adafruit.com/adafruit-wave-shield- audio-shield-for-arduino/make-it
98.
98 使用方法 公式サイトの[Use it!!]を参照。 0:SDカードをフォーマット 1:音声ファイルを規定の形式に変換 2:ライブラリをインストール 3:Arduinoに書き込む
99.
99 0:SDカードのフォーマット FAT16またはFAT32でフォーマッ トする。
100.
100 1:音声ファイルの準備 1. Audacityを起動し、既存の音声ファ イルを読み込むか、録音する。 メニュー > [エフェクト]
> [増幅] で、音量を調整しておく。 2. トラックのプルダウンメニューから [ステレオトラックを分離] を選択。 2つのチャンネルに分割される。
101.
101 1:音声ファイルの準備 3. トラックのメニューから [モノラル] を選択。2つに分かれた両方に対し て行う。
102.
102 1:音声ファイルの準備 4. 全体を選択してから、 メニュー - [トラック]
- [ミックスして作成] を選択。 トラックが1つにまとまる。
103.
103 1:音声ファイルの準備 5. トラックのメニューから、 [サンプル形式を設定] - [16-bit PCM]
104.
104 1:音声ファイルの準備 6. プロジェクトのサンプリング 周波数(Hz)を22050に設定。
105.
105 1:音声ファイルの準備 7. [ファイル] - [書き出し]
を選択。 Formatを以下の通りに設定する。 WAV (Microsoft)16bit PCM 符号あり SDカードに保存。 SDカードをWaveShieldのスロットに 入れる。
106.
106 2:ライブラリのインストール 1. 以下からライブラリをダウンロード https://code.google.com/p/wavehc/downloads/list
107.
107 2:ライブラリのインストール 2. 解答したフォルダの WaveHC を User
書類 Arduino libraries へコピー。 Windowsの場合は、 My Documents Arduino libraries
108.
108 2:ライブラリのインストール 1. Arduinoのソフトを再起動し、 [ファイル] - [スケッチの例] -
[WaveHC] - [daphc] を選択。 Arduinoに書き込む。 ライブラリーが認識されない場合は、環境設 定の「スケッチブックの保存場所」を確認し、 その中にライブラリーを入れる。
109.
109 サンプルスケッチ サンプルスケッチをダウンロード。 WaveShield_simpleを開く
110.
110 サンプルスケッチ #include <WaveHC.h> #include <WaveUtil.h> SdReader
card; FatVolume vol; FatReader root; FatReader file; WaveHC wave; #define error(msg) error_P(PSTR(msg)) void setup() { if (!card.init()) { error("Card init. failed!"); } if (!vol.init(card)) { error("No partition!"); } if (!root.openRoot(vol)) { error("Couldn't open dir"); } playfile(“music.wav” ); } void loop(){ } ファイル名を指定して再生。
111.
111 サンプルスケッチ wave.play(); wave.stop(); 再生中の音声を止める。 読み込んだデータを再生する。
112.
MIC
113.
113 エレクトレット・コンデンサ・マイク (ECM) 音の強弱によって電気を貯める能力が変わるデバイス。 一定の電圧をかけ、充電・放電によって出力電圧が変化する。 端子に極性(+/-)があるので、データシートを確認する。 + -
114.
114 増幅回路 出力される電圧の変化はとても少ないので、増幅回路を使う。 LM386 ECM 電解コンデンサ ・C1:10uF ・C2:1uF 抵抗 ・R1:220kΩ
115.
115 増幅回路 5V A0 GND
116.
116 高感度マイクアンプキット 増幅回路があらかじめハンダ付けされていて扱いやすい。 http://akizukidenshi.com/catalog/g/gK-05757/
117.
117 サンプル回路
118.
118 サンプル回路
119.
119 サンプルスケッチ void setup() { Serial.begin(9600); } void
loop() { int sensorValue = analogRead(A0);// 入力を読み取る sensorValue -= 512;// -512∼+511 に整形 sensorValue = abs(sensorValue);// 絶対値に変換 sensorValue = sensorValue/25;// 0∼20に変換 for ( int i=0; i<sensorValue; i++ ){ Serial.print("[]");// 改行せず[]を出力 } Serial.println("");// 改行 delay(5);// ちょっと待つ } Mic_Sample https://youtu.be/qS5IYENyicE
120.
NEXT
121.
121 インプットとアウトプットを組み合わせる 第7回(5/22)はこれまで紹介した部品を組み合わせて「音を出す物」を作り ます。授業資料(第5回センサー・第6回駆動部品・第7回PC、音)を参考に、 必要な部品を各自準備してきてください。 ・光センサ(Cds) ・振動センサ(ピエゾ素子) ・温度センサー(LM35) ・タッチセンサ(静電容量) ・距離センサ ・タッチポジションセンサ ・感圧センサ ・曲げセンサ ・傾斜スイッチ ・加速度センサ ・カラーセンサ ・人感センサ ・マイク ・LED ・フルカラーLED ・DCモータ ・ソレノイド ・サーボモーター ・SSR ・tone ・PCM ・WaveShield ・Processing ・Unity 3D
122.
122 例 タクトスイッチを押すと、 メロディを演奏できる。 入力:タクトスイッチ 出力:圧電スピーカー 圧力センサを叩くと、 サーボが動いて風鈴を鳴らす。 入力:圧力センサー 出力:ソレノイド
123.
123 例 4拍子の音を鳴らす指揮棒。 入力:加速度センサー 出力:スピーカー 曲げセンサを指につけ、 サーボを動かしてギロを鳴らす 入力:曲げセンサ 出力:サーボモーター
Download