概要
- Arduino Uno R3を動かす方法
Arduinoの比較
- Arduinoの違い
- Megaが70本もPIO付いててすごい
- Duoは3.3Vなので注意
インストール
Ubuntu 12.04
sudo apt-get update && sudo apt-get install arduino arduino-core
- dailoutグループにはいらなければならない?
ライブラリの追加
Ubuntu 13.04
- ~/sketch/library/にライブラリを置いて,arduino IDEを再起動する.
サンプル集
- github
- フォルダ内にlibraryというフォルダがある場合は,その中に入っているライブラリをインストールしてください.
ピンアサイン
- シリアル通信をしている場合は,pin0とpin1は使えない.
環境開発設定
Ubuntu 13.04
- 未接続状態で
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get -y update
sudo apt-get -y install oracle-java7-installer
sudo apt-get -y install arduino arduino-core
動作確認
-
Arduino IDE起動
- Ubuntu13.04では"arduino"をterminalで打つ.
- Ubuntu12.04では"sudo arduino"をterminalで打つ.
-
コードを書く場所に以下を記述
int led = 13;
void setup(){
pinMode(led,OUTPUT);
}
void loop(){
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
- Verifyを押す
- Uploadを押す
- 基板上のLが1秒ごとに光っていることを確認
Tips
ファイル分割
- ファイル分割は,タブ追加によって可能.
- タブ追加
- タブの行の謎の逆三角形をクリック→新規タブ→cppを追加、でcppを追加できる。
- externやincludeする場合はextern "C" { #include "hoge.h"}を忘れずに。
- ソースコードを外部から変更したい場合
- Arduinoをいったん閉じる
- ドキュメント/arduino/プロジェクト/hoge.cppを変更
- Arduinoを起動してプロジェクトを開く
- tabも更新されている。
PIO inputの内部プルアップ機能の利用方法
pinMode(enc1A, INPUT);
pinMode(enc1B, INPUT);
// プルアップを有効にします
digitalWrite(enc1A, HIGH);
digitalWrite(enc1B, HIGH);
シールド
- Arduinoの上に乗っける拡張器版
USB Host Shield
- 僕は普通に動いたが,「setup関数にdelay(500)を入れたら動いた」なるレビューがある
- ここが参考になる
- USB_Host_Shield_20ライブラリは,デフォルトデバッグモード.
- デバッグモードを切る場合は,USB_Host_Shield_20/settings.hのENABLE_UHS_DEBUGGINGを0にする.
Flash Air
- arduinoをkonashiみたいにする方法
Sample
LEDチカチカ
- オンボードをチカチカさせる.
シリアル通信
- シリアルIO
タイマ割り込み
- library: MsTimer2
シリアル通信をprintfで行う
時間取得
unsigned long ms, us;
ms = millis(); // Arduino をリセットしてからの時間(ミリ秒)
us = micros(); // Arduino をリセットしてからの時間(マイクロ秒)
GY-86
- GY-86のGyroX, AccelZを使って,傾斜角とジャイロの0点をカルマンフィルタで推定するサンプル.
ロータリーエンコーダ(タイマ利用)
- ロータリーエンコーダはプルアップとコンデンサをつけると安定
- コンデンサが必要なのはこういう理由
- http://radiopench.blog96.fc2.com/blog-entry-556.html
モータドライバ(TA7291P)
- http://www.hiramine.com/physicalcomputing/arduino/motordriver.html
- 本当に結構電線をつなげるだけなので楽
I2C
- Wireライブラリ(標準で入っている)を使う.
- wire
- 手順
- プログラムで一回だけ
- Wire.begin();
- 送信
- Wire.beginTransmission((uint8_t)address);
- Wire.write(data);
- Wire.endTransmission();
- 受信
- Wire.requestFrom((uint8_t)address,(uint8_t)nu,); // request a total of num registers
- Wire.read()をnum回呼んでバッファを空にする
- プログラムで一回だけ
gy-86との通信
- 概要
- 内部にMPU6050 (Gyro&Accelerometer&Tempreture), HMC58831 (Compass), MS5611 (Altimeter)が入っている。
- FreeIMUv0.4と同じハードウェア
- ピンの順番は異なる、GY-86のデータシートは一体どこ?
- Arduinoとの結線
- SDA->SDA, SCL->SCL, VCC_IN->3.3V, GND->GND、とするだけ。
- 通信