講習会 Arduino

Similar documents
スライド 1

講習会 Arduino

スライド 1

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

Microsoft Word - SU1203教本(Sens)原稿.docx

Microsoft Word - SU1204教本(Driver)原稿.docx

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

DCモータの制御

Microsoft Word - SU1202教本(Disp)原稿.docx

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

図 1 で示すように割り込み作業に対応していない間は CPU が他の作業を行えま す 割り込みが発生した時に作業中の仕事を一時停止し 割り込みハンドラに 入ってタスクを実行します 割り込み作業が終わった後停止した作業を再開し ます 割り込み対応コードが停止したプロセスに影響ありますので なるべく 最

Taro-テキスト.jtd

Arduinoで組込み制御

1 1 Arduino とは Arduino アルドゥイーノ は ワンボードマイコンの一種で オープンソースハードウェアであ り 組み立て済みの基板を購入することもできるほか 誰でも自分の手で Arduino を組み立てる ことができます USBコネクタでPCと接続して利用します デジタルポートとア

前回の内容 マイクロコンピュータにおけるプログラミング PC上で作成 コンパイル マイコンに転送 実行 プログラムを用いて外部の装置を動作させる LED turnonled turnoffled LCD printf プログラムを用いて外部の装置の状態を読み取る プッシュスイッチ getpushsw

GR-SAKURA-SAのサンプルソフト説明

みんなの Arduino 入門 課題と演習 本資料は みんなの Arduino 入門 を使っている方々への課題 ( 演習含む ) を参考としてま とめたものです 本書の理解度の確認と今後のステップアップのためにご利用下さい ( 最終更新日 :2014 年 4 月 25 日 ) 株式会社タブレイン T

講習会 Arduino

目次 1 I2Cとは 13 結線写真 2 センサの多くがI2Cに対応 14 WHO_AM_I 3 マイコンでのI2C通信例 15 I2C読込みプログラム 4 とは 16 I2C読込みスクリプト概要① 5 タイミングパラメータ 17 I2C読込みスクリプト概要② 6 書込み 18 センサ読込みプログラ

Arduino UNO IS Report No. Report Medical Information System Laboratory

PowerPoint プレゼンテーション

訂正 _ 第 1 回 1 Arduino Arduino を用意する 入力 アナログ Analog 入出力 任意の電圧を扱える 電源系 外部入力 7 12V デジタル digital 入出力 リセットボタン Low High いわゆる 01 が入出力される 通常は Low 0V GND High 5

スライド 1

Mathematica で Arduino を利用する (2012 年度 ) はじめに情報工学部では全学科で Arduino を導入して フィジカルコンピューティングに関連した教育を行ってきている 電子情報工学科ではいくつかの実験演習を通じて Arduino を取り入れてきている ここでは 電子情報

Arduino をはじめよう オープンソースハードウェア入門 ~ Arduino( アルドゥイーノ ) 始めてみませんか?

Developer Camp

Arduinoで計る,測る,量る

Taro-テキスト.jtd

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

スライド 1

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

マルチタスクプログラミング.pptx

C#の基本

HW-Slides-04.ppt

Microsoft PowerPoint pptx

Processingをはじめよう

Microsoft Word - TC4017BP_BF_J_P10_060601_.doc

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

S1C17 Family Application Note S1C17 シリーズ PORT 多重割り込みアプリケーションノート Rev.1.0

TOPPERS活用アイデア・アプリケーション開発

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

周波数特性解析

Arduino の勉強会 平成 23 年 1 月 5 日於 : 鳥取大学

Microsoft Word - TC4011BP_BF_BFT_J_P8_060601_.doc

Microsoft Word - CygwinでPython.docx

Studuino ライブラリ環境設定Windows編

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

スライド 1

Studuinoライブラリ環境設定Mac編

Specifications LED ディスプレイビデオコントローラ VX4S

論文番号 分 2-2 平成 24 年度全国情報技術教育研究会第 41 回全国大会 ( 新潟大会 ) Xbee を活用した無線通信の研究 期日平成 24 年 8 月 9 日 ( 木 )~10 日 ( 金 ) 場所長岡市シティホールプラザ アオーレ長岡 香川県立三豊工業高等学校 電子科 本行

モータ HILS の概要 1 はじめに モータ HILS の需要 自動車の電子化及び 電気自動車やハイブリッド車の実用化に伴い モータの使用数が増大しています 従来行われていた駆動用モータ単体のシミュレーション レシプロエンジンとモータの駆動力分配制御シミュレーションの利用に加え パワーウインドやサ

MODLINK-2 Arduino&IoT 組立式開発ボード Manual モジュリンク 2 取扱説明書

実験題吊  「加速度センサーを作ってみよう《

C#の基本2 ~プログラムの制御構造~

Studuinoプログラミング環境

電気的特性 (Ta=25 C) 項目 記号 条件 Min. Typ. Max. 単位 読み出し周波数 * 3 fop khz ラインレート * Hz 変換ゲイン Gc ゲイン =2-5 - e-/adu トリガ出力電圧 Highレベル Vdd V -

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

HDLトレーナーサンプルプログラム説明書

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

NCB564個別00版

Arduino Processing and ) Fig1. Arduino Homepage : h;p://

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

CMOS リニアイメージセンサ用駆動回路 C CMOS リニアイメージセンサ S 等用 C は当社製 CMOSリニアイメージセンサ S 等用に開発された駆動回路です USB 2.0インターフェースを用いて C と PCを接続

ファイル入出力

光変調型フォト IC S , S6809, S6846, S6986, S7136/-10, S10053 外乱光下でも誤動作の少ない検出が可能なフォト IC 外乱光下の光同期検出用に開発されたフォトICです フォトICチップ内にフォトダイオード プリアンプ コンパレータ 発振回路 LE

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

Transcription:

講習会 Arduino 12 回目最後 センサー入力

目的 3 回目 ディジタル入力と出力 と 4 回目 アナログ入力と出力 を応用してセンサーの値を入力 Arduino の処理として利用する 入手したセンサー値から適切な処理を行う

センサー 自然現象や人工物の機械的 電磁気的 熱的 音響的 化学的性質あるいはそれらで示される空間情報 時間情報を 何らかの科学的原理を応用して 人間や機械が扱い易い別媒体の信号に置き換える装置のことをいい センサを利用した計測 判別を行うことを センシング という 検知器とも呼ばれる 世の中には数多くのセンサーがあり 人間に目や耳 鼻もセンサーとして考えることができる

原理による分類 機械量 加速度 加速度センサ 力 ストレインゲージ ( ひずみゲージ ) ロードセル ( 荷重による変位量がわかっている物体とひずみゲージを組み合わせた荷重センサ ) 半導体圧力センサ 振動 音波 - マイクロフォン 超音波

熱 温度 接触式 サーミスタ 抵抗測温体 熱電対 非接触式 放射温度計

光 放射線 光 光センサ 光電素子 フォトダイオード 赤外線 放射線

電気 電場 電流 電圧 電力

磁気 磁気センサ

化学 におい イオン濃度 ガス濃度

時空間による分類 時間 時計

位置 光位置センサ (PSD) リミットスイッチ

距離 超音波距離計 静電容量変位計 光学式測距 電磁波式測距

変位 差動トランス リニアエンコーダ

速度 レーザードップラー振動速度計 レーザドップラー流速計

回転角 ポテンショメータ 回転角センサ

回転数 タコジェネレータ ロータリエンコーダ

角速度 ジャイロセンサ

一次元画像 リニアイメージセンサ

二次元画像 CCD イメージセンサ CMOS イメージセンサ

用途による分類 液 漏液センサ ( リークセンサ ) ( 読み : ろうえき ) 液検知センサ ( レベルセンサ ) 硬度 湿度 流量 傾斜 地震センサ

このように数多くのセンサーによって世の中の機械は動いている センサーがないと機械を制御することはできない 例えばボリュームとかでもアナログ値を読んで処理をしているという意味ではセンサーである スイッチでも押した押さないを判別して処理をするためセンサーである

マイコンカーにあるセンサー例 ポテンショメータ 抵抗値から角度を測定 ロータリーエンコーダ 回転量から速度や距離を測定 反射型デジタルセンサ 白線の有無を測定

使い方が簡単なセンサー スイッチ デジタル式の測距センサ これらは digitalread で入力処理が可能 ポテンショメータ ( ボリューム ) analogread で入力処理が可能

デジタル入力での簡単な方法 void setup() { pinmode(2,input); pinmode(12,output); } void loop() { if(digitalread(2) == HIGH){ digitalwrite(12,high); } else{ digitalwrite(12,low); } }

スイッチを押すと LED が点灯する スイッチが入力装置であり LED が出力装置 スイッチが押されたのかを判断しているためセンサーの役割を持つことが分かる

アナログ入力での簡単な方法 void setup() { pinmode(13,output); } void loop() { if(analogread(a0) > 500){ digitalwrite(13,high); } else{ digitalwrite(13,low); } }

ボリュームを回して半分を超えたら LED が点灯 ボリュームが入力装置であり LED が出力装置 ボリュームでの電圧降下から残った電位を判断しているためセンサーの役割を持つことが分かる

動画 https://www.youtube.com/watch?v=8hhzwzojao0

ポテンショメータの例 2 int check; int check2; int test; void setup(){ Serial.begin(9600); check = analogread(a0); } void loop(){ check2 = analogread(a0); test = check2 - check; Serial.println(test); }

始めの抵抗値を読んで そこを基準とする それ以降ボリュームを左右に傾けると数値が増減してどのくらいズレているのか分かる ボリュームが入力装置である 基準を 0 として正負の値が出力される

動画 https://www.youtube.com/watch?v=qnwikkztwog

Arduino ではデジタル アナログの入力処理が非常に簡単であるためすぐに使えるようになると思われる しかしこのままでは順番に読んでいるので優先順位とかがない 読み飛ばしが起こる可能性があるため センサーの入力に外部からの割り込み処理を入れることができる 一応紹介するが確信を得ていない

関数紹介 ( 外部割り込み ) attachinterrupt() detachinterrupt()

attachinterrupt() attachinterrupt の 1 番目の引数は割り込み番号である 通常 デジタルピンを割り込み番号に変換するには digitalpintointerrupt(pin) を利用する必要がある 例えば 3 番ピンを利用するときには digitalpintointerrupt(3) を attachinterrupt() の 1 番目の引数に指定する

ボード 割り込みに利用可能なデジタルピン Uno Nano Mini 他の328ベースのボード 2 3 Mega Mega2560 MegaADK 2 3 18 19 20 21 Micro Leonardo 他の32u4ベースのボード 0 1 2 3 7 Zero 4 番ピン以外のすべてのデジタルピン Due すべてのデジタルピン

注意 指定した関数の中では delay() は動作せず また millis() によって返却される値も増加しない その関数の実行中に受信したシリアルデータはなくなる可能性がある 指定した関数の中で変更する変数は volatile 変数として宣言するべきである 下記の ISR を参照のこと

割り込みの利用 マイクロコントローラのプログラム中で自動的に何かを行おうとしたときに 割り込みは有用であり タイミング問題を容易に解決する 割り込みを使うよい例には ロータリーエンコーダの読み込みや ユーザ入力の監視などがある プログラムが ロータリーエンコーダからの信号を欠落することなく常に補足することを保証したいと思ったら 発生した信号を捕捉するためにプログラムは常にエンコーダがつながっているセンサーを監視しなければならないので ( 割り込みを使わない場合は ) 何をするにもとても巧妙なプログラムを書く必要がある クリックを捕捉するための音センサや硬貨が落ちるのを捕捉する赤外線センサといった 他のセンサーもインタフェースに関する同様の問題をもっている これらの全ての状況において 割り込みを利用することで 呼び鈴が鳴ったことの検出を失敗することなく 他の作業をマイクロコントローラに自由に実行させることができる

ISR(Interrupt Service Routine: 割り込みサービスルーチン ) について ISR は 他の多くの関数が持っていない特徴を持つ特別な関数である ISR は 引数をとることができず 戻り値もない 一般に ISR はできる限り短くかつ速くなければならない スケッチ内に複数の ISR があっても 同時には一つだけが実行される 他の ISR は現在の ISR の終了後 優先度に応じた順序で実行される millis() の計測は割り込みに依存しているので 他の ISR の実行中には増加しない delay() の動作には割り込みが必要なので ISR の中から呼ばれても動作しない micros() は 最初は動作するが 1~2 秒後には乱れてしまう delaymicroseconds() は ( 割り込みに依存する ) カウンタを利用しないので 通常通り動作する 一般的に ISR とメインプログラムとのデータのやり取りにはグローバル変数を利用する ISR とメインプログラムで共有する変数が確実に更新されるためには その変数を volatile として宣言する必要がある

attachinterrupt(interrupt, function, mode); interrupt 割り込みの番号 digitalpintointerrupt() を利用する function 割り込みが発生したときに呼び出す関数へのポインタ この関数は引数も返り値も持たない 割り込みサービスルーチンと呼ばれることもある mode いつ割り込みサービスルーチンを呼び出すかを指定する 以下に示す4つの定数が定義されている LOW ピンがLOWのときに割り込みサービスルーチンを呼び出す CHANGE ピンの値が変わった時に割り込みサービスルーチンを呼び出す RISING ピンがLOWからHIGHになった時に割り込みサービスルーチンを呼び出す FALLING ピンがHIGHからLOWになった時に割り込みサービスルーチンを呼び出す

例 int pin = 13; volatile int state = LOW; void setup() { pinmode(pin, OUTPUT); attachinterrupt(digitalpintointerrupt(pin), blink, CHANGE); } void loop() { digitalwrite(pin, state); } void blink() { state =!state; }

const byte ledpin = 13; const byte interruptpin = 2; volatile byte state = LOW; void setup() { pinmode(ledpin, OUTPUT); pinmode(interruptpin, INPUT_PULLUP); attachinterrupt(digitalpintointerrupt(interruptpin), blink, CHANGE); } void loop() { digitalwrite(ledpin, state); } void blink() { state =!state; }

割り込み番号 通常 割り込み番号を直接スケッチに記述するのではなく digitalpintointerrupt(pin) を利用すべきである ピン番号と割り込み番号のマッピングはボードにより異なる 割り込み番号を直接書くのは簡単に見えるが 他のボードで利用するときの互換性に問題がある しかし 古いスケッチではしばしば割り込み番号を直接記述している 0( デジタルピン 2 番 ) と 1( デジタルピン 3 番 ) がよく使われている 次の表に各ボードでのピンと割り込み番号の関係を示す

ボード int.0 int.1 int.2 int.3 int.4 int.5 Uno, Ethernet 2 3 Mega2560 2 3 21 20 19 18 32u4ベース (Leonard Microなど ) 3 2 0 1 7 Due Zero ( 下記参照 ) Arduino Due は強力な割り込み能力を持っている すべてのピンに割り込みサービスルーチンを割り当てることができる attaachinterrupt() でピン番号を直接指定可能である Arduino Zero では 4 番ピン以外のピンに割り込みサービスルーチンを割り当てることができる attaachinterrupt() でピン番号を直接指定可能である

detachinterrupt() 指定した割り込みを抑制する detachinterrupt(interruptnum); interrupt 割り込みを抑制する割り込みの番号 digitalpintointerrupt(pin) を利用する

外部割込みの例 次の例はスタートゲートタイマーを作った際に書いたプログラムの外部割込み部分である 合っているかは分からない

volatile int sens1; volatile int sens2; void Sensor1() {//1 if (digitalread(sensor1) == HIGH) { sens1 = 1; } if (digitalread(sensor1) == LOW) { sens1 = 0; } } void Sensor2() {//2 if (digitalread(sensor3) == HIGH) { sens2 = 1; } if (digitalread(sensor3) == LOW) { sens2 = 0; } }

void setup(){ pinmode(sensor1, INPUT_PULLUP); pinmode(sensor3, INPUT_PULLUP); attachinterrupt(0, Sensor1, CHANGE);//D2 attachinterrupt(1, Sensor2, CHANGE);//D3 }

関数紹介 ( 割り込み ) interrupts() nointerrupts()

interrupts() (nointerrupts() によって禁止された後 ) 割り込みを許可する 割り込みによって バックグラウンドである種の重要なタスクが起動する 割り込みはデフォルトでは許可されている 割り込みが禁止されているときには動作しない関数がある また 外部からの受信したデータは無視される 割り込みは プログラムが実行されるタイミングに少し悪影響を与える 特に プログラムのクリティカルセクションでは割り込みを禁止することがある

void interrupts(void)

例 void setup() {} void loop(){ nointerrupts(); // critical, time-sensitive code here interrupts(); // other code here }

nointerrupts() 割り込みを禁止する 禁止した割り込みは interrupts() で再度許可することができる 割り込みによって バックグラウンドである種の重要なタスクが起動する 割り込みはデフォルトでは許可されている 割り込みが禁止されているときには動作しない関数がある また 外部からの受信したデータは無視される 割り込みは プログラムが実行されるタイミングに少し悪影響を与える 特に プログラムのクリティカルセクションでは割り込みを禁止することがある

void nointerrupts(void)

例 void setup() {} void loop(){ nointerrupts(); // クリティカルで リアルタイム性の高いコード interrupts(); // ほかのコード }

クリティカルセクション クリティカルセクション (Critical section) とは 計算機上において 単一のリソースに対して 複数の処理が同時期に実行されると 破綻をきたす部分を指す クリティカルセクションにおいては 排他制御を行うなどしてアトミック性を確保する必要がある リソースの同一性が保証されなくなる可能性がある場合は クリティカルセクションでは常に排他制御を行う必要がある クリティカルセクションの排他制御ではデッドロックに注意する必要がある

今回は触れていないが細かい例が以下のサイトに書いている https://www.ei.tohoku.ac.jp/xkozima/lab/electromiyagino3.html

最後に 今回のセンサー入力に関する内容を持って Arduino 講習会は終わりとなる 今まで話した内容は自分の経験談を含めているので実際に利用されているものとは異なるものが多いと思われる 複数のサイトを参考に作っている内容もあるので ネットや本を参考に新しく調べてみると面白いと思われる

試験について 3 月 23 日金曜日の午後から今までの確認試験を行う 範囲は Arduino の 1 回目から 12 回目まで全般を出す予定だが 出さない部分もあるかもしれない 偏りがある 筆記 ( 穴埋め )50 点 説明 2 問 20 点 実技 (TinkerCAD によるシミュレーション )3 問 30 点の予定 100 点満点 60 点以上が合格 筆記は口頭で文章を読むから何の説明か もしくは開いている部分を答える ( ホワイトオードに書いてその場で採点する ) 説明はお題を PP で表示するから 1 人 10 分くらいで説明 ( ホワイトボードを使ってよい ) 実技はお題を PP で表示するから TinkerCAD を使って回路とプログラムを組んでシミュレーションする 実際に動作すれば点が入る

課題 アナログ入力とデジタル入力で LED の点灯をしてみる アナログ入力で得た数値をシリアルモニタで表示してみる 割り込み処理をしてみる ( 応用 )