炎を発光ダイオードの光に変換する [ 炎センサ ]

炎をLEDの光に変換させるとは言っていない

秋月やマルツなどの電子部品屋さんを見ていると本当に多種多様なセンサ類がありますよね。

中には「こんなものまであるの!?」なんていうセンサモジュールまであります、今回はそのたくさんのセンサの一つである炎検知センサについてです。

炎検知センサとは

文字通り炎を検知するセンサです。仕組みとしては金属の光電効果とガス倍増効果を利用した紫外線センサ...らしいです(むずかしいっすね)。

簡単に言うと炎から放射される紫外線を感知する仕組みで、精度の高いものだと数メートル離れたライターの炎までわかるそうです。

!記事内では「紫外線が」と書いていますが正確には「赤外線」の感知が正しかったようです、訂正くださりありがとうございます!

 

 

f:id:ten0313:20170830183324p:plain

 

使ってみます。

秋月で購入した炎検知センサを使います。

f:id:ten0313:20170830183654j:plain

 

左は同封されていたコードです。丁寧にコネクタまでついていて扱いやすそうです。

右が本体です。黒いのは赤外線感知のための部品でしょうか、とてもシンプルな見た目です。

制御は今回もArduinoです、早速スケッチを書いて使ってみます。

 

コードをセンサ本体に接続します。Arduino側は黒のケーブルをGNDピンに、赤のケーブルを5Vピンに、青のケーブルは(赤、黒とわかりやすいピンの配色から青は信号線なのだろうと推測しました)アナログ5ピンに接続しました。

 

動画です。

f:id:ten0313:20170830192002g:plain

スケッチです。

void setup() {
Serial.begin(9600);
// put your setup code here, to run once:

}

void loop() {
Serial.println(analogRead(A5));
// put your main code here, to run repeatedly:

}

青のコードは信号線で正解でした。スケッチ内ではシリアル通信によりセンサから出力される信号をシリアルモニタに表示させています。

GIF画像での表示ですが、詳しい数値こそ見えにくいもののライターの着火とともにモニターの数値の変化は見て取れます。

具体的には火のない状態で0から1の数値を、炎を検知すると500~900くらいの数値が出力されました(火が近くなればなるほど大きい数値が出力されるようです)

 

発光ダイオードのスイッチに利用する

記事の題には「炎を発光ダイオードの光に変換する」と書きましたが、僕がやろうとすることを正確に言うと「炎で発光ダイオードの光を制御する」が正しいかもしれません(もっと正確に言うと制御自体はマイコンであるArduinoがしているので正しくと表記したほうも間違いかもです)。

しかし今回重要なのは記事の大などではありませんよね? 目を瞑ってください;)

 

炎センサの扱い方がわかり数値の検出も行えたところで次はもっとわかりやすく、炎検出センサの働きをシリアルモニタ内から僕の机の上に持ってこさせましょう。

 

配線はシンプルです。さっきの配線+Arduinoのデジタル2番ピンに発光ダイオードを接続します。

 

 

簡単なスケッチなので先にプログラムのほうを見せておきます。

void setup() {
pinMode(2,OUTPUT);
Serial.begin(9600);
// put your setup code here, to run once:

}

void loop() {
int val;
val = analogRead(A5);
Serial.println(val);
if(val > 50){
digitalWrite(2,HIGH);
}else{
digitalWrite(2,LOW);}
}
// put your main code here, to run repeatedly:  

 

動画のほうです(GIF形式ですが)

https://j.gifs.com/O7QD7G.gif

ライターのガスが切れてきて火が着きにくくなっていますが、着火に合わせて画面下のほうの発光ダイオードを光らせています。ライターが着火するときの火花にも反応していることもわかります。

 

スケッチのほうでは変数valに炎検知センサからの数値を格納、50以上の時にデジタル2番ピンをHIGHにして発光ダイオードを点灯させています。すごい短いプログラムですし簡単な内容です。

 

まとめ

今回、炎検知センサを使うに当たって先に簡単に検索してもぜんぜん使い方があげられてないんですよね。もちろん解説するまでもないほどに使い方は簡単だったので困ることもないんですけど、こうやって自分への覚書のような形ででも記事にできたのはよかったです。

炎検知センサすごいおもしろいですよね、センサがおもしろいというより反応する相手が炎というのが「なにに使おうか」っていうワクワク感があるきがします。

百均なんかで売っている蝋燭の火のようにチラチラ光る間接照明の点灯にこのセンサを利用して「ライターで照明を点ける」なんていうハックもたのしそうです。

近いうちにこのセンサを使った楽しいものとか作ってみたいです。

読んでくださりありがとうございました:)

 

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com

光による液体の表現を目指す  [前編](LEDマトリクスの自作)

お久しぶりです。前回の投稿から時間が空いてしまっていて焦ってます、よろしくお願いします。

コーヒーを飲みきり、手ごろなガラス瓶が手に入りました。

この前からコーヒー、飲み始めたんですよ。かっこいいかと思って。

結局苦いのが苦手で砂糖は4個、ミルクは入れれるだけっていうだだ甘なカフェオレもどきで飲んでいたんですけどついに瓶いっぱいのコーヒーを飲みきりました。

f:id:ten0313:20170811052018j:plain

ネスカフェのやつです。飲んでから言うことじゃないですが僕にコーヒーは合いませんでした。
コーラが一番!!!!

大きめでしっかりしててこれで何か作りたいなーと思ったんですね。なにを作ろうかと考えました。

f:id:ten0313:20170811062112j:plain

今回作ろうと思うのはこれです。

 

詳しく説明します。瓶の中にLEDを詰め込み瓶の傾きを読み取ってあたかも液体の傾きのように光らせる、というものです。

簡単そうでしょ? あと、できたら絶対に素敵。光る液体(LEDでの表現なので厳密には「液体」ではありませんが;))の詰まったガラス瓶、マジックアイテム感ありませんか?

 

製作にとりかかります

このまえ日本橋で買ったのであろう(いつ買ったっけ)LEDを引っ張り出してきました。

f:id:ten0313:20170811054615j:plain

もちろん青色LEDです、魔法感でますように。

これを瓶の中に実装するためにLED達を組み合わせLEDマトリクスの形にします。少ない端子数で制御しやすいようにするためです。LEDマトリクスについては以前の記事でも取り上げましたよね。

f:id:ten0313:20170811055504j:plain

作業を進めるためにオリジナルの治具をつくります。(治具ってもとは日本語じゃないって知ってました? ここでは割愛しますけど検索すると「へえ~」ってなるかもです)

手ごろな板材に間隔をあけて5mmの大きさの穴を開けていきます。できた手製の治具にLEDをはめ込んでハンダ付けしていくわけです。

f:id:ten0313:20170811060133j:plain

次にLEDの足をこんな風に折り曲げます。アノード側の足は根元から真下に、カソード側の足は中段辺りの途中部分で真横に折り曲げます。

f:id:ten0313:20170811063445j:plain
ちょうど泊まりにきていた友人に手伝ってもらっています、ありがたいです。
それにしても、この後自分が寝る布団の上で端子を切っていくとはなかなかファンキーですね。

用意した300個のLEDの足を曲げて加工していきます。

f:id:ten0313:20170811070517j:plain

LEDを配置してハンダ付けしていきます。

f:id:ten0313:20170811070611j:plain

とりあえず3×7列の21個のマトリクスのパーツがひとつできました。これを量産します。

f:id:ten0313:20170811071127j:plain

これで100個分くらいのですかね...(右上のが2パーツ重なっています)

たくさんつくります...たくさん...たくさん....。

f:id:ten0313:20170811071550j:plain

300個よりすこし少ないくらいのLED分です。

こうしてならべると少し壮観ですね。

f:id:ten0313:20170811071927j:plain

つぎはこれを連結していきます...、疲れてきてます。

f:id:ten0313:20170811072255j:plain

ボトルにいれるために円柱形にします。立体になったことで徐々に形になってきてる感があります。

黒いリード線は横段のアノード線にそれぞれハンダ付けしています。

f:id:ten0313:20170811073246j:plain

二つの円柱形のパーツを合体させました。これでLEDの電装部分は完成です。

制御と考えているモノの完成は次回にするとして、今回の最後に光らせてみます。

 

制御は簡単にArduinoで。列での点灯をば...。

f:id:ten0313:20170811074217g:plain

どうでしょうか。パトランプ然とした光りかたですよねw

やっぱり青色LEDはかっこいいですね。サイバー感あります。

 

でも課題というか直すべき点も見つかりました。上の点灯のGIF画像でも一瞬わかるのですが、光ってないLEDの列があるんですよね。

あと、光の輝きが強すぎます。これでは光っている部分と光っていない部分のコントラストがわかりづらく、肝心の「液体を表現」する時に障害となってしまいます。

 

次回ではここの問題解決と完成を目指します。久々の更新でしたがどうでしたか?

読んでくださりありがとうございました。

 

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com

 

SF映画の”あの扉”をつくってみる

"あの扉”とは

名前が出てこないんですよね...あの扉。

僕が言っているのはアレなんです、丸くて中央から穴が広がっていって蓋(?)のところが回転しながら開くやつ...。

f:id:ten0313:20170802063911j:plainこう閉じてて...
f:id:ten0313:20170802063931j:plainこう開いていくやつ...。

画像を検索しようにも名前がわからないのでできないんですよね...なんていうんですかこの方式の扉。

 

今回はこの扉のモデルをつくってみます。

スタートレックとかエイリアンとかスターウォーズとか...宇宙船のシーンにはこの扉がある気がします。SF感溢れててかっこいいですよね、そんな扉のモデルの製作に挑戦です。

「なにに使うため」とか特に理由はありません。あったらかっこいいかもと思ったからです。

f:id:ten0313:20170802064935j:plain

とりあえず紙に適当にイメージを描いてみます。頭のなかの「こんなかんじだっけ」ってのをわかりやすくしようと思うのですがこれがむずかしくて...。

 

切り抜いた型紙のようなものや図線を元に、プロペラのような形に素材を加工します。

f:id:ten0313:20170802065545j:plain
低発砲塩ビ板です、下書きも加工も楽です。

f:id:ten0313:20170802065713j:plain

フレームも作りました、ドア部分の動作はサーボモータを利用します。一つサーボモータの種類が違うのは青いサーボモータを一つなくしてしまっているからです。整理大事

 

f:id:ten0313:20170802065920j:plain

 こんな感じです

 

f:id:ten0313:20170802070002j:plain

 きっちり固定していきます、先が見えてきた感がありますね。

 

そういえば言ってませんでしたが制御はArduinoでします。配線もブレッドボード上で行います、あくまでも「モデル」です。

 

扉のパーツをサーボモータに取り付け動かしてみます

一つアクシデントがありました。使おうと思っていたサーボモータのSG90の一つが動きません。初期不良なのかなんなのかわかりません(長く棚で放置していました)、

次の記事までには動くものを用意しておきます。

 

f:id:ten0313:20170802070928g:plain動作状況です

SF感ないですか?これ。

サーボの一つが動かないことで歯抜けの状態になっているのが不満ですが一応ちゃんと動作しています。(正直思い描いていたドアとはちがいますが...)

 

適当に使用したスケッチを置いておきます

 

#include <Servo.h>
Servo servo;
void setup() {
servo.attach(3);
// put your setup code here, to run once:

}

void loop() {
int val = 0;
servo.write(val);
delay(1000);
val = 78;
servo.write(val);
delay(1000);
// put your main code here, to run repeatedly:

}

 

このスケッチでは1秒ごとに開閉する設定にしていますが、前回の記事で扱った超音波センサで、人がちかづいてきたのを検知して開く~って感じにしてもかっこいいですよね。

 

まとめ

結局このドアってなんて調べたら出てくるんですかね?

とりあえずのモデルですが形にしたことで、これをつかってしたいこととかも出てきましたしSFチックな見た目は僕的にすごいそそります。

次にでもいじることがあればサーボは動くものにして塗装とかしてもかっこいいかもです。皆さんはSFの場面といったらこれ!みたいなのってあります?

よんでくださりありがとうございました。

 

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com

Arduinoで超音波距離センサを使う

前回のR2D2のやつがたくさんの人に読んでいただけているみたいですごい嬉しいです、ありがとうございます

今回もアルディーノで遊んでいきます。

今回使うのは「超音波距離センサ」というモジュールです。

f:id:ten0313:20170728165340j:plain

うしろのは食べてる途中のメロンです。趣味の悪い香水ってかんじの香りが苦手であんまり好きじゃない

電子工作とかに興味はなくても、多分ロボット競技を見たことのある方なら見たことはあると思います。 

簡単に能力を説明すると「超音波を発し、モノに当たり反射して帰ってきたそれを受け取る」ことができます。(能力っていうとなんだかかっこいいですね)

 

つまりこのモジュールの前に存在する障害物までの距離を知ることができるんです。

自立式の(外部からの操作を必要としていないという意味で)競技用ロボットには大体

このモジュールが実装されているイメージがあります。

形がちょうど目のように見えてすこし愛らしく思ってしまいます。

f:id:ten0313:20170728170921j:plain

データシートの読み解き

...というよりは「どうやってつかうんかなー?」ってのいうのを説明していきます。

f:id:ten0313:20170728171940j:plain

端子部分のアップです。

左から

  • Vcc
  • Trig
  • Echo
  • Gnd

となっています。電源電圧は5Vで駆動、測定可能な距離は400cmです。

なんと3mmの精度で距離の測定ができるんですよね、これ。すごい。

 

Vccが電源電圧、GndがGNDなのは言うまでもありませんが問題はTrigピンとEchoピンです。

 

モジュールの動き

簡単に説明します(難しいことが説明できないだけですが)。

  1. Trig端子をHIGHにする
  2. パルス、つまり超音波がモジュールから発せられる。
  3. 2のパルス発信と同時にEcho端子がHIGHになる。
  4. 2で発信したパルスが反射して帰ってき、モジュールが受信する。
  5. Echo端子がLOWになる。

といった流れになっています。つまり、Trig端子に入力で測距開始、Echo端子より「HIGH時間の長さ」という形で測定結果が出力されるということですね。

 

f:id:ten0313:20170728180602p:plain

やまびこが返ってくる時間を測定すると考えるとイメージしやすいかもです。

 

距離を測定してみる。

このモジュールがすることは「パルスが帰ってくるまでの時間を測定する」ことです。

ポイントは、あくまでも帰ってくるまでの時間の測定しかできないということなんですよね。つまるところ時間を距離に変換するのはこちら側。今回で言えばArduinoが演算を行う必要があります。

そのことを念頭においてスケッチ、回路作成を行っていきます。

Vccピンを5Vピンに、GndピンをGNDピンに接続しTrigピンをデジタル8ピン、Echoピンをデジタル9ピンしておきます。


int Trig = 8;
int Echo = 9;
int Duration;
float Distance;

void setup() {
Serial.begin(9600);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
}

void loop() {
digitalWrite(Trig,LOW);
delayMicroseconds(1);
digitalWrite(Trig,HIGH);
delayMicroseconds(11);
digitalWrite(Trig,LOW);
Duration = pulseIn(Echo,HIGH);
if (Duration>0) {
Distance = Duration/2;
Distance = Distance*340*100/1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us
Serial.print(Duration);
Serial.print(" us ");
Serial.print(Distance);
Serial.println(" cm");

}
delay(500);
}

ごめんなさい、長々と解説しておきながらスケッチはSWITCHSIENCEさんのホームページにあったサンプルスケッチを使用しています。

音の速さから、返ってくるまでの時間をつかい距離を測定する、中学校でやりましたっけ。音の速さは340m/sですよね。スケッチ内ではそれをもとに演算、距離を割り出しています。

youtu.be

動いている様子です。かなり精度高いんですよね。わかっていたことですけどやっぱりびっくりしました。

 

まとめ

かなり雑な記事になってしまったかもしれません(最近の更新が少なくなってしまい焦っています)。

とてもおもしろいモジュールの話でした。これで本当にロボットとか作ってみたいですよね、最近動画で見た海外の壊しあいをしているロボットをみてから自走式のロボットを作ってみたい欲が湧いてきました。

実験的に今回は使いましたが、今後これを使った何かをつくりこの場でひろうしてみたいです。 

ありがとうございました。

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

 

twitter.com

キャンディケースのR2D2をハックする

今回は画像多めにしてみました、感想とか待ってます。

先々月、友人と一緒にディズニーランドに行ってきました。

めっちゃ楽しかったです。その時にお土産として「R2D2のキャンディ」を買ってきました。R2D2の形のキャンディボックスに丸いR2D2柄の飴がたくさん入っているユニークなお土産です。

f:id:ten0313:20170724082100j:plain

飴はヨーグルト味で結構美味しかったです。

これが実物の写真なんですけど、かなりかっこよく作られてるんですよね...これ。パッケージも好きです、スターツアーズの下の売店に売ってます。

これは是非可動させたい!光らせたい!ということで今回はこのR2D2をハックして動くようにしていきます。

適当に分解していきます

f:id:ten0313:20170724082554j:plain

ずるいかもしれませんが保存用、改造用を考えて2個買っておいてます。ちなみに僕はエピソード1が好きです、ポッドレースわくわくする。

大きさもいい感じなんですよね。高さ20cmくらいで手のひらには少し余るくらいの大きさで小さすぎず大きすぎず...。今回は「机の上の相棒」って感じのをコンセプトにしていこうと思うのでこのサイズはぴったりでした。

f:id:ten0313:20170724083049j:plain

なすがままのR2

ぎゃぴーー!頭部分を切断です。断頭です。ギロチンです。マリーアントワネットです。 まるでR2のビコロビビビャー!!って感じの悲鳴が聞こえてきます。未来の相棒になんてことをしてしまっているのでしょうか。

f:id:ten0313:20170724083323j:plain

R2独特の動きである頭がフクロウのように動くあの動きを目指すために頭の内部の溝をやすりで削り取っていきます。

f:id:ten0313:20170724083502j:plain

みごとにつるつるです。

f:id:ten0313:20170724083700j:plain

頭部側にサーボモータを固定するため低発砲塩ビ板を丸く加工し、プラスチック部品を取り付けます。

f:id:ten0313:20170724084134j:plain胴体部分には切り込みを入れておきます。この塩ビ板、けっこう加工しやすいしそれなりに強度もあり安価なのでストックしています。ホームセンターとかでも売っているのでオススメです。

電子工作のほうにも着手していきます

今回はArduino nanoでの制御です。電車の切符くらいの大きさのコンピューターとか本当にすごいですよね、R2の体に余裕で収まりきります。

電源は9V電池です。vinピンとGNDピンに接続するだけで電源はつきます。マジで便利

f:id:ten0313:20170724084708g:plain

いままで動画を載せるときはyoutubeからの経由だったんですけど今回はこの記事だけで完結できるようにGIF画像を導入しました。みやすくなりました?

お察しの方もいられるかと思いますが今回使用しているArduinoはいつもどおり中華製の互換機です。あそこまで安いと簡単に使いつぶせて便利です。基板に直接ハンダ付けとかしちゃいます。壊れるのをビビる必要もなさそうですし...w

f:id:ten0313:20170724085342g:plain

とりあえずサーボモータを接続してみました。R2がうごいてる...!!

こうなったらあとは早いですね。本体内に配線を押し込んで完成に向かいましょう。

f:id:ten0313:20170724085532j:plain

電池パックを入れてもまだ結構スペースに余裕はありそうです。まだまだ機能拡張はできそうです(今回はしませんがw)

あとは頭部分をはめて...

f:id:ten0313:20170724085719g:plain

おおおおおおお!!!

机の上であのR2D2がうごいてます!!

めっちゃ楽しいですw かっこいいし愛らしいし...!

今回のスケッチです

 

void setup() {
pinMode(3,OUTPUT);
// put your setup code here, to run once:

}

void loop() {
int kenny;
val = random(200);
analogWrite(3,kenny);
delay(1000);
// put your main code here, to run repeatedly:

}

 

すっごい簡単なプログラムです。サーボモータへのPWM出力をデジタル3ピンに設定、1秒ごとに0~200までの数値からランダムに変数"kenny"に割り当てています。

これにより1秒ごとにR2が不確定なランダムな方向に向くようになっています。

 

まとめ

今回はめっちゃ大満足な工作でした。スケッチ内のdelayの値を大きくすればR2D2が動く頻度を下げることができますよね、僕は30分に一回動くようにして作業の休憩を取る目安にもしています。なにより忘れたころに愛らしいドロイドがちょこっと動くのはなんとも癒されます。R2特有のあのビープ音を出させたり電飾関連の実装を考えてみるのも楽しそうです。

新作のエピソード8は今年2017年12月だそうですが、もう待ちきれない!

今からわくわくな僕です、読んでくださりありがとうございました。

 

 

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com

ArduinoでドットマトリクスLEDを遊ぶ [後半]

今回の記事は前回の

ArduinoでドットマトリクスLEDを遊ぶ [前編] - 僕が本当に働きたくないから書いていくブログ

の続きです。前回の記事を参照してもらうと閲覧数が増えてうれしいです。

今回は絵柄を表示させてみます

 前回に引き続きドットマトリクスLEDについての記事です。

アノード・カソードの組み合わせでLEDの点滅が制御でき、好きな位置のLEDを点灯させることができたのですが今回はその続きとして「好きな絵柄(マーク)の表示」をしてみます。

f:id:ten0313:20170719075448j:plain
前回の記事からの流用でもうしわけないです

まずはパターンの表示から

まず簡単なパターンをつくります。どうせなら動かしてみましょう。

配線は前回と同じでいきます。

スケッチは

void setup() {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(A0,LOW);
digitalWrite(A1,LOW);
digitalWrite(A2,LOW);
digitalWrite(A3,LOW);
digitalWrite(A4,LOW);
digitalWrite(A5,LOW);
// put your setup code here, to run once:

}

void loop() {
digitalWrite(A0,HIGH);
digitalWrite(11,LOW);
delay(50);
digitalWrite(A1,HIGH);
digitalWrite(10,LOW);
delay(50);
digitalWrite(A2,HIGH);
digitalWrite(9,LOW);
delay(50);
digitalWrite(A3,HIGH);
digitalWrite(8,LOW);
delay(50);
digitalWrite(A4,HIGH);
digitalWrite(7,LOW);
delay(50);
digitalWrite(A5,HIGH);
digitalWrite(6,LOW);
delay(50);
digitalWrite(13,HIGH);
digitalWrite(5,LOW);
delay(50);
digitalWrite(12,HIGH);
digitalWrite(4,LOW);
delay(50);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(A0,LOW);
digitalWrite(A1,LOW);
digitalWrite(A2,LOW);
digitalWrite(A3,LOW);
digitalWrite(A4,LOW);
digitalWrite(A5,LOW);
// put your main code here, to run repeatedly:

}

こんな感じ。宣言部分でマトリクスLEDの初期化をしてその後簡単な点滅をさせています。

動かしている動画です

youtu.be

最下段のLEDが光っていません。どうがんばっても光らないんですけど...初期不良だと予想しています。予備のモノで代用しようにも一つしか手元にないので今回はコレを使用していきます。ごめんなさい(前回のテストの時にはなんもなかったんですけど...)

可愛い絵柄を表示させます(媚び)

面白くもないスケッチや解説はストップにして可愛くてハイセンスなマークの表示をしてみます。可愛くてハイセンス...かわいくて...ハイセンス...

f:id:ten0313:20170720220615j:plain

はい!ハート!可愛いですね!

...安直すぎましたかね?良いと思ったんですが...

解説というか説明です。

さっきのパターン表示との違いに注目してください。

f:id:ten0313:20170720223306p:plain

わかりやすくなるようイラストを描きました

黒くなっている四角は点灯したマトリクスLEDのマスをイメージしています。

①のイラストを見てください。左上端から点灯する範囲が大きくなっているのを表しているのですが、これが最初に動かしていたパターン表示です。

次に②のイラストに注目してください。黒くなっている部分を光らそうとします。左上の一つのマスと右端と下に位置する「光らそうとしたポイント」の間には黄色いマスで表したマスが存在します。②で表した黒いマスすべてを一斉に光らそうとするとアノード・カソードの制御が全マスに適用されてしまい、③のように黄色く表示した光らせようとしなかったはずのマスまで光ってしまいます。

 

それではどのようにして②のような形で光らせればいいのでしょうか。

簡単です。列同士のアノード・カソードの干渉が起こらないように列を細切れにして点滅させれば問題は解決します。3つのパーツに分けて(例えば④⑤⑥のように縦に割って)切り替えれば②のような本来できないような点灯の方法も実現できます。

 

それを踏まえた上でハートマーク表示のスケッチです

void setup() {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(A0,LOW);
digitalWrite(A1,LOW);
digitalWrite(A2,LOW);
digitalWrite(A3,LOW);
digitalWrite(A4,LOW);
digitalWrite(A5,LOW);
// put your setup code here, to run once:

}

void loop() {
digitalWrite(A0,HIGH);
digitalWrite(12,HIGH);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
delay(1);
digitalWrite(A0,LOW);
digitalWrite(12,LOW);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);

digitalWrite(A1,HIGH);
digitalWrite(13,HIGH);
digitalWrite(11,LOW);
digitalWrite(7,LOW);
delay(1);
digitalWrite(A1,LOW);
digitalWrite(13,LOW);
digitalWrite(11,HIGH);
digitalWrite(7,HIGH);

digitalWrite(A2,HIGH);
digitalWrite(A5,HIGH);
digitalWrite(11,LOW);
digitalWrite(6,LOW);
delay(1);
digitalWrite(A2,LOW);
digitalWrite(A5,LOW);
digitalWrite(11,HIGH);
digitalWrite(6,HIGH);

digitalWrite(A3,HIGH);
digitalWrite(A4,HIGH);
digitalWrite(10,LOW);
digitalWrite(5,LOW);
delay(1);
digitalWrite(A3,LOW);
digitalWrite(A4,LOW);
digitalWrite(10,HIGH);
digitalWrite(5,HIGH);
// put your main code here, to run repeatedly:

}

 

ハートの形の点滅のスケッチの場合でも前述のとおり、ハートのマークを切り分け、それらを高速で点滅させることで表示させています。

完全に余談なんですが、僕なりのプログラムの工夫としてハートを単純に縦に8個に分けるのではなく、ハートが左右対称なことを利用し4つに分けて点滅させてわかりやすいプログラムにしています(このくらいでドヤ顔したらだめですか?良い考えだと思ったんですけどね...)

まとめです

今回は簡単な形でしたが可愛いハートのマークの表示と点滅の表示をしました。

8×8ってかなり表現として自由ですよね。どんなマークを表示させようか考えてる時にいろいろとやりたいことも出てきました。ネットで検索すると今回僕が書いたプログラムよりもかっこいいものも多くでてきます(それをいったらこの記事の存在意義とは...って話になる気もしますが)それらをみてみるのもすっごい面白いですよ。

今回も作ってて書いてて楽しかったです、読んでくださりありがとうございました。

 

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

 

twitter.com

ArduinoでドットマトリクスLEDを遊ぶ [前編]

 

 

今回の記事はこの記事と次回のモノの2回に渡っての内容となっています;)

次回のリンクは今回の下のほうに貼っておきますね

この前秋月でドットマトリクスLEDを買いました。

f:id:ten0313:20170719061918j:plain

8×8に発光ダイオードが配置してあります。

電光掲示板的な感じで字を表示させたり簡単なドットでマークを表示させて使うってイメージがあります。僕も使ってみたい。

あ、今回は「好きなマスのLEDを点灯させる術を知る」と言うのを目的にします。

形が整った何かを作るのは次回に回します(記事数稼げるし短いほうが読みやすいでしょ?)

とりあえずブレッドボードに挿してみます

f:id:ten0313:20170719062534j:plain

気づかれましたか? 幅がピン同士の幅が広いので僕の手持ちのブレッドボードひとつでは扱いにくいんですよね。もう一つブレッドボードを用意してまたぐ形で挿すか大きいサイズのブレッドボードを用意する必要があります。(2,3個予備のがあったと思うのですが僕は失くしてしまっていて...失くすたびに買い足しているので、部屋探したらごろごろ出てきそうでこわいです)

簡単に変換基板をつくります。

変換基板と言ってもユニバーサル基板にピンソケットを実装してリード線でブレッドボード上の狭い範囲でも扱えるようにするだけです。

f:id:ten0313:20170719071447j:plain

手ごろなサイズの基板があったのでこれを使います。両面基板ってお高いイメージです。

f:id:ten0313:20170719071633j:plain

とりあえずこんな感じですかね...ジャンプワイヤを半田付けするって邪道でしょうか...?

(ドットマトリクスLEDは8列端子の部品ですが9列のピンソケットを記事内では使用しています。これは8列のソケットが手元になかったためです。)

f:id:ten0313:20170719072003j:plain

ドットマトリクスLEDを挿すとこんな感じです。ぼやけてしまっていますがそのままボードに挿していた時とちがい一つのボードで使いやすくなっているのがわかると思います。

データシートを見ていきます

f:id:ten0313:20170719072544j:plain

前に書いたジョイスティックの記事で「中国語はわからない」と書きましたね。あれは嘘だ。今回のデータシートは英語なんですけどそれでもわかりにくかったです。

回路図を見るとどうやらピン同士の出力とGNDの切り替えで点滅を制御するみたいです(この言い方で合ってます?)

なんとなくはわかったのでアルカリ電池をぽこぽこ抜き差しして調べました(データシート読めればこんな苦労はいらないはずです)

f:id:ten0313:20170719073612j:plain昔、懸賞つきの雑誌のパズルでこんなのありましたよね。数字を元にマスを埋めて絵柄を完成させるやつ。

 

わかったこと

f:id:ten0313:20170719074139j:plain

紙への手書き資料で申し訳ないです。上のマスがマトリクスLEDの点灯部分の解説、下がピンの数字の説明です。

光る面を上にして端子部分を下、そして型番である"KEM-12288BW"と書かれている側面を左側にして見た場合の端子です。

説明に移っていきます。マスの一つ一つに数字が書かれていますよね、ピンの番号をあらわしています。例えば最上段右端の「9.13」というのは9ピンを出力、10ピンをGNDにすることで点灯すると言う意味です。

わかりにくい言い方かもです。まとめると5,2,7,1,12,8,14,9ピンは出力ピンで残りの13,3,4,10,6,11,15,16ピンがGND用のピンとなっています。

アルディーノにつなぎ好きなマスのLEDを点灯させてみます。

今回の目的である「好きなマスを光らせる」ということに挑戦します。

今回使うマトリクスLEDの端子数は16ピン、対して僕がつかうアルディーノ(中華製のUNO互換機ですが)のデジタルピンは13ピンしかありません。これに対してはアナログピンのA0ピンからA5ピンまでを使うという形で今回は対処します。

f:id:ten0313:20170719075448j:plain

ジャンプワイヤがぐちゃぐちゃでスパゲッティ状態です。回路図の表記は勘弁してください。

マトリクスLEDとアルディーノとのつなぎ方は

5=A0   2=A1   7=A2   1=A3

12=A4   8=A5   14=13   9=12

13=11   3=10   4=9   10=8

6=7   11=6   15=5   16=4   (LEDピン=アルディーノピンの並びです)

のようにしました。今回は真ん中より少し下め、左よりの手書き図で言うところの

「7,6」のマスを光らせてみます。マトリクスLEDの7ピンに接続したアルディーノ側のA2ピンを出力させ6ピンに接続したデジタル7ピンをGNDに設定すればいいわけですね。

スケッチおよび解説

今回のスケッチです。

void setup() {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(A0,LOW);
digitalWrite(A1,LOW);
digitalWrite(A2,LOW);
digitalWrite(A3,LOW);
digitalWrite(A4,LOW);
digitalWrite(A5,LOW);
// put your setup code here, to run once:

}

void loop() {
digitalWrite(A2,HIGH);
digitalWrite(7,LOW);
// put your main code here, to run repeatedly:

}

最初のsetup部分でマトリクスLEDで言う5ピンを初めとした8個のピンにLOWを宣言し13ピンを初めとしたGND用の残りのピンにHIGHを宣言してマトリクスLEDの初期化を行っています。その後loop部分でアルディーノピンのA2を出力に、デジタル7ピンをGNDに設定することで...

f:id:ten0313:20170719081104j:plain

ちゃんと左から3列目、上から5列目のLEDだけを点灯させることに成功しました!

それにしても配線ぐちゃぐちゃですね...変換基板作ったんならブレッドボードも介さずにマイコンにそのままつないでもよかったかもしれません。

まとめ

注意する必要があると感じたのはマトリクスLED側のピンのアノード・カソードがわかりやすく配列されていないと言う点です。電子部品ってこんなもん...?

とりあえず使い方がわかったのと今回の目的である「好きなマスを光らせる」と言うことが達成できたのが満足です。次回もマトリクスLEDのことについて書こうと思います。使い方を発展...とまでは行きませんがなにかわかりやすいマークでも表示させようかな....読んでくださりありがとうございました;)

次回記事です、読んでくれるとうれしいです。

t.co

 

[ この記事はブログ投稿者の憶測や考えによりつくられています。

よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してありますリンク先のツイッターアカウントに教えてくださると嬉しいです:) ]

twitter.com