※この記事は「IchigoJam Advent Calendar 2018」にエントリーしています。
12/15~16の上田市マルチメディア情報センターのクリスマスイベント「St. Media Xmas 2018」でのライブ放送「Xmas TV」で、IchigoJamで演奏する鉄琴作りをやりました。
(前作「Ichigoチャイム」の発展形です)
www.ichigojaman.jp
ライブではとりあえずド~上のドまでの8音階を叩く所までできたのですが、その後手直しや作り込みをして、無事に完成しました(^_^)v
動画はこちら。
【IchigoJam】Ichigo鉄琴
前作と同じく、鉄琴工作キットをベースに、8個のサーボモーターを配置して、マレット(バチ)を制御します。
マレットは途中で切断してスプリングで接続。
叩く時に鉄琴上のストッパーで柄が止まり、ヘッドがしなって鉄琴のキーを叩きます。
この機構のお陰で、大人気だったウォームアップ動作は不要になりました(笑)
ストッパーは、ホームセンターで買った6mm径のアクリル棒に、ゴムバンドを貼り付けて作りました。
IchigoJamは親子2台で、サーボモーターを4個ずつ制御。
TX/RXを接続して、選曲No.と、演奏スタートのタイミングを、親機→子機へ送っています。
電源はお馴染みのIoT用モバイルバッテリ「Cheero Canvas」。
基板データ「Servo Base 4」
IchigoJamのOUT2~5で、サーボモーター4個を制御するシールド基板です。
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
(C) 2018 Shiro Saito (https://www.ichigojaman.jp)
材料
SUZUKI スズキ サウンドブロック用マレット ヘッド硬度 硬 SBP-01H
- メディア: エレクトロニクス
cheero Canvas 3200mAh IoT機器対応 モバイルバッテリー ホワイト CHE-061
- 出版社/メーカー: cheero
- メディア: エレクトロニクス
プログラム
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を同時に指定すると、重音で叩きます。
- 二分音符など長い音を出したい時は、四分音符+四分休符にすれば、叩いた音がそのまま響きます。