Makoto Hirahara
第6回 PCとの連携・音
5.15 2015
DIY ELECTRONICS
デザイン言語ワークショップ(電子工作)
2
今日の内容
• Processingと連携する。
• Unity 3Dと連携する。
• Ethernetにつなぐ
• tone関数
• PCM Audio Library
• WaveShield
• コンデンサマイク
PROCESSING
4
Processing
http://processing.org/
Processing(プロセッシング)は、
Javaをベースに描画機能に特化した開
発環境。
開発者のCasey Reas と Benjamin Fry
はMITメディアラボ ジョン前田の元で
学び、Design By Numbers から着想
を得た。
5
プログラムの構成
void setup(){
  初期化処理
}
void draw(){
  繰り返される描画処理
}
6
Firmata
Firmata(フェルマータ)はSerial通信の汎用的なプロトコル。
Arduinoにファームウェアを入れておけば、Processingをはじめ
openFrameworksやPureDataなどから値を読み取ったり出力ができる。
FirmataFarmWare
Processing openFrameworksPd Unity3D
7
Firmata
Arduinoでピンの状態を調べるのと同じように、Processingから情報を取得で
きる。
pinMode( 0, INPUT );
digitalRead( 0 )
analogRead( 0 )
arduino.pinMode( 0, Arduino.INPUT );
arduino.digalRead( 0 )
arduino.analogRead( 0 )
8
サンプル回路
9
サンプル回路
10
Arduinoのセットアップ
[ファイル]-
[Examples]-
[Firmata]-
[StandardFirmata]を開く。
Arduinoに書き込む。
11
Processingのセットアップ
Processingのサイトから
アプリケーションをダウンロード。
解凍して任意の場所にコピー。
アプリケーションを立ち上げる。
12
ライブラリ
http://playground.arduino.cc/interfacing/processing
下記のサイトから、
ProcessingでArduinoを使うための
ライブラリをダウンロード。
13
ライブラリのインストール
ダウンロードしたファイルを解凍して、以下のフォルダにコピー
Mac
書類Processinglibraries
Win
C:Documents and Settings *** My DocumentsProcessinglibraries
14
サンプルスケッチ
Processingを再起動。
[ファイル]-[Examples]を選択。
Java Examplesというウィンドウが開
く。
[Contributed Libraries]-[Arduino]-
[arduino_input]を選択。
15
サンプルスケッチ
三角矢印ボタンを押して実行。
メッセージウィンドウに、
Arduinoを接続するときに使う
デバイス名がある事を確認。
例)/dev/tty.usbmodem1411
16
サンプルスケッチ
デバイス名を
先ほど確認した名前に変える。
コメントアウト
コメント解除
17
インプットサンプルスケッチ
三角矢印ボタンを押して実行。
13個のデジタル入力(上)と
6個のアナログ入力(下)が
表示される。
12 0
A0 A5
2 1・・・・・
18
インプットサンプルスケッチ
import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
color off = color(4, 79, 111);
color on = color(84, 145, 158);
シリアル通信のライブラリと
Arduinoライブラリを読み込む。
Arduinoにアクセスするための
オブジェクトを宣言。
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
インプットサンプルスケッチ
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
アウトプットサンプルスケッチ
[Contributed Libraries]-[Arduino]-[arduino_output]を実行。
ウィンドウの矩形をクリックすると、LEDが点灯する。
13 011
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
PWMサンプルスケッチ
[Contributed Libraries]-[Arduino]-[arduino_pwm]を実行。
ウィンドウ上のマウスの座標によって、LEDの明るさが変化する。
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
サンプルと組み合わせてみる。
http://youtu.be/V7vMPJaHcfo
26
サンプルスケッチ
授業ページから、サンプルスケッチをダウンロード、
「ParticlesWithPot_Sample」をProcessingで実行。
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オブジェクトにアクセスして使う使う。
UNITY 3D
29
Unity3D
Unity3DはUnity Technologies社が提
供しているゲームエンジン。
クロスプラットフォーム、物理エンジ
ン、アニメーションなど高度な機能を
備えながら安価(機能を限定したバー
ジョンは無料)に利用できる事から、
企業・個人共に利用が広がっている。 http://japan.unity3d.com/
30
UNIDUINO
Unity3DとArduinoを連動するプラグイ
ン。Asset Storeで販売している。
Asset Storeとは
3Dモデル、シェーダー、エフェクトな
ど、Unityで使える素材を販売している
マーケット。
http://u3d.as/4oP
31
デモ映像
https://www.youtube.com/watch?v=XzhVY5I_rwE
32
インストール
下記のページにアクセス
https://www.assetstore.unity3d.com/jp/#!/
content/6804
Buyボタンをクリックして、アカウン
ト、クレジットカード情報を入力。
33
サンプル
ダウンロードが終わったら、新規プロ
ジェクトを作ってから、インポート。
Projectパネル
Asset/Uniduino/UniduinoTestPanel/
UniduinoTestPanel を読み込む。
34
サンプル
初回のみシリアルポートを利用するプ
ラグインのインストールが必要。
終わったらUnity3Dを再起動し、
UniduinoTestPanelを読み込み直す。
デジタル0∼13, アナログ0∼5 の状態
が確認できる。
35
サンプル2
Projectパネル
Asset/Uniduino/Tutorials/
Analog Read/AnalogRead を読み込む。
可変抵抗の操作で、3Dオブジェクトを回転
できる。
36
サンプル2
Uniduinoオブジェクトに
アタッチされているArduino
スクリプトが、シリアル通
信をしている。
ポート名などは自動で取得
してくれる。
37
サンプル2
AnalogReadオブジェクト
にアタッチされている
AnalogReadスクリプトが、
アナログピンの値を読み取
り、キューブを回転させて
いる。
38
サンプル2
Arduinoオブジェクトを取得
Arduinoオブジェクトをセットアップ
39
サンプル2
Cubeオブジェクトを名前で検索
40
サンプル2
Arduinoの指定したピンをanalogRead
読み取ったアナログ値に応じて、
Cubeオブジェクトを回転。
41
サンプル3
https://youtu.be/AnEnG3tbPzo
42
サンプル3
第4回授業資料の加速度センサーを参考に回路を組む。
授業ページから、サンプルスケッチをダウンロード、
「UNIDUIONO_Sample」をUnity3Dで実行。
ETHERNET
44
Ethernet Shield
ArduinoをLANにつなぐためのシール
ド。
TCPやUDP,HTTPなどのプロトコルで
通信することができる。
https://www.switch-science.com/catalog/2270/
45
Ethernetのメリット
・転送距離が長い(CAT5で100m以上。USBでは5mが限度)
・さまざまな環境に接続できる。
46
サンプルスケッチ
Arduino [ファイル]-
[スケッチの例]-
[Ethernet]-
[UDPSendReceiveString]
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
サンプルスケッチ
#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
サンプルスケッチ
#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
サンプルスケッチ
void setup() {
Ethernet.begin(mac,ip);
Udp.begin(localPort);
Serial.begin(9600);
}
最初に設定したMACアドレスと
IPアドレスで通信開始
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
サンプルスケッチ
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
サンプルスケッチ
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
サンプルスケッチ
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”を送信。
SOUND
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
発音デバイスの種類
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/
秋月のスピーカー
TONE
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
サンプル回路
61
サンプル回路
62
tone関数
tone( ピン番号, 周波数, 継続時間 );
アウトプットピンから指定した周波数のパルスを出す事ができる。
例:
tone( 13, 440, 1000 );
13番ピンに圧電スピーカーをつなぐと440Hzの音が1秒間鳴る。
tone( 13, NOTE_A4, 1200 );
あらかじめ定義しておけば、音階で指定する事もできる。
63
サンプルスケッチ
[ファイル] - [スケッチの例] -
[02.Digital] -
[toneMelody] を開く。
PIN8とGNDにスピーカーを繋ぎ、
実行するとメロディが流れる。
64
参考動画
http://youtu.be/giPMbLicJqc
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
サンプルスケッチ
#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
サンプルスケッチ
#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
サンプルスケッチ
#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
サンプルスケッチ
#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
音が鳴り終わるまで処理を止める。
PCM AUDIO
71
PCM Audio
音楽や録音した音を、文字列に変換
し、Arduinoに書き込んで再生する。
圧電スピーカーでは、音が割れて聞
き取りにくいので、8Ωのスピーカー
を使う。
http://playground.arduino.cc/Code/PCMAudio
8-bit, 8000 Hz audio playback on a PC speaker.
72
再生時間
Arduinoのプログラム領域に書き込むため、合計で最大3秒程度。
Arduinoに書き込みをした時に表示される最大容量が上限。
Uno R3の場合32kB。
Arduino Due の場合、
512kB ≒ 50秒
73
参考動画
http://youtu.be/IyfezcXH0GI
74
サンプル回路
75
サンプルスケッチ
サンプルスケッチの
「PCM」をArduinoに書き込む。
PCM.ino(再生プログラム) PCMData.h(音声を数値で表現したデータ)
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
サンプルスケッチ
void stopPlayback(){ ∼ }
ISR(TIMER1_COMPA_vect) { ∼ }
void startPlayback() { ∼ }
停止する関数
8000Hzで呼び出される処理。
サンプリングデータを一つずつ
とり出す。
再生する関数
78
サンプルスケッチ
void setup()
{
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
startPlayback();
}
void loop()
{
while (true);
}
再生開始
何もせずにくりかえす。
79
録音した音声を変換する
1.波形編集ソフト「Audacity」で音声データを作成。
Audacity : http://audacity.sourceforge.net/download/
2.Processingのスケッチ「PCMDataConverter」でヘッダファイルに変換。
PCMDataConverter : 授業ページよりダウンロード
3.Arduinoに書き込み
80
録音した音声を変換する
1
Audacityを起動しファイルを新規作成。
プロジェクトのサンプリング周波数を
8000に設定。
マイク入力をモノラルに設定。
81
録音した音声を変換する
2.
録音するか既存の音声ファイルを開く。
再生可能な時間は3秒程度。
複数のサウンドファイルを扱う場合は
合計が3秒以内。
82
録音した音声を変換する
3.
[ファイル] - [書き出し]を選択。
Format 「その他の非圧縮ファイル」
を選択。
83
録音した音声を変換する
4.
[オプション]をクリックして、
設定ダイアログを開く。
84
録音した音声を変換する
5.
ヘッダ:
RAW(header-less)
エンコーディング:
Unsigned 8 bit PCM
85
録音した音声を変換する
6.
PCMDataConverterのdataフォルダ
の中に、「PCMData.raw」というファ
イル名で保存。
86
録音した音声を変換する
7.
PCMDataConverter.pde を
Processingで実行。
音声データをテキストデータに変換す
る。
Macではフォルダ名に日本語が含まれ
ていると正しく実行できない。
87
録音した音声を変換する
8.
PCMDataConverterのフォルダにでき
たPCMData.hをサンプルのPCMフォ
ルダへ移動する。
ArduinoにPCM.inoを書き込み。
88
増幅回路
オーディオアンプICを使って信号を増幅する。 
LM386
http://akizukidenshi.com/catalog/
g/gI-01295/
89
サンプル回路
90
サンプル回路
電解コンデンサ
セラミックコンデンサ
62
3 4
5
91
コンデンサ
一時的に電気を溜める部品。ノイズを吸収したり、信号を取り出したり、様々
な用途がある。
容量 電気を溜められる量。単位はF(ファラッド)
耐圧 耐えられる電圧。
電解コンデンサ 積層セラミックコンデンサ
足が長い方が
プラス
白いラインの
方がマイナス
極性無し
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
2つの音を交互に再生すサンプル
1:サンプルをダウンロード(PCM_multi)
2:展開してできたファイル(PCM_multi.ino)をArduinoに書き込む。
3:13番ピンに繋いだスイッチを押す度に、「わん」と「にゃー」と鳴く。
http://youtu.be/bT3n2EWlEJk
WAVE SHIELD
95
Wave Shield
SDカードに保存した.wavファイル
を再生できるシールド。
https://learn.adafruit.com/adafruit-wave-shield-
audio-shield-for-arduino
96
Wave Shield
https://www.switch-science.com/catalog/1139/ http://www.galileo-7.com/?pid=14733131
97
基板の組み立て
パーツと基板の状態で届くので、
公式サイトの[Make it!!]を読んで、
自分でハンダ付けする。
写真付きで詳しく説明されているので、
慎重に作業すれば制作できる。
ICがソケットではなく直づけなので、
方向を間違わないように気をつける。
SDカードスロットはやや細かい。
https://learn.adafruit.com/adafruit-wave-shield-
audio-shield-for-arduino/make-it
98
使用方法
公式サイトの[Use it!!]を参照。
0:SDカードをフォーマット
1:音声ファイルを規定の形式に変換
2:ライブラリをインストール
3:Arduinoに書き込む
99
0:SDカードのフォーマット
FAT16またはFAT32でフォーマッ
トする。
100
1:音声ファイルの準備
1.
Audacityを起動し、既存の音声ファ
イルを読み込むか、録音する。
メニュー > [エフェクト] > [増幅]
で、音量を調整しておく。
2.
トラックのプルダウンメニューから
[ステレオトラックを分離] を選択。
2つのチャンネルに分割される。
101
1:音声ファイルの準備
3.
トラックのメニューから [モノラル]
を選択。2つに分かれた両方に対し
て行う。
102
1:音声ファイルの準備
4.
全体を選択してから、
メニュー - [トラック] - [ミックスして作成] を選択。
トラックが1つにまとまる。
103
1:音声ファイルの準備
5.
トラックのメニューから、
[サンプル形式を設定] -
[16-bit PCM]
104
1:音声ファイルの準備
6.
プロジェクトのサンプリング
周波数(Hz)を22050に設定。
105
1:音声ファイルの準備
7.
[ファイル] - [書き出し] を選択。
Formatを以下の通りに設定する。
WAV (Microsoft)16bit PCM 符号あり
SDカードに保存。
SDカードをWaveShieldのスロットに
入れる。
106
2:ライブラリのインストール
1.
以下からライブラリをダウンロード
https://code.google.com/p/wavehc/downloads/list
107
2:ライブラリのインストール
2.
解答したフォルダの WaveHC を
User  書類  Arduino  libraries へコピー。
Windowsの場合は、
My Documents  Arduino  libraries
108
2:ライブラリのインストール
1.
Arduinoのソフトを再起動し、
[ファイル] - [スケッチの例]
- [WaveHC] - [daphc] を選択。
Arduinoに書き込む。
ライブラリーが認識されない場合は、環境設
定の「スケッチブックの保存場所」を確認し、
その中にライブラリーを入れる。
109
サンプルスケッチ
サンプルスケッチをダウンロード。
WaveShield_simpleを開く
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
サンプルスケッチ
wave.play();
wave.stop(); 再生中の音声を止める。
読み込んだデータを再生する。
MIC
113
エレクトレット・コンデンサ・マイク (ECM)
音の強弱によって電気を貯める能力が変わるデバイス。
一定の電圧をかけ、充電・放電によって出力電圧が変化する。
端子に極性(+/-)があるので、データシートを確認する。
+
-
114
増幅回路
出力される電圧の変化はとても少ないので、増幅回路を使う。
LM386
ECM
電解コンデンサ
・C1:10uF
・C2:1uF
抵抗
・R1:220kΩ
115
増幅回路
5V
A0
GND
116
高感度マイクアンプキット
増幅回路があらかじめハンダ付けされていて扱いやすい。
http://akizukidenshi.com/catalog/g/gK-05757/
117
サンプル回路
118
サンプル回路
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
NEXT
121
インプットとアウトプットを組み合わせる
第7回(5/22)はこれまで紹介した部品を組み合わせて「音を出す物」を作り
ます。授業資料(第5回センサー・第6回駆動部品・第7回PC、音)を参考に、
必要な部品を各自準備してきてください。
・光センサ(Cds)
・振動センサ(ピエゾ素子)
・温度センサー(LM35)
・タッチセンサ(静電容量)
・距離センサ
・タッチポジションセンサ
・感圧センサ
・曲げセンサ
・傾斜スイッチ
・加速度センサ
・カラーセンサ
・人感センサ
・マイク
・LED
・フルカラーLED
・DCモータ
・ソレノイド
・サーボモーター
・SSR
・tone
・PCM
・WaveShield
・Processing
・Unity 3D
122
例
タクトスイッチを押すと、
メロディを演奏できる。
入力:タクトスイッチ
出力:圧電スピーカー
圧力センサを叩くと、
サーボが動いて風鈴を鳴らす。
入力:圧力センサー
出力:ソレノイド
123
例
4拍子の音を鳴らす指揮棒。
入力:加速度センサー
出力:スピーカー
曲げセンサを指につけ、
サーボを動かしてギロを鳴らす
入力:曲げセンサ
出力:サーボモーター

More Related Content

PDF
Zynq+PyCoRAM(+Debian)入門
PPTX
Polyphony の行く末(2018/3/3)
PPTX
研究者のための Python による FPGA 入門
PDF
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PDF
C++による数値解析の並列化手法
PDF
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
PDF
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
PDF
Linux Kernel Seminar in tripodworks
Zynq+PyCoRAM(+Debian)入門
Polyphony の行く末(2018/3/3)
研究者のための Python による FPGA 入門
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
C++による数値解析の並列化手法
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
Linux Kernel Seminar in tripodworks

What's hot (20)

PDF
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
PDF
組み込みシステムのセキュリティ
PDF
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
PDF
FPGA+SoC+Linux実践勉強会資料
PDF
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 1
PPTX
Abstracts of FPGA2017 papers (Temporary Version)
PDF
FPGAX6_hayashi
PPTX
FPGAって、何?
PDF
Python physicalcomputing
PDF
PDF
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PDF
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PDF
ぐだ生システム#2
PDF
4章 Linuxカーネル - 割り込み・例外 4
PDF
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
PDF
4章 Linuxカーネル - 割り込み・例外 3
PDF
Mosesdecoderコード解読の勘所
PDF
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PDF
FPGAのトレンドをまとめてみた
PDF
4章 Linuxカーネル - 割り込み・例外 2
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
組み込みシステムのセキュリティ
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
FPGA+SoC+Linux実践勉強会資料
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 1
Abstracts of FPGA2017 papers (Temporary Version)
FPGAX6_hayashi
FPGAって、何?
Python physicalcomputing
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
ぐだ生システム#2
4章 Linuxカーネル - 割り込み・例外 4
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
4章 Linuxカーネル - 割り込み・例外 3
Mosesdecoderコード解読の勘所
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
FPGAのトレンドをまとめてみた
4章 Linuxカーネル - 割り込み・例外 2
Ad

Viewers also liked (19)

PDF
SFC デザイン言語WS(電子工作)第1回「オリエンテーション」
PDF
SFC デザイン言語WS(電子工作)第7回「インプット・アウトプットを繋ぐ」
PDF
SFC デザイン言語WS(電子工作)第5回「LED/駆動部品を使う」
PDF
SFC デザイン言語WS(電子工作)第4回「センサーを使う」
PDF
SFC デザイン言語WS(電子工作)第3回「電子工作の作法」
PDF
SFC デザイン言語WS(電子工作)第2回「まずは使ってみる」
PDF
SFC デザイン言語WS(電子工作)第10回「無線通信」
PDF
SFC デザイン言語WS(電子工作)第8回「アイデア」
PDF
SFC デザイン言語WS(電子工作)第9回「ハンダ付け実習」
PDF
SFC デザイン言語WS(電子工作)第13回「最終課題制作」
PDF
SFC デザイン言語WS(電子工作)第14回「最終課題発表」
PDF
SFC デザイン言語WS(電子工作)第12回「制作工程事例」
PDF
SFC デザイン言語WS(電子工作)第11回「基盤制作」
PDF
深層学習(講談社)のまとめ(1章~2章)
PDF
AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」
PDF
ヒトがメタファー(表現)を使う理由: Reasons for use of metaphor(ic expression)s by human
PDF
ダブル配列の実装方法
PDF
デザインの歴史と分析的な見方【後編】フラットデザインにつながるタイポグラフィーとスペースのとらえ方 先生:佐藤 好彦
PPTX
Trump and Hitler Compared
SFC デザイン言語WS(電子工作)第1回「オリエンテーション」
SFC デザイン言語WS(電子工作)第7回「インプット・アウトプットを繋ぐ」
SFC デザイン言語WS(電子工作)第5回「LED/駆動部品を使う」
SFC デザイン言語WS(電子工作)第4回「センサーを使う」
SFC デザイン言語WS(電子工作)第3回「電子工作の作法」
SFC デザイン言語WS(電子工作)第2回「まずは使ってみる」
SFC デザイン言語WS(電子工作)第10回「無線通信」
SFC デザイン言語WS(電子工作)第8回「アイデア」
SFC デザイン言語WS(電子工作)第9回「ハンダ付け実習」
SFC デザイン言語WS(電子工作)第13回「最終課題制作」
SFC デザイン言語WS(電子工作)第14回「最終課題発表」
SFC デザイン言語WS(電子工作)第12回「制作工程事例」
SFC デザイン言語WS(電子工作)第11回「基盤制作」
深層学習(講談社)のまとめ(1章~2章)
AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」
ヒトがメタファー(表現)を使う理由: Reasons for use of metaphor(ic expression)s by human
ダブル配列の実装方法
デザインの歴史と分析的な見方【後編】フラットデザインにつながるタイポグラフィーとスペースのとらえ方 先生:佐藤 好彦
Trump and Hitler Compared
Ad

Similar to SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」 (20)

PDF
Arduinoで遊ぼう #1Processingと連携する
PDF
ArduinoとProcessingの連携
PDF
KOGEI & KAIT Funnel WS
PPTX
イチからはじめるUSB Host API
PDF
さわってみようTOPPERS/SSP
PDF
Processing workshop v3.0
PDF
3台以上のarduinoでのspi通信 2017 07-20
PPTX
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
PPTX
Arduino 入門
PDF
Arduino入門
PDF
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
PDF
20apr2012 kernelvm7-main
PDF
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
PDF
ものづくりプロジェクトII 一日でわかるArduino入門
PDF
Imaocande LT
PDF
20140910 Arduino for beginners
PPTX
2015/05/23 シニア技術者プログラム第3弾 「第二回IoT勉強会&交流会」 15:00~15:20 Arduinoで簡単回路作成実演
PDF
【学習メモ#4th】12ステップで作る組込みOS自作入門
PDF
Arduino を PHP で制御する
KEY
プロペラブForth発表osc愛媛
Arduinoで遊ぼう #1Processingと連携する
ArduinoとProcessingの連携
KOGEI & KAIT Funnel WS
イチからはじめるUSB Host API
さわってみようTOPPERS/SSP
Processing workshop v3.0
3台以上のarduinoでのspi通信 2017 07-20
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
Arduino 入門
Arduino入門
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
20apr2012 kernelvm7-main
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
ものづくりプロジェクトII 一日でわかるArduino入門
Imaocande LT
20140910 Arduino for beginners
2015/05/23 シニア技術者プログラム第3弾 「第二回IoT勉強会&交流会」 15:00~15:20 Arduinoで簡単回路作成実演
【学習メモ#4th】12ステップで作る組込みOS自作入門
Arduino を PHP で制御する
プロペラブForth発表osc愛媛

SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」