フォト
無料ブログはココログ

« 14000アクセス | トップページ | 「技術者魂」と「失敗を恐れずにトライできる環境」 »

2015年11月17日 (火)

IchigoJam(10) <8x8LEDを光センサーにする>

 飽きもしないでIchigoJamと8x8マトリクスLEDで遊んでいる。

 一度試してみようと思いながら先送りしていた、LEDを光センサーとして使うアイディアを試してみた。このアイディアをは古くからあって、初めて読んだのはエレクトロニクスライフと記憶している。

 その他にも

に実装例がある。

 IchigoJamはVer1.1b5から、ポートの出力、入力を切り替えられるようになったので、IchigoJamと8X8マトリクスLEDでやってみた。 IchigoJam(8) <8x8LED>IchigoJam(9) <8x8LEDで8Qeen問題>で使用したハードウェア使う。

 表示しながら、LEDをスイッチ代わりに使える。(はずだ。)

Ichigo8x8sensor

基本動作は

OUT 1,-1 : '入力ポートに切り替える
A=ANA(5): '電圧を読む
OUT 1,0   : '出力ポートに切り替える

で、光が当たっているときと指で光を遮ったときで読み取った電圧に差が生じるはずである。

↓のようなプログラムを作って試してみると、ちゃんと変化が読み取れた。

1 'Nov.2015/Yoshi
1 'LED Senser Test
10 GOSUB 1000

100 FOR P=1 TO 2
110  M=#7FFF: X=0
120  A=0: OUT P,-1: FOR I=0 TO 19: [I]=ANA(P+4): NEXT
130  FOR I=0 TO 19
140   IF [I]<M M=[I]
150   IF X<[I] X=[I]
160   A=A+[I]
170  NEXT
180  ?"ANA(";P+4;") MIN:";M,"MAX:";X,"AVE:";A/20
190 NEXT
199 END

1000 'Initialize
1000 VIDEO 0
1020 OUT 8,0: OUT 9,0: OUT 10,0: OUT 11,0
1100 RETURN
list

run
ANA(5) MIN:57   MAX:78  AVE:65   
ANA(6) MIN:48   MAX:84  AVE:63

run
ANA(5) MIN:0    MAX:18  AVE:3
ANA(6) MIN:0    MAX:35  AVE:10

run
ANA(5) MIN:2    MAX:34  AVE:18
ANA(6) MIN:22   MAX:77  AVE:44

上から

  • 隠していない状態(8個のLEDに光が当たっている)
  • 全て隠した状態(8個のLEDに光が当たっていない)
  • 半分隠した状態(4個のLEDに光が当たっている)

 マトリクスLEDは1列のLEDのアノード側が繋がっているので、隠したLEDの数によって電圧に差が出ている。 IchigoJamの速度では隠した列の判定はできるが、座標まで特定するのは難しそうだ。

 ということで、指で触れると表示がカウントアップするプログラムを書いてみた。

1 'Nov.2015/Yoshi
1 'LED Senser Demo
10 GOSUB 500

100 'Main loop
100 I=(I+1)&7: OUT (I<<8)|[I+C]: GOSUB P: GOTO 100

200 '
200 OUT 1,-1: L=L+ANA(5): OUT 1,0: IF J=7 GOTO 280
201 GOTO 290
210 OUT 2,-1: R=R+ANA(6): OUT 2,0: IF J=15 GOTO 280
211 GOTO 290
220 L=L>>3: R=R>>3: IF D=1 GSB 700
221 GOTO 280
230 IF L<T AND U<R C=(C+8)%80: GOTO 270
231 GOTO 280
240 IF T<L AND R<U C=(C+72)%80: GOTO 270
241 GOTO 280
250 J=J+1: IF J<100 RTN
260 J=0: L=0: R=0: P=200: RTN
270 P=250: BEEP: RTN
280 P=P+10
290 J=J+1: RTN

500 'Initialize
500 VIDEO 0: FOR I=8 TO 11: OUT I,0: NEXT: CLV: P=200
510 D=1: T=55: U=40
510 T=55: U=40

600 'bit pattern
600 LET[0],#00,#3C,#E4,#EC,#F4,#E4,#E4,#3C
610 LET[8],#00,#18,#18,#38,#18,#18,#18,#FC
620 LET[16],#00,#3C,#E4,#84,#0C,#30,#60,#FC
630 LET[24],#00,#3C,#E4,#84,#1C,#84,#E4,#3C
640 LET[32],#00,#0C,#1C,#3C,#4C,#FC,#0C,#0C
650 LET[40],#00,#FC,#60,#7C,#84,#84,#E4,#3C
660 LET[48],#00,#3C,#E4,#60,#7C,#E4,#E4,#3C
670 LET[56],#00,#FC,#E4,#0C,#18,#18,#18,#18
680 LET[64],#00,#3C,#E4,#E4,#3C,#E4,#E4,#3C
690 LET[72],#00,#3C,#E4,#E4,#BC,#84,#E4,#3C
699 RETURN

700 'debug
700 ?"L:";L,"R:";R: RTN
list

 8x8LEDの両端の列を表示用兼光センサとして使っている。片方の端はOUT 1に繋がっているのでOUT 1、ANA(5)で使える。もう片方の列は OUT 8に繋がっているので ANA(1)で使えるのかと思ったが使えないようなので、OUT 2とOUT 8を入れ替えている。

 数字を表示する合間にLEDの電圧を読んでいる。ばらつきがあるので8回読んで平均を取るようにした。

 510行目のTとUが閾値だ。D=1を指定すると、電圧を表示するので、ちゃんと動くようにTとUの値を指定しなければならない。(VIDEO 0なのでシリアルで確認する)

Ichigo8x8sensor_2
ダウンロード Ichigo8x8Sensor1M.avi (981.6K)

 LEDを光センサとして使っているので周囲の明るさで読み取る電圧が変化する。ちゃんと使えるようにするには周囲の明るさに合わせて閾値を自動的に変化させる工夫が必要だ。


« 14000アクセス | トップページ | 「技術者魂」と「失敗を恐れずにトライできる環境」 »

CPUボード」カテゴリの記事

IchigoJam」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/577514/62679601

この記事へのトラックバック一覧です: IchigoJam(10) <8x8LEDを光センサーにする>:

« 14000アクセス | トップページ | 「技術者魂」と「失敗を恐れずにトライできる環境」 »