読者です 読者をやめる 読者になる 読者になる

Goldstine研究所

mosuke5's tech blog

【これだけは抑えておきたい】Arduino入門まとめ

Arduino

前々からArduino自体はもっていたし、ちょろっと触ったことはあったのだが、
大学時代の研究室の仲間とArduino勉強会をやることになり、それに向けて友人と再入門したのでそのときのメモ。
Arduino入門にこれだけは知っておきたい事項をプログラム形式にまとめた。

もちろん、不足部分もたくさんあるが、これだけわかれば楽しめるようになるかも。

以下が入門プログラム。

  1. LEDの点灯
  2. PCとArduino間のシリアル通信
  3. 超音波距離センサの利用
  4. 超音波距離センサとLEDの組み合わせ
  5. Processingとの連携
  6. 電池でArduinoを動作させる

【用意したもの】
基本は以下の2つ

Arduinoをはじめようキット

Arduinoをはじめようキット

みんなのArduino入門:拡張キット

みんなのArduino入門:拡張キット

【参考にした書籍】

Arduinoをはじめよう 第2版 (Make:PROJECTS)

Arduinoをはじめよう 第2版 (Make:PROJECTS)

みんなのArduino入門

みんなのArduino入門

1. LEDの点灯

まずはじめの第一歩はLEDの点灯。
これはArduino標準搭載の「スケッチの例」を利用。
 利用したスケッチ:スケッチの例⇒01.Basic⇒Blink

LEDのプラス側を13番に、マイナス側をGNDに挿せば完成。

2. PCとArduino間のシリアル通信

センサーで取得したデータ等をPC側に渡すシリアル通信。
まずは最初なので、Arduino本体側で文字列を適当に出力させてそれを表示する。

はじめは"hoge"だけを出力させたのだが、ひたすらhogeが並ぶだけなのでArduino側の処理がよく見えなかったので、
以下のサンプルのようにした。また、回路側はなにもいじっていない。

int i = 0;

void setup(){

  //シリアル通信の宣言
  Serial.begin(9600);

}

void loop(){

  Serial.print("hoge");
  Serial.println(i);
  i++;
  
  delay(300);

}

出力結果

hoge1
hoge2
hoge3
 ....

f:id:mosuke5:20140721103544p:plain

3. 超音波距離センサの利用

次のステップとしてセンサーの利用を行った。
はじめ温度センサーを利用したのだが、温度の変化は室内ではわかりづらかったので「超音波距離センサ」を利用した。
ここでは超音波距離センサを利用するが、大事なことはセンサーの種類ではなく、センサーを利用した入力である。

【作ったもの】
超音波距離センサにて測定した物体との距離をシリアルモニターで表示するもの。

ソースコード

// 送信側のピン番号
const int TRIGPIN = 8; 

// 受信側のピン番号
const int ECHOPIN = 9;

// HIGHの時間(μ秒)
const int CTM = 10;

// 時間差(μ秒)
int dur;

// 距離(cm)
float dis;

void setup() {

  //シリアル通信の宣言
  Serial.begin (9600);
  
  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT); 

}

void loop() {
  
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(CTM);
  digitalWrite(TRIGPIN, LOW);
  
  // 超音波が物体にあたり跳ね返ってくるまでの時間を測定
  dur = pulseIn(ECHOPIN, HIGH);
  
  //物体までの距離に変換
  dis  = (float) dur*0.017;
  
  //シリアルモニタへ出力
  Serial.print(dis);
  Serial.println(" cm");
  
  delay(500);
  
}

【回路】
f:id:mosuke5:20140721220559p:plain

4. 超音波距離センサとLEDの組み合わせ

センサーを用いいた入力方法・LEDを使った出力方法について学んだので、それらを組み合わせて以下のものを作成。

【作ったもの】
超音波距離センサを用いて、物体がある一定以上近づいた場合には赤LED の点灯を、
物体がある一定以上離れている場合(あるいは物体がない場合)には青LEDの点灯をするもの。

ソースコード

// 送信側のピン番号
const int TRIGPIN = 8; 

// 受信側のピン番号
const int ECHOPIN = 9;

// HIGHの時間(μ秒)
const int CTM = 10;

// 青LED
const int LED_BLUE = 12;

// 赤LED
const int LED_RED = 13;

// 時間差(μ秒)
int dur;

// 距離(cm)
float dis;

void setup() {

  // シリアル通信の宣言
  Serial.begin (9600);
  
  // 超音波距離センサ
  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT); 
  
  // LED
  pinMode(LED_BLUE, OUTPUT);
  pinMode(LED_RED, OUTPUT); 

}

void loop() {
  
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(CTM);
  digitalWrite(TRIGPIN, LOW);
  
  // 超音波が物体にあたり跳ね返ってくるまでの時間を測定
  dur = pulseIn(ECHOPIN, HIGH);
  
  // 物体までの距離に変換
  dis  = (float) dur*0.017;
  
  // シリアルモニタへ出力
  Serial.print(dis);
  Serial.println(" cm");
  
  // 距離が50cm以上なら青LEDを光らせる
  if(dis > 50) {
    digitalWrite(LED_BLUE,HIGH);
    digitalWrite(LED_RED,LOW);
  
  // 50cm未満なら赤LEDを光らせる
  }else{
    digitalWrite(LED_BLUE,LOW);
    digitalWrite(LED_RED,HIGH);
    
  }
  
  delay(500);
  
}


【回路】
f:id:mosuke5:20140721222730p:plain

5. Processingとの連携

シリアル通信で受け取ったデータをシリアルモニターで表示するだけでなく、Processingで受け取ることもできる。
Processingで受け取ったデータをとりあえず、出力するところまで実施した。

Arduino側】

// 送信側のピン番号
const int TRIGPIN = 8; 

// 受信側のピン番号
const int ECHOPIN = 9;

// HIGHの時間(μ秒)
const int CTM = 10;

// 時間差(μ秒)
int dur;

// 距離(cm)
float dis;

void setup() {

  //シリアル通信の宣言
  Serial.begin (9600);
  
  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT); 

}

void loop() {
  
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(CTM);
  digitalWrite(TRIGPIN, LOW);
  
  // 超音波が物体にあたり跳ね返ってくるまでの時間を測定
  dur = pulseIn(ECHOPIN, HIGH);
  
  //物体までの距離に変換
  dis  = (float) dur*0.017;
  
  //シリアルモニタへ出力
  Serial.println(dis);
  
  delay(500);
  
}

【Processing側】

import processing.serial.*;

int val;
Serial myPort;

void setup() {
  String arduinoPort = Serial.list()[3]; 
  myPort = new Serial(this, arduinoPort, 9600); 
}

void draw() {
  println(val);
}

void serialEvent(Serial p){

  val=myPort.read();
  delay(1000);

}

なんか受け取れているけど、これであっているか検討します…

6. 電池でArduinoを動作させる

通常、ArduinoはPCから電源をとっているため、PCと切り離してしまうと動かなくなる。
しかし、PCと繋いでいないと動作できないArduinoなんて必要ない…とも思う。

Arduinoを電池で動かす方法はいたって簡単で以下の2つを用意して接続するだけ。<用意したもの>

Panasonic 9V型アルカリ乾電池 1本 6LR61YXJ/1S

Panasonic 9V型アルカリ乾電池 1本 6LR61YXJ/1S

これらを以下のように接続する。


以上で入門まとめは終わりだが、
その他にも以下を購入しているので次はもっと高度なことを実践したい。
XBee ZB / ワイヤアンテナ型 - スイッチサイエンス
Arduino ワイヤレスプロトシールド - スイッチサイエンス
XBee USB アダプター(リセットスイッチ付き) - スイッチサイエンス
Arduino イーサネットシールド R3 - スイッチサイエンス