趣味の世界: 2017年10月アーカイブ

先週末から Arduino を触っているのだが、当然、色々なセンサー類も今回初めて触るわけである。

その中の「赤外線測距センサー」なのだが、小型で、アナログ出力の他にデジタル(I2C)出力もできるシャープの測距モジュール「GP2Y0E03」を購入したのだが・・・これ、4~50cm の間しか測距出来ないんやあ・・・(^^; 

俺の要件的には 50cm~1m くらいの間で測距したいんよねえ・・・というわけで、赤外線測距モジュールは買い直しや。  

まあ、数百円から千円ほどの部品なので、そんなにショックが大きいわけではないが、無駄な買い物をしないに越したことはないので、今、秋月電気通商で取り扱っている測距センサー(シャープ製)を一覧にしてみた。 

 <シャープ測距モジュール>
 型番  測定可能範囲  電源電圧  消費電流 
GP2Y0E02A4~50cm2.7V~3.3V
GP2Y0E034~50cm2.7V~5.5V
GP2Y0A21YK10~80cm4.5~5.5V
GP2Y0A02YK20cm~1.5m4.5~5.5V33mA
GP2Y0A710K1.0~5.5m5V30mA

今回の要件だと GP2Y0A21YK か GP2Y0A02YK なんだけど、それぞれ値段が 450円と 800円と随分違うのよね。 

まあ、ぎりぎりだけど、GP2Y0A21YK でいいか。 

というわけで本日発注。届き次第テストをしてみるので、「電子工作の知識のないおっさんが試行錯誤しつつがんばってる姿が好き!」っていう JK 諸君はもう少し待ってくれたまえ。
さて、何かこの週末は台風で外にあまり出れなかったので、結果的に Arduino 三昧な生活であった。

というわけで、動体検知センサーの動作確認をしてみる。Parallax 社の PIR Motion Sensor である。

Arduino との接続は下図のとおり。

20171022_pir1.jpg

センサーの VCC から POWER ピンの 5V ピンへ。GND からは GND ピンへ。動体検知をした場合に ON(HIGH)となる OUT 端子は DIGITAL ピンの 2番へ。

また、動体検知をしたら光らせるための LED も DIGITAL の 13番 & GND に接続。

プログラムは、「Using a PIR」という名前のサイトに載っていたものを、シリアル出力とかしないんで、その辺はざっくり削除。残りはそのまま使わせていただいた。(日本語のコメントは俺が入れた)

/*
 * PIR センサーテスト
 */
 
int ledPin = 13;                // LED 発光用
int inputPin = 2;               // センサーからの検知情報入力用
int val = 0;                    // 検知情報セット用変数

void setup() {
  pinMode(ledPin, OUTPUT);      // LED 発行用に出力ピンとして設定(5V 電源)
  pinMode(inputPin, INPUT);     // 検知情報読み取り用に入力ピンとして設定
}

void loop(){
  val = digitalRead(inputPin);  // 2番ピンを確認(検知情報)
  if (val == HIGH) {            // 動体検知された!!(2番ピンが HIGH(検知!!))
    digitalWrite(ledPin, HIGH); // LED 点灯
  } 
  else {
    digitalWrite(ledPin, LOW);  // LED を消灯
  }
}:

これで、センサーが動体を検知したら、

20171022_pir2.jpg

こんな感じで LED が点灯する。

ちなみに、検知されてから数秒間(10秒くらい?)はセンサーは HIGH(ON)の状態である。
こっちでなんかハンドリングが必要(手動で LOW(OFF)にする必要)があるのかとパッケージ兼説明書を読んでみたけど(英語です(^^;)、センサーが自動で行うようで設定のジャンパとかは無かった。

この PIR センサーは、ジャンパ切替でノーマルモードと敏感モードを切り替えることが出来るようで、「ノーマル」の場合の検知範囲は 10m。「敏感」の場合は 5mだそうだ。
今回の俺の要件だと、ディフォルトのノーマルモードのままで十分実用的。

次回は、動体検知をしたら赤外線距離計の電源を ON にする回路を作ってみよう。
先のエントリー「今日も Arduino のテスト中」に書いたように、Arduino のデジタル I/O の 3, 5, 6, 9, 10, 11 ピンは、PWM(Pulse Width Modulation)による電圧コントロールが出来る。

試しに、3番ピンに LED をつなぎ、以下のようなプログラムを書いてみた。

const int V_OUT1 = (int) 4.0 * 51; // 4.0V
const int V_OUT2 = (int) 1.0 * 51; // 1.0V
void setup() {
}
void loop() {
  analogWrite(3, V_OUT1);
  delay (1000);
  analogWrite(3, V_OUT2);
  delay (1000);
}

1秒(1,000ミリ秒)毎に 3番ピンの出力(電圧)を 4.0Vと 1.0Vで交互に設定する。

4.0Vの時は明るく、

20171021_arduino4.JPG

1.0Vの時は暗い。

20171021_arduino5.JPG

おお、ばっちりや。

ちなみに、デジタル I/O ピンを PWM で電圧コントロールする時、出力電圧は 0~255の値で指定する。
デジタル I/O は 5V 出力なので、最大数の 5V が 255 である。つまり、51 と指定すればその 1/5 なので 1V で出力しろということだ。

4V、1V で設定をしているということをわかりやすくするために、わざわざ

const int V_OUT1 = (int) 4.0 * 51; // 4.0V
const int V_OUT2 = (int) 1.0 * 51; // 1.0V

としているが、これはベタに

const int V_OUT1 = 204; // 4.0V
const int V_OUT2 = 51;  // 1.0V

と書いても良い。

さて、出力関係は何となくわかってきたので、今度はセンサーからの入力をテストするか。

簡単な回路とプログラムを作って、今日も Arduino のテスト中。
何が出来るのか、実際にやってみないとわかんないからねえ。

今回は、Arduino から 1個の LED に対して 2系統のそれぞれ異なる抵抗の入った出力をして、LED の灯りが暗くなったり明るくなったりするのを確認する。

具体的にはこんな感じ。(回路図としてこういう書き方が正しいのかは知らん(笑))

20171021_arduino1.JPG

デジタルI/Oピンの 12番からは、1KΩの抵抗をかました線を LED へ。8番からは 100Ωの抵抗(12番の1/10の抵抗値)をかました線を LED へ。で、この線を交互に有効にする(それぞれの回線のスイッチの OFF/ON をするイメージ)プログラムを書く。
12番が(抵抗値が大きいので)暗い回線、8番が明るい回線となる。回線を切り替えた時に電気が逆流しないようにそれぞれ抵抗の先にはダイオードをお忘れなく。

プログラムはこう。
12番を ON、12番を OFF、8番を ON、8番を OFF を繰り返すだけ。

void setup() {
  pinMode(12, OUTPUT);
  pinMode(8, OUTPUT);
}

void loop() {
  digitalWrite(12, HIGH);
  delay(1000);
  digitalWrite(12, LOW);
  digitalWrite(8, HIGH);
  delay(1000);
  digitalWrite(8, LOW);
}

そうすると、12番が生きている時は暗い。

20171021_arduino2.JPG

で、8番が生きている時は明るい。

20171021_arduino3.JPG

これを延々繰り返す。
なるほど、なるほど。デジタルI/Oピンの使い方、わかったで。

んで、実は、このデジタルI/Oピンのうちのいくつかは、PWM(Pulse Width Modulation)による電圧制御が可能らしい。
どういうことかと言うと、ひとつのピンで電圧を変えることが出来るということ。つまり、回路として 2系統を用意する必要がない。1系統で暗い出力(電圧低い)と明るい出力(電圧高い)を切り替えられるということだ。

次回はそれをやってみよう。
今日、一昨日 Amazon で購入した「HiLetgo UNO R3 ATmega328P ATMEGA16U2 開発ボード」が届いた。Arduino互換ボードである。

Arduino(アルドュイーノ)とは、「AVRマイコン、入出力ポートを備えた基板、C++風のArduino 言語とそれの統合開発環境から構成されるシステム」である。(Wikipedia より)

ま、簡単に言うと、「プログラムによって、色々なセンサー等からの入力値で、ライトやモーターなどの機器を動かすことが出来る基盤」かな。
例えば Arduino に動体検知センサーとライトを接続し、動体検知センサーが反応したらライトをONにするというプログラムを書けば、防犯ライトの出来上がり・・・というわけである。

特徴的なのは、Arduino がオープンソースハードウェアであるということ。
仕様、設計情報がオープンにされており、ライセンスを守れば誰でも Arduino 互換ボードを作ることが出来る。但し、Arduino という名前は商標登録されており本家(Arduino LLC および Arduino SRL)しか使えない。

昔、IBM のパソコンの仕様(PC/AT)がオープンアーキテクチャとして公開されていたので、所謂 PC/AT 互換機というのが色々なメーカーで作られていたが、ま、あんな感じ(笑)

農業や狩猟の世界でも色々工夫次第で使えそうだったので、今回勉強用に購入したのである。
まあ、勉強用つっても、実用レベルのものができれば、どんどん現場に投入していこうと思っているのだが。

ちなみに、本家のボードは 3,000円前後で売られているが、互換ボードはそれこそ数百円からある。今回購入した HiLetgo の互換ボードは Amazon で一枚 1,180円だったが、秋葉原に行けば 500円くらいで売っているそうである。安い大人のおもちゃ(性的な玩具ではなく(笑))だ。

ただ、俺の買ったボード、互換ボードのはずなのに、これ、本家ボードが送られてきてるような・・・
ボードに ARDUINO UNO と書かれているし、裏を見ると MADE IN ITALY となっている。Wikipedia に載っている UNO の写真とまったく同じだし・・・謎(^^;

ところで、いちいちハードを Arduino 互換ボードとか書くの面倒臭いので、以降、俺の Arduino 関係のエントリーでは本家ボードも互換ボードも Ardiuno と呼ぶことにする。

20171020_arduino.JPGブレッドボードと組み合わせて回路を作るためのケーブルなどをまだ用意していないので、取り敢えずボードだけを使ったテストを行った。
ボードに直刺しの LED を点滅させるテストで、いわばソフトウェアの世界の"Hello World." である(笑)

まず、LED のアノード(陽極)を Arduino のデジタルI/Oピンの 13番へ、カソード(陰極)を同じくデジタルI/Oピンの GND に差す。
それから、Mac OS X にインストールした Arduino IDE 上でプログラムを作り、USB ケーブル経由で Arduino に送る・・・という手順。

プログラムは、Wikipedia でも紹介されている

void setup () {
    pinMode (13, OUTPUT);
}

void loop () {
    digitalWrite (13, HIGH);
    delay (1000);
    digitalWrite (13, LOW);
    delay (1000);
}

こういうヤツ。(Wikipedia の例ではピン番号を定数にセットしているが、たったこれだけの行数のものなので、今回はピン番号(13)はベタ書きにしている(笑)

これで LED は一秒間隔で点滅した。動作確認終了(笑)

試しに、delay 値を 1000(1秒)から 100(0.1秒)に変更してみる。LED のチッカ、チッカ、チッカという点滅が、チカチカチカに変わる。動作確認第二弾終了(笑)

というわけで、これから色々テストしていきますぞ。
今日は休暇をいただいたので、朝から出かける予定だったのだが、朝いちで出す予定だった見積の元になる数字がメーカーから出てこなくて、結局午前中はずっと動けなかった。

そしたら一昨日 Amazon で買ったハンダゴテとテスターが届いたので、断線していた「電子ブロック mini」の修理を。
まあ、修理っつうても、ケーブルをハンダ付けするだけですけど。

20171020_denshi1.jpg 20171020_denshi2.JPG 20171020_denshi3.JPG

で、まあ、線はすぐにハンダ付けしたんだけど、テスターで電圧調べると、150.1mVみたいな変な数字が。電池を 3個直結なんで 4.5Vになるはずなのに・・・

なもんで、当然「発光ダイオードの接続テスト」も発光ダイオード、発光せず(^^;

まあ、よくわからんけど、電池がちゃんとセットされていないのだろうと電池を入れ直したら 4.84V とか出るようになった。
うーん・・・電池がちゃんと入ってなかったのなら、それこそ 0V じゃないかと思うんだけど、150.1mVって・・・いったい何だったのか?識者の方、ぜひご教授いただければ幸いです。

というわけで、無事 LED 点灯。並列接続もOK。
さて、さて、娘が遊んでくれると嬉しいんだけど、ほぼ興味を示さなかった(^^;
単なるメモ。

もう、オームの法則なんか、忘却の彼方に追いやってたで。
まあ、すぐに思い出しましたがね。若干、あやふやだけど(笑)

ということで、電子回路をあれこれしていると、一番よく使うのが「何Ωの抵抗をつければええんかいな?」ってことだよね。違う?(笑)俺はそう。

オームの法則の中で抵抗値を算出するのに関係あるのは、

電圧(電位差) = 抵抗 x 電流

電流 = 電圧(電位差) ÷ 抵抗

抵抗 = 電圧(電位差) ÷ 電流

このあたりやな。電力(watt(W))の計算もあるが、まあ、電子工作の世界ではあまり関係無いな。

んで、それぞれ単位は、電圧は volt(V)、電流は ampere(A)、抵抗は ohm(Ω)。

例えば Arduino のデジタルI/Oピンから LED に電気を供給する時、LED の定格入力値は電圧 2V、電流 20mA(0.02A) なのに、Arduino からは 5V、20mA で出ていくので、間に抵抗をかます必要がある。

この抵抗値は、

?Ω = (5 - 2)V(電位差) ÷ 0.02A(20mA)(LED の定格電流)

で、3 ÷ 0.02 だから 150Ωとなる。

左から、茶・緑・茶のカラーコードの抵抗を見つけて取り付けよう。(一番右側の 4番目のカラーコードは許容差(%)なのでとりあえず不問)

※抵抗のカラーコードについては、「抵抗のカラーコード(抵抗値)の読み方」参照

このアーカイブについて

このページには、2017年10月以降に書かれたブログ記事のうち趣味の世界カテゴリに属しているものが含まれています。

前のアーカイブは趣味の世界: 2017年5月です。

次のアーカイブは趣味の世界: 2017年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら