Upload
koichiro-mori
View
326
Download
0
Embed Size (px)
Citation preview
多摩美術大学衛星芸術PBL 2011年2011年10月18日
第6回 : 衛星家具をつくる3
1
本日やること
前回の捕捉
リズム
サーボモーターを使ったデバイス
モーターの種類
サーボモーターてバイスの制作
2
(前回のコード)主な関数
playBeep( 周波数 );
playBeep()
引数は周波数
ビープ音をならす関数 ”ピッ”
delay( milliseconds );
delay()
引数はミリセカンド (1/1000秒)
次の処理までの待ち時間
3
フィードデータを使う
freq = map( dataVlue, 0, 12.5 , 0, 22000 );
int feedNum = 1;
dataValue = d.getValue( feedNum );
onReceiveEEML関数内
draw関数内
4
フィードデータを使って音の間隔に
delay( dataValue * 100 );
draw関数内delayに100倍したセンサーの値を代入
ビープ音の間隔にデータを使う
間隔を変えてリズムを作ってみる
5
サーボモーターデバイス
本日パーツリスト
・Arduinoボード ×1・サーボモーター ×1・ジャンパー線 ×3本・ボレッドボード ×1・USBケーブル ×1
6
モーターの種類
DCモーター ACモーター
電流を流すと回転する
7
モーターの種類
ステッピングモーター
極に順番に電流を流して回転させる(ステップ)位置を決めるのに便利
8
モーターの種類
サーボモーター
パルスによって角度を決める決まった角度を出したい時に便利
9
PWMの5Vの山(HIGH)になっている幅で角度を調節する。右端から左端までの角度とメーカーや種類によって違うので確認が必要
モーターの角調節
5V
0V
幅 20m秒が一般的
10
今日の回路
5VGND 信号(Arduino PWMへ)
11
Arduinoのプログラム本日使うArduinoスケッチ ServoFirmata
12
本日のProcessingプログラム
import processing.serial.*;import cc.arduino.*;import eeml.*;
DataIn dataIn;Arduino arduino;int servoPin = 10; // Control pin for servo motor
int feedId = 12467; //ARTSAAT_PRISM feed IDint feedNum = 18; //Temperature Sensor of minus Y panel
String feedURL = "http://www.pachube.com/api/feeds/";String apiKey = "API KEY";float dataValue;
以下からソースコードをダウンロード
次のページにつづく
ARTSAT_Pachube_Example_Servo.pde
13
void setup(){ background(255); size(200, 200); arduino = new Arduino(this, Arduino.list()[0], 115200); arduino.pinMode(servoPin, Arduino.OUTPUT); dataIn = new DataIn(this,feedURL + feedId + ".xml", apiKey ,10000); }
void draw(){ float servoAngle; servoAngle = map( feedNum ,-58.0, 35.5, 0, 180 ); arduino.analogWrite(servoPin, int(servoAngle) ); //send servo angle to Arduino}
void onReceiveEEML(DataIn d){ if (dataIn == d) { dataValue = d.getValue( feedNum ); println ("feed 12467 Now Temperature Sensor of minus Y panel : " + dataValue + " Celsius (°C)"); }}
以上
14
Processingでのサーボ調節
arduino.analogWrite( servoPin, angle );
前回と同様に analogWrite()によってPWM制御
引数1
ArduinoのPWMピン 今回は10
引数2
角度 0 ~ 180
15
map()
map( feedNum ,-58.0, 35.5, 0, 180 )
map()
使うセンサーの値の最小値/最大値の比率を角度にスケーリング 0 ~ 180度
スケーリングをする
16
https://api.pachube.com/v2/feeds/12467
データXMLを見てみる
Pachube apiにリクエストしてXMLを取得
<data id="18"><tag>Temperature Sensor of minus Y panel</tag><current_value at="2011-10-17T06:24:56.063493Z">-31.4</current_value><max_value>35.5</max_value><min_value>-58.0</min_value><unit type="derivedSI" symbol="">Celsius (°C)</unit></data>
時間、単位、最大値/最小値などの情報が手に入る
17
int()
int(servoAngle)
int()
servoAngle がfloat(浮動小数点)数値なのでint型に直してあげる
数値をintに型変換する
18
おつかれさまでした。
質問等は森まで
19