Upload
koichiro-mori
View
547
Download
3
Embed Size (px)
DESCRIPTION
Citation preview
多摩美術大学衛星芸術PBL 2011年2011年10月11日
第5回 : 衛星家具をつくる2
1
本日やること
前回のプログラムの解説
圧電スピーカーを使ったサウンドデバイスの制作
ピッチ
リズム
2
前回のおさらい前回のプログラム ARTSAT_Pachube_Example.pde
3
import processing.serial.*;import cc.arduino.*;import eeml.*;
DataIn dataIn;Arduino arduino;
int feedId = 12467; //ARTSAAT_PRISM feed IDint feedNum = 1; //Now Solar Cell VoltageString feedURL = "http://www.pachube.com/api/feeds/";String apiKey = "API KEY";float dataVlue;
次のページにつづく
void setup(){ background(255); size(200, 200); println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[0], 115200); dataIn = new DataIn(this,feedURL + feedId + ".xml", apiKey ,10000); dataVlue = 0;}
void draw(){ arduino.analogWrite(3, int( dataVlue * ( 5 / 12.5 ) * ( 255 / 5 ) ) ); }
void onReceiveEEML(DataIn d){ if (dataIn == d) { dataVlue = d.getValue( feedNum ); println ("feed 12467 Now Solar Cell Voltage : " + dataVlue + " Volts"); }}
4
Pachubeからのフィード取得前回のプログラム ARTSAT_Pachube_Example.pde
5
int feedId = 12467;
int feedNum = 1;
PachubeのARTSAT PRISM SENSORSフィードの固有のID
フィードの中のセンサーのID
String apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
apiを使用する時に必要な認証キー
Pachubeからのフィード取得2
フィードを取得している部分
dataVlue = d.getValue( feedNum );
6
フィードIDとセンサーフィードIDとセンサーの対応
0:updated1:V-SA 太陽電池電圧2:I-O5 ミッション系電流3:I-XL AFSK送信系電流4:X軸角速度 ジャイロ(X軸角速度)5:Y軸角速度 ジャイロ(Y軸角速度)6:Z軸角速度 ジャイロ(Z軸角速度)7:太陽電池電流 (+Xパネル表)8:太陽電池電流 (-Xパネル表)9:太陽電池電流 (+Yパネル表)
10:太陽電池電流 (-Yパネル表)11:太陽電池電流 (+Xパネル裏)12:太陽電池電流 (-Xパネル裏)13:太陽電池電流 (+Yパネル裏)14:太陽電池電流 (-Yパネル裏)15:温度(+X) パネル温度(+X)16:温度(+Y) パネル温度(+Y)17:温度(-X) パネル温度(-X)18:温度(-Y) パネル温度(-Y)
7
Arduinoで電圧制御
LEDの明るさは電圧で制御する
ArduinoがUSBからもらっている電圧 -> 5V
8
PWM パルス幅変調
arduino.analogWrite(3, int( dataVlue * ( 5 / 12.5 ) * ( 255 / 5 ) ) );
arduino.analogWrite()
9
幅を変調
map()
map(dataVlue, 0, 12.5, 0, 255);
map()
最小値0~最大値12.5の値を、0~255にスケーリング
スケーリングをする
10
圧電スピーカーを使ったサウンドデバイス
本日のArduinoプログラムダウンロード:ARTSAT_Pcuhbe_Example_Sound_Arduino.pde
11
圧電スピーカー
圧電スピーカー
圧電素子(ピエゾ素子)が入っている。素子に圧力が加わると電圧が発生する。
12
ブレッドボードで配線
13
本日のProcessingプログラム
import processing.serial.*;import cc.arduino.*;import eeml.*;
DataIn dataIn;Serial arduino;
int feedId = 12467; //ARTSAAT_PRISM feed IDint feedNum = 1; //Now Solar Cell Voltage
String feedURL = "http://www.pachube.com/api/feeds/";String apiKey = "API KEY";
以下からソースコードをダウンロード
次のページにつづく
ARTSAT_Pachube_Sound_Example.pde
14
void setup(){ background(255); size(200, 200); println(Serial.list()); arduino = new Serial(this, Serial.list()[0], 57600); dataIn = new DataIn(this,feedURL + feedId + ".xml", apiKey ,10000); }
void draw(){ float freq; //datavalue to pitch (freqency) freq = 440; //freq = map( dataVlue, 0, 12.5 , 0, 22000 ); playBeep( freq ); //Beep Sound delay(1000); }
void onReceiveEEML(DataIn d){ if (dataIn == d) { dataVlue = d.getValue( feedNum ); println ("feed 12467 Now Solar Cell Voltage : " + dataVlue + " Volts"); }}
void playBeep(float pitch){ arduino.write(str(int(pitch))+"\0"); //send to serial};
15
主な関数
playBeep( 周波数 );
playBeep()
引数は周波数
ビープ音をならす関数 ”ピッ”
delay( milliseconds );
delay()
引数はミリセカンド (1/1000秒)
次の処理までの待ち時間
16
フィードデータを使う
freq = map( dataVlue, 0, 12.5 , 0, 22000 );
int feedNum = 1;
17
id1 -> V-SA 太陽電池電圧
dataValue = d.getValue( feedNum );
onReceiveEEML関数内
draw関数内周波数にスケーリングしたセンサーの値を代入
センサーの値をdataValue変数に代入
フィードデータを使う2
delay( dataValue * 100 );
draw関数内delayに100倍したセンサーの値を代入
ビープ音の間隔にデータを使う
おつかれさまでした。
質問等は森まで
19