カテゴリ: モノ作り

  • MC機にピアノを弾かせてみた
  • 100円ショップで玩具のキーボードを見つけたので、MC機で弾いてみました。

    動画(FaceBook)

    弾いた曲は「さくらさくら」。
    ツールの移動速度とピアノの反応速度から、ゆっくりめの曲を選択。
    ということでやってみたはいいけれど、100円ショップのキーボードは音痴すぎて聞いてて気持ち悪くなる(笑)

  • メインプログラム
  • MC機では左端の鍵盤を原点(X0Y0)としている。

    メインプログラム(O0021)では、各種設定と曲を指定。 変数#4は鍵盤と鍵盤の間隔、#5は鍵盤を押下したときのZ高さ(絶対座標)、#6はツールが鍵盤から離れたときの距離、#7はツールの移動速度。

    サブプログラム(O0022)では、引数#1を、1の位からひと桁ずつ分解。
    奇数桁は音階としてツールを移動(G01)、偶数桁は長さとしてディレイ(G04)する。(G04は1/1000秒単位なので1000倍している)

    O0021(PIANO MAIN)
    % 
    O0021(PIANO MAIN)
    #4=8.6(KENBAN PITCH) 
    #5=0(KENBAN HEIGHT) 
    #6=#5+20.(KENBAN ESCAPE)
    #7=5000.(SPEED)
    G0G90X0Y0
     
    N1 
    #1=170606
    G65P0022A#1I#4J#5K#6D#7
    N2 
    #1=170606
    G65P0022A#1I#4J#5K#6D#7
    N3 
    #1=080706
    G65P0022A#1I#4J#5K#6D#7
    N4 
    #1=07
    G65P0022A#1I#4J#5K#6D#7
    N5 
    #1=060706
    G65P0022A#1I#4J#5K#6D#7
    N6 
    #1=14
    G65P0022A#1I#4J#5K#6D#7
    N7 
    #1=030103
    G65P0022A#1I#4J#5K#6D#7
    N8 
    #1=04
    G65P0022A#1I#4J#5K#6D#7
    N9 
    #1=010203
    G65P0022A#1I#4J#5K#6D#7
     
    X0Y0 
    M30
    %
    
    O0022(PIANO SUB)
    %  
    O0022(PIANO SUB) 
    G1F#7
    Z#6
    WHILE[#1GT0]DO1
    #2=#1/10 
    #1=FIX[#1/10]
    #3=[#2-#1]*10
    #3=#3*#4 
    X#3
    Z#5
    #2=#1/10 
    #1=FIX[#1/10]
    #3=[#2-#1]*10
    #3=#3*1000 
    G4P#3
    Z#6
    END1 
    M99
    M30
    %
    

  • 曲データ
  • メインプログラム内の#1が曲データである。
    変数値の制限上、3音ずつのデータとなっている。
    1つの音は2桁の数値で表され「17」とある場合、「シ」の音を「1」秒押下する。
    サブプログラム側では、最右桁から1桁ずつ解読するため、曲データは右から左に作成する。
    よって、冒頭の「さくらー」は「ララシー」なので、数値に変換すると「170606」となる。(100円ショップのピアノは鍵盤が1オクターブ分しかないので、動画では音階をあえてずらしている)

  • おまけ
  • ツールの移動をG0にすれば、もう少し曲調の速い曲も演奏できるかもしれない。
    MMLから数値データに変換するプログラムを作れば、もっと楽に曲データを作れるかもしれない。(今回は手打ちした)

さて、弊社MC機には加工終了やエラーを知らせるメール送信システムを付けております。
これまでは、秋月電商メーラー・ボード Ver.2・キットを使用してきました。
先日、IchigoJam用のネットワークボードMixJuiceが発売されたのを機に、メール送信システムに「IchigoJam+MixJuice」を使用することにしました。
(秋月のメーラーボードだとLANケーブルを敷設しなくちゃならないってのも、IchigoJam+MixJuiceを採用した理由のひとつです)

ちなみに、IchigoJamとは「プログラミング専用こどもパソコン」の事です。
こどもパソコンと言っても簡単にI/Oポートを制御できるので、大人でも遊べそう色々な用途に使えそうです。

15mailer_1
現在、手持ちに 旧IchigoJam基板板(v1.0.1)のものと、IchigoJamU基板(1.1.1)のものがあり、工作のしやすさから言えばIchigoJamU基板なんですが、そちらは今後のプログラムに使いたいので、ここはあえて旧IchigoJam基板にしました。

15mailer_2
まずは、BTNポートをGNDに落として、電源投入時にSAVE番号0番のプログラムを自動実行するようにします。
次に、センサおよび、MixJuiceへのジャンパ線を配線します。
正常に動作することが確認できたら、MC機のシグナルタワーにへ適当にテープで取り付け。






ハードウェアの準備はこれでOKなので、次にソフトウェアになります。

問題点として、秋月のメーラーボードはwebブラウザからメールの内容や送り先の設定がですますが、IchigoJamでそれらを変更するなら、都度、モニタとキーボードをIchigoJamにつないでプログラムを書き直さなければなりません。
一度組み込んでしまった機器にモニタとキーボードを繋いでプログラム修正というのは非常に面倒な作業です。

そこで解決策として、アクセスポイントとの接続終了後に、webからIchigoJamに実行プログラムをダウンロードし、それを実行することにしました。

これにより、IchigoJamでは常に最新のプログラムを実行でき、かつプログラムの変更をネット上で行えるという仕様にしました。(ブラウザでの設定変更ではなく、Telnetでの変更になりますが)



IchigoJamが電源投入時に実行されるプログラムは、下記のような最小限のプログラムだけになります。
  1. アクセスポイントとの接続
  2. ダウンロードコマンドを送信
  3. ACK信号を待機
  4. プログラムのダウンロード
  5. ダウンロードしたプログラムを実行


cgi側では下記の処理を行っています。
  1. ダウンロードコマンドを受信 → IchigoJam用プログラムを送信
  2. メッセージ送信コマンドを受信 → sendmailでメッセージ送信


cgiからD/Lされるプログラムは下記の処理内容となっています。
  1. 各ポートを監視
  2. ポートに変化があったら、cgiにメッセージを送信
  3. 最初に戻る

上記の3つのプログラムにより、メール送信の処理を行っています。



IchigoJam側のプログラムは下記のようにしました。

プログラム説明
10 'IchigoJam IoT
20 WAIT1800
30 'PRINT "MJ APL"
40 PRINT "MJ APC AccessPint password" 
50 gosub80:?"DownLoad"
60 INPUT a:if a<>-1 goto60
70 end
80 PRINT" MJ GET www.hogehoge.hoge?15password&";:return
10 コメント行
20 MixJuiceの初期化待ち
30 アクセスポイントリスト(動作確認用のためコメントアウト)
40 アクセスポイントに接続
50 "DownLoad"コマンドでプログラムをD/L
60 cgiから戻り値が来るまでMixJuiceのコマンドを出力
70 プログラム終了
80 cgiへパスワ-ドを送信するサブルーチン

ネット上では、下記のようなcgiにしました。

プログラム
#!/usr/bin/perl
$PSWD = "15password"; # このcgiにアクセスするためのパスワード(IchigoJamに書いたパスワードと合わせる)

$text = $ENV{'QUERY_STRING'}; # GETメソッドの引数を得る

$text =~ /(.*)&(.*)/; # 引数をパスワードとメッセージに分ける
$passwd = $1; # 第1引数はパスワード
$message = $2; # 第2引数は送信メッセージ

#print "pswd=", $passwd, "<br>\n";
print "message=", $message, "<br>\n";

if( $passwd ne $PSWD ){
  return; # パスワードが不一致なら処理を終了
}

if( $message eq "DownLoad" ){ # メッセージが"DownLoad"なら
  print "-1\n"; # ACK信号("-1")を送信後、以下のプログラムをIchigoJamに送信

  print '100 if in(1)=0 gosub 130:PRINT"message1":gosub 150'; # ポート1に信号が入ったらcgiに"message1"を送信
  print "\n";
  print '110 if in(4)=0 gosub 130:PRINT"message2":gosub 150'; # ポート4に信号が入ったらcgiに"message2"を送信
  print "\n";
  print "120 goto 100\n";
  print '130 PRINT"MJ GET www.hogehoge.hoge/get.cgi?15password&";'; # cgiへパスワ-ドを送信するサブルーチン
  print "\n";
  print "140 return\n";
  print "150 if in(1)=0 or in(4)=0 goto 150\n"; # ポートへの入力信号が変化するまで待機
  print "160 return\n";
  print "wait60:goto100\n"; # このプログラムをD/L後、自分自身を実行する
  return;
}

if( $message eq "message1" ){
  print "1\n";  # Success
  $sendmail = '/usr/bin/sendmail';
  open(SENDMAIL,"| $sendmail -t -i");
  print SENDMAIL "From: hoge\@hoge.hoge\n";
  print SENDMAIL "To: fuga\@fuga.fuga\n";
  print SENDMAIL "Cc: hoge\@hoge.hoge\n";
  print SENDMAIL "Subject: IchigoJam Mail\n";
  print SENDMAIL "IchigoJam auto mail sender.\n";
  print SENDMAIL $message, "\n";
  print SENDMAIL "END\n";
  close(SENDMAIL);
}

if( $message eq "message2" ){
  print "1\n";  # Success
  $sendmail = '/usr/bin/sendmail';
  open(SENDMAIL,"| $sendmail -t -i");
  print SENDMAIL "From: foo\@foo.foo\n";
  print SENDMAIL "To: bar\@bar.bar\n";
  print SENDMAIL "Cc: foo\@foo.foo\n";
  print SENDMAIL "Subject: IchigoJam Mail\n";
  print SENDMAIL "This mail from IchigoJam.\n";
  print SENDMAIL $message, "\n";
  print SENDMAIL "END\n";
  close(SENDMAIL);
}

こんな感じです。
言わずもがなですが、下線の文字(パスワードやコマンド)や、URLは適宜変更してください。

上記のcgiでは英語メールしか送れません。
もし日本語のメールにしたい場合は、 文字変換する必要があります。
(それについてはPerlに詳しいページに説明を譲ります) 

IchigoJam側では、Wi-Fi接続に失敗した場合の処理を作っていませんが、度々接続に失敗するようでしたらリトライ処理を書き加えてください。

以上で、IoTとまでは行かずとも、機械監視システムができあがりました。

最初から、MixJuice搭載のIchigoJamがあると助かるなぁ。



2016/05/23 追記

昨晩思いついたんですけど、D/Lプログラムを下記のように変更すれば、ローダー自身も更新できますね。
ローダー更新後、cgiを直してIchigoJamを再起動すれば、新たなローダーが実行されるはずです。
(思いついただけで、まだ試してません。あしからず)

自動実行プログラムの更新
< 省略 >

if( $message eq "DownLoad" ){ # メッセージが"DownLoad"なら print "-1\n"; # ACK信号("-1")を送信後、以下のプログラムをIchigoJamに送信  < 更新用プログラム(省略) >
print "WAIT60:SAVE0\n"; # このプログラムをD/L後、自分自身を番号0に保存する
return; }

< 省略 >

木型の形状

弊社では、普段、木型屋さんからの依頼で木型をNC加工しています。
材料はサンモジュールTWを使用しています。

今回の木型は年号やロット番号を「コマ」にするような設計となりました。
いつも通りに主型と同じくサンモジュールで作成したのですが納期に余裕があったので、実験的に3Dプリンタでもコマを作ってみることにしました。
0574bba1.jpg
コマを入れるための主型の凹み部分


不安要素

「コマ」を作るにあたり不安だったのが精度でした。
3Dプリンタで作成したコマが、既に加工済みの主型にキチンと収まるかどうかです。

3Dモデルより大きく出来てしまうのか、小さく出来てしまうのか。
後加工の難易さも実用性を計る基準となります。

希望としては、サンモジュールで作成したのと同等の精度です。
23feb5ec.jpg
サンモジュールTW(主型と同材質)で作ったコマを収めた状態


3Dプリント

弊社の3Dプリンタ「Stratasys Prodigy Plus」にてコマを作成しました。
3DモデルはサンモジュールTWをNC加工したのと同じモデルを、STL形式でファイル保存したものです。
クリアランスの調整などは一切行いませんでした。

3Dプリンタで作った形状は内部がメッシュ構造になっているため、重さは比較にならないほど軽いです。
104eca84.jpg
上:NC加工(サンモジュールTW)
下:3Dプリンタ(ABS)


結果

結果は思った以上に精度良好でした。
若干幅広く出来上がってしまいましたが、サンドペーパーで少し(0.1mm程度)落とした程度で、しっくり収まってしまいました。
dd90056c.jpg
3Dプリンタで作ったコマを収めた状態


考察

今回のコマ形状は木型表面に出るのが一面だけという形状だったので実験的に製作してみました。
まだ鋳物屋さんには見てもらっていないので製造に使ってもらえるかわかりませんが、これが「型」として使えるならば、また別の部品も製作してみたいと思います。

また、今回は簡単な形状だったために一発でキレイに収まったのかもしれません。
鋳物屋さんからOKが出ればもう少し複雑形状も製作してみたいと思います。

製作後記


これで「可変型キャリア」プロジェクトは終了です。
途中、トラブル等ありましたが、なんとか当初の目標通り、11月の展示会に仮状態で出品、その後動作検証をして、最終的に年内にプロジェクトを終わらせることができました。



川口RINCについて


足掛け3ヶ月、川口RINCの活動に参加しました。
そこで思った事がいくつかあります。

まず、ビッグサイトの産業交流展に行ってきましたが、他の地域の異業種交流RINCは、RINC会員(社名)が書かれた展示パネルがあるのに対し、川口RINCでは製品(今回は可変型キャリア)とその使用例のイラストパネルのみでした。
これでは来訪者に対し、誰がRINC会員で誰がそのプロジェクトに参加したのかが不明瞭な気がします。

次に、私は自分の担当した部分(回路&プログラム)が終了した際に仕様書を作って提出したのですが、どうもそういった物を提出したのは私が初めてらしいです。
仕様書が無いと展示会の来訪者に説明できないし、製作者以外がメンテナンスできないのでは不都合があるんじゃないかと思うんですが。



最後に


川口RINCは、何年も活動を続けている異業種連携グループだそうです。
私は本プロジェクトについて、臨時会員のような形で参加させていただきました。

久しぶりにグループでのモノ作りをして、以前、同人ソフトを作っていた時と同じような感覚を思い出しました。
一人で何かを作っていると自分の知っている範囲のモノを作ってしまいがちですが、グループでモノを作ると知らない(やった事の無い)技術を要求されたりするので、要求を満たすために色々調べたり試行錯誤を繰り返していくうちに、新しい知識や技術を習得していくんだなぁ、と再確認しました。

あと、プリント基板を作るのに作った、Eagle用のNC加工ulpですが、Gコードの部分は今回のプロジェクトで使うため作り終えているのですが、MODELA用の部分ができていません。
MODELA用コマンドを書き終えたら公開しますので少しお待ちください。

2012年12月12日


fe5a0dfc.jpg
RINC会議参加5回目。(平成23年度第11回RINC会議)
RINC会員様の前では、今日が初のお披露目です。
会議では問題点について話し合った結果、最終的な仕様が決定しました。

速度は3段階(2bitのD/Aコンバータ)に変更、過負荷についてはモータのドライバボードを調整して加速を緩やかにすることで対処することになりました。

開発目標は1月下旬の展示会。
この後は基板作成と半田づけぐらいのものだし、期間も1ヶ月以上あるのでかなり余裕な感じです。



2012年12月18日


再々度、車体を借りてきました。



2012年12月19日


プログラムの速度制御部を3bitから2bitの出力に変更。
それに伴い回路の組み直し。



2012年12月20日


D/Aコンバータを2bitにするにあたり、プリント基板のパターン修正。



d50a5992.jpg

2012年12月21日


EagleCADのCAMプログラムを修正。
基板をNC加工。



2012年12月24日


秋葉原に行き、各種電子パーツを購入しました。



59faf80c.jpg

2012年12月26日


基板にパーツおよび配線を半田づけ。
電子回路はこれで完成です。



2012年12月27日


f791fe11.jpg
基板を車体に取り付けて完成。
18時近くに商工会議所に納品しました。

次の展示会はは、2013年1月30日~31日、彩の国ビジネスアリーナでの展示でした。

↑このページのトップヘ