離島プログラマの雑記

島根県の離島、隠岐・西ノ島に移住して子育て中のフリープログラマです。

エアブラシ塗装ことはじめ

島内で依頼を受けて3Dプリンタで作った模型に塗装が必要になったので、エアブラシに挑戦してみることにしました。

必要なもの

島内にはエアブラシなど売っているところはないので、例のごとく Amazon で調達します。

エアブラシ本体

塗料

  • ラッカー系塗料

    Mr.カラー C4 イエロー

    Mr.カラー C4 イエロー

    模型でよく使われる塗料の種類はラッカー(溶剤系アクリル塗料)、水性アクリル塗料、エナメル塗料、ウレタン塗料などがあるようですが、今回はエアブラシ向きのラッカー系塗料を用意しました。

    それぞれの塗料の特徴は大まかには下記のようです。ウレタンは仕上げのクリア塗装などに限定した用途が多いらしいので省いてます。

    ラッカー 水性アクリル エナメル
    塗膜 強い 弱い 非常に弱い
    乾燥時間 早い 遅い 遅い
    塗料の伸び 良い 悪い 非常に良い
    塗り方 エアブラシが最適 筆塗り/エアブラシ 筆塗りが最適
  • うすめ液(ラッカー系塗料用)

    T-01h ガイアカラー薄め液 (特大) 1000ml

    T-01h ガイアカラー薄め液 (特大) 1000ml

    ラッカー系塗料専用のうすめ液です。塗料に混ぜてエアブラシに適切な濃度に調節します。

  • サーフェイサー

    GS-01 サーフェイサー エヴォ 50ml

    GS-01 サーフェイサー エヴォ 50ml

    下地塗り用の塗料です。今回3Dプリントした模型は素材がPLAで、あまり塗料ノリが良くないと言われているので、レビューで食いつきが良いとの評価が高い製品を買ってみました。

周辺ツール

塗装ブース製作

エアブラシは塗料+溶剤が霧状になって飛び散るので、室内でやる場合はファンで集気してフィルタで清浄化する塗装ブースは必須です。既成品の室内用塗装ブースも色々ありますが、そこそこ値段がするので今回はダンボールでしょぼめ塗装ブースを自作してみました。

材料

  • PC用冷却ファン(12V DCファン)

    ENERMAX ツイスターストーム 12cmファン Twister storm 12cm UCTS12A

    ENERMAX ツイスターストーム 12cmファン Twister storm 12cm UCTS12A

    前面から吸気して背面から排気する直進型のファンです。前面から吸気して上に排気するタイプのシロッコファンというのもあるようで、排気ダクトありの設計の場合は本体側にシロッコファンを配置して、排気ダクトを窓用換気扇に接続するパターンが多いようですが、シンプルに直進型のファンで直接排気するようにしました。PC用のファンは色々製品がありますが、回転数3500rpmと一般的なファンより高速な割にリーズナブルだったのでこれにしました。音はうるさいです(笑)

  • ファン駆動用AC電源

    TIMELY ドライブ用AC電源 UD-ACDC100NS

    TIMELY ドライブ用AC電源 UD-ACDC100NS

    PC用ファンに必要な電源はDC12Vなので、換気扇と違って直接コンセントにさせないので、ドライブ用のAC電源を流用します。電源コネクタは同じなので改造なしで使用できます。

  • レンジフード用不織布フィルタ f:id:k-aeg:20160520134917j:plain 100均で買いました。大きいので適当に切ってつかいます。

  • ハニカムフィルタ

    Gツール GT03H Mr.スーパーブース用 ハニカムフィルター

    Gツール GT03H Mr.スーパーブース用 ハニカムフィルター

    不織布フィルタのみだとすぐに目が詰まってしまうらしいので、ハニカムフィルタと組み合わせてミストをキャッチします。見た目のまんまダンボールを積み重ねたフィルタなので、簡単につくれるだろうと思って自作したら案外面倒くさかったです...。自作する場合は厚めのダンボールを1.5cm幅に切りそろえたものを数十本用意して、積み重ねてボンドで接着します。

f:id:k-aeg:20160517155648j:plain 地道な作業です。次からは買おうと思いました。

組み立て

f:id:k-aeg:20160520135037j:plain 見たまんまなので詳細は省きますが、ダンボールを切り貼りしてこんな感じの箱を作ります。 背面にファンの羽に合わせた大きさの穴を開けて、ファンを取り付けます。今回は木ねじで背面からファンとダンボールをぶすっと貫通させて、前面から木ねじをグルーガンで固定しました。

フィルタの取り付け

f:id:k-aeg:20160520135512j:plain 前面の角にマジックテープを貼り付けて、不織布フィルタを固定しました。

f:id:k-aeg:20160520135059j:plain 最後にハニカムフィルタをつけてできあがりです。ハニカムフィルタ側にもマジックテープを貼りつけて、不織布フィルタに固定しました。

塗装してみる

調色

塗料皿で複数の塗料を混ぜて吹きたい色を作りますが、これが実は一番難しかったです。どう混ぜて良いかさっぱりだったので、混色ガイドというアプリでざっくり配合を見てから調節していくようにしましたが、なかなか思うような色になりません。ちゃんと目的の色を得るには、色々試して経験を積んでいく必要がありそうです。

混色ガイド

混色ガイド

  • PC Garage
  • 仕事効率化
  • 無料

塗料の希釈

塗料そのままだとエアブラシにとっては粘度が高過ぎるので、うすめ液でちょうど良い具合に希釈します。うすめすぎてもダメなのでこれもコツをつかむのに時間がかかりそうです。希釈した塗料はハンドピースのカップに投入します。慣れたらハンドピースのカップ内にうすめ液を投入して、そこに塗料を入れる方法もあるようです。

試し吹き

写真を撮ってなかったですが、3Dプリンタで失敗した造形物に色々吹き付けてみました。ムラなく塗るのはやはりコツが要りそうですが、距離や吹付けの強さによって色々な塗装ができるので面白いです。もう少し練習してから本番に挑もうと思います。

後片付け

ハンドピースのカップに残っている塗料を空きビンに移すなどしてから、塗料を拭き取り、クリーナーを投入してうがい(ハンドピースの吹き出し口を抑えて、カップに空気を逆流させること)をします。細かいところは綿棒にクリーナーをつけて掃除します。吹き出し口のニードルキャップにも塗料が溜まるので、取り外して綿棒で塗料を落とします。

感想

準備やら片付けやらは大変ですが、塗るのは楽しいです。しかし、希釈も掃除もシンナーを使用するので換気はとても重要です。窓開けたりして換気しながらの作業でしたが、それでも結構なシンナー臭で、長時間作業は体によくなさそうです。ちょっと値段がしますが、有機溶剤用のマスクを買っても良いかも...。

3Dプリンタでおみやげ開発

隠岐・西ノ島に移住してから、「西ノ島お土産開発プロジェクト」と称してひとりで勝手にやっているのですが、第一弾として西ノ島町ゆるキャラ「活イカ活っちゃん」のフィギュアストラップを製作してみました。試作から量産まで一貫して3Dプリンタで作っています。

f:id:k-aeg:20151223191013j:plain

西ノ島町観光協会(西ノ島町別府港第2ターミナル1F)で販売していますので、観光などでお立ちよりの際はぜひご覧くださいませ。 (2017/7/18追記)現在は隠岐酒造(安藤本店様)、隠岐シーサイドホテル鶴丸様、国賀荘様でも取り扱っていただいています。

また、西ノ島町の地域振興課でも扱ってもらえることになったので、本土でのイベントでも販売される予定です。

f:id:k-aeg:20151224170758j:plain

というわけで、製作開始から販売までにやったことを振り返ってみようと思います。

準備編

使用したツール

材料

そんなに大量生産はしないので、だいたい Amazon仕入れています。離島住まいですが、プライム会員なので送料もかかりません。

設計〜試作編

モデリング

まずは3Dプリントするための3Dモデルが必要なので、モデリングソフトを使って活っちゃんをモデリングします。今回は Blender というソフトを使いました。だいぶ前に一度使ってみて挫折した経験がありますが、以下の記事を参考にさせてもらったところ、一通りの操作を覚えつつ活っちゃんが出来上がりました。

日本VTR実験室 初心者のための!作って学ぶBlenderの基礎:②モデリング-日本VTR実験室-映像会社のスマホアプリ開発部隊

具体的なモデリング方法については記事にあるので割愛しますが、大まかには以下の手順です。

  1. ガイド絵を用意する

    こちらに活っちゃん着ぐるみの写真があったので、ガイド絵として使わせてもらいました。

    活イカ活っちゃん (姉) | 着ぐるみプラス

  2. Mirror Modifier(鏡像反転) を設定する

    活っちゃんはほぼ左右対象なので、Mirror Modifier を設定することで、左右どちらか半身のモデリングを省略することができます。

  3. 本体の大まかな形をつくる

    ガイド絵に沿って、平面をつなげて大まかな形をつくります。主に必要な操作はループカット、押し出し(Extrude)、拡大/縮小(Scale)の3つだけです。

  4. 細かい部分をつくる

    手足やエンペラなど細かい部分をつくります。主に必要な操作は押し出しと面張り(Face)だけです。

3日ほど Blender と格闘して、とりあえず活っちゃんぽいものができたので、顔のグラフィックを貼ってレンダリングしてみました。

f:id:k-aeg:20160306024441p:plain

テストプリント

さて、作った3Dモデルを試しにプリントしてみます。3Dプリントソフト(FlashPrint)に読み込ませるには、Blender からSTL形式でエクスポートする必要があります。読み込み時にポリゴンが裏返ってたりしてエラーが発生する場合がありますが、大抵は自動で修復してくれます。

脚から胴体にかけての部分は宙に浮いているので、サポート(支柱)を生成してやります。とりあえずプリントした結果がこれです(サポートは除去済み)。

f:id:k-aeg:20151010024219j:plain

顔はインクジェット紙に印刷したものを接着剤で貼り付けています。わりと上手くいっているようにも見えますが、隠れている脚が何本か折れています(笑)。考えてみれば当たり前ですが、脚の先端の細い部分から徐々に太くなる構造は積層方式の3Dプリンタが苦手とするところです。サポートを増やして色々試しましたが、かなりの確率で折れます。

また、脚の先端が尖りすぎていて危険だったので、先っちょはだいぶ丸めました。モデリング段階で意識していなかった問題も、プリントしてみることで色々と見えてきました。

産業文化祭への出展

開発期間中に、ちょうど西ノ島町が主催する産業文化祭が開催されたので、前宣伝も兼ねて出展してみました。

f:id:k-aeg:20151023143933j:plain

3Dプリンタの実演もやったので、ちびっ子からおじいさんまで色々な方が興味を持ってくれました。役場の方にも興味を持っていただいて、後にイベントでの販売のお声がけをいただきました。この時は顔を透明フィルムシールに変更していますが、曲面になじまないので切れ込みを入れており、まだちょっと微妙な感じです。

量産〜販売編

量産方法の検討

量産方法については、3Dプリンタで作ったモデルを原型としてレジンキャスト(シリコン型枠にレジンを流し込んで成形する)なども検討しましたが、費用や手間を総合して考えた結果、全部3Dプリンタでやってみることにしました。

比較項目 ジンキャスト 3Dプリント
費用 × レジンの単価が高め。型枠に使用するシリコンも単価高め、かつ寿命がある(20回程度で壊れる) ◯ kgあたり単価はPLAフィラメントのほうがレジンより若干安め程度だが、中空構造にできるため材料消費が抑えられる。
複製時間 ◯ シリコン型枠の作成はそこそこ時間がかかるが、レジンキャスト自体は1回3分程度と短い。 △ 大きさに比例するが、ストラップサイズでも一体あたり数十分と長め。
複製手順 × 型枠作成、レジンキャストともに手作業が多い。 ◯ プリント準備(3Dプリンタの水平出しなど)以外はほぼ自動。
後加工 △ バリ取り等は必要だが加工はデザインナイフなどで比較的カンタンにできる。 × サポート(支柱)のバリが多く発生する。PLAはレジンと比較して硬いので、加工はルーターなどが必要。

量産プリント向けの改良

量産にあたっては、まだ何点か改良が必要でした。

  • サポート(支柱)の改良

    自動サポートに頼っていると相変わらず脚が折れやすいので、手動で3Dモデル側にサポートをつけました。プリント時のラフト設定(土台の自動追加)と合わせてだいぶ改善はされましたが、まだたまに折れます…。

    f:id:k-aeg:20151211162723j:plain

  • 腕の位置の改良

    腕が体から離れていると引っかかったりして折れやすいことが判明したので、体にくっつけるように修正しました。ただ、くっつけすぎるとプリントに失敗するようになったので、くっつくかくっつかないかの微妙な位置に調整が必要でした。

  • 顔プリントの改良

    顔のプリントは、3Dモデルに凹凸をつけてプリントして着色したり、シールで貼るなどで色々試してみましたが、転写シート(デカール)が一番うまく行きました。活っちゃんの顔は曲面なのでシール系は貼りにくいのですが、転写シートは曲面にうまくフィットしてくれます。

改良の結果、こんなフォルムになりました。

f:id:k-aeg:20151125124431j:plain

小さい活っちゃんが実際にストラップとして販売するサイズです。 大きい活っちゃんは西ノ島町観光協会にプレゼントしました。

活っちゃんの使用許可申請

活っちゃんは西ノ島町のキャラクターなので、町の使用許可が要ります。使用許可申請の許諾条件はイラスト利用を前提としており、立体物は前例がないとのことでしたが、産業文化祭で一度お披露目していたこともあり、わりとあっさりと許可をいただけました。

量産プリント

使用許可も取れたので、いよいよ量産に入ります。

プリント中の様子。

f:id:k-aeg:20151019171915j:plain

ぎちぎちに並べたところ、同時に25体までプリントできました。プリント時間は20時間程度です。

f:id:k-aeg:20151020022453j:plain

大量にできました。

f:id:k-aeg:20151202114323j:plain

仕上げ

さて、プリント後の状態からストラップとして販売できる状態に仕上げていきます。

  1. バリ取り

    ニッパーなどで一体ずつに分解して、脚まわりのサポートを外していきます。結構飛び散るので防護メガネが必須です。

    f:id:k-aeg:20151211162539j:plain

    サポートの跡が残るので、ミニルーターで表面を滑らかに磨きます。ミニルーターで処理できない箇所は紙ヤスリで仕上げます。

    f:id:k-aeg:20151211170205j:plain

  2. ヒートン装着

    ストラップを引っ掛けるためのヒートンを挿す穴をキリで開けます。最初はミニルーターにドリルをつけてやっていましたが、回転の熱で溶けたプラスチックがドリルに引っ付いてしまうので、キリに変更しました。

    f:id:k-aeg:20151218174954j:plain

    ヒートンを穴に挿します。そのままだとずっぽ抜けてしまうことがあるので、瞬間接着剤で固定します。

    f:id:k-aeg:20151218175022j:plain

  3. 顔貼り

    転写シートに印刷した顔を貼っていきます。顔の周りのフチを少し残して切り取り、本体に貼ってから水に濡らしたティッシュなどで押さえつけます。十分に水分が浸透したら、滑らせるようにして裏紙を取り除くときれいに転写されます。印刷面が見えない状態で位置合わせが必要なので、蛍光灯で透かしながら合わせてやります。

    f:id:k-aeg:20151221230653j:plain

  4. ニス塗り

    転写シートは素のままでは耐久性が低いので、顔周辺に耐水性のニスを2度塗りします。

    f:id:k-aeg:20151222022817j:plain

  5. ストラップ装着

    ヒートンにストラップを装着して本体は完成です。

    f:id:k-aeg:20151123225020j:plain

  6. パッケージング

    布で汚れを取りつつ、バリの取り残しなど最終チェックします。

    f:id:k-aeg:20151222123822j:plain

    OPP袋にラベルシールを貼ります。ラベルシールはインクジェットプリンタで印刷して、裁断機で程良い大きさに裁断してあります。

    f:id:k-aeg:20151223190713j:plain

    袋を閉じて完成です!立体物を収めるので、キレイに閉じるのは案外コツが要ります。なるべく袋の上のほうに活っちゃんを寄せて、平らな面積を増やした状態で閉じるとうまくいきます。

    f:id:k-aeg:20151223191013j:plain

販売開始

ディスプレイ用の小物は100均で揃え、ポスター部分は奥さんが作ってくれました。 最初の販売場所は、西ノ島町観光協会さんに委託販売をお願いして、別府港ターミナルにて販売中です。

f:id:k-aeg:20160207172448j:plain

まだオフシーズンですが、わりと好評いただいているようで、第一陣は無事完売しました。

やってみた感想

比較的簡単なストラップでも、いざ作ってみると検討すべきことは沢山あるし、一工程増えるだけでもかなり作業が大変になったりします。巷にはモノが溢れていますが、そういった過程を体験すると、一見簡単そうに見えるものも様々な判断や工夫が積み重なって作られているんだろうな、と想像することができて感慨深いものがあります。一方、数十〜数百個規模の量産であれば、3Dプリンタで量産まで対応できるケースは結構ありそうだなとも思いました。素材が限定されたり、大物のプリントに時間がかかったりといったデメリットはあるものの、ロットを気にせず完全に受注生産できるので、材料のロスや在庫リスクもないため、小さく始めやすいというのもあります。また、サイズ変更や微修正が容易なので、製品のバリエーションを出しやすいのもメリットです。小型CNCフライスでの金属部品、電子基盤の切削加工などを組み合わせれば、デスクトップでもかなり幅広いものづくりができそうです。

今後の課題

  • 後工程の手作業が案外時間がかかるので、もう少し作業を最適化したい

    サポートの付け方を工夫するなどして、バリ取り作業を減らせないか思案中です。

  • 積層痕をなんとかしたい

    紙ヤスリで頑張って磨けば積層痕を消すことができましたが、かなり時間がかかるので全部手作業はさすがに採算が合いません。自動研磨機を作ろうかな…

離島子育て雑記 〜出産編〜

久々の更新となりますが、今月の頭に第一子が無事に誕生しました。 せっかくなので、隠岐西ノ島での出産事情について記録を残しておこうと思います。

Term1: 妊娠期間中

産婦人科の妊婦検診

離島のお医者さんと言うと小さい診療所のイメージがありますが、西ノ島には隠岐島前病院があり、各科のお医者さんがローテーションで月に数回来てくれています。産婦人科医は月に2回の来島のため、検診はそのタイミングに合わせて行くことになります。お隣の海士町知夫村では診療所のみのため、島前地域の妊婦さんが全員同じ日に検診に来ます。なので、毎回けっこう混み合っていました(と言っても数人待ち程度ですが)。産婦人科の先生は夕方のフェリーに間に合うように診察を終える必要があるので、結構テキパキとした検診です。妊婦検診は全部で十数回行くことになりますが、費用は行政から配布される受診票を使うことでほとんどかかりませんでした。

行政のサポート

島前病院では出産はできないため、必然的に本土(松江)の病院または産院に行くか、里帰り出産かという2択となります。そのため、出産予定日の約1ヶ月前には本土に移動しての待機が推奨されています。このあたりが離島出産のネックですが、西ノ島では移動などの費用として出産準備金10万と、宿泊に関して補助金(または提携ホテルでの割引)が用意されており、かなり手厚いサポートが受けられます。

また、島根県からは「こっころカード」というものが配布され、本土までのフェリーでは2等料金で1つ上のランクの席(混雑していないのでゆったり座れます)に乗船できたり、協賛店で各種割引を受けたりすることができます。今回は島根県松江市に滞在しましたが、飲食店などは協賛店が多く割引率も高い印象で、なかなかありがたいサービスです。

Term2: 本土での出産待機

職業柄PC一台でできる仕事がほとんどなので、今回は夫婦で松江に渡りました。滞在先は西ノ島町と提携しているレインボープラザというホテルにしました。このホテルは妊婦滞在用の部屋(和室 or 洋室)があり、自炊設備があるので滞在中の食費も抑えることができます。部屋は広くはないですが、トイレ、風呂などもキレイで快適でした。また、妊婦滞在用にバリアフリー仕様になっていたり、緊急時の呼び出しスイッチが設置されていて安心でした。ただし、和室はインターネット環境がないので少し困った*1のと、せんべい布団だったのでちょっと背中が痛くなりますが、フロントで毛布を借りられるので敷布団の上に敷いたらなんとかなりました。がっつりインターネット使って仕事する時は、島根大近くの「たちよりkitchen」というカフェに入り浸ったりしていました。Free Wi-Fiあり、作業しやすい机でかなり居心地が良いです。ホットケーキやカレーなど、料理もおいしいです。

レインボープラザは松江駅から遠くて不便かと思いきや、数百メートル圏内にスーパーや外食チェーン、服屋などなんでもあるのでかなり便利な立地です。ちょっと足を伸ばすと松江城や県立図書館に行けるので、運動がてらの散歩コースとしてもなかなか良かったです。

seene.co

Term3: 入院〜出産

産院は無痛分娩ができるところに行きたい、という奥さんの希望で城北産婦人科クリニックになりました。妊婦さんは全室個室で、毎食豪華なごはんがでます。その割に費用は安く、無痛分娩費用を除くと出産育児一時金として支給される42万から少し足が出る程度で済みました。先生の診察も丁寧で、助産師さんもいろいろとサポートしてくれるので、入院中は快適に過ごせたようです。出産時は一緒に立会いましたが、出産の部屋も病院然としないように工夫されていて、なるべくリラックスして臨めるような配慮がされていました。

Term4: 帰島

出産後、自分は家を片付けるために先に帰島して、その後のサポートは出産前日に来てくれた義母にバトンタッチしました。出産後の入院期間は5日間で、基本的に母子同室です。ごはんは相変わらず毎食豪華で、お祝い膳も鯛が出たようで喜んでいました。入院期間中は助産師さんに授乳、オムツ替え、沐浴などの一通りのお世話を教わって過ごしていたようです。入院期間後、帰島のために新生児を連れてバスやフェリーで4時間ほど移動が必要なので、そこが心配点ではありましたが、義母にも交代で面倒を見てもらったりで、無事に西ノ島に帰ってきてくれました。

Term5: 自宅でお世話開始

自宅でのお世話が始まりました。奥さんは2ヶ月の産休、自分は家で仕事しているので、二人で適当に家事やお世話を分担しています。 ベビー用品は日用品的なものは島内にありますが、ベビーバスなどの大物は売っていないので、ネットで色々と揃えました。

*1:スマホ向けには Softbank の Free WiFi が飛んでますが...

チキンジャンジリを再現したい

西ノ島に移住してはや四ヶ月となります。生活面で困ることはほとんどないですが、移住前によく通っていた錦糸町のインドカレー屋さんの「チキンジャンジリ」というカレーが時々食べたくなります。島前地域にはインドカレー屋さんはないので、ネットでレシピを探したりしていましたが、良いレシピを見つけることができませんでした。

というわけで、ないものは作ろう!ということで他のカレーのレシピを元に再現にチャレンジしてみました。

ちなみに元ネタのカレー屋さんはこちら。 www.sapana-group.com

チキンジャンジリはカシューナッツや卵、レーズンなどが入ったコクのあるクリーミーなカレーです。 レシピはこちらの本のバターチキンカレーをベースにジャンジリ要素を足してみています。

もっとおいしい!  はじめてのスパイスカレー  -3スパイス&3ステップで作る-

もっとおいしい! はじめてのスパイスカレー -3スパイス&3ステップで作る-

この本は写真が豊富で、炒め方のコツや手順も細かく書かれていて、非常にわかりやすいです。3種のスパイス(クミン、カイエンペッパー、ターメリック)を使った基本のカレーとその応用という構成になっているので、基本のカレーをベースとしたアレンジもしやすいです。

結論から言うと、味はかなり近い感じになりました。非常にこっくりマイルドでうまいですが、ハイカロリーです(^q^) 実は2回目のチャレンジなのですが、前回は肉の漬け込みなし、生クリームがなかったので牛乳+バターで代用しました。 やはり肉は漬け込んだほうが断然やわらかく仕上がります。生クリームは代用品のほうがオリジナルに近い味になった気がします(今回は植物性の生クリームを使ったからかも...)。

f:id:k-aeg:20151117201823j:plain

見た目は、(写真がないですが)オリジナルはもう少しオレンジ色に近い感じです。生クリームがもっと多く入ってるんでしょうか。


材料(4皿分)

  • 鶏もも肉 400g
  • マリネ液
    • プレーンヨーグルト 100g
    • おろしにんにく 小さじ1
    • ケチャップ 大さじ2
    • はちみつ 大さじ2
  • スパイス
    • クミン 大さじ1
    • カイエンペッパー 小さじ1/2
    • ターメリック 小さじ1/2
  • バター 30g
  • しょうが 2片
  • タマネギ 1個
  • カットトマト 1缶
  • カシューナッツ 50g
  • ピーマン 4個
  • レーズン 40g
  • 生クリーム 200g
  • ゆで卵 4個

生クリームは牛乳+バターでも代用できます。 作り方はこちらのサイトを参考にしました。

改訂版!牛乳とバターで簡単代用生クリームの作り方 | ぴぴ

ナンはレシピに含めていませんが、フライパンで焼けるナン粉をネットで買いました。

パイオニア企画 ナンミックス 360g

パイオニア企画 ナンミックス 360g

スパイス類もネットで調達しています。クミンは消費量が多いので他のスパイスより多めに買ってます。

甘利香辛食品 CA カエンペッパー 200g

甘利香辛食品 CA カエンペッパー 200g

甘利香辛食品 CA ターメリック(粉) 200g

甘利香辛食品 CA ターメリック(粉) 200g


作り方

ムダにフローチャートで書いてみましたが、面倒くさかったです(^q^)もうしません。

f:id:k-aeg:20151118024003p:plain

カシューナッツ投下直後の様子。 f:id:k-aeg:20151117193445j:plain

完成! f:id:k-aeg:20151117195900j:plain

竹でディジュリドゥ作り

おとなりの島、中ノ島(海士町)で繁殖しすぎた竹を刈る会、鎮竹林(ちんちくりん)に初めて参加してきました。鎮竹林では竹チップとしての活用がメインみたいですが、参加する前から竹で楽器つくったら楽しそうだなと思ってたので、刈った竹をもらってきて、さっそくディジュリドゥを作ってみました。

ディジュリドゥはオーストラリアの先住民アボリジニーの伝統的な管楽器で、指穴等はなく音階は固定されていますが、ぶおぉぉぉという迫力のある音がでます。

www.youtube.com

本来はユーカリの木をシロアリが食べて中が空洞になったもので作るそうですが、竹や塩ビ管などでも結構それっぽく作れるようです。 作り方は以下のサイトなどを参考にしました。 www.guaduabamboo.com

竹製ディジュリドゥの作り方

http://www5d.biglobe.ne.jp/~asiakaze/diju/bamboo.html

材料と工具

作り方

竹の切り出し

適当な竹を見繕って切り出します。吹き口の内径は3cmくらい、そこから先端に向かって広がっているものを使います。吹き口は節のところに合わせると具合が良いらしいですが、あとで調整したりするので節よりちょっと長めに切り出しておきます。

節抜き

長い金属の棒(鉄筋など)を竹の内部に突き刺して、ハンマーで棒の先端を叩き、内部の節を落とします。吹き口から二番目の節は適度に残しておくと、吹いた時に抵抗感がつくので吹きやすいそうです。片側からすべての節に届く棒はあまりないので、両側から攻めます。

油抜き

竹の水分を飛ばすため、カセットコンロなどで竹をくるくる回しながら炙ります。炙っていると水分がにじみ出てくるので、汚れても良い布で時々拭き取ります。ちょっと焦げるくらいまで炙って、全体が茶色っぽくなったら完了です。炙っている最中は竹の先端から熱い汁が出てくるので注意が必要です。

Before

f:id:k-aeg:20150928004318j:plain

After

f:id:k-aeg:20150928004527j:plain

カット

吹き口側を節に合わせてカットします。また、吹き口にする節からメジャーで測り、適当な長さ(今回は120cmにしました)にカットします。長さにより音程が変わるので、実際に吹いてみて長さを決めます。 f:id:k-aeg:20150928004951j:plain

切り口がちょっとバリバリしちゃってますが、本当はマスキングテープなどを巻いておくと良いようです。 f:id:k-aeg:20150928005427j:plain

また、外側の節はかんなを使って落としておきます。 f:id:k-aeg:20150928005715j:plain

マウスピース

吹き口の大きさ調節と防水のため、肌にやさしいビーズワックスで吹き口を成形します。ディジュリドゥ用にシート状になっている製品などもありますが、単価が安かったので今回はペレット状のものを使いました。

ビーズワックス・クリアー 100g

ビーズワックス・クリアー 100g

ボールにちょっと熱めのお湯を入れ、ビーズワックスのペレットを適量放り込んで20秒ほど待ちます。ペレットが柔らかくなってきたら、ペレットを拾い集めてドーナツ状に成形します。

f:id:k-aeg:20150928005841j:plain

これを冷めない内に吹き口に乗せて、吹きやすい大きさの穴(2.5cm〜3cmくらい)に成形して完成です。

f:id:k-aeg:20150928010648j:plain

仕上げ

今回はここまでしかやってませんが、ちゃんと良い感じの音が出るようになりました。 あとは、アクリル絵の具で色を塗ったり、内部の防水加工をしたりすると尚良し、という感じでしょうか。まあ、焼き目がなかなか良い感じについたのでこのままでもいいかなぁ。

演奏方法

循環呼吸という呼吸法で鼻から息を吸いつつ、口から息を吐きつづけることで、息継ぎの切れ目なく音を鳴らし続けることができます。 コップとストローで練習するのが定番みたいです。 piperscaffe.org

奏法もいろいろあるようなので練習してみようと思います。 timbernote.cloud-line.com

OpenROVテストダイビング(耳浦海岸)

前回のダイブで浸水してしまった水中ドローンのOpenROVですがやっと補修してテストダイビングしてきました。 場所は西ノ島の耳浦海岸です。

www.youtube.com

浅瀬なせいかあんまり魚はいませんでした...。

0:00- 水ぎわ石ころゾーンはちっこい魚がうようよしています。

3:50- 砂地ゾーンに入ってからは魚がほとんどいません。火星探査機の気分です。

9:50- メバルっぽい魚が出現

11:36- 長めの魚が出現

13:00- 画面手前から足の長いクラゲが出現

補修ついでにいくつか改良してます。

水漏れ補修

水漏れ箇所の特定は真空ポンプを使います。

メインチューブの片方のフタ周辺を水の中に沈めて、反対側のフタの空気穴に真空ポンプのチューブをつなぎ、ポンプでシュコシュコとやって-50kPa程度まで空気を抜きます。するとチューブ内部の水漏れ箇所から水が侵入してきます。

f:id:k-aeg:20150824233157j:plain

メインチューブのフタには十数本のケーブル束を通す穴があり、エポキシ系接着剤でポッティング(ケーブルと穴の隙間を接着剤で埋める加工)してありますが、ケーブルの束の中心あたりから水漏れしていました。ここはエポキシ系接着剤の粘度だと浸透しにくく、水漏れしやすいポイントだと思います。いったん粘度の低い接着剤でケーブル間のすきまを埋めたあと、再度エポキシ系接着剤でポッティングしました。

ちなみに、手元にあるOpenROVはver2.7ですが、最新のver2.8ではこのあたりが改良されており、メインチューブのケーブル穴がコネクタ直付けになったのでポッティングがしやすくなっているようです。

浮力調整

普通に組み立てた状態だと、淡水向けの浮力になっているため、海で使用する場合は適切なおもりを追加して中性浮力の状態にしてやる必要があります。本当は左右のバランスを考慮して、同じ重さの鉛などを左右に足すべきですが、適当なおもりがなかったので今回は海岸の石を括りつけて代用しました...。

PC-I/Fコンバータ間配線の無線化

OpenROVの操作は基本的にはPCのブラウザから行います。PCからコネクタ変換ボックスにはUSBケーブル(下図の青線)とLANケーブル(下図の赤線)で接続、変換ボックスからはツイストペアケーブル(2本の電線を撚り合わせたもの、下図の緑線)でOpenROVに接続されます。

f:id:k-aeg:20150906223201p:plain

USBケーブルはOpenROVの制御基板であるBeagleBoneの電源供給用で、LANケーブルがブラウザとBeagleBone上のWebサーバの通信用です。実運用上、PCはなるべく水際から離しておきたいので、USBケーブルは防水仕様のモバイルバッテリー、LANケーブルは無線LANポケットルーターに接続して無線化しました。ちなみに、図に書いてませんがルーターの電源はUSB端子なのでモバイルバッテリーから取れます。

f:id:k-aeg:20150906225423p:plain

モバイルバッテリーは以下の製品を使いました。お手頃価格ですが作りはしっかりしていて良いです。

無線LANポケットルーターは以下の製品を使いました。設定なしでお手軽接続でき、いざという時は有線LAN接続もできるのが秀逸です。

アクションカム搭載

搭載場所をメインチューブの前にするか、本体の上面にするかでちょっと悩みました。メインチューブ前だと内蔵カメラの視界が遮られて操作しにくくなるし、本体上面だと水の抵抗を受けやすいのと機体のバランスが悪くなりそうです。

今回はメインチューブ前に固定するお手軽な方法がなかったので、とりあえず本体上面にビニールテープで仮設置しましたが、上下移動用スラスターに干渉しないように気をつけて設置する必要がありました。一応カメラの脱落防止用にワイヤーもつけておきました。

いずれは3Dプリンタで専用のマウンタを作りたいところです。

Raspberry Pi で GPIO

ちょっと工作で Raspberry Pi でモータを制御する必要があったので、GPIO(General Purpose Input/Output、汎用入出力)制御について調べたりしました。そもそもGPIOとはなんぞや、という話はここでは書きません。

前提条件

この記事では以下の環境で開発しています。

  • Raspberry Pi model B を使用
  • OS は Raspbian がインストール済み
  • 言語はPythonを使用(使用経験なし^^;)
  • ライブラリはRPi.GPIO(0.5.11)を使用

ライブラリの公式wiki( raspberry-gpio-python / Wiki / Home )にサンプルコードなどがあります。この記事では主にここの内容を参考に書いています。ちなみにRuby版もあるようです。

用意するもの

セットアップ

GPIOライブラリのインストール

Python の GPIO制御用ライブラリ(RPi.GPIO)をインストールします。 ただし、Raspbian にはデフォルトでインストール済みです。

$ sudo apt-get install python-rpi.gpio
スクリプトファイルの作成

好きなエディタで適当な .py 拡張子のファイルを作成します。

$ nano gpio_test.py
ライブラリのインポート

作成したファイルにGPIOライブラリのインポート文を記述します。

import RPi.GPIO as GPIO
チャンネルの指定方法

RPi.GPIO では、P1から始まるボード上の物理的なピン番号、もしくはチップから見たGPIOピンの番号(GPIO12など)のいずれかをチャンネルとして抽象化して扱います。チャンネルの指定方法は以下から選択できますが、いずれかのモード指定は必須です。

  • GPIO.BOARD

    P1から順番にボードに並んでいる順でピン番号をチャンネルとして扱います。 物理的に見たままのピン配置なので、ジャンパワイヤでブレッドボードにつなぐ場合はこちらがわかりやいです。 ただし、Raspberry Pi のモデルによってピンに割り当てられた機能は異なるため、プログラムの互換性はなくなります。

  • GPIO.BCM

    チップ依存のGPIOピン名称をチャンネルとして扱います。Raspberry Pi のモデルやリビジョンによって物理ピンの場所が異なります。 GPIOピン全体をブレッドボードに引き出すアダプタを使用する場合は、大抵チップ依存のGPIOピン名称が書かれているのでこちらが良さそうです。

例えばGPIO.BCMに設定する場合は以下のように指定します。

GPIO.setmode(GPIO.BCM)

どちらのモードに設定されているかは以下の関数で取得できます。

mode = GPIO.getmode()
チャンネルのモード設定

使用するチャンネルはモードを設定する必要があります。 以下のように指定します。

GPIO.setup([チャンネル], [GPIO.IN または GPIO.OUT])

例えば、チャンネル18を出力モードに指定する場合は以下の通りです。

GPIO.setup(18, GPIO.OUT)

複数チャンネルをまとめて設定することもできます。チャンネル11/12を出力モードに指定する場合は以下のように書きます。

chan_list = [11,12] 
GPIO.setup(chan_list, GPIO.OUT)

GPIO出力

Raspberry Pi のGPIO出力はデジタル出力とアナログ出力(PWM)が可能です。 ただしアナログ出力ができるピンはどのモデルでも固定でGPIO18ピン(番号体系がGPIO.BCMの場合)のみです。 なお、ピンの最大出力電流は50mAなので、これを超えるような負荷は接続できません。 また、入出力電圧は3.3Vなので、3.3Vを超える電圧を入力すると壊れる可能性があります。

デジタル出力

デジタル出力ではピンの電圧をHIGH(3.3V)、またはLOW(0V)に設定できます。 以下のように指定します。

GPIO.output([チャンネル], [GPIO.LOW または GPIO.HIGH])

例えば、チャンネル18をHIGHに指定する場合は以下のように書きます。

GPIO.output(18, GPIO.HIGH)

複数チャンネルをまとめて設定することもできます。 チャンネル11/12をHIGHに指定する場合は以下のように書きます。

chan_list = [11,12]
GPIO.output(chan_list, GPIO.HIGH) 

チャンネル11をHIGH、12をLOWに指定する場合は以下のように書きます。

chan_list = [11,12]
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW)) 
アナログ出力

アナログ出力では周波数とデューティ比を指定して、モータ制御などに使うPWM制御ができます。

まずピンに対して周波数を設定してpwmオブジェクトを取得します。

pwm = GPIO.PWM([チャンネル], [周波数(Hz)])

次にpwmオブジェクトに対してデューティ比を指定して出力を開始します。

pwm.start([デューティ比])

例えば、ピン18に周波数1KHz、デューティ比50%でPWM出力する場合は以下のように書きます。

pwm = GPIO.PWM(18, 1000)
pwm.start(50)

途中で周波数を変更する場合は以下の関数を使用します。

pwm.ChangeFrequency([周波数(Hz)])

途中でデューティ比を変更する場合は以下の関数を使用します。

pwm.ChangeDutyCycle([デューティ比])

PWM出力を停止する場合は以下の関数を実行します。

pwm.stop()

スクリプト終了時にはちゃんと停止しておきましょう。

GPIO入力

ポーリング

GPIOからの入力をポーリングで読み取る場合は以下の関数を使用します。

GPIO.input(ピン番号)

戻り値にはGPIO.HIGH(または1、True)かGPIO.LOW(または0、False)が返ります。

例えば、ピン22の読み出しで処理を分岐する場合は以下のように書きます。

if GPIO.input(22):
    # ピン22がHIGHの場合
else:
    # ピン22がLOWの場合

また、GPIO.input() に pull_up_down パラメータを指定してやることで、プルアップ抵抗(GPIO.PUD_UP)またはプルダウン抵抗(GPIO.PUD_DOWN)を有効にできます。 プルアップ抵抗またはプルダウン抵抗が有効な場合、回路がつながっていない状態でもGPIO.HIGHまたはGPIO.LOWが読み出されます。 例えば、チャンネル22をプルダウンに設定する場合は以下のように初期化します。

GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)

なお、Raspbian ではデフォルトでピンごとにプルアップまたはプルダウンされた状態に設定されてるようです。 各ピンの機能や初期状態については RPi BCM2835 GPIOs - eLinux.org に細かくまとめられています。

割り込みとエッジ検出

エッジとは、電気信号が LOW から HIGH (立ち上がりエッジ) または HIGH から LOW (立ち下がりエッジ) の状態に変化する瞬間のことを指します。例えばプッシュボタンなどが押されたことを検知したい場合などに、状態変化をイベントとして通知する仕組みが用意されています。

エッジ検出待ち

wait_for_edge() を呼び出すと、立ち上がりエッジまたは立ち下がりエッジが検出されるまで待ち状態に入ります。 単なるポーリングでのエッジ検出待ちよりもCPU資源を消費しない点が有利です。

GPIO.wait_for_edge([チャンネル], [検出したいエッジ])

検出したいエッジの指定は以下の3種類です。

  • GPIO.RISING (立ち上がりエッジ)

  • GPIO.FALLING (立ち下がりエッジ)

  • GPIO.BOTH (立ち上がりまたは立ち下がりエッジ)

例えば、チャンネル18の立ち上がりエッジ検出待ちをする場合は以下のように書きます。

GPIO.wait_for_edge(18, GPIO.RISING)
エッジ検出イベントの取得

event_detected() を呼び出すと、前回の event_detected() 呼び出し以降のエッジ検出イベントの発生状態を取得できます。今現在のチャンネルの状態にかかわらず、エッジ検出イベントの発生を後から確認できるので、ゲームなどのメインループ中でボタンが押されていたことを知りたい場合などに便利です。使用する前にあらかじめ add_event_detect() でチャンネルにイベント通知登録が必要です。

イベントの通知登録

GPIO.add_event_detect([チャンネル], [検出したいエッジ])

イベント発生状態の取得

if GPIO.event_detected([チャンネル]):
    #エッジ検出イベント発生
else:
    #エッジ検出イベント未発生

例えば、チャンネル18の立ち上がりエッジ検出イベントが発生していたかどうかを知りたい場合は、以下のように書きます。

GPIO.add_event_detect(18, GPIO.RISING)
# 何らかの処理
if GPIO.event_detected(18)
    #エッジ検出イベント発生
else:
    #エッジ検出イベント未発生
コールバック関数

add_event_detect() にcallbackパラメータを指定するとコールバック関数を登録できます。エッジ検出イベントが発生すると、登録したコールバック関数が別のスレッドで実行されます。add_event_detect() を同じチャンネルに対して複数回呼び出すことで、複数のコールバック関数を登録することも可能ですが、コールバック関数を呼び出すスレッドは単一のため、各コールバック関数は同時ではなく順次呼び出されます。

GPIO.add_event_detect([チャンネル], [検出したいエッジ], callback=[コールバック関数名])  
スイッチのチャタリング

エッジ検出を行う場合、チャタリングの発生により1回のボタンプッシュで複数回のイベントが発生する場合があります。チャタリングの影響を回避するには以下の方法をとります。

  1. スイッチとの間に 0.1μFのコンデンサを追加
  2. ソフトウェアによるチャタリングの除去
  3. A/Bを両方ともやる

ソフトウェアでチャタリングを除去する場合は、add_event_detect() でコールバック関数を登録する際に bouncetime パラメータを指定します。これにより、エッジ検出イベント発生直後からバウンス時間に指定された時間に発生した他のエッジ検出イベントが無視されるため、イベントが複数回上がるのを避けることができます。ただし、バウンス時間が短いと十分にチャタリングを回避できず、長くとりすぎると連続でボタンをプッシュした場合の反応が悪くなるので、用途に応じて適切な値に調節してあげる必要があります。

GPIO.add_event_detect([チャンネル], [検出したいエッジ], callback=[コールバック関数名], bouncetime=[バウンス時間(ミリ秒)])
イベント検知の解除

イベント検知を解除したい場合は remove_event_detect() を使用します。

GPIO.remove_event_detect([チャンネル])

終了処理

スクリプト終了時の後始末はGPIO.cleanup()で行います。これを忘れると再度スクリプト実行したときに失敗します。

GPIO.cleanup()

GPIO.setup() の対になる関数なのでパラメータにチャンネル(またはチャンネルのリストかタプル)を指定すると、指定したチャンネルのみ終了できます。

GPIO.cleanup(22)