SFC デザイン言語WS(電子工作)第4回「センサーを使う」
-
Upload
makoto-hirahara -
Category
Technology
-
view
336 -
download
1
Transcript of SFC デザイン言語WS(電子工作)第4回「センサーを使う」
2
今日の内容
・Analog Input
・光センサー(Cds)
・振動センサー(ピエゾ素子)
・温度センサー(LM35)
・距離センサー
・タッチポジションセンサー
・感圧センサー
・曲げセンサー
・傾斜スイッチ
・加速度センサー
・カラーセンサー
・人感センサー
・近接センサー
・静電容量センサー
・まとめ
4
入力方法
デジタルインプット
On(0V), Off(5V)を判定する。
スイッチ、傾斜スイッチ、人感センサ等。
digitalRead(ピン番号);
アナログインプット
0V~5Vの電圧を0~1023の数値として読み込む。
距離センサー、温度センサー、曲げセンサ等。
analogRead(ピン番号);
10
スケッチ解説
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
PCとの通信(シリアル通信)を始める。
通信スピードをシリアルモニタの設定と合わ
せる。初期値は9600。
11
スケッチ解説
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
A0ピンの電圧を読み取る。
0v~5v を 0~1023 として数値化。
12
スケッチ解説
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
文字列、数値をPCへ送信する。
printは改行なし、printlnは改行あり。
13
抵抗分圧回路
電源の電圧から、抵抗の比率に応じた
電圧を発生させる回路。
可変抵抗で任意の電圧を得たり、Cds
などのセンサーの反応を取得できる。
出力電圧 =抵抗1 + 抵抗2
抵抗2x 電源電圧
14
Cdsの場合
Cdsは明るいほど抵抗が下がる。
明るい場所では1kΩ程度、
暗い場所では30kΩ程度となる。
0.45 = 10kΩ + 1kΩ
1kΩx 5v明
3.75v = 10kΩ + 30kΩ
30kΩx 5v暗
0.45v ~ 3.75v
17
圧電スピーカー(ピエゾ素子)
電気を流すと振動するデバイス。
可聴域の周波数で電気を流すと振動して
音が鳴る。
逆に振動すると電気が発生することを利
用し、振動センサとして利用できる。
http://akizukidenshi.com/catalog/g/gP-01251/
21
スケッチを改造
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
//Serial.println(sensorValue);
if( sensorValue > 100 ){
Serial.println("HIT");
}
delay(1); // delay in between reads for stability
}
// を先頭に付けて、コメントアウト
sensorValueが100以上の場合、
HITと出力
24
温度センサー LM35
温度に応じて出力電圧が変わるセンサー。
1°C = 10mV
5v OUT GND
ピン配列は、平らな面から見て左から
5v, OUT, GND
http://akizukidenshi.com/catalog/g/gI-00116/
30
距離センサー GP2Y0A21YK http://akizukidenshi.com/catalog/g/gI-02551/
距離に応じた電圧が出力される。 照射
された赤外線が反射して、PSD (ポジ
ション・センシング・ディテクター)に
入る角度から距離を算出する。
37
ポテンショメーター SoftPot https://www.switch-science.com/catalog/207/
5V OUT GND
12 3
指で押さえると内部の抵抗と電極が接触する。
1と3が抵抗でつながっていて、2の位置によっ
て抵抗値が変わる。 可変抵抗と同じ仕組み。
1 2 3
44
感圧センサ https://www.switch-science.com/catalog/270/
圧力を加えると、抵抗値が下がる。
何もしないと1MΩ以上、 指で押して500Ω程度。
重量を量る場合は、
センサー面に均一に力がかかるようにする工夫が必要。
49
曲げセンサ http://www.switch-science.com/catalog/508/
曲げると抵抗値が変わる。まっすぐな
状態で10kΩ程度、ストライプの面を
外側にして、90°曲げると40kΩ程度。
熱に弱いので、ハンダ付けは注意が必
要。延長ジャンパワイヤーに接続し、
絶縁テープで固定すると安全。
参考: https://www.sparkfun.com/datasheets/Sensors/Flex/FlexSensor.pdf
54
傾斜スイッチ RBS040200http://akizukidenshi.com/catalog/g/gP-01536/
傾けると中の金属球が転がって接点に触れ通電するスイッチ。
転倒などの判断に使用する。
60
3軸加速度センサモジュール MMA7361http://akizukidenshi.com/catalog/g/gM-06725/
XYZ軸それぞれの加速度を取得できる。
衝撃や落下を検知したり、重力加速度(下
方向への加速度)を利用し、傾きを得る
事もできる。
値は電圧としてアナログ出力される。
電源電圧は3.3V。5Vを繋がないよう
に注意。
参考: http://shokai.org/blog/archives/7701
65
サンプルスケッチ
授業ページから「サンプルスケッチ」
をダウンロードし、
accelerometerSampleを
Arduinoに書き込む。
AnalogReadでそれぞれの加速度を読
み込み、X,Y軸の傾きを計算している。
67
カラーセンサ HDJD-S822https://www.switch-science.com/catalog/870/
白色LEDの光を照射し、
反射光のRGBそれぞれの明るさを取得する。
この製品はRGBそれぞれを電圧として出力す
る。
71
サンプルスケッチ
サンプルスケッチをDLする。
HDJD_S822_QR999_Color_Sensor.pde
拡張子を.inoに変更し、
ファイルと同じ名前のフォルダを作り、
その中に入れてからArduinoで開く。
72
サンプルスケッチ
R,G,B のアウトプットをそれぞれ
analogReadで取得している。
red = analogRead(redpin) * 10;
green = analogRead(greenpin) * 14;
blue = analogRead(bluepin) * 17;
色によって感度が違うため、補正値を掛け
て調整している。
73
ゲインの調整
// Set the gain of each sensor
digitalWrite(GSR1, LOW);
digitalWrite(GSR0, LOW);
digitalWrite(GSG1, HIGH);
digitalWrite(GSG0, LOW);
digitalWrite(GSB1, HIGH);
digitalWrite(GSB0, HIGH);
GSXXはGainSelection。
各色High/Lowの組み合わせで、
ゲインを4段階調節できる。
0:LOW、1:LOWで最大、
0:HIGH、1:HIGHで最小。
75
カラーセンサ ATD3200販売サイト
http://www.aitendo.com/product/9550
制作記事
http://arms22.blog91.fc2.com/blog-entry-215.html
ライブラリ
http://dl.dropbox.com/u/14188987/isweb/arduino/ColorSensor001.zip
データシート
http://aitendo3.sakura.ne.jp/aitendo_data/product_img/sensor/colorsensor-
TCS3200D/ TCS3200-E11.pdf
79
人感センサ NaPiOn(ナピオン)シリーズhttp://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=5A2C-NNGN
温度の変化に応じてセラミックに帯電する電荷が変化
する現象(焦電効果)を利用し、人が発する赤外線の変化
を検知するセンサー。
NaPiOnシリーズは、検出距離5m・検出範囲水平100°
垂直82°の標準検出タイプに加え、微動タイプ、スポッ
ト検出タイプ、10m検出タイプがある。
スイッチのように機能し、人を感知すると通電する。
スポット検出タイプ
10m検出タイプ
85
フォトリフレクタ・フォトインタラプタ
赤外線LEDと受光素子が一体となった物体の接近・通過を検知するセンサー。
形状の違いで反射型と透過型の2タイプがある。
反射型(フォトリフレクタ) 透過型(フォトインタラ)
86
フォトリフレクタhttp://akizukidenshi.com/catalog/g/gI-00276/
反射型はLEDと受光素子が同じ向きに
セットされ、対象物に反射した光を検
知する。
物体の有無の検知のほかに、対象の色
による反射の違いを利用し、明るい色
か暗い色かを判断する事もできる。
ライントレーサーなどに使用。e.g. http://www.ijh.shibaura-it.ac.jp/robot/tracer/
87
フォトインタラプタhttp://akizukidenshi.com/catalog/g/gP-05310/
透過型はLEDと受光素子が向かい合わ
せに配置され、対象が隙間を遮った事
を検出できる。
平行移動する物の位置を測定したり、
回転体に付けた遮蔽物の通過回数をカ
ウントする事で、回転数を計測する。
e.g. http://www.mk0.enat.jp/solar_car.html
93
静電容量センサ
人体が近づくと静電容量(電気を貯める能力)が変化する。電気の溜まる時間を
計測する事で静電容量がわかるので、人体の接近を検出できる。電気を通す素
材であれば、遮蔽物があってもセンシングできるのが特徴。
受信部
アルミホイルを50mm x 50mmくらいの大きさに切り、
ジャンパワイヤをテープで付ける。大きさにより感度
が変わる。また、入力とホイルの間に入れる抵抗によっ
ても感度が変わる。実際の用途に合わせて調整が必要。
97
ライブラリ
http://playground.arduino.cc/Main/CapacitiveSensor
98
ライブラリのインストール(Mac)
DLしたファイルを解凍して「CapacitiveSensorDue」を
[Documents(書類)]-[Arduino]-[libraries]にコピーする。
[libraries]フォルダが無い場合は、自分で作って入れる。
99
ライブラリのインストール(Windows)
DLしたファイルを解凍して「CapacitiveSensorDue」を
[MyDocuments]-[Arduino]-[libraries]にコピーする。
[libraries]が無い場合は、自分でフォルダを作って入れる。
100
サンプルプログラム
Arduinoを再起動。
[ファイル]-
[Examples]-
[CapacitiveSensorDue]-
[CapacitiveSensorDueSketch] を開く。
Arduinoに書き込み、
右上の虫眼鏡アイコンをクリック。
103
抵抗値が変化するもの
可変抵抗、Cds、ポテンショメーター、
圧力センサ、曲げセンサ等
抵抗分圧回路を使って、
Vout = 出力をA0~A5に繋ぎ、
analogRead(); で読み取る。出力電圧 =
抵抗1 + 抵抗2
抵抗2x 電源電圧
105
通信を行う物
SPI
SCK(シリアル・クロック)と単方向のSDI、SDOの3本の信号線で通信する
同期式のシリアル通信。
SPIライブラリを使用する。
I2C
I2CバスとはSCL(シリアル・クロック)と、双方向のSDA(シリアル・デー
タ)の2本の信号線で通信する同期式のシリアル通信。
Wireライブラリを使用する。