Hatena::ブログ(Diary)

SHIROのモバイル日記 RSSフィード Twitter

2017-07-21

[]ShingoDake(信号ダケ)

IchigoDake工作の新作「ShingoDake」を作ってみました。
f:id:shiro0922:20170721183041j:image:w360

f:id:shiro0922:20170721175727j:image:w360

f:id:shiro0922:20170721175713j:image:w360
I2C接続の8bitI/OエキスパンダIC「PCF8574AN」を使って、LEDを光らせて信号機にしました。
光るアクセサリ気分でいかがでしょうか。

回路図はこちら。
f:id:shiro0922:20170721184654p:image:w360

プログラムリストはこちら。

10 '*Shingo Dake
20 '@LOOP
30 C=7:P=1:GSB 210
40 WAIT 300
50 C=6:GSB 210
60 WAIT 120
70 C=5:GSB 210
80 WAIT 120
90 P=2:GSB 210
100 WAIT 240
110 FOR J=1 TO 3
120 P=2:GSB 210
130 WAIT 30
140 P=0:GSB 210
150 WAIT 30
160 NEXT
170 P=1:GSB 210
180 WAIT 120
190 GOTO 20
200 '
210 '@SIGNAL
220 LED 1
230 D=1<<C:Q=1<<P
240 POKE #700,#FF-D-Q
250 LED I2CW(#38,#700,1)
260 RTN
もちろん、違うプログラムを仕込んだIchigoDakeに差し替えれば、信号のパターンを変えられます。

材料

データシートの12〜13ページに、I2Cデバイスアドレスの設定方法が書いてあります。
今回はA0,A1,A2端子をGNDに落としているので、ライトモードアドレスは70hになります。
ただしIchigoJamのI2CR/I2CWコマンドでは、最後のR/Wビットを入れない7ビットでアドレスを指定するので、プログラムでは「#38」(38h)で指定しています(250行)。
なお、220行と250行でオンボードLEDを点滅させていますが、もしI2Cの通信でエラーが出た場合はLEDが点きっぱなしになります。エラー確認用です。

2017-07-13

[]上田城やぐら門

昨年の大河ドラマ真田丸」で有名になった、我らが上田城
復元されているやぐら門のペーパークラフトに、LEDを仕込んでIchigoJamで光らせてみました。
f:id:shiro0922:20170713161925j:image:w360

f:id:shiro0922:20170713211056j:image:w360

f:id:shiro0922:20170713213438p:image:w360

ペーパークラフトは、お土産品として市内各所で売っている品です。
f:id:shiro0922:20170712221313j:image:w360

LEDをただ光らせるだけでは面白くないので、PWMで電圧を制御して、かがり火のようにチラチラと明るさが変わるようにしています。プログラムは以下のとおり。

10 FOR P=2 TO 4
20 PWM P,RND(2000)
30 WAIT 5
40 NEXT
50 GOTO 10

こうしたご当地もののペーパークラフトは各地にあると思うので、子ども達の工作課題にいいかもしれません。

2017-07-08

[]だるまさんがころんだ

IchigoJamと赤外線センサーを組み合わせて、昔懐かしい「だるまさんがころんだ」を作ってみました。
f:id:shiro0922:20170708205918j:image:w360

遊び方は以下のとおりです。

  • (1)ボタンを押して自動起動させると「ピッ、ピッ、…」と10秒カウントするので、その間にIchigoJamから5mほど離れて立ってください。
  • (2)IchigoJamが「だるまさんがころんだ」とメロディでしゃべります。その間に動いてIchigoJamへ近づいてください。たまに早口でしゃべりますので注意してください。
  • (3)言い終わったらチェックタイムです(ランダムで長かったり短かったりします)。赤外線センサーで動きをチェックされるので、この時間はピクリとも動いてはいけません。動いてしまうと「プー」とエラー音が鳴ってゲームオーバーです。
  • (4)(2)へ戻ってくり返します。「だるまさんが…」と言っている間にIchigoJamへ辿りついてボタンを押すと、「ピピピピー」と終了音が鳴り、人間の勝ちです。
  • (5)ゲーム終了後にボタンを押すと、(1)に戻ってリプレイします。

センサーの接続回路図はこちらです。
f:id:shiro0922:20170708223249p:image:w360
プログラムは以下のとおりです。簡単な短いプログラムなので、参考にラベルを残しています。
画面に状況を表示していますが、画面が無くても音とLEDの点滅だけでも十分遊べます。

※(7/18修正)乱数の出し方、ブザー音を若干修正。

10 '*Darumasan ga koronda
20 CLV:SRND ANA(2):LED 0:WAIT 60
30 FOR T=1 TO 10:LED 1:?T:BEEP:LED 0:WAIT 60:NEXT
40 '@GLOOP
50 '
60 ?"*Darumasan ga koronda!"
70 LED 1:L=2:IF RND(4) L=4
80 IF L=4 GSB 380 ELSE GSB 400
90 T=0
100 '@BLOOP
110 IF BTN() GOTO 220
120 T=T+1:IF T<L*300 GOTO 100
130 LED 0
140 '
150 ?"-Checking..."
160 T=0:C=5+RND(5)
170 '@CLOOP
180 IF IN(2) GOTO 330
190 T=T+1:IF T<C*200 GOTO 170
200 GOTO 40
210 '
220 '@GWIN
230 LED 1:?"===You WIN!==="
240 FOR I=1 TO 4
250 BEEP 10,3:WAIT 6
260 NEXT
270 BEEP 10,100
280 '@REPLAY
290 WAIT 60
300 IF !BTN() CONT
310 RUN
320 '
330 '@GEND
340 LED 1:?"===You Move!==="
350 BEEP 10,100
360 GOTO 280
370 '
380 '@PLAYL
390 PLAY "L8CFFFFFCFFF":RTN
400 '@PLAYS
410 PLAY "L16CFFFFFCFFF":RTN

材料

赤外線センサー

PanasonicのAMN31111(標準検出タイプ・検知範囲5m・デジタル出力)を使っています。

人間や動物など動いているもの(=赤外線量が変化するもの)を検知します。逆に止まっているものは検知できないので、今回はこの性質を利用してゲームにしています。
なお、検知範囲10mの「AMN34111」を使った方が、遊びとしては面白いかもしれません。いずれ試してみたいです。
また、用途によってはアナログ出力タイプの「AMN21111」を使うといいかもしれません。

スピーカー

音を大きく出すために、共立電子の「IchigoJamエイリアンスピーカー」を使っています。

その後(7/18)

赤外線センサーをAMN34111(検知範囲10m)に変えてみました。
が、実際にプレイしてみると「多少検知範囲が広くなったかな?」という程度です。
アナログタイプのセンサーにして、しきい値を調整した方がいいかもしれません。
f:id:shiro0922:20170718160152j:image:w360

2017-07-04

[]連打OLED

IchigoDotでおなじみの「連打ゲーム」の有機EL版です。もちろんNameDakeでも遊べます(^_^)
f:id:shiro0922:20170704003810j:image:w360

f:id:shiro0922:20170704003844j:image:w360

f:id:shiro0922:20170704004239j:image:w360

  • 起動すると「3、2、1、」とダウンカウントされて、ゲームが始まります。
  • ボタンを連打して、64個のドットを消してください。
  • 全て消すと所要タイムが表示されます。ボタンを押すとリプレイします。

OLEDサブルーチンは、国野さんのサイトに掲載されていた高速・横画面表示版を使っています。が、表示の高速化のためにエラーチェックなど一部の処理を省いています。ちょっと行儀の悪いプログラムです。

※7/5修正:処理を変更して若干高速化。

1 '*Renda OLED
2 CLS:GSB80:FORY=0TO7:LC0,Y
3 FORX=0TO7:?CHR$(233);:NEXT
4 NEXT:GSB91:WAIT30
5 LC9,0:FORT=3TO1STEP-1:?T;:BEEP:GSB91:WAIT40:NEXT
6 LC9,1:?"START!":BEEP10,30:GSB91:CLT
7 FORY=0TO7:LC0,Y:FORX=0TO7
8 IF!BTN()CONT
9 IFBTN()CONT
10 ?".";:BEEP:GSB91
11 NEXT:NEXT:BEEP20,30:T=TICK()
12 LC9,2:?T/60;".";T%60/6:GSB91:WAIT60
13 IF!BTN()CONT
14 RUN
80 'INIT
81 let[0],#4000,33,#227F,#700,#B5F0,#1840,#230B,#21B,#18C9,#4694,#2410
82 let[11],#7803,#DB,#18D2,#2708,#2300,#2507,#5D56,#40FE,#415B,#3D01
83 let[21],#D2FA,#700B,#3101,#3F01,#D1F4,#3001,#4662,#3C01,#D1EC,#BDF0
84 let[90],#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
85 ifi2cw(60,#800,1,#8B4,20)?"E"
86 video3:copy#A00,#800,62:clv
90 'OUT
91 for[98]=0to7:i=usr(#A08,#900+[98]*16)|i2cw(60,#A01,1,#B00,128):next:rtn

連打OLEDに合わせて、NameDakeのメインプログラムも変更。名前を表示した状態でボタンを1秒以上長押しすると、連打ゲームが遊べます。SAVEスロット配置は以下のようにしてください。

10 '*NameDake Main
20 CLS:A=#900
30 LET [0],0,0,12,12,13,12,4,0,8,12,13,12,12,12,13,12
40 LET [16],0,0,0,9,8,1,0,0,0,0,1,0,0,0,1,0
50 LET [32],0,0,0,8,9,0,0,0,0,7,3,5,0,13,13,5
60 LET [48],12,12,3,1,0,3,9,12,4,13,12,5,0,12,13,4
70 GSB 200
80 LET [0],0,10,2,3,3,3,10,0,0,5,0,5,8,6,2,12
90 LET [16],0,10,3,3,7,3,11,0,0,7,3,5,2,4,5,6
100 LET [32],0,10,8,1,5,9,10,0,0,5,0,5,0,6,7,4
110 LET [48],0,1,0,0,1,0,2,0,2,0,0,1,2,0,1,2
120 GSB 200
130 GSB 900
140 VIDEO 0,30
150 IF !BTN() CONT
160 CLT
170 IF BTN() CONT
180 IF TICK()<2 GOTO 150
190 BEEP:VIDEO 1:LRUN FILE()+1
200 'Prt Half
210 FOR Y=0 TO 3
220 FOR X=0 TO 15
230 POKE A,[Y*16+X]+#80
240 A=A+1
250 NEXT
260 A=A+16
270 NEXT
280 RTN
900 'OLED OUT
910 forP=#7D2to#7D7:ifi2cw(60,#7D0,1,P,1)?"E:ADR";hex$(P)
915 next
920 forY=0to7:D=usr(#79A,#900+Y*32):ifi2cw(60,#7D1,1,#700,128)?"E"
930 next
940 rtn

2017-07-01

[]NameDake(ネームダケ)

FacebookのIchigoJam-FANグループで、IchigoJam TのCN5ソケットに直接差せる有機ELディスプレイOLED)が話題になっています。
(詳しくは国野さんのページをご参照ください)
このOLEDと、最近発売になったIchigoDakeを組み合わせて、胸ポケットに差せるミニ名札を作ってみました。
f:id:shiro0922:20170701201820j:image:w360

f:id:shiro0922:20170701202100j:image:w360

f:id:shiro0922:20170701202038j:image:w360
名札としては小さめですが、首から下げるフルバージョンより軽いです(笑)
名前データが異なるIchigoDakeを用意すれば、差し替えるだけで違う名前が表示できます。
なお、写真では単5電池×2本で動かしていますが、これだと40分ほどで切れてしまいます。
ボタン電池・CR2032も試しましたが同程度)
もっと保たせたいので、他の電池もいろいろ試してみます。

※その後いろいろ実験した所、単5電池×2本で少なくとも12時間は保つことが確認できました。

回路図はこちら。IchigoDake・OLED電池をただつないだだけです。
f:id:shiro0922:20170701204210p:image:w360

プログラムはこちら。初期化プログラムと本体の2スロットになっています。
OLEDサブルーチンは、Ruria AmanagiさんがIchigoJam-FANグループで公開した、マシン語横書きサブルーチンを使わせていただきました。

初期化プログラム(スロット0に入れて自動起動

10 '*NameDake Initialize
20 GSB800
30 LRUN FILE()+1
800 'OLED INIT
810 poke#7D0,#00,#40,#21,#00,#7F,#22,#00,#07,#AE,#D5,#80,#8D,#14,#20,#00,#A1,#C8,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
820 forP=#7D8to#7EB:ifi2cw(60,#7D0,1,P,1)?"E:Init";hex$(P)
830 next
840 poke #79a,#f0,#b5,#40,#18,#07,#23,#1b,#02,#c9,#18,#94,#46,#10,#24,#03,#78
850 poke #7aa,#db,#00,#d2,#18,#08,#27,#00,#23,#07,#25,#56,#5d,#fe,#40,#5b,#41
860 poke #7ba,#01,#3d,#fa,#d2,#0b,#70,#01,#31,#01,#3f,#f4,#d1,#01,#30,#62,#46
870 poke #7ca,#01,#3c,#ec,#d1,#f0,#bd
880 rtn

●本体プログラム(スロット1に入れる)
10 '*NameDake Main
20 CLS:A=#900
30 LET [0],0,0,12,12,13,12,4,0,8,12,13,12,12,12,13,12
40 LET [16],0,0,0,9,8,1,0,0,0,0,1,0,0,0,1,0
50 LET [32],0,0,0,8,9,0,0,0,0,7,3,5,0,13,13,5
60 LET [48],12,12,3,1,0,3,9,12,4,13,12,5,0,12,13,4
70 GSB 200
80 LET [0],0,10,2,3,3,3,10,0,0,5,0,5,8,6,2,12
90 LET [16],0,10,3,3,7,3,11,0,0,7,3,5,2,4,5,6
100 LET [32],0,10,8,1,5,9,10,0,0,5,0,5,0,6,7,4
110 LET [48],0,1,0,0,1,0,2,0,2,0,0,1,2,0,1,2
120 GSB 200
130 GSB 900
140 VIDEO 0,30:END
200 'Prt Half
210 FOR Y=0 TO 3
220 FOR X=0 TO 15
230 POKE A,[Y*16+X]+#80
240 A=A+1
250 NEXT
260 A=A+16
270 NEXT
280 RTN
900 'OLED OUT
910 forP=#7D2to#7D7:ifi2cw(60,#7D0,1,P,1)?"E:ADR";hex$(P)
915 next
920 forY=0to7:D=usr(#79A,#900+Y*32):ifi2cw(60,#7D1,1,#700,128)?"E"
930 next
940 rtn

ダウンロード
リンク集
アクセスカウンター