2015.06.03
【電子工作】Arduinoに触れてみた
こんにちは。次世代システム研究室のT.Kです。
最近は花粉も収まり良い季節になり、ちょっとモチベーションが上がってきている今日この頃です。
昨年よりベトナムオフシェア改善に日々取り組んで来ていますが、最近は少しマイコンに触れる機会がありましたので、その事に関してブログを書きたいと思っています。
初めてのマイコンなので、初級編から触れて行きたいと思います。
少し慣れて来たら、センサーの値を元に挙動するものを作ってみたいと思っています。
設定編

まずはArduino yunの理解から入りました。
正直図面等を見ていてもピンと来ないので、とりあえず触れてみる事にしました。
1. Arduino yun電源接続
2. Arduino yunとPC接続
-
yunを有線で接続した場合、特に設定なくIDEで操作できます。
しかし、折角なのでこちらのサイトを参考にwifi接続を行ってみました。
ほぼ記載通りでしたが、自分の環境のせいか1点だけ記載と異なる事がありました。
参考サイトでは『ウェブブラウザで http://arduino.local/ に接続』とありましたが、私の環境では”https”でないと弾かれてしまいました。
外部に繋がっているwifiにyunを通して接続すれば、通常通りの環境で開発が可能です。
3. Arduino IDEの設定
-
IDEの設定も特に難しい事は無く、IDEをダウンロードし、『ツール ⇒ ボード』と『ツール ⇒ ポート』の2つを設定するのみです。
有線もしくはwifiで”Arduino”に接続している場合であれば、ポートの方は既に適切なものが選択されているかと思いますが、ボードの方はデフォルトの『Arduino Uno』が設定されているかもしれませんので確認が必要です。
4. Arduino yun動作確認
void setup() { pinMode(13, OUTPUT); } void loop() { // 13ピンから電流をON/OFF digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
センサー確認編
光センサー

こちらのサイトを参考に『光センサーの値をモニターに出力』を行ってみました。
※シリアルモニターは『ツール ⇒ シリアルモニタ』から起動します。
⇒wifi接続時にはパスの入力が必要です。
int val=0; //入力される値を格納する為の変数 void setup() { // シリアルモニター使用時のおまじない Serial.begin(9800); } void loop() { // 光センサーの値を取得(ポートはA0~A5まで存在) val=analogRead(0); // 取得した値をシリアルモニタに出力 Serial.println(val); delay(100); }
サイトの参考に実行してみたところ、シリアルモニタに値が出ましたが、サイトの値に比べとても小さい値が表示されてしまいました。
よく配線を確認してみると、抵抗が怪しい事に気が付きました。参考サイトと同じ配色の物を選択しましたが、値の確認が出来ていませんでした。
光センサーの規格を元にネットで検索し、適切なものに切り替える事で正常な値の取得に成功しました。
光センサーの値が取得できた事で、処理の切り分けを行える前提が整いました。
サンプルとして、暗い時のみLEDが点灯する様に実装を変更してみました。
※光センサーの値は大きい程明るく、小さい程暗いと言う事を示します。
int val=0; // 入力値変数 int ledVal = 0; //LED出力値 void setup() { // シリアルモニター使用時のおまじない Serial.begin(9600); } void loop() { // 光センサーの値を取得(ポートはA0~A5まで存在) val=analogRead(0); // LED出力用の値を設定(LEDは0~255まで) ledVal = val/4; // LED出力用の値をシリアルモニタに出力 Serial.println(ledVal); // ※暗い時のみ光るようにする if(ledVal <= 50){ //入力値が50以下の時は消灯 analogWrite(3,0); //出力は0 } else if(ledVal <= 100){ //入力値が50〜100の範囲の時は消灯 analogWrite(3,100); //出力は100 } else if(ledVal <= 150){ //入力値が100〜150の範囲の時は消灯 analogWrite(3,200); //出力は200 } else if(ledVal <= 200){ //入力値が150〜200の範囲の時は点灯 analogWrite(3,200); //出力は200 } else{ //入力値が200以上の時は最大出力 analogWrite(3,255); //出力は255 } delay(100); }
温度センサー

(Image : http://deviceplus.jp/hobby/entry_007/)
こちらのサイトを参考に『温度センサーの値をモニターに出力』を行ってみました。
こちらは、参考サイトのままでなんの問題も無く、想定通りの結果まで辿り着く事が出来ました。
ポイントとしては『温度センサー』からの値はそのままでは使用できず、公式に当てはめて算出すると言う事でした。
摂氏温度 = ((“Arduino yun”の電圧 * 温度センサーの値) / 1024) * 100
挑戦編
-
センサーの値を判断しLEDの光量を制御出来たので、今度はLEDの代わりにモーターを制御する事に挑戦してみました。
- “Arduino yun”からの操作で動作を制御したい
- 単3電池4本の電圧でモーターを動かしたい
まずは単純にLEDをモーターに切り替えてみた所、モーターは動きません。
色々と試してみたところ、『”Arduino yun”からの電圧だけでは足りないでは』と考え、モーター起動用に単3電池4本と電圧増幅の為にトランジスタを用意しました。
ここで、今回の目的は下記2点となります。
モーター部分に関して、諸先輩方のサイトを参考に、光センサーの処理を組込み、光センサーへの光量を下げて、動作確認です。
…
……
………し~ん
相変わらず、まったく動きません。
複数サイトの情報をマージしているので、配線が誤ったかと疑い、変更し、再度挑戦してみたところ。。。
…
……
………煙が出た!!焦げくさいっ!!!!マズイっ!!!!
とりあえず、電源を抜き、うちわで扇いで事無きを得ましたが、自分の未熟さを痛感した瞬間でした。
今回の挑戦はうまく行きませんでしたが、後日電子工作の勉強をして再チャレンジを図りたいと思います。
今回の反省
-
照度や温度など普段見えないものを、手元のセンサーで数値化し、判断材料としてものが動くと言う事がとても新鮮な体験でした。
今後も時間をみて、色々とトライして行きたいと思っていますが、改めてよく学ばなければいけないと感じています。
部署でこのようなまったく異なる分野に触れる機会を貰える事は貴重だと思うので、この機会をチャンスと捉え、新たな事を学んでいきたいと思います。
次世代システム研究室では、アプリケーション開発や設計を行うアーキテクトを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。
皆さんのご応募をお待ちしています。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD