SHIROのIchigoJam日記

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

Ichigoチャイム

IchigoJamサーボモーターで鉄琴を叩いて、おなじみの学校チャイム(ウェストミンスター・チャイム)を奏でてみました。
動画はこちら。

※(11/7)改良版の動画に差し替え。


※(11/7)改良版の写真に差し替え。

鉄琴は、市販の鉄琴工作キットを使いました。
大きな基板(ベニヤ板)が付いていて、まさに改造工作のためにあるような品です(^_^)

マレット(バチ)は2本付いていますが、今回は4本欲しかったので、追加で別の品を2本購入しました。

ヘッドの大きさがキット付属のマレットと若干違うのですが、そこは気にしないことに。
なおヘッドが「硬い」品にしないと、鉄琴を叩いた時に綺麗に響きません。


※(11/7)改良版の写真に差し替え。

マレットは棒を短く切って、サーボモータSG92Rにアロンアルファで接着。機構全体を、近所のホームセンターで買ったコルクブロックに載せています。
なお、サーボモーター機構はいろいろ試行錯誤しました。
当初はカムロボなどでよく使われる小型のSG90にしたのですが、マレットの重さでトルクが足りず、動かして止めた時にハンチング(ブルブル振動して止まらない)を起こしてしまいました。
トルクが大きいSG92Rに変えた所、だいぶ軽減したのですが、それでもハンチングは止まらず。
そこで、マレットのホームポジションを真上方向に変えて、真上から100°ほど叩き下ろして、すぐに真上へ戻すようにしました。真上で止めるとハンチングが起きません。
これだとテンポの速い曲は演奏できないのですが、今回はスローなチャイムなので問題なし。
機構を変えて、スプリングで支えたマレットをサーボで弾くなどすると、もっと安定して叩けるかもしれません。

※(11/7)改良版
サーボモーターの動きのばらつきを吸収するため、マレットの柄を途中で切断して、スプリングでつなぎました。だいぶ安定して鉄琴を叩けるようになりました。
スプリングは、ホームセンターで買った8mm径の引きバネです。本当は7mm径があれば、一番マレットの柄に合いそうでしたが…。



IchigoJamサーボモーターの間は、子どもの工作も想定してブレッドボードとジャンプワイヤで配線。
電源はIoT用モバイルバッテリ「cheero Canvas」を使いました。

cheero cheero CANVAS 3200mAh IoT対応 モバイルバッテリ

cheero cheero CANVAS 3200mAh IoT対応 モバイルバッテリ

展示用に持ち運びできるようにしたかったのと、乾電池だと電圧が変動してサーボモーターの動きが安定しないからです。また、待機時は消費電力が少ないので、普通のモバイルバッテリだと給電が自動的に切れてしまいます。

ベニヤ板に色を塗ったりしてカスタマイズ工作もできるので、子ども向けの工作企画にいかがでしょうか。

プログラムリスト

※(11/7)改良版のプログラムに差し替え。

  • プログラムを起動すると、マレットがウォームアップ動作をします。しばらく動かしてサーボモーターを暖めないと、叩く動作が安定しません。IchigoJamのボタンを長押しすると止まります。
  • もう一度ボタンを押すと、チャイムを演奏します。演奏終了後にボタンを押すと、再度演奏します。
10 '*Chime V2
20 CLV:VIDEO 0:LED 1
30 'Home Pos,Strike Pos,Strike Wait (Mallet 2-5)
40 LET [90],50,146,11,50,158,12,54,166,12,54,164,12
50 M=12
60 'Melody (Mallet 2-5, 0=Rest)
70 LET [0],3,5,4,2,0,0,3,4,5,3,0,0,5,3,4,2,0,0,2,4,5,3,0,0
80 L=23
90 'Warm Up
100 @WARMUP
110 FOR P=2 TO 5
120 GSB @P0
130 NEXT
140 IF !BTN() GOTO @WARMUP
150 'Home Reset
160 @RESET
170 FOR P=2 TO 5
180 H=[84+P*3]
190 PWM P,H
200 NEXT
210 IF BTN() CONT
220 WAIT 60
230 LED 0
240 'Play Loop
250 @LOOP
260 IF !BTN() CONT
270 LED 1
280 P=2:GSB @P0
290 FOR I=0 TO L
300 P=[I]
310 IF P GSB @PING ELSE WAIT M
320 WAIT 30
330 NEXT
340 LED 0
350 GOTO @LOOP
360 @PING
370 H=[84+P*3]
380 S=[85+P*3]
390 W=[86+P*3]
400 PWM P,S:WAIT W:PWM P,H
410 RTN
420 @P0
430 PWM P,100:WAIT M
440 PWM P,50:WAIT M
450 RTN

OUT2〜5の4本のPWM出力で、4個のサーボモーターを動かしています。
出力が4本なので、今回は4音階のチャイムを作ることにしたのですが、IchigoJamを2台にして相互に通信しながら動かせば、8音階全て演奏できるかもしれません。

40行で、4個のサーボモーターのホームポジション・叩くポジション・WAITを初期設定しています。これは各モーターの個体差やマレットの工作具合によるので、実際に動かしてみて調整する必要があります。

70行はチャイムの音階データです。OUTポート番号(2〜5)で指定しています。0は休符です。

  • GBAD GABG BGAD DABG
  • ソシラレ ソラシソ シソラレ レラシソ

今回は鉄琴の高い音を出したかったので、マレット位置を高めの音階にしました。実際の学校チャイムは、これより一音階低い「ファラソド〜」の所が多いかもしれません。

本格的なディナーチャイムを使えばもっと綺麗な音が出そうですが、かなり高価なので子ども向け工作にはちょっと…(^_^;)

ゼンオン ディナー・チャイム C5

ゼンオン ディナー・チャイム C5

Meganeスカウター

鯖江のご当地IchigoJamMeganeJam」を入手。有機EL(OLED)ディスプレイを付けて「Meganeスカウター」にしてみました。


OLEDがかなり前に出ていて不格好ですが、このくらい距離を離さないと左眼のピントが合わず文字が読めません(^_^;)


メガネ基板の拡大図。中央の基板は、ボタン電池CR2032を2個並列につないだ電源シールドです。
右眼上のユニバーサルパターンでフォトトランジスタ回路を組んで、IN2にアナログ入力しています。
赤外線領域にピークがあるフォトトランジスタを使ったので、熱く燃えている人に向ければハイレベルな数値が出るはず(笑)

このメガネを装着して、「レベル1か…フッ、ゴミめ」とつぶやけば、キミも怪しい人サイヤ人だ!(^_^)

プログラム

起動すると、フォトトランジスタからのアナログ入力値(Rawデータ?)が表示されるので、測定したい対象に向けてボタンを押します。入力値から計算したLv(レベル)、AP(攻撃力)、DP(守備力)、MP(魔法力)、HP(体力)が表示されます。
表示数値は、アナログ入力値を元に適当に乱数で計算しています。

10 '*Megane Scouter
20 VIDEO 0:CLS:GSB @OLEDINIT
30 IF BTN() CONT
40 @LOOP
50 Z=ANA(2)
60 CLS:?Z:GSB @OLEDOUT
70 IF !BTN() GOTO @LOOP
80 CLS
90 Z=Z-100:IF Z<10 Z=10
100 L=Z/10:?"Lv ";L
110 X=L+RND(L/2):A=X*X+RND(Z*3):?"AP ";A
120 X=L+RND(L/2):D=X*X+RND(Z*3):?"DP ";D
130 X=L+RND(L/2):M=X*X+RND(Z*3):?"MP ";M
140 X=L+RND(L/2):H=X*X+RND(Z*3):?"HP ";H
150 GSB @OLEDOUT
160 WAIT 60
170 IF !BTN() CONT
180 RUN
190 @OLEDINIT
200 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
210 forP=#788to#799:i=i2cw(60,#780,1,P,1)
220 next
230 poke #79a,#70,#b5,#40,#18,#07,#23,#1b,#02
240 poke #7a2,#c9,#18,#10,#24,#03,#78,#db,#00
250 poke #7aa,#d3,#18,#1d,#68,#0d,#60,#5d,#68
260 poke #7b2,#4d,#60,#20,#30,#08,#31,#01,#3c
270 poke #7ba,#f4,#d1,#70,#bd
280 @OLEDOUT
290 forP=0to7:i=usr(#79A,#907-P):i=i2cw(60,#781,1,#700,128):next:rtn

100mダッシュ・展示用

IchigoJamスポーツ」の中の人気プログラム「100mダッシュ」を、展示用に改造してみました。
スペースキーの代わりに、大きなボタンスイッチを押してプレイします。


※(11/17)改良版の画面に差し替え。

※(11/17)スイッチについて差し替え。
大きなボタンスイッチは結構高価なので、工場などで使われるフットスイッチにしました。
こちらのフットスイッチだと、分解しなくても軽い力で押せるのでお勧めします。リード線も白・黒の2本しか出ていないのでわかりやすいです。
https://www.monotaro.com/p/0851/9524/
Amazonだとこちら。(写真では5個のスイッチが写っていますが、赤1個だけです)

画面はこちらの8インチモニタを使いました。12VのACアダプタが付属していて、背面のUSB-5V出力からIchigoJamの電源も取れて便利です。

プログラム

VIDEO 3(16文字×12行モード)で、大きな表示にしています。
※(11/17修正)実際に子どもに体験してもらった結果から、タイム表示をReady画面へ移動。画面遷移をワンタッチにしました。ゴールライン表示も追加。

10 '*100m Dash Event
20 VIDEO 3:CLV
30 @TITLE
40 CLS
50 LC 2,0:?"*100m Dash*"
60 LC 6,3:?"TIME"
70 LC 6,4:?T/60;".";T%60/6;
80 WAIT 120
90 LC 5,7:?"READY?";
100 IF BTN() CONT
110 IF !BTN() CONT
120 CLS
130 LC 0,1:?CHR$(251)
140 LC 4,7:?"|";
150 LC 0,0
160 FOR T=3 TO 1 STEP -1
170 ?T;" ";:BEEP:WAIT 60
180 NEXT
190 ?"GO!":BEEP 10,60
200 LC 1,1:CLT
210 FOR R=1 TO 100
220 IF !BTN() CONT
230 IF BTN() CONT
240 ?CHR$(8,46,251);
250 NEXT
260 T=TICK()
270 ?" GOAL!";
280 BEEP 10,60:WAIT 60
290 GOTO @TITLE

(11/4追記)モバイル版

aitendoのSPI液晶に表示するモバイル版を作りました。
これで展示会に持って行けます(^_^)

プログラムはこちら。最初の画面設定を「SWITCH 1」に変更しただけです。

10 '*100m Dash Event
20 SWITCH 1:CLV
30 @TITLE
40 CLS
50 LC 2,0:?"*100m Dash*"
60 LC 6,3:?"TIME"
70 LC 6,4:?T/60;".";T%60/6;
80 WAIT 120
90 LC 5,7:?"READY?";
100 IF BTN() CONT
110 IF !BTN() CONT
120 CLS
130 LC 0,1:?CHR$(251)
140 LC 4,7:?"|";
150 LC 0,0
160 FOR T=3 TO 1 STEP -1
170 ?T;" ";:BEEP:WAIT 60
180 NEXT
190 ?"GO!":BEEP 10,60
200 LC 1,1:CLT
210 FOR R=1 TO 100
220 IF !BTN() CONT
230 IF BTN() CONT
240 ?CHR$(8,46,251);
250 NEXT
260 T=TICK()
270 ?" GOAL!";
280 BEEP 10,60:WAIT 60
290 GOTO @TITLE