離島子育て雑記 〜出産編〜
久々の更新となりますが、今月の頭に第一子が無事に誕生しました。 せっかくなので、隠岐・西ノ島での出産事情について記録を残しておこうと思います。
Term1: 妊娠期間中
産婦人科の妊婦検診
離島のお医者さんと言うと小さい診療所のイメージがありますが、西ノ島には隠岐島前病院があり、各科のお医者さんがローテーションで月に数回来てくれています。産婦人科医は月に2回の来島のため、検診はそのタイミングに合わせて行くことになります。お隣の海士町や知夫村では診療所のみのため、島前地域の妊婦さんが全員同じ日に検診に来ます。なので、毎回けっこう混み合っていました(と言っても数人待ち程度ですが)。産婦人科の先生は夕方のフェリーに間に合うように診察を終える必要があるので、結構テキパキとした検診です。妊婦検診は全部で十数回行くことになりますが、費用は行政から配布される受診票を使うことでほとんどかかりませんでした。
行政のサポート
島前病院では出産はできないため、必然的に本土(松江)の病院または産院に行くか、里帰り出産かという2択となります。そのため、出産予定日の約1ヶ月前には本土に移動しての待機が推奨されています。このあたりが離島出産のネックですが、西ノ島では移動などの費用として出産準備金10万と、宿泊に関して補助金(または提携ホテルでの割引)が用意されており、かなり手厚いサポートが受けられます。
また、島根県からは「こっころカード」というものが配布され、本土までのフェリーでは2等料金で1つ上のランクの席(混雑していないのでゆったり座れます)に乗船できたり、協賛店で各種割引を受けたりすることができます。今回は島根県松江市に滞在しましたが、飲食店などは協賛店が多く割引率も高い印象で、なかなかありがたいサービスです。
Term2: 本土での出産待機
職業柄PC一台でできる仕事がほとんどなので、今回は夫婦で松江に渡りました。滞在先は西ノ島町と提携しているレインボープラザというホテルにしました。このホテルは妊婦滞在用の部屋(和室 or 洋室)があり、自炊設備があるので滞在中の食費も抑えることができます。部屋は広くはないですが、トイレ、風呂などもキレイで快適でした。また、妊婦滞在用にバリアフリー仕様になっていたり、緊急時の呼び出しスイッチが設置されていて安心でした。ただし、和室はインターネット環境がないので少し困った*1のと、せんべい布団だったのでちょっと背中が痛くなりますが、フロントで毛布を借りられるので敷布団の上に敷いたらなんとかなりました。がっつりインターネット使って仕事する時は、島根大近くの「たちよりkitchen」というカフェに入り浸ったりしていました。Free Wi-Fiあり、作業しやすい机でかなり居心地が良いです。ホットケーキやカレーなど、料理もおいしいです。
レインボープラザは松江駅から遠くて不便かと思いきや、数百メートル圏内にスーパーや外食チェーン、服屋などなんでもあるのでかなり便利な立地です。ちょっと足を伸ばすと松江城や県立図書館に行けるので、運動がてらの散歩コースとしてもなかなか良かったです。
http://seene.co/s/e86iLVseene.co
Term3: 入院〜出産
産院は無痛分娩ができるところに行きたい、という奥さんの希望で城北産婦人科クリニックになりました。妊婦さんは全室個室で、毎食豪華なごはんがでます。その割に費用は安く、無痛分娩費用を除くと出産育児一時金として支給される42万から少し足が出る程度で済みました。先生の診察も丁寧で、助産師さんもいろいろとサポートしてくれるので、入院中は快適に過ごせたようです。出産時は一緒に立会いましたが、出産の部屋も病院然としないように工夫されていて、なるべくリラックスして臨めるような配慮がされていました。
Term4: 帰島
出産後、自分は家を片付けるために先に帰島して、その後のサポートは出産前日に来てくれた義母にバトンタッチしました。出産後の入院期間は5日間で、基本的に母子同室です。ごはんは相変わらず毎食豪華で、お祝い膳も鯛が出たようで喜んでいました。入院期間中は助産師さんに授乳、オムツ替え、沐浴などの一通りのお世話を教わって過ごしていたようです。入院期間後、帰島のために新生児を連れてバスやフェリーで4時間ほど移動が必要なので、そこが心配点ではありましたが、義母にも交代で面倒を見てもらったりで、無事に西ノ島に帰ってきてくれました。
Term5: 自宅でお世話開始
自宅でのお世話が始まりました。奥さんは2ヶ月の産休、自分は家で仕事しているので、二人で適当に家事やお世話を分担しています。 ベビー用品は日用品的なものは島内にありますが、ベビーバスなどの大物は売っていないので、ネットで色々と揃えました。
ベビーバス [asin:B00GRKKL0Q:detail] 数ヶ月しか使わないので、処分しやすいように空気で膨らますタイプにしました。
ベビー布団
一通りセットになっているのと、りんごがかわいい、ということでこれになりました。 サイズは長く使えるようにちょっと大きめです。今のところ赤ちゃんは布団の長さの3分の1くらいに収まっています。ベビー服
松江のイオンで買いました。島にはあまり売ってないですが、たまに島内のリサイクル子供用品を無料で配ってくれる催しがあるので、そこでもらっても良さそうです。
おむつ/おしりふき
今のところ島内で買っていますが、種類や数はあまりないです。
- 島内では売っておらず、車移動には必須なので先にネットで買ってしまいましたが、西ノ島町ではベビーシートの無料レンタルとチャイルドシート の購入補助があることを後で知りました^^。
だっこひも [asin:B0057D1RKM:detail] 一応買っておきましたが、新生児はちっちゃすぎてはみ出そうなのでまだ出番は先のようです。帰島の際は、抱っこ紐ではなくおくるみに包んで連れて帰ってきました。
チキンジャンジリを再現したい
西ノ島に移住してはや四ヶ月となります。生活面で困ることはほとんどないですが、移住前によく通っていた錦糸町のインドカレー屋さんの「チキンジャンジリ」というカレーが時々食べたくなります。島前地域にはインドカレー屋さんはないので、ネットでレシピを探したりしていましたが、良いレシピを見つけることができませんでした。
というわけで、ないものは作ろう!ということで他のカレーのレシピを元に再現にチャレンジしてみました。
ちなみに元ネタのカレー屋さんはこちら。 www.sapana-group.com
チキンジャンジリはカシューナッツや卵、レーズンなどが入ったコクのあるクリーミーなカレーです。 レシピはこちらの本のバターチキンカレーをベースにジャンジリ要素を足してみています。
この本は写真が豊富で、炒め方のコツや手順も細かく書かれていて、非常にわかりやすいです。3種のスパイス(クミン、カイエンペッパー、ターメリック)を使った基本のカレーとその応用という構成になっているので、基本のカレーをベースとしたアレンジもしやすいです。
結論から言うと、味はかなり近い感じになりました。非常にこっくりマイルドでうまいですが、ハイカロリーです(^q^) 実は2回目のチャレンジなのですが、前回は肉の漬け込みなし、生クリームがなかったので牛乳+バターで代用しました。 やはり肉は漬け込んだほうが断然やわらかく仕上がります。生クリームは代用品のほうがオリジナルに近い味になった気がします(今回は植物性の生クリームを使ったからかも...)。
見た目は、(写真がないですが)オリジナルはもう少しオレンジ色に近い感じです。生クリームがもっと多く入ってるんでしょうか。
材料(4皿分)
- 鶏もも肉 400g
- マリネ液
- プレーンヨーグルト 100g
- おろしにんにく 小さじ1
- ケチャップ 大さじ2
- はちみつ 大さじ2
- スパイス
- クミン 大さじ1
- カイエンペッパー 小さじ1/2
- ターメリック 小さじ1/2
- バター 30g
- しょうが 2片
- タマネギ 1個
- カットトマト 1缶
- カシューナッツ 50g
- ピーマン 4個
- レーズン 40g
- 生クリーム 200g
- 塩 小さじ1/2
- ゆで卵 4個
生クリームは牛乳+バターでも代用できます。 作り方はこちらのサイトを参考にしました。
ナンはレシピに含めていませんが、フライパンで焼けるナン粉をネットで買いました。
スパイス類もネットで調達しています。クミンは消費量が多いので他のスパイスより多めに買ってます。
作り方
ムダにフローチャートで書いてみましたが、面倒くさかったです(^q^)もうしません。
カシューナッツ投下直後の様子。
完成!
竹でディジュリドゥ作り
おとなりの島、中ノ島(海士町)で繁殖しすぎた竹を刈る会、鎮竹林(ちんちくりん)に初めて参加してきました。鎮竹林では竹チップとしての活用がメインみたいですが、参加する前から竹で楽器つくったら楽しそうだなと思ってたので、刈った竹をもらってきて、さっそくディジュリドゥを作ってみました。
ディジュリドゥはオーストラリアの先住民アボリジニーの伝統的な管楽器で、指穴等はなく音階は固定されていますが、ぶおぉぉぉという迫力のある音がでます。
本来はユーカリの木をシロアリが食べて中が空洞になったもので作るそうですが、竹や塩ビ管などでも結構それっぽく作れるようです。 作り方は以下のサイトなどを参考にしました。 http://www.guaduabamboo.com/working-with-bamboo/bamboo-didgeridoowww.guaduabamboo.com
竹製ディジュリドゥの作り方
http://www5d.biglobe.ne.jp/~asiakaze/diju/bamboo.html
材料と工具
- 竹(120〜150cmくらい)
- ビーズワックス(蜜蝋)
- 竹用のこぎり(木工用よりも目が細かい)
- メジャー
- カセットコンロ
- 長い金属の棒(竹の半分以上の長さがあると良い)
- ハンマー
- 汚れても良い布
作り方
竹の切り出し
適当な竹を見繕って切り出します。吹き口の内径は3cmくらい、そこから先端に向かって広がっているものを使います。吹き口は節のところに合わせると具合が良いらしいですが、あとで調整したりするので節よりちょっと長めに切り出しておきます。
節抜き
長い金属の棒(鉄筋など)を竹の内部に突き刺して、ハンマーで棒の先端を叩き、内部の節を落とします。吹き口から二番目の節は適度に残しておくと、吹いた時に抵抗感がつくので吹きやすいそうです。片側からすべての節に届く棒はあまりないので、両側から攻めます。
油抜き
竹の水分を飛ばすため、カセットコンロなどで竹をくるくる回しながら炙ります。炙っていると水分がにじみ出てくるので、汚れても良い布で時々拭き取ります。ちょっと焦げるくらいまで炙って、全体が茶色っぽくなったら完了です。炙っている最中は竹の先端から熱い汁が出てくるので注意が必要です。
Before
After
カット
吹き口側を節に合わせてカットします。また、吹き口にする節からメジャーで測り、適当な長さ(今回は120cmにしました)にカットします。長さにより音程が変わるので、実際に吹いてみて長さを決めます。
切り口がちょっとバリバリしちゃってますが、本当はマスキングテープなどを巻いておくと良いようです。
また、外側の節はかんなを使って落としておきます。
マウスピース
吹き口の大きさ調節と防水のため、肌にやさしいビーズワックスで吹き口を成形します。ディジュリドゥ用にシート状になっている製品などもありますが、単価が安かったので今回はペレット状のものを使いました。
ボールにちょっと熱めのお湯を入れ、ビーズワックスのペレットを適量放り込んで20秒ほど待ちます。ペレットが柔らかくなってきたら、ペレットを拾い集めてドーナツ状に成形します。
これを冷めない内に吹き口に乗せて、吹きやすい大きさの穴(2.5cm〜3cmくらい)に成形して完成です。
仕上げ
今回はここまでしかやってませんが、ちゃんと良い感じの音が出るようになりました。 あとは、アクリル絵の具で色を塗ったり、内部の防水加工をしたりすると尚良し、という感じでしょうか。まあ、焼き目がなかなか良い感じについたのでこのままでもいいかなぁ。
演奏方法
循環呼吸という呼吸法で鼻から息を吸いつつ、口から息を吐きつづけることで、息継ぎの切れ目なく音を鳴らし続けることができます。 コップとストローで練習するのが定番みたいです。 piperscaffe.org
奏法もいろいろあるようなので練習してみようと思います。 timbernote.cloud-line.com
OpenROVテストダイビング(耳浦海岸)
前回のダイブで浸水してしまった水中ドローンのOpenROVですがやっと補修してテストダイビングしてきました。 場所は西ノ島の耳浦海岸です。
浅瀬なせいかあんまり魚はいませんでした...。
0:00- 水ぎわ石ころゾーンはちっこい魚がうようよしています。
3:50- 砂地ゾーンに入ってからは魚がほとんどいません。火星探査機の気分です。
9:50- メバルっぽい魚が出現
11:36- 長めの魚が出現
13:00- 画面手前から足の長いクラゲが出現
補修ついでにいくつか改良してます。
水漏れ補修
水漏れ箇所の特定は真空ポンプを使います。
メインチューブの片方のフタ周辺を水の中に沈めて、反対側のフタの空気穴に真空ポンプのチューブをつなぎ、ポンプでシュコシュコとやって-50kPa程度まで空気を抜きます。するとチューブ内部の水漏れ箇所から水が侵入してきます。
メインチューブのフタには十数本のケーブル束を通す穴があり、エポキシ系接着剤でポッティング(ケーブルと穴の隙間を接着剤で埋める加工)してありますが、ケーブルの束の中心あたりから水漏れしていました。ここはエポキシ系接着剤の粘度だと浸透しにくく、水漏れしやすいポイントだと思います。いったん粘度の低い接着剤でケーブル間のすきまを埋めたあと、再度エポキシ系接着剤でポッティングしました。
ちなみに、手元にあるOpenROVはver2.7ですが、最新のver2.8ではこのあたりが改良されており、メインチューブのケーブル穴がコネクタ直付けになったのでポッティングがしやすくなっているようです。
浮力調整
普通に組み立てた状態だと、淡水向けの浮力になっているため、海で使用する場合は適切なおもりを追加して中性浮力の状態にしてやる必要があります。本当は左右のバランスを考慮して、同じ重さの鉛などを左右に足すべきですが、適当なおもりがなかったので今回は海岸の石を括りつけて代用しました...。
PC-I/Fコンバータ間配線の無線化
OpenROVの操作は基本的にはPCのブラウザから行います。PCからコネクタ変換ボックスにはUSBケーブル(下図の青線)とLANケーブル(下図の赤線)で接続、変換ボックスからはツイストペアケーブル(2本の電線を撚り合わせたもの、下図の緑線)でOpenROVに接続されます。
USBケーブルはOpenROVの制御基板であるBeagleBoneの電源供給用で、LANケーブルがブラウザとBeagleBone上のWebサーバの通信用です。実運用上、PCはなるべく水際から離しておきたいので、USBケーブルは防水仕様のモバイルバッテリー、LANケーブルは無線LANポケットルーターに接続して無線化しました。ちなみに、図に書いてませんがルーターの電源はUSB端子なのでモバイルバッテリーから取れます。
モバイルバッテリーは以下の製品を使いました。お手頃価格ですが作りはしっかりしていて良いです。
無線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版もあるようです。
用意するもの
ブレッドボード
ブレッドボード用ジャンパワイヤ(メス - オス)
使用するピン数が少ない場合はこれでピン毎にブレッドボードに出します。 [asin:B00P9BVKOK:detail]
ブレッドボード用GPIOアダプタ
まとめてブレッドボードに出したい場合はアダプタが市販されています。 Raspberry Pi のモデルによって対応するものが異なるため注意が必要です。
Raspberry Pi model A/B 用(26pin) [asin:B00GMEHA42:detail]
Raspberry Pi 3 / Zero 1.3 / 2 / B+ / A+用(40pin)
セットアップ
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回のボタンプッシュで複数回のイベントが発生する場合があります。チャタリングの影響を回避するには以下の方法をとります。
ソフトウェアでチャタリングを除去する場合は、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)
水中版ドローン OpenROV で海中探検
隠岐周辺の海は透明度が高くきれいなので、これはぜひ海中探検をしてみたい!と思うわけですが、スキューバダイビングなどはそこそこ高額になるし、行ける場所にも限りがあります。というわけで水中版ドローンとも言えるROV(Remotely operated underwater vehicle) を手に入れてみました。
最近はニュースなどで騒がれだして、やれ規制だなんだという話でなかなか飛ばしづらい状況になってきているドローンですが、水中ならドローンが落下する危険性もないし、海中に住んでいる人もほとんど居ないと思うのでプライバシーの観点からも特に問題はないでしょう(笑)。
ROV というと一昔前までは非常に高価なシロモノであり、数百万〜数千万円の世界なので素人が手を出せるものではありませんでした。もちろん趣味で自作されている方はそこそこいますが、長らくホビー用途向けの製品化などはされてきませんでした(推測)。今回手に入れたのは OpenROVというオープンソース(材料や作り方、ソフトウェア等が公開されている)の ROV です。
http://www.openrov.com/www.openrov.com
昔GIGAZINEでも記事になっていたので見かけたことがある人もいるかもしれません。
作り方が公開されているので材料を揃えれば完全に自作も可能ですが、数年前に Kickstarter でのファンディングを終えて組み立てキットが製品化されています。2015年7月現在の価格は $899 と、これまでの ROV から考えると破格のお値段で製品化されています。
OpenROVのスペック
OpenROV(Ver2.7)のスペックについて簡単に触れておきます。
- ワイド画角のWebカムでリアルタイム映像が見られる(チルトシフト可)
- LEDライト
- ブラウザ経由で操作可能なのでOSプラットフォームに非依存
- コントロールボードは Beaglebone Black と Arduino MEGA で構成されており、Input/Outputを使用してユーザが機能を拡張しやすい
- リチウム充電池(別売り)で動作
- 100メートルのテザーケーブル
- 追加装備用のペイロードあり
- ソフトウェア、ハードウェア仕様はオープンソースで公開されており、コミュニティで質問や情報共有などができる
- 水深75m程度まで潜行できる(組み立てのクオリティによる)
- 深度センサはオプション
機能も拡張性もホビー用途としては申し分ない感じです。 ホストPCのブラウザ上ではリアルタイムの映像が見られるので、いわゆるFPV(First-person view)という状態で操作できるわけですが、基本的に静止画撮影のみで動画は撮れない(画面キャプチャソフトを使えば可能)のと、アクリルチューブ越しでそんなに画質は良くないので、映像を撮ろうと思ったらアクションカムを搭載したほうが良いです。
本体前面のペイロードはGoProが2つ乗るくらいのスペースなので、3D映像も取れそうです。 (GoProは高くて手が出ないので中国製アクションカムSJ4000を買いましたが...)
組み立て
組み立ては公式サイトの組み立て手順に従います。 openrov.dozuki.com
組み立てキットですが、一部材料や工具などは自分で用意する必要があります。バキュームポンプやポッティング用の接着剤などレアな工具もあり、全部揃えると1万以上かかりました...。
組み立て作業は結構手順が多い上に、アクリル板の接着や細かいハンダ付けなど、いろいろと慣れていない作業もあり、かなり大変でした。2人で15時間くらいかかったと思います。
特にコントロールボードが入っているメインチューブのフタの接着や、ケーブルを出すための穴のポッティング(エポキシ系接着剤などを流し込んでケーブルと穴のスキマを埋める)など、防水でネックになる部分は慎重にやらないと簡単に浸水します(しました笑)。実は手順で見逃してやってなかったのですが、水に投入する前にハンドバキュームポンプで Vacuum Test の実施が推奨されています。
初ダイブ
近くの堤防で水深4mくらいの海に投入してみました。 海中を自在に動き回れるのはなかなかにステキです。
が、10分ほど動かしたあと、浸水してしまいました笑。
雑感としては、
- ブラウザ経由の操作での応答性が気になっていたが、実際に動かして見た感じでは遅延は気にならない(そもそも水中では水の抵抗でそこまで機敏な動きもできない)
- そこそこ小回りは効くが波の影響で回転してしまい、まっすぐ進むのが難しい
- ノートPCの画面が外だと見づらいので画面のフードがあると良さそう
- ノートPCの配置のために絶対に濡れない場所が必要(あるいは防水のPCとかタブレットを買うか...)
- 潜航中はどのあたりを移動しているのかが分かりづらい
- 浮力調整をしていなかったのでぷかぷか浮いてしまった(ペイロードにおもりを積んで調節が必要)
- PC との接続に USB ケーブルと LAN ケーブルが必要なため携帯性が悪い(そのうち無線化したい)
- ダイブ後のメンテナンスが面倒(とくに海水に入れた場合、淡水で洗浄が必要)
という感じです。
浮力調整や Vacuum Test をちゃんとやってから次回のダイブに望みます。
離島暮らし雑感
とある事情により、7年ほど勤めていた会社を退職し、島根県の離島・西ノ島に移住しました。 これからしばらくはフリーランスとしてアプリ開発などをやっていきます。
移住してから一週間ほど経過しましたが、引越し後の整理や仕事場の構築に時間がかかっており、まだあまり島らしいことはしていません...
自分は生まれてこのかた、関東圏でしか暮らしたことがありませんでしたが、離島暮らしについて一週間で分かったことなどを書き出してみます。
西ノ島について
西ノ島は、島根県の松江から北に60kmほどに位置する、隠岐諸島に属する島です(噴火で絶賛成長中の西之島と間違えられますが、あれは小笠原諸島の無人島なので東京都です)。
隠岐諸島はさらに島前(どうぜん)、島後(どうご)という地域に大別されます。島前は西ノ島(西ノ島町)、中ノ島(海士町)、知夫里島(知夫村)の3島で構成され、島後は隠岐の島(隠岐の島町)1島のみです。
西ノ島の人口は3,000人ほどですが、半数くらいが65歳以上でけっこう高齢化がすすんでいます。一方でIターンやUターンの移住政策によって若い人も増えつつはあるようです。
主な産業は漁業と畜産で、それぞれイカ漁と牛馬の放牧(繁殖経営)が中心のようです。島のPRキャラクターは特産品のイカにちなんで「活イカ活っちゃん」がいて、ツイッターアカウント(活イカかっちゃん (@katsuikakacchan) | Twitter)もありますが、ツイート数が3つしかなかったりであまりやる気が見られません。そもそも名前に地名入ってないけどいいの?とかのつっこみは置いておくとして、キャラクターはかわいいと思います。Tシャツ欲しい。
交通
西ノ島までは、松江の七類港または鳥取県の境港からフェリーで3時間くらいかかります。高速船を使うと1〜2時間くらい(季節により航路が変わる)で着きますが、料金はフェリーの倍です。 また、島前の各島間もフェリーや内航船で結ばれています。おとなりの海士町までは数分です。奥さんはフェリー通勤してます。
島内はアップダウンが多く、移動は車必須なかんじです。軽自動車を買いました。
住宅事情
民間のアパートなどが無いため、公営住宅か空き家になりますが空きがない場合もあります。家賃は関東都市部の1/5〜1/10くらいとかなりリーズナブル。 プログラマにとっては生命線となるインターネッツは、ちゃんと光ファイバーが来ております。
引っ越しはフェリー経由したりがあるので、2tロング車1台分で50万ほどかかりました。驚きびっくりプライスですが、最初の見積もりでは4tで90万と言われておりました。が、さすがにツラいので、家具類を全部バラしたり大物を廃棄したりで2tロングになんとか収めました。おかげで組み立てにかなり時間がかかっています。
お買い物
島内にはコンビニなどチェーン店ぽいものはありません。食料品はスーパーが1件とコンビニ的ポジションの個人商店があります。物価はモノによりますが、乾物系は本土とほとんど変わらず、ナマモノ系は1〜5割増しくらい。お肉は冷凍しかなくてちょい高めです。あと、魚介類は豊富かとおもいきや、島でとれたものは流通しておらず(本土で売ったほうが高く売れるとか)、わりと高めです。個人商店では日用品もかなり品揃え豊富なので、買い物に困ることはまずないです。しかし、服屋はないので通販や本土で買ってくるそうな。
送料
離島で気になるのが通販などの送料ですが、ぶっちゃけ高いです。ソファを買おうとしたら1万ウン千円の送料がかかりますし、小物でもすぐに数千円になります。が、Amazon Prime を使うと離島でも送料無料になることが分かりました。送料無料なのが Amazon Prime 対応の商品に限定されることと、年会費4000円くらいかかりますが、あっという間に元がとれます。ちなみに Amazon の回し者ではありませんです。
娯楽
娯楽施設的なものはスナック的なもの以外はほとんどないですが、自然豊かというか自然まみれなので、釣りしたり山に登ったり、海でクシクラゲを眺めたりで十分楽しいです。
観光
西ノ島はスケールの大きい国賀海岸など見どころが多いです。これはまた後日。