Arduino
Arduino!
Arduino!
2015-05-25
Katsuhiro Morishita(森下功啓)
1
β版
Index
• 自己紹介
• What
• How
• Warning
• Key Word
• IDE
• Circuit
– 工事中
• Reference
• Appendix
2
自己紹介
• 2010年 熊本大学情報電子工学専攻修了(修士)
• 2013年 熊本大学情報電子工学専攻修了(博士)
– 1年間、民間経験, 5ヶ月間、熊大で研究補助
• 2014年~ 熊本高専助教
• 専門:GPS/GNSS、いろいろ計測
• 得意技:電子工作, プログラミング
• 好きなこと:登山、釣り、作ること
3
これまでの代表作品(予定含む)
• 自動走行ロボ
• 全身反応測定器
• 温度場計測デバイス
• 野生動物追跡システム
• 無線制御式LED制御デバイス
• 遠隔雨水タンク監視・排水システム
• 車椅子利用者負荷量計測デバイス
4
5
What
Arduinoの特徴
6
http://www.teu.ac.jp/press/2012.html?id=128
• マイコンボード(基板)の一種
• イタリア生まれ
• 芸術大学の学生用に開発
• オープンソース,オープンハードウェア
• 世界中の人がソースコードを提供
• 様々な種類
– UNO, mega, DUE, TRE, etc.
• 同じ命令体系
• 様々なセンサーを簡単に接続
電子楽器
7
http://www.nicovideo.jp/watch/sm22816367?ref=search_key_video
メルトを鉄筋で自動演奏
8
http://www.nicovideo.jp/watch/sm20247257
フリスクケース温度計
9http://www.nicovideo.jp/watch/sm23222368
曲に合わせてネギ振りミク
10
http://www.nicovideo.jp/watch/sm25830554
鉄道模型の自動運転
11http://www.nicovideo.jp/watch/sm25521443
全自動ひきこもり機
12http://www.nicovideo.jp/watch/sm14365038
あかりついったー
13http://www.nicovideo.jp/watch/sm25833332
LEDイルミネーション
14http://www.nicovideo.jp/watch/sm22296707
ロボットハンド
15https://youtu.be/P9nfWO4lWd8?t=2m2s
空き缶ピアノ
16
https://www.youtube.com/watch?v=Ttm62RBdOuo
鉢植えモニタリング
17
https://www.youtube.com/watch?v=hGd4SU0xo6g
電子錠
18
https://www.youtube.com/watch?v=mHJhTMvtmPQ
19
How
必要なもの
20
Arduino IDE
(これはWindows用のもの)
MacやPC
Arduino
通信ケーブル
http://akizukidensh
i.com/catalog/g/gC
-07605/
あったら楽になるもの
21
半田ごて
半田
はんだ吸い取り線
ピンセット
こて台
スズメッキ線 ポリウレタン銅線
テスター
オシロスコープ
シリアルUSB変換
モジュール
ジャンパワイヤ
電源装置
小手先
クリーナー
あったら助かる知識
22
電圧
電流
仕事量
シリアル通信
電池の電圧・容量
電子素子の特性
電気素子の特性
熱
Arduinoの購入
• 取扱店
– スイッチサイエンス
– 秋月電子通商
– 千石電商
– Amazon
• Arduino UNOで1600~3300円です
• 品種に幅があるため、全体では1200~7000円
23
Arduino IDEの入手先
• http://arduino.cc/en/Main/Software
24
古い安定
版は無料
最新の非安定
版も無料
最新の安定
版は有料
蛇足:Arduino開発チームの分裂
• Arduino開発チームが分裂しました
• ハードウェアに対する方針の不一致だそうです
• Arduino cc
– http://www.arduino.cc/
• Arduino org
– http://arduino.org/
25
LEDが点滅するまでの流れ
LEDをArduino
に接続
プログラム
を作る
書き込んで
様子を見る
26
LEDをArduinoに接続する
27
足の短い方がGND
差し込む
ArduinoとPCをUSBで接続する
• 電源をArduinoに供給しつつ、プログラムを書
き込んだり、Arduinoとシリアル通信するため
にUSBケーブルで接続します
28
USBケーブル
プログラムを作る
29
• コード入手先
– https://raw.github
usercontent.com/
KatsuhiroMorishit
a/edu_ITD/master
/2015/Arduino_co
des/LED_test/LED
_test.ino
*ここでは、LEDの電流制限抵抗を省略するために、ONの時間をOFFの時間の1/10にしている。
*Windows版のスクリーンショットです
ここに書く
設定して
30
• ボードのシリーズを選ぶ
• ポートのマイコンor電圧を選ぶ
*Windows版のスクリーンショットです
書き込んで
31
• コンパイル&書き込み(エラーが出たら修正)
クリック
*Windows版のスクリーンショットです
様子を見る
• 動作の様子
– https://www.youtube.com/watch?v=772S6MC7qZ
U&feature=youtu.be
32
33
Warning
電源電圧は決まっています
• マイコンに直接供給される電圧を「電源電圧」という
• proシリーズやDueの電源電圧は3.3 V
• 普通は5.0 V
• USBで電源を供給できる場合は特に何も考えなくてOK
• ACアダプタを使う場合は、電源電圧+2V~12Vを利用
– ボード上の素子が電圧を落として給電(電源供給)します
34
ポートに入力できる電圧の上下限
• 許容範囲:0~電源電圧(通常は3.3または5.0 V)
• もし、範囲を超える電圧を入力した場合・・・ポートが
焼けてしまいます
– マイコンが使えなくなります
35
出力できる電流には制限があります
• 出力ポート1つあたり、2 mA程度と見てください
36
ショートさせない
• 高い電圧と低い電圧間で、電気抵抗の少な
い物体(例えば電線)でショート(短絡ともい
う)させないで下さい
• 故障する可能性が高くなります
37
参考文献
• http://ideahack.me/article/31
38
39
Key
word
Arduino IDE
• Arduinoマイコンボードをプログラミングするた
めの開発環境です
• エディタやコンパイラが一体になっています
40
マイコン
• CPU,メモリ,入出力IOなどが一体になって販売され
ているIC
• プロセッサともいう
• プログラムを変更すると動作が変わる
• Arduinoはマイコンの一種
• 用例
– 「このマイコンは動作が速いなぁ。」
41
←マイコンの例
Arduinoにおけるプロセッサの種類
42
↑基本的に、Arduinoにおいてボード名が異なるとプロセッサが異なります。
なお、Arduino IDEでのプロセッサの選択画面では、同じプロセッサであって
も動作電圧や周波数を選ぶ必要があります。
ボード
• 直訳すると「基板」ですが、マイコンが搭載さ
れた基板を指します
• 用例
– 「そのボード取って。」
– 「このマイコンボードって使いやすいね。」
43
Arduinoにおけるボードの種類
44↑Arduinoだけでも沢山の種類があります
ポート
• 制御や通信に使うコネクタです
• 物理的なものも、ソフトウェア上のものも
「ポート」です
• 特にArduinodではIOポートとか、シリアル
ポートなどと呼びます
45
IOポート
• マイコンは、1)電圧が高いか低いかを検出す
る入力(Input)ポート、2)ポートから電圧を出
すことができる出力(Output)ポートを持ちます
• Arduinoには出力ポートにも入力ポートにもな
れるIOポートと、入力しかできないポートがあり
ます
• 出力ポートにするにはプログラム中で設定が
必要です
46
シリアルポート
• シリアル通信を行うためのポート
• 用例
– 「シリアルポートが開かん!」
47
シリアル通信
• シリアルポートを使って通信します
• 一本の電線を使って通信を行う方法をシリア
ル通信方式と呼びます
• 電圧の高いor低いで0と1を送ります
• 代表的シリアル通信規格
– UART
– I2C
– SPI
– Eathernet
48
シリアルモニタ
• Arduino IDEで利用するシリアル通信機能
49
ここをクリック
すると起動
スケッチ
• 直訳すると「スケッチ・草案・素描」ですが、
Arduinoではプログラムを指します
• 簡単に書けるということを意図しています
50
アナログーデジタル(AD)変換
• 電圧を計測します
• 結果は数値としてマイコン内部に記憶されます
• プログラムからはAD変換の指示が必要です
• 得られた数値に適当な係数をかけると実際の
電圧[V]になります
• 入力できる電圧には制限があります
• 計測できる最小の電圧もあります
51
コンパイル
• プログラムを人が読みやすい文章から、機械
が理解できる様に変換します
52
*Windows版のスクリーンショットです
書き込み
• 「プログラムをコンパイルして出来たファイル
をArduinoボードへ転送する行為」を「書き込
み」といいます
53
USBケーブル
ブートローダー
• 初心者は意識しなくともOKです
• ブートローダーとはユーザの作ったプログラム
を簡単にROMへ書き込むためのソフトウェア
• ブートローダの動作
– 電源ONやリセットの直後に起動
– 起動後一定時間、特定の信号入力を待つ
– 書き込み信号を検出するとプログラムを受信
– 自身とは重ならない部分に受信したコードを書き込
む
54
組み込み系・組み込みマイコン
• 機器に埋め込まれるマイコンを含む回路を
「組み込み」システムと呼びます
• ものを組み込むから「組み込み」です
55
ファームウェア
• 組み込み用のハードウェア上で動作するソフ
トウェアをファームウェアといいます
56
ハードウェア
• ハードウェアとは、主に電子回路を指します
• ソフトウェアの対比語です
57
組み込み関数
• はじめから用意されている標準的な関数
• 同じ名前の関数を作れません
– クラス内の関数(メソッド)はOK
• 例:digitalWrite()
58
予約語
• 予め用意されているキーワードです
• 特別な意味を持つワードです
59
60
IDE
Arduino IDEの見た目
• 検索窓で”arduino”と入力して検索して起動
• Processingに似ている
61
*Windows版のスクリーンショットです
Arduino IDEでできること
• プログラムの作成
• プログラムのコンパイル
• Arduinoへのプログラム書き込み
62
Arduino IDEのボタンと機能
63
コンパイル&書き込み
シリアルモニタ起動プログラムの検証
*Windows版のスクリーンショットです
サンプルコードの選択
64
*Windows版のスクリーンショットです
ライブラリの読み込み
65
*Windows版
のスクリーン
ショットです
ボードの選択
66
*Windows版のスクリーンショットです
ポートの選択
• プログラムの書き込みや、マイコンとPCとの通
信に利用するシリアルポートを選択します
67
*Windows版のスクリーンショットです
68
Programming
#include<stdio.h>
#define IO_NUM 6
int io_status = 0;
void sub(int value1, int value2)
{
return vaule1 - value2;
}
int main(void)
{
int fuga = sub(100, 50);
return 0;
}
C言語の基本構造
69
#incude
グローバル変数
#define
様々な関数
main関数
loop関数
setup関数
Arduinoのプログラム構造
70
*Arduinoはコンパイルの直前にタイマー処理とmain関数を自動的に貼り付けて
いる。main関数の中身は、{(void)setup();while(1){(boid)loop();}}
#incude
グローバル変数
#define
様々な関数
右では略
NEW
NEW
setup関数の役割
• setup()は起動直後に1度だけ実行
• ハードウェアの基本的な設定を記述すると楽
71
Srialポートを使って9600 bpsでのシリアル通信を行う
準備を実施するコード
loop関数の役割
• loop()は無限に実行する内容を記述
72
無限にAD変換値をシリアル出力するコード
便利な関数やオブジェクト
• digitalWrite(pin, HIGH/LOW)
– 電圧をVccと0 [V]に変更
• analogRead(pin)
– アナログ電圧の計測
• analogWrite(pin, duty)
– PWMによる擬似アナログ電圧出力
• Serial
– Streamを継承した、シリアル通信オブジェクト
73
Arduinoの開発言語はC++
• オブジェクト指向に対応
• クラスを利用できます
74
class TimeOut
{
private:
long timeout_time;
public:
// set timeout time width
void set_timeout(long timeout)
{
this->timeout_time = millis() + timeout;
}
// timeout check, true: timeout
boolean is_timeout()
{
if(millis() > this->timeout_time)
return true;
else
return false;
}
// constructer
TimeOut()
{
this->timeout_time = 0l;
}
};
クラスの例
クラスを利用できます
• アクセス制御
–デバッグし易い
–プログラム設計上、考慮項目数が減る
• コードの相互依存性を減らせる
–脱スパゲッティコード!
• 複数人でのプログラム開発
–役割分担の明確化
• コードの再利用性が上がる 75
コンパイルでエラー
• IDE下部にメッセージが出ます
• 英語なので読めます
76
エラーの例
代表的エラー
• 宣言されていない変数が使われた
77
代表的エラー
• 全角のスペースがある
78
ここに注目
代表的エラー
• セミコロン;がない
79
エラーを調べる
• エラーメッセージをネットで検索
• メッセージをダブルコーテーションで括って検索
– 例
80
普通のプログラミングとの相違点
• ガベージコレクション(GC)がありません
• mallocは使えるものの、コンパイラが作成した
メモリ配置図を見ながらの作業となって普通
のPC, Mac利用者には重い作業
• 全てのオブジェクト(≒変数)が静的にメモリ
上に確保されると考えて下さい
81
82
Circuit
Arduino UNOの電気的特性
項目
マイコン ATmega328P
電源電圧 USB:5 V
ACアダプタ:7-12 V
マイコン自身:5 V
電流容量 1 A
マイコンの出力電流 実用範囲:2 mA
83
←UNOのクローン製品
IOポートの電流制限
84
IOポートの電圧制限
85
LEDの使い方
86
圧電スピーカーの使い方
87
サーボモーターの使い方
88
89
Reference
ggrksGoogleで検索
• キーワードは大事
• 日本語で資料がなければ英語で検索
• 英語のサイトを見つけたら、自動翻訳
90
参考サイト
• Arduino公式
• Arduino日本語リファレンス
• ソフトウェア共同開発支援サイト GitHub
• 個人ブログ
– たとえば“なんでも作っちゃう、かも。”
91
参考図書
• Arduinoをはじめよう
• Prototyping Lab
• Arduinoで計る、測る、量る
92
Fin.
93
94
Appendix
• 以降のスライドは、将来的に別のスライド
としてまとめるかもしれないしまとめないか
もしれないスライド達です。
Arduinoとパソコンの接続と
COMポート確認 for Windows
• 目的
– Arduinoへのプログラムの書き込み,通信
• 手順
– ArduinoをUSBで接続
• ドライバのインストールが必要な場合は、Arduino IDEのディレクト
リ中にある「drivers」フォルダを指定してドライバをインストール
– シリアル通信のために、COMポートを確認
• 「コンピュータ」のプロパティからデバイスマネージャ
• デバイスマネージャの中にCOMxはあるか?
– xはローマ数字
– Arduino IDEを立ち上げて、
• マイコンボードの種類をセット
• COM番号をセット
• シリアルモニタを起動
• 通信速度をArduinoに合わせる
95
*Arduino DUEはWindowsでのみシリアル通信可能です
Arduinoとパソコンの接続と
COMポート確認 for Mac
• 目的
– Arduinoへのプログラムの書き込み,通信
• 手順
– ArduinoをUSBで接続
– シリアル通信のために、シリアル通信ポートを確認
• terminal立ち上げ
• “cd /dev” を実行
• “ls” を実行
• 表示された中から、Arduinoっぽいのを探す
• USBケーブルを切断してもう一度確認すると消えている名前がある。
それがArduinoとの通信に利用しているシリアルポート
– Arduino IDEを立ち上げて、
• マイコンボードの種類をセット
• シリアルポートをセット
• シリアルモニタを立ち上げ
• 通信速度をArduinoに合わせる
96
*Arduino DUEはWindowsでのみシリアル通信可能です
シリアル通信プログラムの書き方
• シリアルポートを設定
• 通信速度[bps]のセット
• 送りたいものを送信
97
Serial.begin(9600);
Serial.println(“hellow”);
Serial.print(“without linesep”);
Serial.write(0x30);
while(1){
Int c = Serial.read(); // if c==-1, it’s None
If(Serial.available()){
適当な関数を呼び出すなど
}
}
*適当なサンプルコード。setup()内に書くと動くはず。
ソフトウェアシリアル
• UNOでシリアル通信ポートを増やす
• ソフトウェアで対応
• 代表的ライブラリは2つ
98
SoftwareSerial
AltSoftSerial
4800 baudまで
なら安全
@UNO
115200 baudまでなら安全@UNO, PWMと干渉
mbedもある
• ARM系のマイコンボード
• https://mbed.org/
99

Arduinoをこれから始める人のためのArduino紹介スライドβ版