• 検索結果がありません。

情報処理演習 II 第四回目

N/A
N/A
Protected

Academic year: 2021

シェア "情報処理演習 II 第四回目"

Copied!
36
0
0

読み込み中.... (全文を見る)

全文

(1)

情報処理演習II

(2)

本日の講義内容

• Processingのダウンロード • プルアップ抵抗,プルダウン抵抗,内部プルアップ抵抗の利用 • 演習1: シリアル通信で学籍と名前を送信 • 演習2: シリアル通信による氏名の送信と受信 • 演習3: シリアル通信による氏名の送信と記録 • 演習4: シリアル通信による記録した氏名の表示 • ProcessingとArduinoの連携 • 演習5 : PCのウィンドウ上をマウスクリック時にLEDを点灯させよ • 演習6 –加速度センサの値を加速度への変換し、PCで表示 • 加速度センサの特性と仕様 • 演習7: 加速度センサのX軸の値でPC上に円を描画せよ • 課題

(3)

Processing

のダウンロード

• Processing

をダウンロード

–http://processing.org/

(4)

プルアップ抵抗・プルダウン抵抗

マイコンの入力にHIGHかLOW信号を確実に伝える為に

取り付ける

抵抗がない場合はHIGH/LOWの状態が不安定となる

–HIGHなのにLOWとなったり、LOWなのにHIGHとなったりして マイコンが誤動作を起こす プルアップ抵抗 プルダウン抵抗

(5)

Aruduino

でのプルアップ抵抗

プルアップ抵抗を有効にする

–pinMode(SW, INPUT_PULLUP);

次でも同様の効果

–pinMode(SW, INPUT); –digitalWrite(SW, HIGH);

(6)
(7)
(8)

プルアップ・プルダウン抵抗の使用

const int SW = 8; const int LED = 13; int state = 0; void setup() { pinMode(LED, OUTPUT); pinMode(SW , INPUT); } void loop() { state = digitalRead(SW); if (state == HIGH) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }

(9)

内部プルアップ抵抗の使用

const int SW = 7; const int LED = 13; int state = 0; void setup() { pinMode(LED, OUTPUT); pinMode(SW, INPUT); digitalWrite(SW, INPUT_PULLUP); } void loop() { state = digitalRead(SW); if (state == HIGH) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }

(10)

演習1: シリアル通信で学籍と名前を送信

char ID[] = "b1013000¥n"; //自分の学籍番号に変更 char NAME[] = "Sato Ikuma¥n"; //自分の氏名に変更 void setup() { Serial.begin(9600); } void loop() { Serial.print(ID); Serial.print(NAME); delay(1000); }

(11)

演習2: シリアル通信による氏名の送信と受信

• @b103000 IkumaSato.? をシリアルモニタから送信し, b103000 IkumaSato¥n¥0がarduinoから送信されシリアルモニタに表示 char NAME[256]; int rx,i = 0; void setup() { Serial.begin(9600); } void loop() { rx = Serial.read(); if(rx != -1){ //受信データが有の場合 if(rx == '?'){ //送信指令を受信した場合 Serial.print(NAME); //配列(氏名)を送信 } else{ if(rx == '@'){ //スタートマークを受信した場合 i = 0; } else if(rx == '.'){ NAME[i++] = '¥n'; NAME[i++] = '¥0'; } else{ NAME[i++] = rx; } } } }

(12)

演習3: シリアル通信による氏名の送信と記録

• @b103000 IkumaSato.をシリアルモニタから送信し, b103000 IkumaSato¥n¥0がarduinoに記録 #include <EEPROM.h> char NAME[256]; int rx,i = 0; void setup() { Serial.begin(9600); } void loop() { rx = Serial.read(); if(rx != -1){ //受信データが有の場合 if(rx == '@'){ //スタートマークを受信した場合 i = 0; } else if(rx == '.'){ EEPROM.write(i++, '¥n'); EEPROM.write(i++, '¥0'); } else{ EEPROM.write(i++, rx); } } }

(13)

演習4: シリアル通信による記録した氏名の表示

• Arduinoに記録したb103000 IkumaSato¥n¥0をシリアルモニタで表示 #include <EEPROM.h> char NAME[256]; int rx,i = 0; void setup() { Serial.begin(9600); } void loop() { NAME[i] = EEPROM.read(i); if(NAME[i] == '¥0'){ Serial.print(NAME); i = 0; } i++; delay(100); }

(14)

Processing

の特徴(1)

• Arduino

の開発環境のベース

見た目も似てる

• MIT

を中心に開発

• 2002

~開発開始

• 2005

~ベータ版公開

• 2008

~正式版公開

• Java

をベースに遥かに

単純化

非プログラマでもOK

(15)

Processing

の特徴(2)

インタラクティブなグラフィックス/アニメーションを簡単に実現

(16)

Processing

のソースコード

void setup(){

size (480, 240);

}

void draw(){

if(mousePressed){

fill(0);

}

else{

fill(255);

}

ellipse(mouseX, mouseY,80, 80);

}

(17)

Processing

とArduinoを連携

シリアル通信を利用

–PCアプリ→Arduino • マウスクリックでLED点灯 –Aruduino→PCアプリ • センサで画面に描画

(18)

演習5: PCのウィンドウ上をマウスクリック時にLEDを点灯させよ

ウィンドウ上でマウスをクリックするとLEDが点灯

–マウスのX座標によってLEDの明るさが変化 –13番にLEDのアノード (A) • 長い足 –隣のGNDにカソード (K) • 短い足

(19)

ソースコード(

Arduino

const int LED = 13;

int value = 0;

void setup() {

Serial.begin(9600);

}

void loop() {

if(Serial.available()>0){

value = Serial.read();

analogWrite(LED, value );

}

}

(20)

ソースコード(

Processing

import processing.serial.*;

Serial myPort;

void setup(){

size(256,256);

myPort=new Serial(this, “

COM1

”,9600);

}

void draw(){

background(255);

}

void mousePressed(){

myPort.write(mouseX);

}

void mouseReleased(){

myPort.write(0);

}

環境により名前が 変わるので注意 Arduino->Tool->Portで確認

(21)

演習6: 加速度センサの値を加速度への変換し、PCへ表示

以下の通りに設置せよ

–ピンアサインと向きに注意すること –間違えるとセンサが壊れるので注意すること 加速度センサの ピン番号 機能 マイコンボードの ピン番号 1 電源 5V 2 パワーシャットダウン 5V 3 GND GND 4 パリティ N.C. 5 セルフテスト GND 6 X軸出力 A2 7 Y軸出力 A1 8 Z軸出力 A0 1 4 5 8

(22)
(23)

3

軸加速度センサモジュール

振動,慣性力,重力加速度

(地軸に対する傾き)などを検出

–配ったものは秋月電子 KXM52-1050 • 測定レンジ: ±2G • 電源が5V時は 2.5Vが0G

+X

+Y

+Z

+X

+Y

+Z

(24)

加速度センサの仕様

x = y - 2.5

(25)

3

軸加速度センサの値を表示

const int ACCX = A2;

const int ACCY = A1; const int ACCZ = A0;

int value = 0; void setup() { Serial.begin(9600); } void loop() { value = analogRead(ACCX ); Serial.print(value); Serial.print(“,”); value = analogRead(ACCY ); Serial.print(value); Serial.print(“,”); value = analogRead(ACCZ ); Serial.println(value); delay(100); }

(26)

3

軸加速度を表示

const int ACCX = A2; const int ACCY = A1; const int ACCZ = A0; int value = 0; float ACC = 0.0; float offset= 2.5; void setup() { Serial.begin(9600); } void loop() { value = analogRead(ACCX);

ACC = value * 0.005 - offset;

Serial.print(ACC); Serial.print(",");

value = analogRead(ACCY);

ACC = value * 0.005 - offset;

Serial.print(ACC); Serial.print(",");

value = analogRead(ACCZ);

ACC = value * 0.005 - offset;

Serial.println(ACC); delay(100);

(27)

演習7: 加速度センサのX軸の値でPC上に描画せよ

以下の通りに設置せよ

–ピンアサインと向きに注意すること –間違えるとセンサが壊れるので注意すること 加速度センサの ピン番号 機能 マイコンボードの ピン番号 1 電源 5V 2 パワーシャットダウン 5V 3 GND GND 4 パリティ N.C. 5 セルフテスト GND 6 X軸出力 A2 7 Y軸出力 A1 8 Z軸出力 A0 1 4 5 8

(28)
(29)

ソースコード(

Arduino

const int ACCX = A2; int value = 0; void setup() { Serial.begin(9600); } void loop() { value = analogRead(ACCX); value = map(value, 0, 1023, 0, 255 ); Serial.write(value); delay(100); }

(30)

ソースコード(

Processing

import processing.serial.*; Serial myPort; int x = 0; void setup(){ size(256,256);

myPort=new Serial(this, “COM11”,9600); } void draw(){ background(255); ellipse(x,100,50,50); } void serialEvent(Serial p){ x = myPort.read(); }

(31)

ソースコード(

Arduino

通信同期機能実装(ウインドウをクリックで開始)

const int ACCX = A2;

int value = 0; void setup() { Serial.begin(9600); } void loop() { value = analogRead(ACCX); value = map(value, 0, 1023, 0, 255 ); if(Serial.available()>0) { Serial.read(); Serial.write(value); } delay(100); }

(32)

ソースコード(

Processing

通信同期機能実装(ウインドウをクリックで開始)

import processing.serial.*; Serial myPort; int x = 0; void setup(){ size(256,256); myPort=

new Serial(this, “COM11”,9600); } void draw(){ background(255); ellipse(x,100,50,50); } void serialEvent(Serial p){ if(myPort.available()>0) { x = myPort.read(); myPort.write(255); } } void mousePressed(){ myPort.write(mouseX); }

(33)

関数リファレンス(1)

• map(value, fromLow, fromHigh, toLow, toHigh)

–数値をある範囲から別の範囲に変換 • [パラメータ] – value: 変換したい数値 – fromLow:現在の範囲の下限 – fromHigh:現在の範囲の上限 – toLow: 変換後の範囲の下限 – toHigh: 変換後の範囲の上限 • [戻り値] – 変換後の数値

(34)

関数リファレンス (2)

• Serial.write(val)

–シリアルポートにバイナリデータを出力 –1バイトずつ,あるいは複数バイトの送信が可能 • 【構文】 – Serial.write(val) – Serial.write(str) – Serial.write(buf, len) • [パラメータ] – val: 送信する値(1バイト) – str: 文字列(複数バイト) – buf: 配列として定義された複数のバイト – len: 配列の長さ • [戻り値] – 送信したバイト数

(35)

関数リファレンス(3)

• Serial.available()

–シリアルポートに何バイトのデータが到着しているかを返す バッファには128バイトまで保持可能 • [パラメータ] – なし • [戻り値] – シリアルバッファにあるデータのバイト数を返す

(36)

課題

演習6の回路にタクトスイッチを追加し、ボタンを押すと

ゼロ合わせするプログラムを作成する

–ボタンはチャタリング処理すること –プルアップ抵抗はarduinoの機能を使用してもかまわない

同時に加速度センサのX,Y,Z軸の値を用いてPC上に図形

を描画せよ

–X,Yの値で位置を指定,Zの値で図形のサイズを変更

参照

関連したドキュメント

免疫チェックポイント阻害薬に分類される抗PD-L1抗 体であるアテゾリズマブとVEGF阻害薬のベバシズマ

直流抵抗 温度上昇 PART

(図 6)SWR 計による測定 1:1 バランでは、負荷は 50Ω抵抗です。負荷抵抗の電力容量が無い

タカチ総合カタログ2018ー19年度版 465 表 2018年 11月 8日 木曜日 8:41:53 AM Cyan タカチ総合カタログ2018ー19年度版 465 表 2018年

However, because the dependent element in (4) is not a gap but a visible pronoun, readers could not realize the existence of relative clause until they encounter the head noun

( 内部抵抗0Ωの 理想信号源

この P 1 P 2 を抵抗板の動きにより測定し、その動きをマグネットを通して指針の動きにし、流

(ECシステム提供会社等) 同上 有り PSPが、加盟店のカード情報を 含む決済情報を処理し、アクワ