SHIROのIchigoJam日記

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

Ichigo鉄琴で「ロンドン橋落ちた」

※この記事は「IchigoJam Advent Calendar 2018」にエントリーしています。

先日作った「Ichigo鉄琴」で、マザーグースの有名な曲「ロンドン橋落ちた」(London Bridge Is Falling Down)を叩いてみました。
ただ叩くだけでは面白くないので、ちょっとエモい動きも加えました。
(前作「Ichigoチャイム」のウォームアップが大人気だったので 笑)
動画はこちら。

【IchigoJam】ロンドン橋落ちた

プログラム

以下のメインプログラムをIchigoJam親機と子機のスロット0に、曲データをスロット1に入れて、親機と子機をボタンを押しながら電源ONして自動起動します。親機のボタンを押すと演奏を開始します。

メインプログラム(親機)

1 '*Tekkin London P
2 CLV:LED 1:WAIT 60:UART 0
3 LET [90],200,110,207,115,212,120,220,125:M=165:N=135
4 G=5:LRUN 1
5 @RESTART
6 FOR P=2 TO 5:PWM P,[86+P*2]:NEXT
7 OUT 0:E=0
8 IF !BTN() CONT
9 LED 1:CLK:UART 1:?"*":UART 0
10 @PLAYLOOP
11 FOR I=0 TO L
12 X=[I]&15:Z=[I]&768/256:E=!E
13 B=1:FOR A=1 TO 7 STEP 2
14 P=A/2+2
15 IF A=X GSB @ATTACK ELSE GSB @EMO
16 NEXT
17 WAIT 12
18 B=0:FOR A=1 TO 7 STEP 2
19 P=A/2+2
20 GSB @ATTACK
21 NEXT
22 WAIT 3:IF Z=1 WAIT 15
23 NEXT
24 FOR P=2 TO 5
25 PWM P,N:NEXT
26 WAIT 180
27 GOTO @RESTART
28 @ATTACK
29 PWM P,[86+P*2+B]:RTN
30 @EMO
31 IF E PWM P,M ELSE PWM P,[86+P*2]
32 RTN

メインプログラム(子機)

1 '*Tekkin London C
2 CLV:CLK:LED 1:WAIT 60:UART 1,1
3 LET [90],62,155,75,170,62,160,70,170:M=115:N=145
4 G=5:LRUN 1
5 @RESTART
6 FOR P=2 TO 5:PWM P,[86+P*2]:NEXT
7 OUT 0:E=0
8 IF INKEY()!=42 CONT
9 CLK:LED 1
10 @PLAYLOOP
11 FOR I=0 TO L
12 X=[I]&15:Z=[I]&768/256:E=!E
13 B=1:FOR A=2 TO 8 STEP 2
14 P=A/2+1
15 IF A=X GSB @ATTACK ELSE GSB @EMO
16 NEXT
17 WAIT 12
18 B=0:FOR A=2 TO 8 STEP 2
19 P=A/2+1
20 GSB @ATTACK
21 NEXT
22 WAIT 3:IF Z=1 WAIT 15
23 NEXT
24 FOR P=2 TO 5
25 PWM P,N:NEXT
26 WAIT 180
27 GOTO @RESTART
28 @ATTACK
29 PWM P,[86+P*2+B]:RTN
30 @EMO
31 IF E PWM P,M ELSE PWM P,[86+P*2]
32 RTN

曲データ「ロンドン橋落ちた」(London Bridge Is Falling Down)

10 '*London Bridge
20 LET [ 0],#205,#206,#205,#204,#203,#204,#205,#200
30 LET [ 8],#202,#203,#204,#200,#203,#204,#205,#200
40 LET [16],#205,#206,#205,#204,#203,#204,#205,#200
50 LET [24],#202,#200,#205,#200,#203,#201,#200,#200
60 LET [32],#205,#206,#205,#204,#203,#204,#205,#200
70 LET [40],#202,#203,#204,#200,#203,#204,#205,#200
80 LET [48],#205,#206,#205,#204,#203,#204,#205,#200
90 LET [56],#202,#200,#205,#200,#203,#201,#200,#200
100 L=63
110 LRUN 0,G

※他のマレットのエモい動きと合わせるために、全て8分音符と8分休符にしています。それぞれの音で、マレットが下がる/上がるを交互にくり返します。

Ichigo鉄琴

※この記事は「IchigoJam Advent Calendar 2018」にエントリーしています。

12/15~16の上田市マルチメディア情報センターのクリスマスイベント「St. Media Xmas 2018」でのライブ放送「Xmas TV」で、IchigoJamで演奏する鉄琴作りをやりました。
(前作「Ichigoチャイム」の発展形です)
www.ichigojaman.jp
ライブではとりあえずド~上のドまでの8音階を叩く所までできたのですが、その後手直しや作り込みをして、無事に完成しました(^_^)v
動画はこちら。

【IchigoJam】Ichigo鉄琴


f:id:shiro0922:20181220225835j:plain

前作と同じく、鉄琴工作キットをベースに、8個のサーボモーターを配置して、マレット(バチ)を制御します。
f:id:shiro0922:20181220225856j:plain

マレットは途中で切断してスプリングで接続。
叩く時に鉄琴上のストッパーで柄が止まり、ヘッドがしなって鉄琴のキーを叩きます。
この機構のお陰で、大人気だったウォームアップ動作は不要になりました(笑)
f:id:shiro0922:20181220225924j:plain

ストッパーは、ホームセンターで買った6mm径のアクリル棒に、ゴムバンドを貼り付けて作りました。
f:id:shiro0922:20181219000634j:plain

IchigoJamは親子2台で、サーボモーターを4個ずつ制御。
TX/RXを接続して、選曲No.と、演奏スタートのタイミングを、親機→子機へ送っています。
電源はお馴染みのIoT用モバイルバッテリ「Cheero Canvas」。
f:id:shiro0922:20181220231456j:plain

基板データ「Servo Base 4」

IchigoJamのOUT2~5で、サーボモーター4個を制御するシールド基板です。

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

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

基板の回路図は以下のとおりです。
IchigoJamのOUT2~5でサーボモーターを計4個制御します。
f:id:shiro0922:20181230195043p:plain

プログラム

IchigoJam親機と子機に、下記のメインプログラムをスロット0、曲データをスロット1~3に配置しています。
親機と子機をボタンを押しながら電源ONしてメインプログラムを自動起動し、親機の有機EL画面で曲1~3をボタンを押して選択します。

メインプログラム(親機)

1 '*Tekkin P
2 CLV:LED1:WAIT60:UART0:GSB26
3 LET[90],200,110,205,120,210,120,220,125
4 FORP=2TO5:PWMP,[86+P*2]:NEXT
5 OUT0:CLS:S=0
6 IFTICK()>59GSB23
7 IF!BTN()GOTO6
8 CLK:UART1:?S:UART0:G=9:LRUNS
9 IFBTN()CONT
10 LC0,2:?"Push BTN":GSB34
11 IF!BTN()CONT
12 LED1:CLK:UART1:?"*":UART0
13 FORI=0TOL
14 X=[I]&15:Y=[I]&240/16:Z=[I]&768/256
15 B=1:A=X:IFA%2GSB25
16 A=Y:IFA%2GSB25
17 WAIT14
18 B=0:A=X:IFA%2GSB25
19 A=Y:IFA%2GSB25
20 WAIT1:IFZ=1WAIT15
21 NEXT
22 GOTO4
23 CLT:S=S+1:IFS=4S=1:CLS
24 ?CHR$(233);:GSB34:RTN
25 P=A/2+2:PWMP,[86+P*2+B]:RTN
26 poke#780,#00,#40,#21,#00,#7F,#22,#00,#07,#AE,#D5,#80,#8D,#14,#20,#00,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
27 forP=#788to#799:i=i2cw(60,#780,1,P,1)
28 next
29 poke #79a,#70,#b5,#40,#18,#07,#23,#1b,#02
30 poke #7a2,#c9,#18,#10,#24,#03,#78,#db,#00
31 poke #7aa,#d3,#18,#1d,#68,#0d,#60,#5d,#68
32 poke #7b2,#4d,#60,#20,#30,#08,#31,#01,#3c
33 poke #7ba,#f4,#d1,#70,#bd
34 fork=0to7:j=usr(#79A,#907-k):j=i2cw(60,#781,1,#700,128):next:rtn

メインプログラム(子機)

1 '*Tekkin C
2 CLV:CLK:LED 1:WAIT 60:UART 1,1
3 LET[90],60,155,75,170,62,160,70,167
4 FOR P=2 TO 5:PWM P,[86+P*2]:NEXT
5 OUT 0:CLK
6 S=INKEY()-48:IF S<1 OR S>3 CONT
7 CLK:G=8:LRUNS
8 IF INKEY()!=42 CONT
9 CLK:LED 1
10 FOR I=0 TO L
11 X=[I]&15:Y=[I]&240/16:Z=[I]&768/256
12 B=1:A=X:IFA&&A%2=0GSB20
13 A=Y:IFA&&A%2=0GSB20
14 WAIT14
15 B=0:A=X:IFA&&A%2=0GSB20
16 A=Y:IFA&&A%2=0GSB20
17 WAIT1:IFZ=1WAIT15
18 NEXT
19 GOTO 4
20 P=A/2+1:PWMP,[86+P*2+B]:RTN

※3行目のデータは、4個のサーボモーターの真上/下ろした時の値です。これはマレットの作り方や各サーボモーターの個体差によって変わるので、実際に動かして調整する必要があります。
なお、マレットを真上で止めているのは、斜めで止めるとハンチング(振動)を起こしてしまうからです。実はハンチング抑制のために、マレットの長さの短縮、サーボモーターのアームの取り付け角やプログラムのパラメータ調整など、かなり試行錯誤しています。もっとトルクが大きいサーボモーターを使えば解決しますが、とても高価なので(^_^;)

曲データ「学校チャイム」(ウェストミンスターチャイム)

10 '*Tekkin - Chime
20 LET [ 0],#105,#107,#106,#102,#100,#100
30 LET [ 6],#105,#106,#107,#105,#100,#100
40 LET [12],#107,#105,#106,#102,#100,#100
50 LET [18],#102,#106,#107,#105,#100,#100
60 L=23
70 LRUN 0,G

曲データ「かえるのうた 輪唱」

10 '*Tekkin - Kaeru Rinsho
20 LET [ 0],#101,#102,#103,#104,#103,#102,#101,#100
30 LET [ 8],#113,#124,#135,#146,#135,#124,#113,#100
40 LET [16],#131,#140,#151,#160,#151,#140,#131,#100
50 LET [24],#201,#201,#202,#202,#213,#203,#204,#204
60 LET [32],#113,#102,#101,#100
70 LET [36],#201,#201,#202,#202,#203,#203,#204,#204
80 LET [44],#103,#102,#101,#100
90 L=47
100 LRUN 0,G

曲データ「もろびとこぞりて」(Joy to the World)

10 '*Tekkin - Morobito Kozorite
20 LET [ 0],#108,#100,#107,#200,#206,#105,#100,#100
30 LET [ 8],#104,#103,#100,#102,#100,#101,#100,#100
40 LET [16],#105,#106,#100,#100,#106,#107,#100,#100
50 LET [24],#107,#108,#100,#100,#100,#100,#100,#100
60 LET [32],#108,#108,#107,#106,#105,#105,#200,#204,#103
70 LET [41],#108,#108,#107,#106,#105,#105,#200,#204,#103
80 LET [50],#103,#103,#103,#103,#203,#204,#105,#100,#100
90 LET [59],#204,#203,#102,#102,#102,#202,#203,#104,#100,#100
100 LET [69],#203,#202,#101,#108,#100,#106,#105,#200,#204,#103
110 LET [79],#104,#103,#100,#102,#100,#101,#100,#100
120 L=86
130 LRUN 0,G

曲データの各音は16進数3桁です。

  • 1桁目=音の長さ(1=四分音符、2=八分音符)
  • 2桁目=音階2(1=ド、2=レ、…8=上のド、0=休符)
  • 3桁目=音階1(1=ド、2=レ、…8=上のド、0=休符)
  • 音階1と2を同時に指定すると、重音で叩きます。
  • 二分音符など長い音を出したい時は、四分音符+四分休符にすれば、叩いた音がそのまま響きます。

USBシリアル変換基板

※この記事は「IchigoJam Advent Calendar 2018」にエントリーしています。

PCからIchigoJamへプログラムを転送するのに、USBシリアルモジュールがよく使われます。「イチゴジャムレシピ」の情報ページはこちら。
USB-シリアル - イチゴジャム レシピ

私もこれまでいろいろ使ってきました。IchigoJamとなるべく簡単に接続したいので、ユニバーサル基板で変換基板を作ったり。
f:id:shiro0922:20181213051429j:plain
もっと小型のモジュール
FT232RQ USBシリアル変換キット: 半導体 秋月電子通商-電子部品・ネット通販
と、aitendoの変換基板
ジャムISP書き込み変換基板 - aitendo
を使って、こんなものも作りました。
f:id:shiro0922:20181213051521j:plain
ところがこれ、シリアル通信は問題無いのですが、中央のジャンパーを繋いで3.3V電源も供給しようとすると、IchigoJamが起動しません(^_^;) どうやら供給電力不足の様子。

それを解決するために、変換プリント基板を新たに作ってみました。
使うUSBシリアルモジュールは、秋月電子で売っているFT-231X。
akizukidenshi.com
過去に、
www.ichigojaman.jp
www.ichigojaman.jp
などで組み込みに使っていて、かなりの供給電力があることは実証済み。

あらたに設計した変換プリント基板はこんな感じです。
f:id:shiro0922:20181213054222p:plain

f:id:shiro0922:20181214002251p:plain
基板を組み立てた様子。
f:id:shiro0922:20181214001057j:plain
コマンド・プログラム転送やファームウェア書き換えも、無事にできました。

基板データ

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

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