講習会 Arduino

Similar documents
スライド 1

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

PowerPoint Presentation

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

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

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

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


Arduino UNO IS Report No. Report Medical Information System Laboratory

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

Taro-テキスト.jtd

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

Arduinoで組込み制御

スライド 1

PowerPoint プレゼンテーション

<4D F736F F F696E74202D F4B87555F A838B B F5F91E63189F12E >

講習会 Arduino

Microsoft Word - SU1201MotorDriverSheildManual.doc

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

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

Taro-テキスト.jtd

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

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

プログラミング実習I

次に プログラム中の定数について解説する PINNO は圧電スピーカーと接続されたピンの番号に対応している FL,FR,BL,BR はそれぞれ 前面左, 前面右, 背面左, 背面右に設置されたスイッチに接続されているピンの番号に対応している スイッチ回路のプルアップ抵抗は Arduino 内部のもの

DCモータの制御

UIOUSBCOM.DLLコマンドリファレンス

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

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

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

Microsoft Word - CygwinでPython.docx

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

PowerPoint Presentation

INDEX 1 必要なものを準備しよう 各部の名称を確認しよう 電源を入れよう スイッチで LED を光らせよう BiZduino で Wi-Fi 通信しよう RTC を使ってみよう 参考資料 7 困ったら... 21

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

アクション講座 第1回目

                     

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

PowerPoint プレゼンテーション

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

Processingをはじめよう

ブンブン振り子

ESP8266-CORE-R Copyrig

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

講習会 Arduino

Si 知識情報処理

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

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

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

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

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

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

<4D F736F F F696E74202D F4B87555F A838B B F5F91E63389F12E >

方法 4 の手順 パソコンの条件 を確認するための画面を表示する Windows8より前のパソコンでの確認方法 () スタートボタン をクリックする () ( マイ ) コンピューター と書いてある部分を右クリックする (3) プロパティ をクリックする (4) システムの画面が表示される Wind

プログラミング入門1

スライド 1

Microsoft Word - no103.docx

memo

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

Microsoft PowerPoint P演習 第5回 当たり判定(2)【課題】.pptx

PowerPoint Presentation

Microsoft PowerPoint ppt

Microsoft Word - no11.docx

PowerPoint プレゼンテーション

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

SLCONFIG の操作 JF1PYE Ⅰ. PC と slconfig の通信設定 Ⅱ. Slconfig の操作 Ⅲ. 端末ソフトによる Command 機能 Ⅳ. slconfig 実行形式プログラムの作成 Ⅴ. 端末ソフト Tera Term のダウンロード インストー

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

プログラマブル LED 制御モジュール アプリ操作説明書 プログラマブル LED 制御モジュール設定アプリ操作説明書 適用モジュール 改訂番号 エレラボドットコム 1

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

Microsoft PowerPoint - handout07.ppt [互換モード]

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

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

MS5145 USB シリアル エミュレーション モードの設定

memo

8051 개발보드 메뉴얼

三菱電機マイコン機器ソフトウエア株式会社

ゲームプログラミング講習 第0章 導入

Microsoft Word - no202.docx

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

Untitled

PowerPoint プレゼンテーション

プレサリオ ステップアップ

PICA Tower Arduinoプログラミングマニュアル.docx

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

0. 目次 Ahkun EX Antimalware ソフト使用マニュアルデスクトップ上での操作方法 1. インストールについて P.3 2. 操作画面の起動方法 P.6 3. アップデートの手動実行 P.7 4. リアルタイム監視の操作 P.9 5. プログラム情報の表示方法 P ソフ

(C) 2011 amenbo the 3rd New MQL4(Build 600 以降 ); 基礎 ( その 2)OnTimer() を使う アメンボです New_MQL4 の特徴とはなんでしょう? 極論を言うと MQL5 から受け継いだ OOP つまり On***() 関

NI P1200 Release Notes Cover

電子13-06 エネメータ専用ソフト SAVER CAST for EneMeter Ver3.00設定方法.ppt

内容 1. APX-3302 の特長 APX-3312 から APX-3302 へ変更するためには 差分詳細 ハードウェア ハードウェア性能および仕様 ソフトウェア仕様および制限 Ini ファイルの設

Microsoft Word - 実験4_FPGA実験2_2015

gengo1-2

す Alt メニューのファイル スケッチから開かせます 動作確認もしておきます 最初に接続した際に音が鳴らないよう 空のスケッチを最後に入れておきます 実施手順の詳細 導入部分 概要を説明し 以下の用語説明をします Arduino とは今日使う小さなコンピュータである スケッチ とは Arduino

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

1 1 TA, ,9 1. ( 2. TM TM GUI TM 1. P7-13 TM Notepad, Meadow, ( P109 ). 2. (shisaku01/sys test)

赤外線レーザー 360 距離センサ XV-11 LIDAR Sensor 取り扱い説明書 もくじ お使いになるまえに 各部のなまえと扱い方 2 使い方 (Processing GUI で使う ) 必要なソフトのインストール 3 接続方法 3 GUI の操作方法 4 使い方 ( ロボットに組み込む )

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

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

slide5.pptx

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

動作環境と操作の概要 A スマホのテザリングを使う方法と B WiFi ルーターを使う方法があります A スマホのテザリングを使う場合 図のように 1 台のスマホのテザリングを有効にして パソコンや他のスマホ タブレットを テザリング機器に WiFi 接続し ます 1スマホのテザリングを有効にします

Transcription:

講習会 Arduino 6 回目 タイマー ( 時間の関数 )

目的 時間に関する関数を覚え プログラムの制御に使う タイマー割込みを知る

制御をするときにセンサー等の外部入力以外にも時間で制御したい時があるかもしれない 例えば一定の間隔をあけてから制御したい場合や制御してからある時間以内ではこの制御 過ぎてからはこの制御をしたいなど 時間に関する関数を紹介する 時間による割り込みを入れることにより正確な計測を行うことができる

時間に関する関数 ( 電源を入れてから適用 ) millis() micros()

millis() Arduino ボードが現在のプログラムを起動してから経過した時間をミリ秒単位で返却する この値は 約 50 日後にオーバーフロー ( ゼロに戻る ) する グローバル変数で unsigned long millis() と書いておくとよい ( 書かなくても良い ) 変数を宣言する際も unsigned long (time) とする (time) は時間として使いたい変数名 プログラムが開始してからのミリ秒が返される

注意 millis() の返却値は unsigned long である 例えば int などの他のデータ型と計算しようとするとエラーになるかもしれない 符号付 long も unsigned long の半分の数値を格納できるだけなので エラーになるかもしれない unsigned long 以外で宣言しないこと

使用例 unsigned long time; void setup(){ Serial.begin(9600); } void loop(){ Serial.print("Time: "); time = millis(); // プログラムを開始してからの時間を表示する Serial.println(time); // 大量のデータを送らないよう 1 秒待つ delay(1000); }

micros() Arduino ボードが現在のプログラムを起動してから経過した時間をマイクロ秒単位で返却する この値は 約 70 分後にオーバーフロー ( ゼロに戻る ) する 16MHz の Arduino ボード ( 例えば Duemilanove や Nano) では この関数の精度は 4 マイクロ秒である すなわち 返却値はいつも 4 の倍数である ) 8MHz の Arduino ボード ( 例えば LilyPad) では この関数の精度は 8 マイクロ秒である 注意 :1 ミリ秒は 1000 マイクロ秒で 1 秒は 1000000 マイクロ秒である unsigned long micros() で宣言される ( 自分で宣言する必要はない ) プログラムが開始してからのマイクロ秒が返される

unsigned long time; void setup(){ Serial.begin(9600); } void loop(){ Serial.print("Time: "); time = micros(); // プログラムを開始してからの時間を表示する Serial.println(time); // 大量のデータを送らないよう 1 秒待つ delay(1000); }

時間に関する関数 ( 流れを停止させるもの ) delay() delaymicroseconds()

delay() パラメータで指定した時間 ( ミリ秒単位 ) だけプログラムを一時停止する 1 秒は 1000 ミリ秒である delay(ms); ms 一時停止する時間 ( ミリ秒単位 )

使用例 int ledpin = 13; // デジタルピンの 13 番に接続されている LED void setup() { pinmode(ledpin, OUTPUT); // デジタルピンを出力に設定する } void loop() { digitalwrite(ledpin, HIGH); // LED を点ける delay(1000); // 1 秒待つ (1000ms=1s) digitalwrite(ledpin, LOW); // LED を消す delay(1000); // 1 秒待つ }

注意 delay() 関数を使って LED を点滅させることは簡単だし 多くのスケッチではスイッチのチャタリングを防止するために少しの遅延を利用しているが スケッチで delay() を利用することには重大な欠点がある delay() 関数を使っている間は センサーから値を読み取ったり 計算をしたり ピンの制御を行うことができない その結果 ほとんどの動作を止めてしまう タイミングを制御する別の方法を知りたいときには millis() 関数や参考のスケッチを参考にしてほしい 精通したプログラマは スケッチが非常に単純であるとき以外は 10 ミリ秒以上の時刻イベントを扱うときには delay() 関数を利用しない delay() 関数は割り込みを禁止しないので delay() の実行中も Atmega チップの制御を行うための処理は実行される RX ピンを使ったシリアル通信は記録され PWM(analogWrite()) 波とピンの状態は保持され 割り込みは意図したとおりに動作する

delaymicroseconds() パラメータで指定した時間 ( マイクロ秒単位 ) だけプログラムを一時停止する 1 秒は 1,000,000 マイクロ秒である 現状, 正確に発生できる遅延の最大値は 16383 である これは 将来の Arduino リリースで変更される可能性がある 数千マイクロ秒よりも長い遅延が必要なときは delay() を利用すること delaymicroseconds(us); us 一時停止する時間 ( マイクロ秒単位 )

使用例 int outpin = 8; // デジタルピンの8 番 void setup(){ pinmode(outpin, OUTPUT); // 8 番ピンを出力 (OUTPUT) に設定 } void loop(){ digitalwrite(outpin, HIGH); // ピンをONにする delaymicroseconds(50); // 50マイクロ秒待つ digitalwrite(outpin, LOW); // ピンをOFFにする delaymicroseconds(50); // 50マイクロ秒待つ } 8 番ピンを出力に設定する 約 100 ミリ秒ごとにパルスを発生させる 概算なのは他の命令が実行されるためである

注意 この関数は 3 マイクロ秒以上の範囲でとても正確に動作する 非常に小さい遅延時間に対しては delaymicroseconds() の精度は保障できない Arduino 0018 以降から delaymicroseconds() は割り込み禁止にしない

millis(),micros() を使うときの注意 電源を ON にした時から処理が始まるということは電源を OFF にするまでずっと数値が増加するということになる これらの関数に数値を代入することができないので手動で にはできない millis() = 0; 自分で変数を作って millis() を代入すれば変数内でいじることは可能になるため 使い方次第ではタイマーを作ることができる

delay 系の関数を使うときの注意 delay を使っている間はほかの処理ができない しかし 動作を止めるわけではないので入力はできないけど出力は実行したままである 全ての動作を止めてから delay を行いたいときは delay を書く前にすべての動作を止める処理を書くこと

使い分け millis() ロボットなど終始物理的に動き続けて 何かしらの処理を続けていないとダメなもの delay() イルミネーションなど物理的に動いてはいないもの LED を光らす PWM を出力

時間みたく使えるもの ( 例 )cnt++

cnt++ 変数と演算で紹介したこの演算は上から順番に読むプログラムが この式を書いた行を通過したときに cnt を 1 増加させる つまり 通過するたびに増加するのだから時間としても使えることになる しかし プログラムの行が多くなるたびに増加までの間隔は長くなる あくまで参考として使うのでプログラムの行が追加されたら時間も変えないといけない 例 if(cnt > 100) if(cnt > 110) など cnt は変数であるため 名前は自由

例 1 間隔が短い {cnt++; 1 2 3 4 5 }

例 2 間隔が長い {cnt++; 1 2 3 4 5 6 7 8 9 10 } 例 1 に比べて 2 倍の時間が掛かる

タイマーを作る タイマーで気を付ける部分は時間関数を使うのはミリ秒だけで良くて秒や分 時はただの変数で良いということである

時間を増加 time1 = millis(); time3 = time1 time2; if(time3 > 999){ time2 = time1; s = s+1; }

時間をリセット time1 = millis(); time3 = time2 time1; if(s1 == HIGH){ time2 = time1; //time1とtime2は同じになる }

タイマー割込み MsTimer2 のライブラリを用いてタイマー割込みを行う MsTimer2 はライブラリであり Arduino のソフトには同梱されていない 自分でライブラリをインストールする必要がある

MsTimer2 とは? MsTimer2 は Timer2 を人間とインターフェースするための 小さくて使いやすいライブラリ Timer2 で 1 ミリ秒の分解能を ハードコード するため MsTimer2 と呼ばれている

Arduino のタイマー Arduino はハードウェアの機能としてタイマーを持っている これは Arduino で使用している AVR というマイコンの機能で 各種ライブラリ上から使われている Arduino で使用している主要な AVR マイコンでは Timer0 Timer1 Timer2 の 3 つのタイマーがある これらのハードウェアのタイマーを利用し 一定時間ごとにある関数を 割り込み (interrupt) で呼び出すことを Arduino のタイマー系ライブラリは実現している

Timer0 8bit のタイマーで Arduino の時間を管理する用途で利用されている delay(), millis(), micros() などである UNO では 5,6 番ピンの PWM で利用されている Timer1 16bit のタイマーで UNO では Servo ライブラリと 9,10 番ピンの PWM で利用されている Timer2 8bit のタイマーで UNO では tone() と 3,11 番ピンの PWM で利用されている

Timer の説明にある通り AVR のタイマー機能は Arduino の各種ライブラリによって利用されていて タイマーライブラリを使う際は 利用されていないタイマーを使うなど競合を避けないければならない PWM もまた タイマーを利用しているため 同時に使用することは出来ない

ライブラリのインストール方法 MsTimer2.zip をダウンロードし ArduinoIDE メニューから スケッチ ライブラリをインクルード.ZIP 形式のライブラリをインストール をクリックし ダウンロードしたファイルを選択しインストールする GitHub からライブラリをダウンロードできる

MsTimer2::set(unsigned long ms, void ()) unsigned long ms 時間の間隔 Void() 呼び出す関数名 オーバーフローする時間を ms で指定する オーバーフローするたびに 関数が呼ばれる f は引数なしの void 型として宣言すること

MsTimer2::start() 割り込みを有効にする

MsTimer2::stop() 割り込みを無効にする

void loop() { // loop は空 } 1 秒周期でピン 13 の LED をオンオフする #include <MsTimer2.h> void flash() { static boolean output = HIGH; digitalwrite(13, output); output =!output; } void setup() { pinmode(13, OUTPUT); MsTimer2::set(500, flash); // 500ms ごとにオンオフ MsTimer2::start(); }

Timer1 や 3 も割り込みとしては存在するが 今回は 2 だけ知っていればよい 以下のサイトに詳しく載っている https://misoengine.hatenablog.com/entry/2015/07/20/221014

終わりに 時間の関数を使えるようになるとセンサが反応して処理した後すぐにセンサが反応しても処理をしなくなるなど 休憩時間を設けることができるのでミスが少なくなる チャタリング防止にもつながるので状況に応じて millis() と delay() を使い分けよう 次回は数値と関数 ( 数学的関数 ) を取り扱う

課題 タイマーを作ってみよう 言い忘れていたことがあれば指示する

TinkerCAD を用いてタイマーを作ってみよう 秒だけではなく分も表示してみよう タクトスイッチを用いてリセットもやってみよう

シリアルでパソコンに表示させる setup に Serial.begin(9600); loop には Serial.print( 分を表す文字 ); Serial.print( ); Serial.print( 分を表す変数 ); Serial.print( ); Serial.print( 秒を表す文字 ); Serial.print( ); Serial.print( 秒を表す変数 ); Serial.print( ); Serial.print( ミリ秒を表す文字 ); Serial.print( ); Serial.println( ミリ秒を表す変数 );