SHIROのIchigoJam日記

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

リアル信号機PCB

※この記事は「IchigoJam Advent Calendar 2023」に参加しています。

以前に作った「リアル信号機」
www.ichigojaman.jp
情報センターで展示していて、子ども達にも大人気です。
が、ユニバーサル基板でケーブルを配線して作ったので、子どもがいじってよく壊します(^_^;)

子どもはリード線を引っこ抜いたり、基板に立っているFETをへし折ったりします(^_^;)

修理しながら運用していたのですが、「こうなったらプリント基板(PCB)を作ろう」と思い立って、作ってみました。

IchigoJam/IchigoDakeに差して動かすシールド基板です。
12Vの電源プラグを差して、そこからIchigoJamや信号機LEDの電源を取ります。


PCBになったお陰で、配線がすっきりしました。
これならそうそう壊されないでしょう(^_^)

回路図


OUT1~3が車用信号の青・黄・赤、OUT5~6が歩行者信号の赤・青です。
信号のLEDは12V用なので、FET回路でスイッチングしています。

基板データ

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

(C) 2023 Shiro Saito (https://www.ichigoaman.jp)

信号機プログラム

  • 車用と歩行者用の信号機が光ります。
10 @ARUN:'TRAFFIC LIGHT
20 OUT 0
30 '*LOOP
40 OUT 1,1
45 OUT 5,1
50 WAIT 300
60 OUT 1,0
70 OUT 2,1
80 WAIT 120
90 OUT 2,0
100 OUT 3,1
110 WAIT 120
120 OUT 5,0
130 OUT 6,1
140 WAIT 300
150 FOR I=1 TO 3
160 OUT 6,1
170 WAIT 30
180 OUT 6,0
190 WAIT 30
200 NEXT
210 OUT 5,1
220 WAIT 120
300 OUT 3,0
310 GOTO 30

POVシールド

※この記事は「IchigoJam Advent Calendar 2023」に参加しています。

IchigoJamやIchigoDakeに差してバーサライタ(POV)を作る拡張基板です。
電源の乾電池も搭載しているので、単独で動かせます。
紹介動画はこちら。

www.youtube.com


IchigoJamやIchigoDakeのピンソケットに差して使います。

回路図


OUT1~8に8本のLEDをつないでいます。

基板データ

*同じ基板を2枚配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2023 Shiro Saito (https://www.ichigoaman.jp)

バーサライタ(POV)プログラム

  • 左右に振るとハート形「♥」が見えます。
  • ファイル0番に保存すると、電源ONで自動起動します。
10 @ARUN:OUT 8,0
100 [0]=`01110000
110 [1]=`11111000
120 [2]=`11111100
130 [3]=`01111110
140 [4]=`00111111
150 [5]=`01111110
160 [6]=`11111100
170 [7]=`11111000
180 [8]=`01110000
190 FOR L=0 TO 9
200 OUT [L]
210 NEXT
220 GOTO 190

100~180行が文字パターンで、「1」がLED点灯、「0」が消灯です。
リストを横に寝かせて見ると、「1」のパターンがハート形になっているのがわかります。
この9行のパターンを変えると、見える文字が変わります。
ただし、右に振る時と左に振る時で反対に見えるので、ハートのように左右対称の文字の方が綺麗に見えます。

Advent Calendar

※この記事は「IchigoJam Advent Calendar 2023」に参加しています。

クリスマスに1日ずつ近づいてドキドキする「Advent Calendar」(アドベント・カレンダー)のプログラムを作ってみました。
IchigoJamにRTCモジュール(時計基板)をつないで、日時を読み取りながらカレンダーを表示します。
(RTCモジュール無し版プログラムもあります)

RTCモジュールは、こちらのDS3231を搭載した品。amazonやAliExpressなどで入手できます。


GND、+3.3V、SCL、SDAの4本の端子を接続します。IchigoJamのCN5ソケットとはSCL・SDAの配置が逆なので、クロス配線します。


12/24までは、上の3行のカレンダーが1日ずつ進んで表示されます。


12/25になると、下の大きな「25」が表示されます。

RTCモジュール設定プログラム

福野さんのプログラムです。年月日・時分秒を入力して、RTCモジュールに設定します。

1 'TIME SET
300 P=#707
310 INPUT"Y:20",X:GOSUB400
320 INPUT"M:",X:GOSUB400
330 INPUT"D:",X:GOSUB400
340 X=0:GOSUB400
350 INPUT"H:",X:GOSUB400
360 INPUT"M:",X:GOSUB400
370 INPUT"S:",X:GOSUB400
375 POKE #700,0
380 IF I2CW(#68,#700,1,#701,7) ERR
390 END
400 X=X/10*16+X%10:POKE P,X:P=P-1:RETURN

プログラム0:PCG文字設定

カレンダー用の「1」~「24」の数字を設定します。

10 '*ADVENT CALENDAR CHR SET
20 COPY 226*8,49*8,72
30 POKE 235*8,#26,#69,#29,#29,#29,#29,#76,0
40 POKE 236*8,#22,#66,#22,#22,#22,#22,#77,0
50 POKE 237*8,#26,#69,#21,#21,#26,#28,#7F,0
60 POKE 238*8,#26,#69,#21,#26,#21,#29,#76,0
70 POKE 239*8,#23,#65,#29,#29,#2F,#21,#71,0
80 POKE 240*8,#2F,#68,#2E,#21,#21,#29,#76,0
90 POKE 241*8,#26,#68,#2E,#29,#29,#29,#76,0
100 POKE 242*8,#2F,#69,#21,#22,#22,#24,#74,0
110 POKE 243*8,#26,#69,#29,#26,#29,#29,#76,0
120 POKE 244*8,#26,#69,#29,#29,#27,#21,#76,0
130 POKE 245*8,#66,#99,#19,#19,#29,#C9,#F6,0
140 POKE 246*8,#62,#96,#12,#12,#22,#C2,#F7,0
150 POKE 247*8,#66,#99,#11,#11,#22,#CC,#FF,0
160 POKE 248*8,#66,#99,#11,#16,#21,#C9,#F6,0
170 POKE 249*8,#63,#95,#19,#19,#2F,#C1,#F1,0
180 LRUN FILE()+1

プログラム1:カレンダー表示

プログラム0とプログラム1は、ファイル0とファイル1など、連続した番号のファイルに置いてください。
ファイル0とファイル1に置いた場合は「LRUN 0」で実行します。

10 '*ADVENT CALENDAR
20 GSB @TIMEREAD
30 @LOOP
40 GSB @CAL:E=D
50 IF M=12 && D<25 LC (D-1)%8*2,(D-1)/8,1
60 GSB @TIMEREAD:IF E=D CONT
70 GOTO @LOOP
80 @CAL
90 VIDEO 3:CLS
100 FOR P=1 TO 24
110 IF M=12 && P<=D ?CHR$(225+P); ELSE ?CHR$(255);
120 ?" ";
130 NEXT
140 IF M<12 OR D<25 LC 0,4:FOR Z=1 TO 112:?CHR$(255);:NEXT:RTN
150 FOR Z=0 TO 7
160 W=PEEK(50*8+Z):N=128
170 LC 0,4+Z
180 FOR B=0 TO 6
190 IF W&N>0 ?CHR$(1); ELSE ?CHR$(0);
200 N=N>>1
210 NEXT
220 NEXT
230 FOR Z=0 TO 6
240 W=PEEK(53*8+Z):N=128
250 LC 8,4+Z
260 FOR B=0 TO 7
270 IF W&N>0 ?CHR$(1); ELSE ?CHR$(0);
280 N=N>>1
290 NEXT
300 NEXT
310 RTN
320 @TIMEREAD
330 POKE #700,0
340 IF I2CR(#68,#700,1,#701,7) ERR
350 X=PEEK(#706)
360 M=X>>4*10+X&15
370 X=PEEK(#705)
380 D=X>>4*10+X&15
390 RTN

プログラム1:RTCモジュール無し版

実行すると日付を聞かれるので、今日の日付(1~31)を入力します。今日のアドベントカレンダーが表示されます。
毎日の起動時に日付を指定してください。

10 '*ADVENT CALENDAR
20 INPUT "DAY=?",D
30 @LOOP
40 GSB @CAL:E=D
50 IF D<25 LC (D-1)%8*2,(D-1)/8,1
60 WAIT 60
70 GOTO @LOOP
80 @CAL
90 VIDEO 3:CLS
100 FOR P=1 TO 24
110 IF P<=D ?CHR$(225+P); ELSE ?CHR$(255);
120 ?" ";
130 NEXT
140 IF D<25 LC 0,4:FOR Z=1 TO 112:?CHR$(255);:NEXT:RTN
150 FOR Z=0 TO 7
160 W=PEEK(50*8+Z):M=128
170 LC 0,4+Z
180 FOR B=0 TO 6
190 IF W&M>0 ?CHR$(1); ELSE ?CHR$(0);
200 M=M>>1
210 NEXT
220 NEXT
230 FOR Z=0 TO 6
240 W=PEEK(53*8+Z):M=128
250 LC 8,4+Z
260 FOR B=0 TO 7
270 IF W&M>0 ?CHR$(1); ELSE ?CHR$(0);
280 M=M>>1
290 NEXT
300 NEXT
310 RTN