21 Jul 2014, 23:19

これだけは抑えておきたい、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に挿せば完成。どちらがマイナスでどちらがプラスか必ず覚えましょう。間違えるとショートしてLEDが壊れることがあります。

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
 .... 

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);
  
}

【回路】

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側】

```c 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);

}

 
<p>なんか受け取れているけど、これであっているか検討します…</p>
<p></p>
<h2>6. 電池で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>を動作させる</h2>通常、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>はPCから電源をとっているため、PCと切り離してしまうと動かなくなる。<br>
しかし、PCと繋いでいないと動作できない<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>なんて必要ない…とも思う。<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>を電池で動かす方法はいたって簡単で以下の2つを用意して接続するだけ。</p>
<div class="hatena-asin-detail">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000FHVRLE/hatena-blog-22/"><img src="http://ecx.images-amazon.com/images/I/41IakcNEXoL._SL160_.jpg" class="hatena-asin-detail-image" alt="Panasonic 9V型アルカリ乾電池 1本 6LR61YXJ/1S" title="Panasonic 9V型アルカリ乾電池 1本 6LR61YXJ/1S"></a><div class="hatena-asin-detail-info">
<p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000FHVRLE/hatena-blog-22/">Panasonic 9V型アルカリ乾電池 1本 6LR61YXJ/1S</a></p>
<ul>
<li>
<span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%CA%A5%BD%A5%CB%A5%C3%A5%AF">パナソニック</a>
</li>
<li>
<span class="hatena-asin-detail-label">発売日:</span> 2006/04/10</li>
<li>
<span class="hatena-asin-detail-label">メディア:</span> エレクトロニクス</li>
<li> <span class="hatena-asin-detail-label">クリック</span>: 2回</li>
<li><a href="http://d.hatena.ne.jp/asin/B000FHVRLE/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li>
</ul>
</div>
<div class="hatena-asin-detail-foot"></div>
</div>
<div class="hatena-asin-detail">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/0101625138/hatena-blog-22/"><img src="http://ecx.images-amazon.com/images/I/311H0nRslqL._SL160_.jpg" class="hatena-asin-detail-image" alt="DC 9V電池スナップ+2.1mm DCプラグ  並行輸入品" title="DC 9V電池スナップ+2.1mm DCプラグ  並行輸入品"></a><div class="hatena-asin-detail-info">
<p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/0101625138/hatena-blog-22/">DC 9V電池スナップ+2.1mm DCプラグ  並行輸入品</a></p>
<ul>
<li>
<span class="hatena-asin-detail-label">出版社/メーカー:</span> Gadgettown</li>
<li>
<span class="hatena-asin-detail-label">メディア:</span> </li>
<li><a href="http://d.hatena.ne.jp/asin/0101625138/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li>
</ul>
</div>
<div class="hatena-asin-detail-foot"></div>
</div>
<p>これらを以下のように接続する。<br>
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/mosuke5/20140721222037" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/mosuke5/20140721/20140721222037.jpg" alt="f:id:mosuke5:20140721222037j:image:w500" title="f:id:mosuke5:20140721222037j:image:w500" class="hatena-fotolife" style="width:500px" itemprop="image"></a></span></p>
<br>
<p>以上で入門まとめは終わりだが、<br>
その他にも以下を購入しているので次はもっと高度なことを実践したい。<br>
・<a href="http://www.switch-science.com/catalog/224/">XBee ZB / ワイヤアンテナ型 - スイッチサイエンス</a><br>
・<a href="http://www.switch-science.com/catalog/786/">Arduino ワイヤレスプロトシールド - スイッチサイエンス</a><br>
・<a href="http://www.switch-science.com/catalog/1031/">XBee USB アダプター(リセットスイッチ付き) - スイッチサイエンス</a><br>
・<a href="http://www.switch-science.com/catalog/838/">Arduino イーサネットシールド R3 - スイッチサイエンス</a></p>
</body>
フィードバック・相談 (β機能)

本記事に対して、執筆者にフィードバックや聞きたいことがあればこちらのフォームからご記入ください。
執筆者に問い合わせてみる

関連する記事はこちら
  • Sock Shopを使ったマイクロサービス体験のハンズオン (2020/01/22)
  • Datadog APMとトレーシングの仕組みについて (2019/11/21)
  • [基礎] ElasticSerachなどの外部コンポーネントがあるときのテスト (2019/05/26)
  • SlideShare APIをGoogleAppsScriptから利用する方法 (2018/12/20)
  • Docker Compose上でのRailsアプリケーションの開発フロー (2018/05/02)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加