SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

イルミネーションベース・1灯版

この季節になると、多くの皆さんが工作するLED電飾。
電飾用に、IchigoJamのOUT5で制御するFET回路基板を作りました。

パーツをはんだ付けして、LEDストリングを点灯させるとこんな感じ。

ダイソーの4色LED電飾をつないで、同じくダイソーのツリーを飾ってみました。

IchigoJamのOUTポート直接だと、イルミネーションには電力が足りないのですが、このようにスイッチング回路を組むと光らせられます。
OUT5はPWMコマンドが使えるので、プログラム次第でいろいろなパターンで光らせることができます。

基板データ

*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。

(C) 2018 Shiro Saito (https://www.ichigojaman.jp)

このファイルをそのままFusion PCBで登録すれば、基板を発注できます。
基板寸法は45×15mmです。

部品表

サンプルプログラム

LEDの明るさをPWMで制御します。ふわんふわんと明滅します。

10 FOR I=1000 TO 2000 STEP 10
20 PWM 5,I
30 NEXT
40 FOR I=2000 TO 1000 STEP -10
50 PWM 5,I
60 NEXT
70 GOTO 10

輪唱ボード改

以前作った「かえるのうた」の輪唱ボードを、高音質スピーカー出力に改造しました。
動画はこちら。

圧電ブザーとは段違いにいい音が鳴ります。

以下、製作の様子です。
トランジスタ一石の簡単アンプ基板を作成。


トランジスタ2SC1815のシルクパターンが逆向きでした(^_^;) 次バージョンの基板で直す予定。

スピーカーは、100均で売っているスマホ用のスピーカーを分解して使いました。

基板にのせてはんだ付け。

IchigoJamにアンプ基板を装着。

それを3台並べて、通信線(TX、RX)、電源線(5V、GND)で接続。
ついでにお父さんかえる基板のIN1にボタンをつけて、それを押すと再生するようにしました。

プログラムも再生ボタン用に一部書き換えました。

10 '*Kaeru no Uta (Rinsho)
20 CLV
30 UART 1,1
40 LED 1
50 PLAY "R"
60 WAIT 120
70 LED 0
80 @LOOP
90 IF IN(1) AND INKEY()<>42 CONT
100 LED 1
110 PLAY "O3CDEFEDCR"
120 IF SOUND() CONT
130 ?"*"
140 PLAY "O3EFGAGFER CRCRCRCR C8C8D8D8E8E8F8F8E8R8D8R8C8R8"
150 IF SOUND() CONT
160 LED 0
170 GOTO @LOOP

ジャンプアクションBoy

PCN三重(チーム伊勢)さんが販売している携帯ゲーム機キット「IchigoBoy Pocket」。
しばらく前に入手していたのですが、組み立ててみました。

前作の「IchigoBoy」はIchigoJamのソケットに差す拡張基板だったのですが、今度の「IchigoBoy Pocket」はLPC1114のICが載っている基板で、単体でIchigoJamとして動きます。
IchigoJam+αの大きさの基板に、ゲーム機能をコンパクトに入れ込んだ設計はスゴいです。
なお、タクトスイッチとLEDは、手持ちの別の物に替えました。オリジナリティ(^_^)


せっかく作ったので、ゲーム機っぽいゲームを動かしたいと思い、以前作ったジャンプアクションゲームを移植しました。
画面が狭いので、床2段・はしご2本のステージです。プレイしていると、本当に「携帯ゲーム機で遊んでいる」感じです(^_^)

プログラム

人間キャラを操作して、敵のエイリアンに当たらないように避けながら、ジャンプしてコインを取ってください。
左右ボタンで左右移動、上下ボタンではしごの上り下り、Aボタンでジャンプします。
エイリアンに当たるとゲームオーバーです。START(BTN)ボタンを押すとリプレイします。

1 'Jump Action
2 CLV:FORI=1TO6:OUTI,-1:NEXT:LET[90],15,6,-1,0,2,1
3 CLS:?0:FORJ=48TO112STEP64:FORI=0TO15:POKE#900+I+J,1:NEXT:NEXT
4 FORJ=3TO6:LC3,J:?"H":LC12,J:?"H":NEXT:X=0:Y=6:J=0
5 IFJOR(Y%4=2)U=X-IN(7)*(X>0)+IN(6)*(X<15)
6 V=Y:IFJGOTO9
7 V=Y-IN(5)*(H=72)+IN(8)*(SCR(X,Y+1)=72)
8 IFIN(11)*(Y%4=2)J=1:G=-2
9 V=V+((G>0)-(G<0))*J:G=G+J:LCX,Y:?CHR$(H);:H=SCR(U,V):IFH=36BEEP:S=S+1:LC0,0:?S:H=0
10 LCU,V:?CHR$(250);:X=U:Y=V
11 IFH=64M=1
12 IFY%4=2J=0
13 IFRND(40)=0GSB24
14 FORA=0TO5STEP5:IF[A]GSB21
15 IF(![A])*(!RND(20))GSB19
16 NEXT:WAIT6:IF!MGOTO5
17 BEEP30,30:LC4,1:?"GAME OVER":WAIT30
18 IFBTN()RUNELSECONT
19 R=RND(2)*3:[A+1]=[90+R]:[A+2]=[91+R]:[A+4]=SCR([A+1],[A+2]):IF[A+4]RTN
20 [A]=1:[A+3]=[92+R]:LC[A+1],[A+2]:?"@";:RTN
21 D=[A+1]+[A+3]:E=[A+2]:LC[A+1],[A+2]:?CHR$([A+4]);:IF(D<0)OR(D>15)[A]=0:RTN
22 [A+4]=SCR(D,E):LCD,E:?"@";:IF[A+4]=250M=1
23 [A+1]=D:[A+2]=E:RTN
24 B=RND(16):C=4*RND(2):IFSCR(B,C)GOTO24
25 LCB,C:?"$":RTN

※起動メニューから動かすことを想定して、「SWITCH1」は入れていません。