tag:blogger.com,1999:blog-72293672521512810272024-03-14T17:40:20.163+09:00Eleclog.見習い赤魔道士のメモ帳Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.comBlogger106125tag:blogger.com,1999:blog-7229367252151281027.post-44699224830463347902023-12-07T00:00:01.384+09:002023-12-07T00:55:33.571+09:00手のひらサイズの地震計開発キットEQIS-1を作った話<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPHLa8S2PS7wVPSfvL9S_EHuZ1N0PdN_3UNc0TWUpW1pvD9dReu2y_799E3ZwNFdQ-vGRijFGqPDGB9hsAiUhNxYOxn89een5ezwo12WW_qA_pKnoQigHwDgtftEvUKKlF09egG_ECPxS39szJerSYpvNTvPuknlnrJ3Q0St0t2TtrjSme-F705HsgcrZ/s1440/DSC01527.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1440" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPHLa8S2PS7wVPSfvL9S_EHuZ1N0PdN_3UNc0TWUpW1pvD9dReu2y_799E3ZwNFdQ-vGRijFGqPDGB9hsAiUhNxYOxn89een5ezwo12WW_qA_pKnoQigHwDgtftEvUKKlF09egG_ECPxS39szJerSYpvNTvPuknlnrJ3Q0St0t2TtrjSme-F705HsgcrZ/w400-h266/DSC01527.jpeg" width="400" /></a></div><p></p><p><a href="https://eleclog.quitsq.com/2022/12/qzqsm-receiver.html">前回の記事</a>からピッタリ丸1年ぶりの記事です...</p><p>気が付けば2023年も残り1ヶ月を切っていて、そういえばアドベントカレンダーの季節だなぁ...と思い「<a href="https://adventar.org/calendars/9301" target="_blank">防災アプリ開発 Advent Calendar</a>」を覗いてみると たまたま去年と同じ12/7が空いていたので滑り込みで7日目として参加させていただきます。</p><p><br /></p><p>現在、日本全国には地震を観測するための震度計を設置した地点「震度観測点」が4371地点存在しています。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKquq8YP7yfiXCjkcckJHPLcu7O1ioOjAvsyK81FHocPxp05QwYDWilLfdrZqjmNgRiLiQImgnSofm0M1Q5AtYDBnmugCufT2jMphhNOfx2pcfhlApw6T6pMklhKzYcVjD_kpnDH6DVAGV3jKoib5-dav234RrYkqUCQES3tj9mMX0Ss0vD5KVJixV4qmA/s4032/IMG_4722.heic" style="margin-left: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKquq8YP7yfiXCjkcckJHPLcu7O1ioOjAvsyK81FHocPxp05QwYDWilLfdrZqjmNgRiLiQImgnSofm0M1Q5AtYDBnmugCufT2jMphhNOfx2pcfhlApw6T6pMklhKzYcVjD_kpnDH6DVAGV3jKoib5-dav234RrYkqUCQES3tj9mMX0Ss0vD5KVJixV4qmA/w320-h240/IMG_4722.heic" width="280" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2-gpMzA-UUHglKE46BegiwzblbVwDxTu5dr455kYd69CivAGkSs3aMgKOoWfQbhnaEJfhyphenhyphenylsE2eUW2BEwu0iZ976A4OKVdc36YQFP-7MSPlgzZIIF1Lu4mjgae7SvFNxiC6bFPHSF6YYEg8jhe_22DSnXCHV7CKk_N2-1LJlTrX5dqciJwwl9cA0YMN0/s3913/IMG_4721.heic" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2935" data-original-width="3913" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2-gpMzA-UUHglKE46BegiwzblbVwDxTu5dr455kYd69CivAGkSs3aMgKOoWfQbhnaEJfhyphenhyphenylsE2eUW2BEwu0iZ976A4OKVdc36YQFP-7MSPlgzZIIF1Lu4mjgae7SvFNxiC6bFPHSF6YYEg8jhe_22DSnXCHV7CKk_N2-1LJlTrX5dqciJwwl9cA0YMN0/w320-h240/IMG_4721.heic" width="280" /></a></div><div class="separator" style="clear: both; text-align: center;">奄美大島の瀬戸内町にある防災科研の震度観測点「瀬戸内強震観測施設」<br /><div class="separator" style="clear: both;">KGS032 瀬戸内 (4652520 瀬戸内町古仁屋) / 2023.05.14 撮影</div></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeHBuy1plSHCZxkAez4lu-TufdcIPD4Q-WQgG1d1zrQnMGzd6_313iSNSuWaSDQw3223Xp7P_l6YOoYea-6TIPcZH3gSPQ5tinbx56MK-AyaeMo-p0tdC9QEGte8SOPCcHAcVUfTrjLIKBM-YyV4v6Hh2vSZ23u7lCmBysxttLAVHsf0fPKBL400Vts6Qf/s4032/IMG_5325.jpeg" style="margin-left: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeHBuy1plSHCZxkAez4lu-TufdcIPD4Q-WQgG1d1zrQnMGzd6_313iSNSuWaSDQw3223Xp7P_l6YOoYea-6TIPcZH3gSPQ5tinbx56MK-AyaeMo-p0tdC9QEGte8SOPCcHAcVUfTrjLIKBM-YyV4v6Hh2vSZ23u7lCmBysxttLAVHsf0fPKBL400Vts6Qf/w320-h240/IMG_5325.jpeg" width="280" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeLy3UMXU7lQ022fmcDYSJuCqMnkp8oC3uX_VTCq_B7DuArq2JXpdp6juh48xd7emMo7gEuFbLsfRljlWHCUk4rwWZB88AgAAMw7pRSrbnxI_4nTOaN4cnfu_gSlyOG8eXSx8Ly8dvWKJKdqV089Kj9dZSbu4d9SabmIHRPOTowHAga5qdWs-a2YpN1pQC/s4032/IMG_5326.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeLy3UMXU7lQ022fmcDYSJuCqMnkp8oC3uX_VTCq_B7DuArq2JXpdp6juh48xd7emMo7gEuFbLsfRljlWHCUk4rwWZB88AgAAMw7pRSrbnxI_4nTOaN4cnfu_gSlyOG8eXSx8Ly8dvWKJKdqV089Kj9dZSbu4d9SabmIHRPOTowHAga5qdWs-a2YpN1pQC/w320-h240/IMG_5326.jpeg" width="280" /></a></div><div class="separator" style="clear: both; text-align: center;">熊本県大津町にある防災科研の震度観測点「大津強震観測施設」</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both;">KMM005 大津 (4340320 大津町引水) / 2023.07.21 撮影</div><div class="separator" style="clear: both;"><br /></div></div><p>この震度観測点は気象庁、地方公共団体、そして防災科学技術研究所が設置したもので、各震度観測点での計測データを元に緊急地震速報や各地の震度などが発表されています。<br /></p><p>この震度観測点ですが、人口の多い都市部を中心に全国を網羅するように整備されているものの、よく見ると疎な地域も存在します。<br />例えば、熊本地方気象台のある熊本地方合同庁舎の敷地内に気象庁の震度観測点「熊本西区春日」がありますが、地図を見ても分かるとおり目と鼻の先の白川を渡った先は熊本市中央区です。<br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2vdH-MsCNJC7I9LGlQW4ANdMWVixBTbITPbB8o5MYKKL1jEtTEDyx89DG71oPwY1fhIFKD4zqUEiQ86ECutagDEYEwcZ6kiq3sXkh_uC0flRlTp1PxgSqioakswUaWk8qUe31lt3sX05-Fj_BcG1mY6-xRE_vA0PxVKmDW5vG2mKVeSPU_4bh9g4JdW5t/s2048/img001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1340" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2vdH-MsCNJC7I9LGlQW4ANdMWVixBTbITPbB8o5MYKKL1jEtTEDyx89DG71oPwY1fhIFKD4zqUEiQ86ECutagDEYEwcZ6kiq3sXkh_uC0flRlTp1PxgSqioakswUaWk8qUe31lt3sX05-Fj_BcG1mY6-xRE_vA0PxVKmDW5vG2mKVeSPU_4bh9g4JdW5t/w640-h418/img001.png" width="480" /></a></div><div class="separator" style="clear: both; text-align: center;">気象庁 <a href="https://www.data.jma.go.jp/svd/eqev/data/intens-st/" target="_blank">震度観測点</a>のページより(注釈は筆者が記入)</div><div><br /></div>熊本市西区は大半が山地(金峰山)であり、実際には区の東部から南西部にかけて住民が住んでいるため、ある意味で居住地域で見た時の中心にあるようにも見えます。<br />しかし、震度観測点から熊本西区役所までは直線で約3.9km、金峰山西側の河内町付近までは約10km離れています。(東京都心部には1〜3km間隔で設置されているのに...)<p></p><p>さて、そんな震度観測点から離れた場所に住んでいる方やマンションの高層階に住んでいる方、その他「気象庁発表の震度と体感が違う...」と感じる方、あるいは自宅の詳細な震度が知りたいという地震マニアの方向けに... コンパクトで、見た目が整っていて、データも取れて、なるべく安価な震度計を提供できないだろうか、と考えて作ったのが「地震計開発キット <b>EQIS-1</b>」です。</p><p>前置きが長くなりましたが... 今回はEQIS-1の開発から販売までのお話を記録も兼ねて書こうと思います。</p><p><br /></p><h3 style="text-align: left;">色々ある(あった)けど決定版がない個人向けの地震計</h3><div><br /></div><div>かつて、家庭用地震計と銘打って販売された「グラグラフ」やオムロンが販売していた音声地震警報器「D7G-A01L 揺れっ太」など、製品として個人でも購入できるスタンドアローン動作(FM放送波やインターネット接続を要せず、搭載したセンサーで揺れを検出する)が可能な地震計が販売されていました。しかし、テレビや携帯電話で得られる緊急地震速報や精度の高い地震情報に押されたのか、これらの製品も販売終了してしまい、長いこと個人で購入できる手軽な地震計が市場に存在しない状態が続いていました。</div><div><p>昨年、同人ハードウェアとしてRaspberry Pi Picoを使用した「PiDAS」が登場していましたが、組み立ての手間が大きいことに加えて公式ファームウェアに<a href="https://github.com/nrck/PiDAS/issues/1" target="_blank">バグが存在</a>しており、<a href="https://github.com/nrck/PiDAS/pull/2" target="_blank">メンテナンスされていない</a>状況が続いています。<br /></p><p>そこで、公式リポジトリにissueを立てていたNoneType1氏、PiDAS向けの改良ファームウェア(PiDAS Plus)を製作していたingen084氏、そして...</p><p></p><blockquote class="twitter-tweet tw-align-center"><p dir="ltr" lang="ja">これで基板起こして、いい感じのケースに入ってたらどうだろうか? <a href="https://t.co/vps3Rk81xv">https://t.co/vps3Rk81xv</a> <a href="https://t.co/ewwUmGKRbD">pic.twitter.com/ewwUmGKRbD</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1633482219460390913?ref_src=twsrc%5Etfw">March 8, 2023</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p></p><p>という私のツイートに対して</p><p></p><blockquote class="twitter-tweet tw-align-center"><p dir="ltr" lang="ja">一緒にやりませんか</p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1633485227778801667?ref_src=twsrc%5Etfw">March 8, 2023</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p></p><p>反応してもらったcompo031氏に声を掛け、地震計開発プロジェクトをスタートしました。</p><p>目標は前述の通り、小型、ケース入り、データが取れる、なるべく安価であり、個人でも購入できること、としました。また、文字を表示できる表示器(OLED)を搭載し、Wi-Fi接続とインターネットへのデータ送信に将来的に対応できる構成を目指しました。</p><p><br /></p><h3>加速度センサーの選定</h3><div><p>当初、アナログ加速度センサとA/Dコンバータという構成を考えていましたが、手頃な12〜16bitのADCが軒並み在庫切れ&価格高騰しており、当初使用予定だったKionix社(現ローム)のアナログ加速度センサも生産終了で将来的な部材確保に懸念があったため、デジタル加速度センサを使用することにしました。<br />最初は手頃で入手性に優れるSTMicroelectronics製のLIS3DHを使用することを検討していましたが...</p><p></p><blockquote class="twitter-tweet tw-align-center"><p dir="ltr" lang="ja">LIS3DHのデータが間違ってたので修正版<br />ADXL345とLIS3DHはノイズが大きすぎて微妙で、センサのコスパ考えるとIIS3DHHCがだいぶ良い <a href="https://t.co/T8YsccL6cH">pic.twitter.com/T8YsccL6cH</a></p>— こんぽ (@compo031) <a href="https://twitter.com/compo031/status/1642549307177074689?ref_src=twsrc%5Etfw">April 2, 2023</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p></p><p>compo031氏による検証の結果、震度2以下を判別するのが厳しいということが分かり、NoneType1氏から提案されたSTMicroelectronics製のLSM6DSO(X)を検討に加え、最終的にコストと精度のバランスからLSM6DSOを採用しました。</p><p>この辺りの検証については、compo031氏による12/2の記事「<a href="https://qiita.com/compo031/items/e62d0a0e1425c5e1efe8" target="_blank">地震観測を目的とした加速度センサ5種の性能比較</a>」で詳細にまとめられていますので、併せて読んでいただければと思います。</p><p><br /></p><h3>XIAO拡張基板としてのボード設計</h3><p>使用する加速度センサが決まったら、次はマイコンの選定です。<br /></p><p>当初、Wi-Fi接続できるESP32シリーズやRaspberry Pi Pico RP2040などがワンボードになったものを作ろうと考えていましたが、枯れていて良さそうなESP32-WROOM-32はNRND(新規設計非推奨)で、出たばかりのESP32-S3はノウハウが足りていないため開発に時間が掛かることが予想され、RP2040は周辺回路が地味に面倒... ということで、マイコン周りの回路設計期間を短縮しつつ、これらの選択をユーザーに任せることができるよう、Seeed XIAOシリーズを搭載できる加速度センサ搭載拡張基板という建て付けで進めることにしました。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ69atElwaxBMeRcF4WOnHE_1djtxaROn_co3vmuU4t9mtD9GW4QIWoglq9YW4TJBG_habeghO6KYA4fYu7zaEPbVLCsoADWrqGZ6iJ1hhok_qItmtrpD3hxZqoRe7KdE6x11gAHRdX3AxU-le07g3_Xi3t7dlDRjdcsmJaDgUiKzzppOKzqqVT5CqKE0D/s1440/DSC01509.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1440" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ69atElwaxBMeRcF4WOnHE_1djtxaROn_co3vmuU4t9mtD9GW4QIWoglq9YW4TJBG_habeghO6KYA4fYu7zaEPbVLCsoADWrqGZ6iJ1hhok_qItmtrpD3hxZqoRe7KdE6x11gAHRdX3AxU-le07g3_Xi3t7dlDRjdcsmJaDgUiKzzppOKzqqVT5CqKE0D/w400-h266/DSC01509.jpeg" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;">XIAO ESP32C3(左)とXIAO RP2040(右)</div><p>XIAOシリーズの拡張基板として設計することで、USB-Cコネクタや電源周りについて考える必要がなくなり、フォームファクタが統一されているため今後登場するかもしれない新しいマイコンを搭載したXIAOに対して(基本的に)特別なハード的変更を加えることなく自動的に対応する(別途ソフトの対応は必要)というメリットがあります。ただし、Seeed社がXIAOシリーズの販売を辞めてしまった場合は共倒れになる可能性もあるので諸刃の剣ではありますが... 今はXIAOが息の長い製品群であることを祈りながら乗っからせてもらいました。</p><p>既製品のマイコンボードを使ってしまえば、ここに繋がるセンサの回路だけを考えれば良いので非常に楽ちんです。<br />今回は、LSM6DSOをSPIで、震度を表示する表示器をI2Cで接続し、ケースの外からアクセスできる設定用ボタンとして2つのタクトスイッチも搭載することにしました。<br />表示器は制御チップSSD1306を搭載した<a href="https://akizukidenshi.com/catalog/g/gP-15870/" target="_blank">0.96インチのOLED</a>を採用しました。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVMoD-3MXS8NUPmOMecaeuQEmaBt6GjXiENs2Rd7_MqD24rl5Bzn3r9h6nIYz_zxgQD4KPVH8KEgxoXDQl78DsRdDbU21knG99wH9OVcA8f6R5wmWn_GcflZVz-xQRbYYPt96J1mMuZZFrg7zsRupZK9r5XyCHPDJqY7VOaWITKoPDAuV9DDEUwYU2v42/s1400/xiao-6dof-ext-sch.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="990" data-original-width="1400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVMoD-3MXS8NUPmOMecaeuQEmaBt6GjXiENs2Rd7_MqD24rl5Bzn3r9h6nIYz_zxgQD4KPVH8KEgxoXDQl78DsRdDbU21knG99wH9OVcA8f6R5wmWn_GcflZVz-xQRbYYPt96J1mMuZZFrg7zsRupZK9r5XyCHPDJqY7VOaWITKoPDAuV9DDEUwYU2v42/w640-h453/xiao-6dof-ext-sch.jpg" width="480" /></a></div><p>XIAOを使用したことで基板が2段重ねになり全体のフットプリントを小さくすることができたため、これに合うようなコンパクトかつ固定しやすい形状のケースを探します。</p><p>今回は、タカチ電機工業のプラケースの中から、固定に便利そうなフランジ足付きプラスチックケース<a href="https://www.takachi-el.co.jp/products/TWF" target="_blank">TWF4-2-5</a>を採用しました。TWFシリーズの中では最小サイズのものです。</p><p>ケースの図面PDFに記載の推奨基板形状を元にざっくりと基板外形をKiCadのEdge.Cutsレイヤーに描き、ざっくりと部品を配置、最終的にはケースの実寸をベースに調整をして基板形状を確定させました。</p><p>OLEDはデフォルトでピンヘッダがついているため、これを挿すだけで接続できるようにピンソケットを基板側に用意する形にしました。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhixvK2y3mcotBuYjY4lCr6vWM5d4CNZ1SkN7ZHsyCYdcanpcEcj00eh-Uu0bo-h0qfLujrwEeRtoF87RaKZunzjNnUSHgAt9bUTIY1NwE_uyzKmEG_Sc9taXsAJMPRWAiUlI4rkKLcUPpVTbcXB23w1mf2afOsppX5eLQFBh_CAaWfHn9W7jj7XNt6qSKP/s2736/xiao-6dof-ext-kicad-pcb.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1744" data-original-width="2736" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhixvK2y3mcotBuYjY4lCr6vWM5d4CNZ1SkN7ZHsyCYdcanpcEcj00eh-Uu0bo-h0qfLujrwEeRtoF87RaKZunzjNnUSHgAt9bUTIY1NwE_uyzKmEG_Sc9taXsAJMPRWAiUlI4rkKLcUPpVTbcXB23w1mf2afOsppX5eLQFBh_CAaWfHn9W7jj7XNt6qSKP/w640-h408/xiao-6dof-ext-kicad-pcb.png" width="480" /></a></div><p>あとは都合が良いように部品を配置しつつ配線し、シルク印刷がカッコ良くなるようにお絵描きしたら基板の設計は完了です。</p><p>3Dビューアーで見た時の完成図はこんな感じ。OLEDの基板も含めると3階建てのような内部構造となりました。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVo2Cew9HmaZw7PsXslrvZ6dcnttSSqpLvXq62G-t9lembXiAsLGicMnjeHvHJqmzYpUL0ecP9n7L3cbh57K4w82zs0TnwQVmEv3Y2RPyd_y1PXShrdvJ8AuAO4-Ib4jBkqyp_ydtTNJnK2hABLCkP_U4NG_yG5IXzT3ujYL1uyrEE2qzZkJSPOZN10bWE/s1080/xiao-6dof-ext-3d-back.png"><img border="0" data-original-height="860" data-original-width="1080" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVo2Cew9HmaZw7PsXslrvZ6dcnttSSqpLvXq62G-t9lembXiAsLGicMnjeHvHJqmzYpUL0ecP9n7L3cbh57K4w82zs0TnwQVmEv3Y2RPyd_y1PXShrdvJ8AuAO4-Ib4jBkqyp_ydtTNJnK2hABLCkP_U4NG_yG5IXzT3ujYL1uyrEE2qzZkJSPOZN10bWE/w320-h254/xiao-6dof-ext-3d-back.png" width="280" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTJCLfAIPI4XbTSvcnu1EX3uHUvoWzfMJRreJB68ejMU4-vaz6ZW9PjaxPZHp9tFfYNaRhj66cYTbv2oo7-EXcfSCJ_LfcQVMH054Sonf-yF1VQAOjE02O98N-g5cLrZufRn4TuMM4jFAwo8f3x7OxBXz5yY1975gYBdUcJKg-Qao8JxaOxG5-PAUoICch/s1080/xiao-6dof-ext-3d-front.png"><img border="0" data-original-height="860" data-original-width="1080" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTJCLfAIPI4XbTSvcnu1EX3uHUvoWzfMJRreJB68ejMU4-vaz6ZW9PjaxPZHp9tFfYNaRhj66cYTbv2oo7-EXcfSCJ_LfcQVMH054Sonf-yF1VQAOjE02O98N-g5cLrZufRn4TuMM4jFAwo8f3x7OxBXz5yY1975gYBdUcJKg-Qao8JxaOxG5-PAUoICch/w320-h254/xiao-6dof-ext-3d-front.png" width="280" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: left;">念の為、アートワークを実寸サイズで印刷してケースやXIAOと位置を合わせて確認し、問題がなかったのでガーバーデータを出力して基板製造サービスに発注しました。</div><div style="text-align: left;"><p><br /></p></div><h3>ケースの加工</h3><p>基板と部品配置からTWF4-2-5に開ける穴の位置を決めていきます。<br />タカチ電機工業のサイトからSTPファイルをダウンロード(要会員登録)し、KiCadから書き出したSTEPファイルと一緒に3D CADに読み込み、それぞれの位置を合わせた後に穴を開けます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0ZRUpJUg9xrZr9eciOKkec_pRWXyWslpdI0Yd0zlEbGxWgLETzHSF7KTivZXF1n85hqc5_ppaIgTLjQY9SB-7A9Potga9Yp_g5hvnoywXX43I3RmaJVrdSGTB48qX_tx8az2M0IN5V391WUPbt5qlvmrcaBVLydvxxo5kBbtZLE17c7y_oZ-t5xlOVVrv/s2566/xiao-seis-case-1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1728" data-original-width="2566" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0ZRUpJUg9xrZr9eciOKkec_pRWXyWslpdI0Yd0zlEbGxWgLETzHSF7KTivZXF1n85hqc5_ppaIgTLjQY9SB-7A9Potga9Yp_g5hvnoywXX43I3RmaJVrdSGTB48qX_tx8az2M0IN5V391WUPbt5qlvmrcaBVLydvxxo5kBbtZLE17c7y_oZ-t5xlOVVrv/s320/xiao-seis-case-1.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">俯瞰</div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQuDOzGseWProaYwKke6nX_o6q56Vx6fNHA6_feq-jm6GsKyd6tw60YpnYDJ3vQ-8FaSputEaI0-oeDgeNRYw6QU_txBQ-Tos5NrvGpQoauPXHHtjM5PLaAhsVvAVjIsu-XCtYSTnbJ6kwaoCf-Td3fT-cWcA3IiEut5GxfOiiiaPPyMsoGjViqdyW0FS1/s2566/xiao-seis-case-2.png"><img border="0" data-original-height="1728" data-original-width="2566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQuDOzGseWProaYwKke6nX_o6q56Vx6fNHA6_feq-jm6GsKyd6tw60YpnYDJ3vQ-8FaSputEaI0-oeDgeNRYw6QU_txBQ-Tos5NrvGpQoauPXHHtjM5PLaAhsVvAVjIsu-XCtYSTnbJ6kwaoCf-Td3fT-cWcA3IiEut5GxfOiiiaPPyMsoGjViqdyW0FS1/w320-h214/xiao-seis-case-2.png" width="280" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL-dpbzpmT5UHXcr9spsPTZVR77cIoMfqvVJ46J6UjT7XHxTO0ucguT6U6pp27N4Is277-huWHYwsWA7_Grb6fi6cRALd7I3CUlgxXafPveH_EJF64Xy-KVFzbXkjUBATq0kV72rbRAYFO2eaiXSG2rs6gsmfOSakoN3VM-H1LG5TzFl837tlUwVFOVG5J/s2566/xiao-seis-case-3.png"><img border="0" data-original-height="1728" data-original-width="2566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL-dpbzpmT5UHXcr9spsPTZVR77cIoMfqvVJ46J6UjT7XHxTO0ucguT6U6pp27N4Is277-huWHYwsWA7_Grb6fi6cRALd7I3CUlgxXafPveH_EJF64Xy-KVFzbXkjUBATq0kV72rbRAYFO2eaiXSG2rs6gsmfOSakoN3VM-H1LG5TzFl837tlUwVFOVG5J/w320-h214/xiao-seis-case-3.png" width="280" /></a></div><div class="separator" style="clear: both; text-align: center;">ケース上面のOLED部分(左)とケース側面のUSB-C部分(右)</div><p>当初、OLEDの窓部分は切削したままの形でしたが、3D CAD上でテーパーをつけてレンダリングしてみたところ、テーパー有りの方が見やすいのでは...?ということでテーパー加工を追加しています。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpqgps90kUcMGs-111uUMSbolTf0oJw8ru31980m7eIGFUUezks6Kzs-LQf_rvPm0eTnREMqrCsb-Ls_GJW9YRSAvlMwPGAGKjTXc3HU-f-CYrXzKtmP9j3A4YGAsYS-F0ANfjx-3YPFmgyX6LMqQO87Jt5Q398wXfVT7ZiQ0OhrT6lqNnT374tStwaAL6/s2000/xiao-seis-case_%E3%83%86%E3%83%BC%E3%83%8F%E3%82%9A%E3%83%BC%E6%9C%89%E3%82%8A.png"><img border="0" data-original-height="1600" data-original-width="2000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpqgps90kUcMGs-111uUMSbolTf0oJw8ru31980m7eIGFUUezks6Kzs-LQf_rvPm0eTnREMqrCsb-Ls_GJW9YRSAvlMwPGAGKjTXc3HU-f-CYrXzKtmP9j3A4YGAsYS-F0ANfjx-3YPFmgyX6LMqQO87Jt5Q398wXfVT7ZiQ0OhrT6lqNnT374tStwaAL6/w320-h256/xiao-seis-case_%E3%83%86%E3%83%BC%E3%83%8F%E3%82%9A%E3%83%BC%E6%9C%89%E3%82%8A.png" width="280" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcr-YvvlRhtPz9hMsiZCpbJ8nobSfQds-8SniZreEOnYxhf1sqYv-PnsjJsMg6ZGwBhuM0TufovEqg6QD22ZFKbVQXX6oZXeFXmoWF5UW8PxH3AupLaZaTX2cTHY7x0ktqjiar8CtPPQqXQwXMC3oB7H9RFl-jNBD0juR3Zd0XSUzIa14P0pen-6rErXLP/s2000/xiao-seis-case_%E3%83%86%E3%83%BC%E3%83%8F%E3%82%9A%E3%83%BC%E7%84%A1%E3%81%97.png"><img border="0" data-original-height="1600" data-original-width="2000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcr-YvvlRhtPz9hMsiZCpbJ8nobSfQds-8SniZreEOnYxhf1sqYv-PnsjJsMg6ZGwBhuM0TufovEqg6QD22ZFKbVQXX6oZXeFXmoWF5UW8PxH3AupLaZaTX2cTHY7x0ktqjiar8CtPPQqXQwXMC3oB7H9RFl-jNBD0juR3Zd0XSUzIa14P0pen-6rErXLP/w320-h256/xiao-seis-case_%E3%83%86%E3%83%BC%E3%83%8F%E3%82%9A%E3%83%BC%E7%84%A1%E3%81%97.png" width="280" /></a></div><div class="separator" style="clear: both; text-align: center;">左はテーパー有り、右はテーパー無し<br /><span style="font-size: x-small;">同じ角度から見た図で比較すると、テーパーがある方がOLED表面が見える面積が広い</span></div><p>このテーパー加工費が地味に高く、発注個数によりますが初回ロットでは1個あたり200円程度のコストが掛かっています... (千石電商で未加工品のTWF4-2-5が1個買えてしまう...)</p>また、内部で基板とXIAOの2階建てにしたことで、USB-Cコネクタ穴の位置がケース側面の中央付近になり、ケースにわずかな傾斜(抜き勾配)がついているためUSB-Cジャックの端面(差し込み口)がケース外側に向かって迫り出す形となって、結果的にUSB-Cケーブルのコネクタの長さを気にせずに接続できるようになりました。<br />当初、ケースの厚みが結構あるため、コネクタ部が長いUSB-Cケーブルを別途用意する必要があるかもしれない...と思っていたので、XIAOを採用して2段重ねにしたことが功を奏した形です。<p></p><p>ケースの加工図面が出来たら、マルツの<a href="https://www.marutsu.co.jp/pc/static/protofactory/case_processing/index" target="_blank">プロトファクトリー</a>にデータを送って見積もりしてもらいます。</p><p>前回記事で作ったGNSS受信機と違って今回はケース表面の印刷はありませんが、10個発注した場合の単価は未加工品の約10倍程度になりました。個数が増えると若干単価も下がっていきますが、マシニング加工は高い... ただし、仕上がりは美しいので届いた時の満足度も高いです。</p><p><br /></p><h3>完成〜販売に至るまで</h3><p>発注していた基板とケースが届いたら、いよいよ組み立てです。</p><p>今回はXIAO RP2040を使用し、XIAO 6DoF Ext. 基板にXIAOとピンソケット等をはんだ付けしていきます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxCrKmHO-eweMJ-H81_4Fl0ly-q3PmhhnyU0f53tgzuYp8YfuLYEe5yiPZz2NinFn21eboudvyTJ09B-VBvwY-aT7OyOmvGpnr4XjbkZetTZxj-pJDsKFtwJW39ewb6tUqrc9HLLrGX5Q7cMajcFq4jLSQ2em3mUw0tZMbeuVwFlh1l3oHefKpq5lHB_mL/s1200/xiao-6dof-ext-build.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="1200" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxCrKmHO-eweMJ-H81_4Fl0ly-q3PmhhnyU0f53tgzuYp8YfuLYEe5yiPZz2NinFn21eboudvyTJ09B-VBvwY-aT7OyOmvGpnr4XjbkZetTZxj-pJDsKFtwJW39ewb6tUqrc9HLLrGX5Q7cMajcFq4jLSQ2em3mUw0tZMbeuVwFlh1l3oHefKpq5lHB_mL/w400-h266/xiao-6dof-ext-build.jpg" width="400" /></a></div><p><a href="https://quake.one/sense/how-to-build/" target="_blank">組み立て方法</a>はEQIS-1公式サイトに掲載しているため詳細は割愛しますが、設計中にKiCadの3Dビューアーで見た通りのものが組み上がります。(当たり前と言えば当たり前ですが...)</p><p>ファームウェアには、ingen084氏が開発した計測震度の計算とOLEDへの表示を行うプログラム(<a href="https://github.com/ingen084/seismometer" target="_blank">ingen084/seismometer</a>)を使用し、これをXIAO RP2040に書き込んだら完成です。(以下の動画は開発中のものであり、現行のものと挙動が異なります。)</p><div class="separator" style="clear: both; text-align: center;"><blockquote class="twitter-tweet tw-align-center" data-media-max-width="560"><p dir="ltr" lang="ja">こんな感じでどうだろうか? <a href="https://t.co/cRB0zvykqU">https://t.co/cRB0zvykqU</a> <a href="https://t.co/dgrU8iWZa4">pic.twitter.com/dgrU8iWZa4</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1691483195995455488?ref_src=twsrc%5Etfw">August 15, 2023</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script></div><p>お好みのXIAOと青または白色のOLEDを購入して自分で組み立てる<a href="https://www.kadenken.com/view/item/000000001639" target="_blank">EQIS-1【基板+専用ケースセット】</a>と、私が夜なべして組み立てている<a href="https://www.kadenken.com/view/item/000000001640" target="_blank">【OLED青/完成品】</a>と<a href="https://www.kadenken.com/view/item/000000001641" target="_blank">【OLED白/完成品】</a>の3種類を、秋葉原のラジオデパート1階にある家電のケンちゃんにて8/20に販売開始しました。</p><blockquote class="twitter-tweet tw-align-center"><p lang="ja" dir="ltr">アキバ取材ネタ▼いま揺れた?加速度センサーで地震を観測できる工作キット「EQIS-1」が入荷<a href="https://t.co/ZZiIdCITdG">https://t.co/ZZiIdCITdG</a> <a href="https://t.co/KjDRDxrQhY">pic.twitter.com/KjDRDxrQhY</a></p>— エルミタージュ秋葉原編集部 (@hermita_akiba) <a href="https://twitter.com/hermita_akiba/status/1694886048500003260?ref_src=twsrc%5Etfw">August 25, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>また、ingen084氏のファームウェアを書き込み済みの<a href="https://www.kadenken.com/view/item/000000001679" target="_blank">【OLED青/ソフト書き込み済み完成品】</a>と<a href="https://www.kadenken.com/view/item/000000001680" target="_blank">【OLED白/ソフト書き込み済み完成品】</a>を10/28から販売しています。</p><blockquote class="twitter-tweet tw-align-center"><p dir="ltr" lang="ja">更新:地震計開発キット「EQIS-1」の完成品が入荷、価格は8,580円 <a href="https://t.co/cBaoG5iK6X">https://t.co/cBaoG5iK6X</a> <a href="https://twitter.com/hashtag/%E5%9C%B0%E9%9C%87%E8%A8%88?src=hash&ref_src=twsrc%5Etfw">#地震計</a> <a href="https://t.co/3bq7YcLByx">pic.twitter.com/3bq7YcLByx</a></p>— AKIBA PC Hotline! (秋葉原) (@watch_akiba) <a href="https://twitter.com/watch_akiba/status/1718071429512712477?ref_src=twsrc%5Etfw">October 28, 2023</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p></p><p>ちなみに、ingen084氏のファームウェアは計測震度を算出するためのフィルタに防災科研が持っている特許5946067号の仕組みを含んでおり、また、EQIS-1のハードウェアと共に使用する場合は装置の仕組みも含めた特許4229337号も絡んできます。このため、【ソフト書き込み済み完成品】として販売しているEQIS-1については防災科研とライセンス契約を締結して販売しています。</p><p>EQIS-1の組み立てキットと完成品(ソフト無し)で販売しているEQIS-1については、あくまで利用者が自らプログラムを開発する「地震計開発キット」という前提に従い、前述の特許に関係するライセンス契約は締結していません。(この見解についても確認済みです)<br />そのため、組み立てキットを作って、あるいは組み立て済みを買ってきてingen084氏のファームウェアを書き込んで転売したりすると特許権の侵害になる恐れがありますのでご注意ください。</p></div><div><br /></div></div><div><a href="https://eleclog.quitsq.com/2022/12/qzqsm-receiver.html" target="_blank">昨年のGNSS受信機</a>に続いて、2023年は手のひらサイズの地震計「EQIS-1」を製作しました。<br />年を追うごとにやる事がどんどん増えて、なかなか趣味のハード製作に割ける時間が確保できずに減りつつありますが、EQIS-1はセンサの検証やファームウェアの開発をしてくださる方がいらっしゃるおかげで世の中に出す事ができました。</div><div>仕事以外において役割分担したコミュニティ的な開発はほとんど初めてだったので、非常に有意義なプロジェクトだったと思います。</div><div><br /></div><div>さて、来年は何を作りましょうか...</div>Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-62426393712559157412022-12-07T00:00:01.567+09:002023-12-07T00:56:34.565+09:00みちびき災危通報を受信するためにGNSS受信機を作った話<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcsLok8lWJpcVyY1jkFqDHP1baMpsHwnzP6VDv5GzHaBrqqB97hWcM1GlPxuxc8RTXUICh22ktgMk1G2c-4pnjj56w-323yfCaxsHBbJaQ1ZC6nkjxspPrfrtTob4Cw5bpb5E41S4RCIhUNy6GevtiLJ-H3VtaymKGosvmJD0vo1_-WAbbRi-yIyTHWQ/s800/DSC03137.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="800" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcsLok8lWJpcVyY1jkFqDHP1baMpsHwnzP6VDv5GzHaBrqqB97hWcM1GlPxuxc8RTXUICh22ktgMk1G2c-4pnjj56w-323yfCaxsHBbJaQ1ZC6nkjxspPrfrtTob4Cw5bpb5E41S4RCIhUNy6GevtiLJ-H3VtaymKGosvmJD0vo1_-WAbbRi-yIyTHWQ/w640-h480/DSC03137.jpg" width="400" /></a></div><p><a href="https://eleclog.quitsq.com/2018/09/jmaxml-gcp-2.html">前回の記事</a>から約4年3ヶ月ぶりの投稿です...</p><p>定期的に文章を書かないと書けなくなってしまうので何か書かなければ...と思っていたら、ちょうどタイミングよくアドベントカレンダーの季節だったので <b><a href="https://adventar.org/calendars/7488" rel="nofollow noopener" target="_blank">防災アプリ Advent Calendar 2022</a>の7日目</b>として参加させていただきます。</p><p><br /></p><p>現在、日本からオーストラリアにかけての上空に「みちびき(初号機〜4号機、初号機後継機)」と命名された準天頂衛星(quasi-zenith satellites)が4機(待機運用中の初号機も合わせると5機)飛んでいます。<br />この衛星を利用した<a href="https://qzss.go.jp/index.html" rel="" target="_blank">準天頂衛星システム<b>みちびき</b>(QZSS)</a>は既存のGPSやGLONASSといった衛星測位システムを補完し、常時1機は日本から高仰角で見通せる位置に滞空するように設計されています。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvkxU2HAwCqp_fniZBPODIug1I8fR1Dl6Z7EU2K3yqdn8csPcs7zkW-F5XRd-12ENJH6Cr8GKUmJXHBN188BVTZr2oMKjqJy0i5AfnjYbj5xjUdixyKHTWZGjqyoOyPyYJzmfH2P5ege8ZMNuC_7xCGmk1VAWaJ1gzKQNKJCTo_TK2exFCf9HJ5EaHYA/s1800/qzss.prioris.org_tracker.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1350" data-original-width="1800" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvkxU2HAwCqp_fniZBPODIug1I8fR1Dl6Z7EU2K3yqdn8csPcs7zkW-F5XRd-12ENJH6Cr8GKUmJXHBN188BVTZr2oMKjqJy0i5AfnjYbj5xjUdixyKHTWZGjqyoOyPyYJzmfH2P5ege8ZMNuC_7xCGmk1VAWaJ1gzKQNKJCTo_TK2exFCf9HJ5EaHYA/w400-h300/qzss.prioris.org_tracker.png" width="400" /></a></div><p>高層ビルの多い都市部や山間部において低仰角を飛んでいるGPSをうまく捕捉できない場合でも高仰角を飛ぶQZSSを合わせて利用することで測位精度を高めることができ、さらにサブメータ級(誤差1mレベル)やセンチメータ級(誤差数cm)での測位が可能になる補強情報の配信といった従来よりも更に高精度な測位を行うための仕組みも入っていたりします。</p><p>さて、そんな「みちびき」ですが、衛星測位以外のサービスとして、避難所の情報や状況を収集する<a href="https://qzss.go.jp/overview/services/sv09_q-anpi.html" target="_blank">衛星安否確認サービス「Q-ANPI」</a>や、気象庁から発信された防災情報を配信する<a href="https://qzss.go.jp/overview/services/sv08_dc-report.html" target="_blank">災害・危機管理通報サービス「災危通報」</a>も提供されています。<br />Q-ANPIの送信には特殊な送信機(Q-ANPIターミナル)とソフトウェア、パソコン一式が必要なため一般人は利用できず、発災時の避難所や防災訓練、そして<a href="https://twitter.com/UN_NERV/status/1584003054051160064" rel="" target="_blank">NERV災対車の出動時</a>などでしか実際の機材や使用している様子をお目にかかれませんが、災危通報は機材を揃えれば誰でも受信することができます。</p><p>災危通報では、緊急地震速報、震源、震度、南海トラフ地震、津波、北西太平洋津波、火山(噴火・噴火警戒レベル)、降灰予報(速報・詳細)、気象警報、土砂災害警戒情報、竜巻注意情報、洪水(河川氾濫警戒・発生)、台風、海上警報といった情報が配信されています。</p><p>例えば、緊急地震速報(12/6に配信された訓練/試験メッセージ)は以下のような感じ。</p><p><b>$QZQSM,58,9aaf8e1880000324000031000548c5e2c000000003dff8001c0000110a36474*78</b></p><p>これを読めるようにデコードすると...</p><p><b>防災気象情報(緊急地震速報)(発表)(訓練/試験)<br />*** これは訓練です ***<br />緊急地震速報<br />強い揺れに警戒してください。</b></p><p><b>発表時刻: 12月6日13時0分</b></p><p><b>震央地名: 日向灘<br />地震発生時刻: 6日13時0分<br />深さ: 10km<br />マグニチュード: 7.2<br />震度(下限): 震度6弱<br />震度(上限): 〜程度以上<br />島根、岡山、広島、山口、香川、愛媛、高知、福岡、佐賀、長崎、熊本、大分、宮崎、鹿児島、中国、四国、九州</b></p><p>以上のようになります。</p><p>ちなみに、過去に受信した<a href="https://gist.github.com/9SQ/d8da9c8857ef7082215e1b81541c5347" rel="" target="_blank">配信データ</a>や<a href="https://gist.github.com/9SQ/9520c0eb2144702b9a07a210bb3228c1" rel="" target="_blank">試験データ</a>はGistで公開しているので、他の情報がどんな内容か気になる方や後述のデコーダを試したい方はご利用ください。</p><p>配信の頻度は4秒に1回のため緊急地震速報を早く受け取りたいといった用途には向かなかったり、地震の情報も都道府県単位かつ震度4以上の地域のみのため気象庁防災情報XML形式電文の受信を置き換えできたりする物ではありません。</p><p>しかし、空が見えればインターネットが繋がっていなくても防災情報を取得でき、情報を得るための契約や料金は不要です。<br />みちびきは国費で打ち上げられて運用されているプロジェクト、すなわち我々の払った税金が宇宙を飛び、防災情報を地上に降り注いでいる...と考えると受信してみたくなりませんか?</p><p><br /></p><h3 style="text-align: left;">SPRESENSEによる災危通報の受信</h3><p style="text-align: left;">災危通報の受信方法を検索するとよく出てくるのが、SONYが販売しているSPRESENSEというボードを利用した受信です。</p><p>みちびきから配信されている災危通報は、GPSやQZSSでの測位に利用しているL1C/A信号ではなく、サブメータ級測位補強に利用されるL1S信号で配信されており、このL1S信号に対応した受信機が必要です。<br />SPRESENSEはL1S信号の受信に対応していて、Arduino IDEでシリアルモニタにデータ(QZQSMセンテンス)を出力するサンプルスケッチも<a href="https://developer.sony.com/develop/spresense/docs/arduino_tutorials_ja.html#_qzss_%E7%81%BD%E5%8D%B1%E9%80%9A%E5%A0%B1%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B" rel="" target="_blank">公式で提供</a>されているため手っ取り早く災危通報の受信を試すことが可能です。</p><p>しかし、見晴らしの良い場所なら気にならないものの、オンボードのアンテナだと受信感度がイマイチだったり、USBケーブルで引き回して窓際や屋外に設置するのは面倒だったりするので外部アンテナを接続したくなります。<br />そんな人のために、外部アンテナの使用方法も<a href="https://developer.sony.com/ja/develop/spresense/developer-tools/hardware-documentation#_gnss%E7%94%A8%E5%A4%96%E9%83%A8%E3%82%A2%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95" rel="" target="_blank">公式で公開</a>されているのですが... 使用するのは表面実装用のU.FLコネクタで、オンボードアンテナから外部アンテナに切り替えるために1005サイズのチップ抵抗を移設する必要があるという、ハンダづけに慣れている人でもかなり神経を使う作業。<span style="text-align: center;"> </span></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5kyRARWV9H0xHluTCNT_eS22H20SjR6kitnU6rlS2-JZOe_MIqCCOUyeH3cQHx6y5edezSvH5CaT8TCru2XHIfuFv6NatUaq-RudlC3u78FlwCIlrW-XeaJgHbaw3jDgT0UZg0ie2kcZ4F4WMGHRrLHUQS-f5zw9zKXqhEFHtocAu6hyvhwe-fXGxXg/s2048/DSC03205.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1366" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5kyRARWV9H0xHluTCNT_eS22H20SjR6kitnU6rlS2-JZOe_MIqCCOUyeH3cQHx6y5edezSvH5CaT8TCru2XHIfuFv6NatUaq-RudlC3u78FlwCIlrW-XeaJgHbaw3jDgT0UZg0ie2kcZ4F4WMGHRrLHUQS-f5zw9zKXqhEFHtocAu6hyvhwe-fXGxXg/w400-h266/DSC03205.jpg" width="250" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRpaZ8Yk_4jPe-H2BZmmTmMsrwbsEls6wbUPmJ-III2dJEy_B1GSTzei6Nv0u4MaId3u_Lg1Kz_gzqDd308YuR3YigGFwh6SdcK_RMxeyd_90UwdE5QRgkB6vpEGcApNQ6YO9fpqE6aoJmsV-tCTkm8VW1cNQa4tUA0p09Al4Q9yGE2D-QgwV1EtQcpA/s2048/DSC03206.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1366" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRpaZ8Yk_4jPe-H2BZmmTmMsrwbsEls6wbUPmJ-III2dJEy_B1GSTzei6Nv0u4MaId3u_Lg1Kz_gzqDd308YuR3YigGFwh6SdcK_RMxeyd_90UwdE5QRgkB6vpEGcApNQ6YO9fpqE6aoJmsV-tCTkm8VW1cNQa4tUA0p09Al4Q9yGE2D-QgwV1EtQcpA/w400-h266/DSC03206.jpg" width="250" /></a></div></div><p>しかも、U.FLコネクタの嵌合サイクルは30回程度なので何度も着脱するのはお勧めされないため、ボードと付随するケーブルが入るようなケースを作って固定したり、<a href="https://s-taka.org/sony-spresense-gnss-connector/" rel="" target="_blank">ホットボンドで固定したり</a>といった工夫が必要です。</p><p><br /></p><h3 style="text-align: left;">他の受信機の検討</h3><p><a href="https://qzss.go.jp/usage/products/dc-report.html" rel="" target="_blank">みちびき対応製品紹介(災害・危機管理通報サービス対応製品)</a>のページに記載されているカーナビやウェアラブル機器以外の専用受信機(データをUSBやUARTなどで取得可能な物)で、個人が購入可能な物は安くても5万円程度、法人で購入可能な物の場合は10万円以上だったりします。</p><p>同じく対応製品として掲載されているu-blox社のGNSS受信モジュール「ZED-F9P」は、モジュールを採用したボードが各社から市販されていますが、RTK測位の基準局としても使用できる高機能なモジュールのため安くても4万円後半からとお高め。<br />昨年新たに対応製品として追加された、同じくu-blox社の「MAX-M10S」を採用しているボードは海外の<a href="https://www.sparkfun.com/products/18037" rel="" target="_blank">SparkFun</a>や<a href="https://www.mikroe.com/gnss-max-click" rel="" target="_blank">MIKROE</a>、<a href="https://gnss.store/max-m10s-gnss-modules/170-elt0151.html" rel="" target="_blank">GNSS OEM</a>などから販売されていますが、円安の影響もありいずれも7000円程度、アンテナはSMAコネクタで接続できますが、データ出力がUARTのためシリアル変換が別途必要でSPRESENSEと比較しても帯に短し襷に長し...</p><p>というわけで、理想のGNSS受信機を作ることにしました。</p><p><br /></p><h3 style="text-align: left;">オリジナルのボード設計</h3><p>手のひらサイズで、USB-C接続で、SMAコネクタを採用して外部アンテナを接続できる、そしてせっかくなら素のボード状態ではなくてケースに入っているもの、というのを目標に設計開始。</p><p>0からGNSS受信機を作るのは無理なので、先ほどの対応製品として掲載されていたu-blox社のGNSSモジュールMAX-M10Sを採用し、同社が公開しているMAX-M10S Integration Manualを参考にアンテナ周りの回路とバッテリーバックアップ用のコイン電池、USBシリアル変換ICのCH340、ステータス確認のためのインジケータLED、USB-Cコネクタ、SMAコネクタを追加。回路図をKiCadで書いていきます。<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0EjLRTVdr58VZ7LVUg5Cktt9B_oGX7J71jpwxTHB-ueuypmt1H2ZZk8DmxjkrMPCd3ohTOhC5iBo2cKdllnCmw6tUkORW0plVYBsbwTJyz4cKPrwabLK5_nHWau_47RcgtdxbCTAemh2fGdSvQlf4xRmjt3Ffj0KBhzkj3fM1ENn14IG3zOZJr2qj5g/s1280/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2019.33.55.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="923" data-original-width="1280" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0EjLRTVdr58VZ7LVUg5Cktt9B_oGX7J71jpwxTHB-ueuypmt1H2ZZk8DmxjkrMPCd3ohTOhC5iBo2cKdllnCmw6tUkORW0plVYBsbwTJyz4cKPrwabLK5_nHWau_47RcgtdxbCTAemh2fGdSvQlf4xRmjt3Ffj0KBhzkj3fM1ENn14IG3zOZJr2qj5g/w400-h289/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2019.33.55.png" width="400" /></a></div><p style="text-align: left;">回路図ができたら、PCBエディターを開いて部品をざっくり配置し、全体のサイズ感とコネクタの大きさからケースを探し、今回はタカチ電機工業のポータブルプラスチックケース<a href="https://www.takachi-el.co.jp/products/CS" rel="" target="_blank">CS75N</a>を採用しました。あと、この時点で実装する部品も秋月電子通商とDigi-Keyで調達しておきます。</p><p>KiCadでケース図面の推奨基板形状の通りに外形をEdge.Cutsレイヤーに書いて、コネクタ、ジャック、部品を配置、配線していきます。</p><div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxyB7ek1u6lBkc-mJVT-giyV8YHjlhLoMGvbpXlaghFJj0fC-59rRI_M9wtgkYyh5_mtbwpSplkff9Rmwwc5ZLj7aUTysEWu7ALqJs7Tf7s2Jrdo75nmavygaHE9_odHc-qKzk0mNgkNa7If6xcIge6ACpWaaMmluQwR8xHkE9zuC0fOopCng7JlT-Bw/s1280/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2019.30.56.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="923" data-original-width="1280" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxyB7ek1u6lBkc-mJVT-giyV8YHjlhLoMGvbpXlaghFJj0fC-59rRI_M9wtgkYyh5_mtbwpSplkff9Rmwwc5ZLj7aUTysEWu7ALqJs7Tf7s2Jrdo75nmavygaHE9_odHc-qKzk0mNgkNa7If6xcIge6ACpWaaMmluQwR8xHkE9zuC0fOopCng7JlT-Bw/w400-h289/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2019.30.56.png" width="400" /></a></div><p style="text-align: left;">部品の3Dモデルを紐づけておくと3Dビューアーでボードの完成形が確認できるのでKiCad素晴らしい...</p></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAchXQYaBDQQqpGhJU76-ToBhxcgR-bk7uI-czVKR3xLjhSWRBcPStPoqkXp7k8sJLcFfrDgSmghqEse4vKYyL48iTN4LkwNHAMnbNkExt6aValPx5dib1snvwZDgYPMSZns6Qm4G7GRnhW5iztMi5yUQcBbE6Xg0vP3IcxbsP-Ab1y6_tCQq6Ws2SnQ/s1280/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2019.31.47.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="923" data-original-width="1280" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAchXQYaBDQQqpGhJU76-ToBhxcgR-bk7uI-czVKR3xLjhSWRBcPStPoqkXp7k8sJLcFfrDgSmghqEse4vKYyL48iTN4LkwNHAMnbNkExt6aValPx5dib1snvwZDgYPMSZns6Qm4G7GRnhW5iztMi5yUQcBbE6Xg0vP3IcxbsP-Ab1y6_tCQq6Ws2SnQ/w400-h289/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2019.31.47.png" width="400" /></a></div><p style="text-align: left;">念の為、アートワークを等倍で印刷した紙に部品を載せてフットプリントがズレたりしていないか確認し、問題なさそうだったのでガーバーデータを出力して一式をzipにまとめて基板製造サービス、いつも使ってるElecrowに発注しました。</p><p style="text-align: left;"><br /></p><div><h3 style="text-align: left;">ケースの設計</h3><p>基板が届くのを待っている間にケースの加工図面を書いていきます。</p><p>タカチのサイトから3D CAD用STPファイルをダウンロード(要会員登録)して、Fusion360に読み込み。<br />そして、KiCadからSTEPファイルを書き出して読み込みます。が、KiCadからエクスポートしたSTEPファイルをそのまま読み込んでも部品がほとんど載ってない状態になってしまうので、<a href="https://qiita.com/wararyo/items/0901ccf18e8e5007adf6" rel="" target="_blank">こちらの記事</a>を参考にしてFreeCADとKiCadStepUpプラグインを使用して基板、配線、部品をひとまとめにしたSTEPファイルを作成します。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwfvW5TuMMcGnT9ALfCCKOELjkrSmvyeCgVqHU-udCX9Pjmk0-ffJkBjj0AnWSVaK1aH3FZ9bI6-JC6lNbu-5kGIKwT-Cy6SFK4CHyf53Xv0ZYqcPOzep-STFuuDHLSjRcVCB0c5_OXieOXNIohlRqGZ50poUeJnjXEvfQDpi2-IClb8BYyNRvnJK-iQ/s1200/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2022.29.41.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="852" data-original-width="1200" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwfvW5TuMMcGnT9ALfCCKOELjkrSmvyeCgVqHU-udCX9Pjmk0-ffJkBjj0AnWSVaK1aH3FZ9bI6-JC6lNbu-5kGIKwT-Cy6SFK4CHyf53Xv0ZYqcPOzep-STFuuDHLSjRcVCB0c5_OXieOXNIohlRqGZ50poUeJnjXEvfQDpi2-IClb8BYyNRvnJK-iQ/w400-h284/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2022.29.41.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><span style="text-align: left;">基板はver1.0の物(コネクタの位置が変わっていないので流用)</span></td></tr></tbody></table></div><p>作成したSTEPファイルを改めてFusion360に読み込み、ケースの固定位置に基板を配置。<br />USB-CコネクタやSMAコネクタが通る穴をスケッチに起こし、押し出しでモデルに穴をあけます。<br /></p><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDO1NR4Tfrf4_OlwxcQAn42tijAsq9MHs_vvs6ikqX2qSfqKkYNaqPaHtJIuIBn7RK4HBobPNwP6s1g4mPVr4uc3OC9FAI70XbzuVI4wUBOJ8u9afawYQGL_G6BK1PnXSl4l7UV48RZLTTYEEzfhF5Ar_Evjq18ChIrqILTlqYewXMupzJUenLljO4zw/s1200/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2022.01.08.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="852" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDO1NR4Tfrf4_OlwxcQAn42tijAsq9MHs_vvs6ikqX2qSfqKkYNaqPaHtJIuIBn7RK4HBobPNwP6s1g4mPVr4uc3OC9FAI70XbzuVI4wUBOJ8u9afawYQGL_G6BK1PnXSl4l7UV48RZLTTYEEzfhF5Ar_Evjq18ChIrqILTlqYewXMupzJUenLljO4zw/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2022.01.08.png" width="250" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVG9GlGpopap0AteXugZEzD8k6AkDmRM_xTam2PzDQIX9czoVtcz-HV-h9nqKcAZ4UuGvNjxAeO6E0svObz2xGlCHljzvDKXfayucrEUxwer-jaDwr0xINdA3mluoc3zacSYDTlIpD5XRfQ2NW4aMuolOy4Z_3dZ0-sxkRgjLkwW3YvLuY_cHYGHHCw/s1200/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2022.01.14.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="852" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVG9GlGpopap0AteXugZEzD8k6AkDmRM_xTam2PzDQIX9czoVtcz-HV-h9nqKcAZ4UuGvNjxAeO6E0svObz2xGlCHljzvDKXfayucrEUxwer-jaDwr0xINdA3mluoc3zacSYDTlIpD5XRfQ2NW4aMuolOy4Z_3dZ0-sxkRgjLkwW3YvLuY_cHYGHHCw/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2022.01.14.png" width="250" /></a></div></div><div><p>2D図面を作成して出力して、まずは図面を見ながらフライス盤で穴あけ(手作業)。</p><p>そんなこんなやってると基板が届いたので、1枚だけ手ハンダで部品を実装してケースに入れてみます。</p><blockquote class="twitter-tweet tw-align-center" data-conversation="none"><p dir="ltr" lang="ja">零号機が完成 <a href="https://t.co/qpAMBreDnt">pic.twitter.com/qpAMBreDnt</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1577673737138503688?ref_src=twsrc%5Etfw">October 5, 2022</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p>この段階ではインジケーター用の穴は開けてませんが、USB-CもSMAコネクタも干渉せずにケースに収まることを確認。</p><p><br /></p><p></p><h3 style="text-align: left;">動作テストと災危通報受信プログラム</h3><p style="text-align: left;">アンテナを接続し、PCとも接続、u-blox社が提供しているu-center2を使用して動作確認と災危通報を受信できるように設定します。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0VLHcFx9fa9RL752jh7lkQByhbjVwK61Fw0EyVi5qY6RpN8h_YsxDlo9uKii8E1J8perX_4KzhZBA2AnuFBszL60Xxvuvs2pHnObaD49HyBXMEOeOz7p29QWGT3PmyocwAMHR_7Ijls8CPjmVEBkyGlbIZtKQ2T9EhEKzEc_0rHH-1OtVgAE13kd_Bg/s1920/u-center_005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1020" data-original-width="1920" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0VLHcFx9fa9RL752jh7lkQByhbjVwK61Fw0EyVi5qY6RpN8h_YsxDlo9uKii8E1J8perX_4KzhZBA2AnuFBszL60Xxvuvs2pHnObaD49HyBXMEOeOz7p29QWGT3PmyocwAMHR_7Ijls8CPjmVEBkyGlbIZtKQ2T9EhEKzEc_0rHH-1OtVgAE13kd_Bg/w400-h213/u-center_005.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj90a53LNL1fo26i6wRvDmoYfQSWsK3ZcemqvJt7hqSaj_GscVITv7llbKORktwLAHPjpMmaWXlO-mzPpMYwSff80BLEElkRI4aCc_DAYCYFLVUE1m6fjoc0ehsWox1AR-qFP8K6H1BNbLfofx6dWhPg7KznsrsZphiEmWL_cqhgPOUqqzB3ygC30Gszg/s1920/u-center_010.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1028" data-original-width="1920" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj90a53LNL1fo26i6wRvDmoYfQSWsK3ZcemqvJt7hqSaj_GscVITv7llbKORktwLAHPjpMmaWXlO-mzPpMYwSff80BLEElkRI4aCc_DAYCYFLVUE1m6fjoc0ehsWox1AR-qFP8K6H1BNbLfofx6dWhPg7KznsrsZphiEmWL_cqhgPOUqqzB3ygC30Gszg/w400-h214/u-center_010.png" width="400" /></a></div><p>CFG-MSGOUT-UBX_RXM_SFRBX_UART1を1(有効)に設定することで、UART1(シリアルポート)に衛星航法データが出力されるようになります。<br />これを有効にすると、みちびきから配信されている災危通報を取得できるようになります。</p><p>出力されるのはNMEAセンテンスではなくバイナリ形式のため、これを解析する必要があります。<br />災危通報のメッセージは、<b>0xb5 0x62</b> から始まるUBXプロトコルのバイナリ形式で出力され、必ず以下のヘッダで始まります。</p><p><b>b5</b> -> UBX Preamble sync character 1<br /><b>62</b> -> UBX Preamble sync character 2<br /><b>02</b> -> Message Class (RBX)<br /><b>13</b> -> Message ID (SFRBX)<br /><b>2c 00</b> -> Payload Length (Little Endian, 44 bytes)<br /><b>05</b> -> GNSS ID (5=QZSS)</p><p>NMEAセンテンスは \r\n の改行コードで終わりますが、UBXプロトコルのバイナリ形式メッセージはヘッダの Payload Length を読んでメッセージの終端を得る必要があります。</p><p>上記のヘッダに続き、メッセージごとのデータおよびチェックサムが入っています。</p><p><b>07</b> -> Satellite ID (7+182=189=QZS03)<br /><b>01</b> -> Signal ID (1=L1S)<br /><b>00</b> -> Frequency ID (Only used for GLONASS)<br /><b>09</b> -> The number of data words contained in this message (8+9*4=44)<br /><b>45</b> -> Tracking channel number<br /><b>02</b> -> Message version (0x02)<br /><b>00</b> -> Reserved 0<br /><b>55f5ad9a170580110000008e00000000000000000000000010000000b1aa5aebff9483b2</b> -> QZQSM(災危通報データ)<br /><b>e2</b> -> ck_a (Checksum)<br /><b>cd</b> -> ck_b (Checksum)</p><p>この仕様をもとに、シリアルポートを開き、みちびきの<a href="https://qzss.go.jp/technical/download/ps-is-qzss.html" rel="" target="_blank">ユーザインタフェース仕様書</a>(災害・危機管理通報サービス, IS-QZSS-DCR-010) 4.3.1. Sentence format で示されている $QZQSM から始まるNMEA形式のセンテンスに変換して出力するプログラムをPythonで書きます。</p>
<pre class="brush: python">import sys
import argparse
import operator
from functools import reduce
import serial
satellite_id = {
184: '56',
185: '57',
189: '61',
183: '55',
186: '58',
}
def nmea_checksum(sentence):
data = sentence.strip("$").split('*', 1)[0]
cksum = reduce(operator.xor, (ord(s) for s in data), 0)
return cksum
def ubx_checksum(message):
ck_a = 0
ck_b = 0
i = 0
while i < len(message):
ck_a = (ck_a + message[i]) & 0xff
ck_b = (ck_b + ck_a) & 0xff
i += 1
return ck_a, ck_b
def ubx2qzqsm(line):
if line[:7] == b'\xB5\x62\x02\x13\x2C\x00\x05': # UBX-RXM-SFRBX, 44 bytes, QZSS
satId = satellite_id[line[7] + 182] # PRN -> Satellite ID
data = b''
for i in range(9):
data += bytes((line[14+3+i*4], line[14+2+i*4], line[14+1+i*4], line[14+0+i*4]))
if data[1] >> 2 == 43 or data[1] >> 2 == 44: # Message Type 43=JMA-DC Report, 44=Other
dcr_message = (data[:31] + bytes((data[31] & 0xC0,))).hex()[:-1] # 256-4=252 bit
sentence = '$QZQSM,' + satId + ',' + dcr_message + '*'
return sentence + format(nmea_checksum(sentence), 'x')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Print QZQSM NMEA format sentence')
parser.add_argument('port', help='serial port. ex: /dev/ttyUSB0')
parser.add_argument('baudrate', help='baudrate. ex: 115200')
parser.add_argument('-n', '--nmea', help='print other standard NMEA sentence', action='store_true')
args = parser.parse_args()
with serial.Serial(args.port, args.baudrate) as ser:
while True:
line = b''
nmea_flag = False
ubx_flag = False
count = 0
payload_length = 0
while True:
if ubx_flag:
if count > 4 and payload_length == 0:
payload_length = int.from_bytes(line[4:5], "little")
if payload_length > 0 and count == payload_length + 8: # header 6 bytes + checksum 2 bytes
break
b = ser.read()
if b == b'$' and not ubx_flag:
nmea_flag = True
if b == b'\x62' and line == b'\xB5':
ubx_flag = True
if b == b'\n':
if line.endswith(b'\r'):
line += b
break
else:
line += b
else:
line += b
count += 1
if args.nmea and nmea_flag:
sentence = line.decode().strip('\r\n')
ck = nmea_checksum(sentence)
if format(ck, 'x') == sentence.split('*', 1)[1]:
print(sentence)
if ubx_flag:
ck_a, ck_b = ubx_checksum(line[2:payload_length+6])
if line[-2] == ck_a and line[-1] == ck_b:
sentence = ubx2qzqsm(line)
if sentence:
print(sentence)
</pre>
<p>pySerialをインストールして、シリアルポートとボーレートを指定して実行。</p><p>pip install pyserial<br />python read.py /dev/tty.usbserial1410 115200</p><p>以下のようにNMEA形式のセンテンスが得られます。</p><p><b>$QZQSM,57,9aadf5b1118002c3f2587f8b101962082c41a588acb1181623500012b979380*20</b></p><p>上記のセンテンスをデコーダにかけると災危通報の内容を人間が読める形で出力できます。<br /></p><p>git clone https://github.com/9SQ/azarashi.git<br />cd azarashi<br />python setup.py install</p>
<pre class="brush: python">import azarashi
sentence = '$QZQSM,57,9aadf5b1118002c3f2587f8b101962082c41a588acb1181623500012b979380*20'
report = azarashi.decode(sentence, msg_type='spresense')
print(report)
</pre>
<div>以下のような出力を得られます。</div><div><p><b>防災気象情報(海上)(発表)(通常)<br />海上警報が発表されました。</b></p><p><b>発表時刻: 11月12日17時35分</b></p><p><b>警報等情報要素: 海上濃霧警報<br />サハリン東方海上</b></p><p><b>警報等情報要素: 海上濃霧警報<br />サハリン西方海上</b></p><p><b>警報等情報要素: 海上濃霧警報<br />網走沖</b></p><p><b>警報等情報要素: 海上濃霧警報<br />宗谷海峡</b></p><p><b>警報等情報要素: 海上濃霧警報<br />北海道西方海上</b></p><p><b>警報等情報要素: 海上濃霧警報<br />北海道東方海上</b></p><p><b>警報等情報要素: 海上濃霧警報<br />釧路沖</b></p><p><b>警報等情報要素: 海上濃霧警報<br />日高沖</b></p><p>今回はデコードにオープンソースのライブラリを使いましたが、災危通報の<a href="https://qzss.go.jp/technical/download/ps-is-qzss.html" target="_blank">仕様書</a>は公開されているので自分で1から実装することも可能です。</p><p>いくつかの場所で受信テストをしてみると、どうやらロケーションとタイミングが良ければ運用中のみちびき4機すべてから受信できそうなことが分かったため、衛星が現在どこを飛んでいるのか確認できる<a href="https://qzss.prioris.org/tracker/" rel="" target="_blank">トラッカー</a>を作って確認しながら受信テストを実施したりしました。</p><blockquote class="twitter-tweet tw-align-center"><p dir="ltr" lang="ja">南の空がひらけている実家のベランダで4機全て掴めた <a href="https://t.co/qhaV5P7j7F">https://t.co/qhaV5P7j7F</a> <a href="https://t.co/IMKar39PTZ">pic.twitter.com/IMKar39PTZ</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1587649447659732992?ref_src=twsrc%5Etfw">November 2, 2022</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p><br /></p><h3 style="text-align: left;">ケースのデザインとマシニング加工発注</h3><p>問題なく災危通報の受信と解析ができたので、GNSS受信機として売り物になるように仕上げていきます。</p><p>先ほどのFusion360のモデルにインジケーターLEDの穴を3つ追加であけて、2D図面を出力。<br />ついでにDXFファイルも出力してIllustratorに持っていき1:1で開き、ケース表面の窪みと3つの穴のアウトラインだけ残してお絵描きをします。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9z-4K6ttJboYweBrqNQ_RnO2oCQ88E9-kATaGE1_BM6oftiLXxNhYTK0zRBvoHZ2bM2am_GFEuAYrpuC2MmQHzYYDes5xHZ_Jicjs0ba2Y7VBR9D5zSysxXPKzYTY0di5Mxq9hfDnmBAhfCSvcbyMQhX6oGEWic9eefKhvO9WTzFKySApO3BvJyjI4w/s3374/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2023.52.18.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2020" data-original-width="3374" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9z-4K6ttJboYweBrqNQ_RnO2oCQ88E9-kATaGE1_BM6oftiLXxNhYTK0zRBvoHZ2bM2am_GFEuAYrpuC2MmQHzYYDes5xHZ_Jicjs0ba2Y7VBR9D5zSysxXPKzYTY0di5Mxq9hfDnmBAhfCSvcbyMQhX6oGEWic9eefKhvO9WTzFKySApO3BvJyjI4w/w400-h240/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-12-05%2023.52.18.png" width="400" /></a></div><p>出力した2D図面とIllustratorファイルをマルツの<a href="https://www.marutsu.co.jp/pc/static/protofactory/case_processing/index" rel="" target="_blank">プロトファクトリー</a>に送って見積もりをしてもらいます。</p><p>詳細の費用は伏せますが、費用感としては千石電商で<a href="https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4GU6" rel="" target="_blank">1個180円で買えるCS75N-W</a>が、インクジェット印刷とマシニング加工をすると90倍くらいの価格になります(白目<br />1個の場合なので、10個、100個と数が増えると単価は下がるため、今回はひとまず10個で発注しました。</p><p>並行して、チップLEDの表面からケース表面までの長さをFusion360で測って、インジケーターLED直上の穴にはめるための<a href="https://www.aliexpress.com/item/32966097244.html" rel="nofollow" target="_blank">導光棒</a>をAliexpressで発注しておきます。</p><p>届くのを待つ間に、基板に部品を実装します。<br />流石に何個も手ハンダでやるのはつらいので、基板と一緒に注文しておいたステンシルとペーストはんだを使い、ホットプレートリフローで一気に実装します。<br />一気にやると言ってもチップ部品はピンセットを使って1個ずつ乗せ、プレートの面積が10 x 10cmの<a href="https://www.aliexpress.com/item/1005001705260291.html" rel="nofollow" target="_blank">ET-10</a>を使ったので同時に焼けるのは2枚ずつで、1時間で3〜4個できるかなといったところ。(実家に帰れば<a href="https://twitter.com/9SQ/status/918691834569748480" rel="" target="_blank">チップマウンター</a>と<a href="https://twitter.com/9SQ/status/917771664418471937" rel="" target="_blank">オーブン</a>があるので多少早いんだけれど...)<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJTjq9y1kENWSAQhM0gzDIyJeTw76cpGMyjoPw4MxhM-mOT7mOSsJGrShPPxZj28ZHI0IqlGdIWl8_PXNf8-H9sXBZ-pfBp2OiBmSDN1MElpRpbkbAveq_ndbibQN7Ct-dTaXwvcdTS4umUAmDQQNlAA1nG6UFiOb29Zq2l6KWOkJarAObU3SVU-wcEQ/s1200/IMG_2717.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1200" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJTjq9y1kENWSAQhM0gzDIyJeTw76cpGMyjoPw4MxhM-mOT7mOSsJGrShPPxZj28ZHI0IqlGdIWl8_PXNf8-H9sXBZ-pfBp2OiBmSDN1MElpRpbkbAveq_ndbibQN7Ct-dTaXwvcdTS4umUAmDQQNlAA1nG6UFiOb29Zq2l6KWOkJarAObU3SVU-wcEQ/s320/IMG_2717.jpg" width="320" /></a></div><p>加工ケースとLED導光棒は2週間程度で届き、届いたケースに部品を実装した基板と導光棒を固定して...</p><blockquote class="twitter-tweet tw-align-center"><p dir="ltr" lang="ja">完成。いい感じかも。<a href="https://t.co/IHyky94M18">https://t.co/IHyky94M18</a> <a href="https://t.co/LEqguqbGPf">pic.twitter.com/LEqguqbGPf</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1584622784973791232?ref_src=twsrc%5Etfw">October 24, 2022</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script><p>加工精度も問題なく、Fusion360でシミュレーションした通りに完成です。</p><blockquote class="twitter-tweet tw-align-center" data-conversation="none"><p dir="ltr" lang="ja">USB-C/SMA-J側も計画通り。Fusion360で見たまんまピッタリ。 <a href="https://t.co/UuXm9EjwWV">pic.twitter.com/UuXm9EjwWV</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1584637062451695616?ref_src=twsrc%5Etfw">October 24, 2022</a></blockquote><p><br /></p><p>というわけで、自分の欲しいGNSS受信機を自分で作ってみた話でした。</p><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOQn6qxkYT_A9sIV9sry3JXlWZuff7b2CpzEaJ2ETdXB6XDISjzpS2zEm27lAw9JXpWT8_su9gyzcNKkVl2A8Vho78P1rwBEqXBrHYu3KWu7PHPss2mIQ_vyyLlO9WMItbUC0xDhooSyaVaJE3GOVgZOyTtlfThYMI9qFqk0_h94HMMegtn3aRsMtQcQ/s1200/DSC03090.jpg"><img border="0" data-original-height="500" data-original-width="1200" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOQn6qxkYT_A9sIV9sry3JXlWZuff7b2CpzEaJ2ETdXB6XDISjzpS2zEm27lAw9JXpWT8_su9gyzcNKkVl2A8Vho78P1rwBEqXBrHYu3KWu7PHPss2mIQ_vyyLlO9WMItbUC0xDhooSyaVaJE3GOVgZOyTtlfThYMI9qFqk0_h94HMMegtn3aRsMtQcQ/w400-h166/DSC03090.jpg" width="400" /></a></div><p>ちなみに、この受信機を利用して<a href="https://twitter.com/UN_NERV/status/1565872226150547457" rel="" target="_blank">NERV災対車に搭載</a>する防災情報サイネージも作ったりしています。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS9Bl3CT48HF0babYswt_9q_HMpLkneDmRTBACDvO8UoWEegnP9_JPAGPAnVz3YItPGxuph31NkkKJ4bMKT2pQeHFukivkbPZn8hMWuUsHfSI3U_8Ol2_7hUCO4NkL3ielhZs-BEGpq4pU5RwwRPaip1hdynfCVmqR3LDW-ycIjbPUX9f2p29ZvHLNDg/s1200/img008.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="900" data-original-width="1200" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS9Bl3CT48HF0babYswt_9q_HMpLkneDmRTBACDvO8UoWEegnP9_JPAGPAnVz3YItPGxuph31NkkKJ4bMKT2pQeHFukivkbPZn8hMWuUsHfSI3U_8Ol2_7hUCO4NkL3ielhZs-BEGpq4pU5RwwRPaip1hdynfCVmqR3LDW-ycIjbPUX9f2p29ZvHLNDg/w400-h300/img008.jpg" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">表面に印刷のない零号機を使用中</td></tr></tbody></table><p>ものづくりは様々な要素が組み合わさったパズルを作っていくような感じで面白いし、自分のこだわりを詰め込みながら形ある物を作っていくのは楽しいですね。</p><p>今回設計したGNSS受信機は近日発売予定です。<br />詳細は<a href="https://prioris.jp/gnss/" rel="" target="_blank">ドキュメントも兼ねたサイト</a>にて公開しますので、興味のある方は買ってもらえると嬉しいです。</p><p><span style="color: red;"><b>追記</b></span>:こちらで販売中です。<a href="https://prioris.booth.pm/items/4308281">https://prioris.booth.pm/items/4308281</a></p><p><span style="color: red;"><b>追記2</b></span>:ケース無しのMicroUSB版とRaspberry Pi向け版の2種も作りました。秋葉原の家電のケンちゃん(店頭&オンライン)にて販売中です。</p><p><b>GNSS受信基板 GR-M10-B/S-B45</b></p><p><a href="https://www.kadenken.com/view/item/000000001535">https://www.kadenken.com/view/item/000000001535</a></p><p><b>GNSS受信基板 GR-M10-RP (for Raspberry Pi)</b></p><p><a href="https://www.kadenken.com/view/item/000000001536">https://www.kadenken.com/view/item/000000001536</a></p></div><p></p></div></div>Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-17803228916474053962018-09-11T04:22:00.000+09:002018-09-11T05:02:26.432+09:00続・気象庁防災情報XMLの受信と周辺サービスをGCPに移行した話<img border="0" src="https://3.bp.blogspot.com/-V7spmnUxlJg/W5a_9Wo5g7I/AAAAAAAAVJ8/4mN9o9r0nooaCgRYU2exlIyxlzoGZn5NACLcBGAs/s400/JMX%25E5%2585%25A8%25E4%25BD%2593%25E6%25A7%258B%25E6%2588%2590%25E5%259B%25B3_v2.001.png" style="display: none;" />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-0_xM2ZgFjtc/W5awG-CqsCI/AAAAAAAAVJc/Qx_hhFbWGQMKzJThu_rAPpNWFpacL_E4QCEwYBhgL/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-09-11%2B2.55.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="927" data-original-width="1600" src="https://1.bp.blogspot.com/-0_xM2ZgFjtc/W5awG-CqsCI/AAAAAAAAVJc/Qx_hhFbWGQMKzJThu_rAPpNWFpacL_E4QCEwYBhgL/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-09-11%2B2.55.16.png" width="500" /></a></div>
<br />
まず、北海道胆振東部地震で被災された方にお見舞い申し上げます。<br />
今回の地震は熊本地震と同様の最大震度7が観測された為、自分自身が2年前に体験した熊本地震の時の様子を思い出しながら、今必要な情報は何か?を考えて仕事をしていました。<br />
<br />
それにしても、まさか札幌にお天気カメラを設置しに行った3日後に大地震が発生するとは思ってませんでしたが...<br />
<blockquote class="twitter-tweet tw-align-center" data-lang="en">
<div dir="ltr" lang="ja">
(中の人)<br />
札幌のみなさーん。<br />
NERVが独自に設置を進めているお天気カメラですが、札幌・中央区にも設置しました。きょうはあいにく曇っていますね…。画像もどんよりしています(´・ω・`)<br />
2枚目の画像は装置の収容ケースです。エヴァ感をお楽しみくださいw <a href="https://t.co/9fsxWiVsEW">pic.twitter.com/9fsxWiVsEW</a></div>
— 特務機関NERV (@UN_NERV) <a href="https://twitter.com/UN_NERV/status/1036502879928893440?ref_src=twsrc%5Etfw">September 3, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
設置の翌日、台風が北上してくる中、15時の便にフライトを振り替えて新千歳空港から飛び立ち、17時ごろに羽田についたら以降の便が全便欠航していた&翌日(5日)も台風による悪天候でダイヤが乱れていたので、振り替えていなければ人生で2度目の震度7クラス地震を体験するかもしれないところでした...<br />
<br />
さて、今回は、<a href="http://eleclog.quitsq.com/2018/03/jmaxml-gcp.html" target="_blank">気象庁防災情報XMLの受信と周辺サービスをGCPに移行した話</a> の続きのお話です。<br />
※これは防災情報デザインと配信に関する個人的な研究の一環として私費でやっている物の話です。<br />
<br />
あれから半年程度運用を続けてきましたが、全体の運用に毎月1500円〜1700円の費用が掛かっていました。(それでも十分に安い)<br />
<br />
この「全体」というのは、気象庁XML受信のためのサブスクライバ&<a href="https://viewer.jmx.prioris.jp/" target="_blank">閲覧のためのビューア</a>をホストしているAppEngine、XMLやJSON、画像保存のためのStorage、<a href="https://quake.one/" target="_blank">QUAKE.ONE</a>をホストしているFirebase、その他内部的な処理に使っているCloud Functions (15個の関数)、Pub/Sub (5個のトピック)、JMAXMLのメタデータや地震情報、気象警報・注意報のステートを保存しているDatastoreを含みます。<br />
<br />
例えば、2018年6月に掛かった実際の費用はこんな感じ。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-4eTksAJOOFM/W5a-F02FI1I/AAAAAAAAVJw/nk10mej_4xArW2ed9ZzCF45EEaH-EmbNACLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-09-11%2B3.30.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1001" data-original-width="1600" src="https://3.bp.blogspot.com/-4eTksAJOOFM/W5a-F02FI1I/AAAAAAAAVJw/nk10mej_4xArW2ed9ZzCF45EEaH-EmbNACLcBGAs/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-09-11%2B3.30.40.png" width="600" /></a></div>
<br />
全体の費用として一番大きいのが、Compute Engine g1-smallインスタンスx1で毎月2000円から継続利用の割引で約1400円と実に全体の80%以上。<br />
このインスタンスは、Twitterへの投稿やPushbulletでのプッシュ通知の際に添付される震源・震度マップ画像を、headless Chrome&PuppeteerでレンダリングしてCloud Storageに保存するために<b>だけ</b>に使用されているものです。<br />
f1-microインスタンスでは、CPUバーストが効いた状態でレンダリング(960x540)に10秒以上掛かる上に、地震が頻発すると何度目かのレンダリングでCPUバーストが効かずに実行がタイムアウトしてしまうという残念なことが発生したため、g1-smallインスタンスで運用していました。<br />
<br />
ところが、2018年8月のアップデートで、Cloud FunctionsにてNode.js 8系が利用できるようになると共にheadless Chromeが利用可能であることがアナウンスされました。<br />
<br />
<a href="https://cloud.google.com/blog/products/gcp/introducing-headless-chrome-support-in-cloud-functions-and-app-engine" target="_blank">Introducing headless Chrome support in Cloud Functions and App Engine | Google Cloud Blog</a><br />
<br />
これに伴って、構成を以下のように変更。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-V7spmnUxlJg/W5a_9Wo5g7I/AAAAAAAAVJ8/4mN9o9r0nooaCgRYU2exlIyxlzoGZn5NACLcBGAs/s1600/JMX%25E5%2585%25A8%25E4%25BD%2593%25E6%25A7%258B%25E6%2588%2590%25E5%259B%25B3_v2.001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="634" data-original-width="1600" src="https://3.bp.blogspot.com/-V7spmnUxlJg/W5a_9Wo5g7I/AAAAAAAAVJ8/4mN9o9r0nooaCgRYU2exlIyxlzoGZn5NACLcBGAs/s400/JMX%25E5%2585%25A8%25E4%25BD%2593%25E6%25A7%258B%25E6%2588%2590%25E5%259B%25B3_v2.001.png" width="600" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
(クリックで拡大してご覧ください)<br />
<br />
大きな変更点は以下の通りです。<br />
<br />
1. 画像のレンダリングをCloud Functionsで実行<br />
2. 画像レンダリング用のg1-smallインスタンスを廃止<br />
3. WebSocket配信サーバをConoHaからf1-microインスタンスに変更<br />
<br />
これにて、毎月の利用額がCloud Storageのオペレーションとデータの保管に掛かる費用のみとなり、200円以下となりました。<br />
(f1-microインスタンス1台はAlways-freeなので0円)<br />
<br />
Cloud Functionsでのレンダリングは、asia-northeast1のメモリ2GBで最短3900ミリ秒(ページの読み込みのために入れたwait 3000ミリ秒を含む)、最大でも7秒程度とブラウザを利用した画像の生成(かつ無料枠範囲内)の方法としては優秀。<br />
もちろん、スピードが重視されるような防災情報配信用途としてはとてもとても遅い(ゲヒルンで製作・運用している描画エンジンはフルHD1枚200ミリ秒程度)ので、あくまで実験・実証としての利用、またはスピードが求められない場面での利用に限られるのですが...。<br />
<br />
ひとまず、ConoHaに全てを載せていた時の価格(毎月1000円程度)と比較して1/5くらいになったので、クラウドは上手く使えば安くなりますよ事例として記しておきます。<br />
ただし、これはアクセス数に大きく依存するので、今くらいの利用者数であれば200円で済むものが、利用者が数倍になればGCPに支払う費用も数倍、数十倍以上になり得るということです。<br />
あくまで個人的な実験・試行というところでの運用を続けているので、流石にそういう状況になったら続けることはできませんが、こういった複数の要素を使ったサービスを数十円、数百円のレベルから始めることが出来るのがGCPやAWS、Azureといったクラウドのメリットということでしょう。<br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-58947209854598102832018-07-14T18:36:00.001+09:002018-07-15T05:30:31.081+09:00HDピコレーザープロジェクター 自作キットを組み立ててみたつい先日、Twitterのタイムラインを眺めていたら、こんなものを発見。<br />
<br />
<blockquote class="twitter-tweet tw-align-center" data-lang="en">
<div dir="ltr" lang="ja">
【新商品】HD ピコ レーザー プロジェクター 自作キット for Pi [HD301D1]☆税込¥15,120☆「持ち運べる大画面」として注目のピコプロジェクターをあなたのラズパイプロジェクトにも!レーザーだからフォーカスフリーで熱くない!MEMSスキャナーだから超小型で低消費電力! <a href="https://t.co/n6YSxevpWf">https://t.co/n6YSxevpWf</a> <a href="https://t.co/rPzx273gYj">pic.twitter.com/rPzx273gYj</a></div>
— KSY@Raspberry Pi (@KSY_RasPi_Shop) <a href="https://twitter.com/KSY_RasPi_Shop/status/1016906622457733120?ref_src=twsrc%5Etfw">July 11, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
これは試してみるしかない、と1台買ったので組み立ててみました。<br />
ちなみに、お値段は購入時点で税込15,120円。限定数販売後は値上げするようです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-4YbcCmozRtE/W0m_8fXLGhI/AAAAAAAAU6g/Sry5Vd3e4xsAzfbG_OTCFdkdZ24kRtHlgCLcBGAs/s1600/IMG_4496.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://4.bp.blogspot.com/-4YbcCmozRtE/W0m_8fXLGhI/AAAAAAAAU6g/Sry5Vd3e4xsAzfbG_OTCFdkdZ24kRtHlgCLcBGAs/s320/IMG_4496.JPG" width="320" /></a></div>
<br />
届いた中身はこんな感じ(写真には写ってませんが、レーザー出力部とHDMI信号を受ける基板を繋ぐフレキも入っています)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-b6b4P4H-nAI/W0nAOS3LtaI/AAAAAAAAU6o/OoZhkBL0lFYq13jWnI7PReNRfhhf3MirACLcBGAs/s1600/IMG_4497.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://3.bp.blogspot.com/-b6b4P4H-nAI/W0nAOS3LtaI/AAAAAAAAU6o/OoZhkBL0lFYq13jWnI7PReNRfhhf3MirACLcBGAs/s320/IMG_4497.JPG" width="320" /></a></div>
<br />
ひとまず、ベースとなるアルミプレートに基板とレーザー出力部を仮置きしてみる。<br />
基板はそのまま「1」の番号が振ってあるネジで5箇所を固定。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-VHx66Cybcfs/W0nAa1WdX4I/AAAAAAAAU6s/V7Szg1pmE7oY0otcqWpwt6Zg1BG5_0IAgCLcBGAs/s1600/IMG_4498.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://1.bp.blogspot.com/-VHx66Cybcfs/W0nAa1WdX4I/AAAAAAAAU6s/V7Szg1pmE7oY0otcqWpwt6Zg1BG5_0IAgCLcBGAs/s320/IMG_4498.JPG" width="250" /></a>
<a href="https://4.bp.blogspot.com/-T0u6UBO3ljY/W0nA24OQz-I/AAAAAAAAU68/aMbyO5nRUUcRLJwgqdo2lr3IuNBQWcPMwCLcBGAs/s1600/IMG_4499.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://4.bp.blogspot.com/-T0u6UBO3ljY/W0nA24OQz-I/AAAAAAAAU68/aMbyO5nRUUcRLJwgqdo2lr3IuNBQWcPMwCLcBGAs/s320/IMG_4499.JPG" width="250" /></a></div>
<br />
レーザー出力部に付属のフレキを「TOP」の刻印がある向きで接続。<br />
反対側を基板に繋ぎつつ、固定場所に位置合わせします。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-I6tfWyAbgig/W0nAz9BbSSI/AAAAAAAAU64/Pcf2ySmEMA8C_fwDZ8sslaCmdr32G1J8QCLcBGAs/s1600/IMG_4503.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://3.bp.blogspot.com/-I6tfWyAbgig/W0nAz9BbSSI/AAAAAAAAU64/Pcf2ySmEMA8C_fwDZ8sslaCmdr32G1J8QCLcBGAs/s320/IMG_4503.JPG" width="320" /></a></div>
<br />
レーザー出力部を「1」の番号が振ってあるネジで3箇所 固定。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/--vI_uYEocp8/W0nBMGVkdoI/AAAAAAAAU7I/55MkijGh6Ks5LYcex8QbzAyauecqUxegwCLcBGAs/s1600/IMG_4504.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://2.bp.blogspot.com/--vI_uYEocp8/W0nBMGVkdoI/AAAAAAAAU7I/55MkijGh6Ks5LYcex8QbzAyauecqUxegwCLcBGAs/s320/IMG_4504.JPG" width="250" /></a>
<a href="https://3.bp.blogspot.com/-sac4PVzWkpw/W0nBqFKmyWI/AAAAAAAAU7Q/a56QYXtzTukhQMy2BsRi-Tf7ezGQMDsrwCLcBGAs/s1600/IMG_4505.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://3.bp.blogspot.com/-sac4PVzWkpw/W0nBqFKmyWI/AAAAAAAAU7Q/a56QYXtzTukhQMy2BsRi-Tf7ezGQMDsrwCLcBGAs/s320/IMG_4505.JPG" width="250" /></a></div>
<br />
トップのアクリルパネルを固定するためのシャフト(3番の部品)を、アルミプレートの裏側から「2」の番号が振ってあるネジで5箇所 固定。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-VVhVv-f5ySc/W0nCCwsIL1I/AAAAAAAAU7c/Mc55_FcOM94zi-3GBH6ToJ4KwhbWO0-tgCLcBGAs/s1600/IMG_4509.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://4.bp.blogspot.com/-VVhVv-f5ySc/W0nCCwsIL1I/AAAAAAAAU7c/Mc55_FcOM94zi-3GBH6ToJ4KwhbWO0-tgCLcBGAs/s320/IMG_4509.JPG" width="320" /></a></div>
<br />
最後に、アクリルパネルの保護紙を剥がして、「4」の番号が振ってあるネジで5箇所 固定。<br />
<br />
なかなかコンパクトで、サイズはiPod Classicと同じくらい、重さは87gでした。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-2yzJ_ubG1xQ/W0nCVpPHP6I/AAAAAAAAU7k/UTCCsTIT5-0Mt0OBZ1kus1tdu5xE02vLwCLcBGAs/s1600/IMG_4510.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://4.bp.blogspot.com/-2yzJ_ubG1xQ/W0nCVpPHP6I/AAAAAAAAU7k/UTCCsTIT5-0Mt0OBZ1kus1tdu5xE02vLwCLcBGAs/s320/IMG_4510.JPG" width="320" /></a></div>
<br />
同じくレーザー走査型のプロジェクターで、SONYが海外にて販売しているMP-CL1Aとサイズ比較。<br />
MP-CL1Aは個人輸入で1台5万円くらいだった記憶...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-HZ28l7Ttl3s/W0nCqruxfpI/AAAAAAAAU7s/Le5UNv_js0QIT__o_yLSGRCGJsOuZ-zywCLcBGAs/s1600/IMG_4512.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://3.bp.blogspot.com/-HZ28l7Ttl3s/W0nCqruxfpI/AAAAAAAAU7s/Le5UNv_js0QIT__o_yLSGRCGJsOuZ-zywCLcBGAs/s320/IMG_4512.JPG" width="320" /></a></div>
<br />
少し明るい環境だったので、はっきりとした比較にはなりませんが、レーザークラス3RのMP-CL1A(左)と比較して、HDピコレーザープロジェクター(右)はクラス1にしては健闘していると感じました。<br />
<br />
ちなみに、MacとHDMIで接続したところ、YPbPrの信号には対応してないようで、画面全体がピンク色に...<br />
手元にあるRaspberry PiやPINE64では問題なく表示されました。<br />
<br />
次は真っ暗な環境で試してみようと思います。(続報は<a href="https://twitter.com/9SQ" target="_blank">Twitter</a>に書くかも<br />
<br />
<b>追記</b>:真っ暗な部屋で映してみました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-5LebAcr6puA/W0pccAxnUoI/AAAAAAAAU8M/BTx_fZzHlXc-S7M81KybMEleyRZNRcZ1QCLcBGAs/s1600/IMG_4518.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" src="https://3.bp.blogspot.com/-5LebAcr6puA/W0pccAxnUoI/AAAAAAAAU8M/BTx_fZzHlXc-S7M81KybMEleyRZNRcZ1QCLcBGAs/s320/IMG_4518.JPG" width="250" /></a>
<a href="https://3.bp.blogspot.com/-Wk6n0TFGPo0/W0pccIHMgDI/AAAAAAAAU8Q/KlErA8XoVEYmrNa3y8QrghrfDwnJVbGowCLcBGAs/s1600/IMG_4523.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" src="https://3.bp.blogspot.com/-Wk6n0TFGPo0/W0pccIHMgDI/AAAAAAAAU8Q/KlErA8XoVEYmrNa3y8QrghrfDwnJVbGowCLcBGAs/s320/IMG_4523.JPG" width="250" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-zLn8xf43UWU/W0pccTya37I/AAAAAAAAU8U/LlgcxNAeE4kaObUsECOTPPFdGQgLkoEyQCLcBGAs/s1600/IMG_4525.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" src="https://1.bp.blogspot.com/-zLn8xf43UWU/W0pccTya37I/AAAAAAAAU8U/LlgcxNAeE4kaObUsECOTPPFdGQgLkoEyQCLcBGAs/s320/IMG_4525.JPG" width="250" /></a>
<a href="https://4.bp.blogspot.com/-IgLyv1Qo1JY/W0pcczUpIcI/AAAAAAAAU8Y/p9CrQrfXUc0DOGzHEets22hvuCrJLBdDwCLcBGAs/s1600/IMG_4527.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" src="https://4.bp.blogspot.com/-IgLyv1Qo1JY/W0pcczUpIcI/AAAAAAAAU8Y/p9CrQrfXUc0DOGzHEets22hvuCrJLBdDwCLcBGAs/s320/IMG_4527.JPG" width="250" /></a></div>
<br />
投影先は天井、距離は2mくらいで、正確に測ってないけど50インチくらいはあるはず。<br />
小さい文字はボケるけど、動画を見る分には悪くないかなというところです。Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-46062684212256647062018-07-14T18:06:00.000+09:002018-07-15T05:30:40.931+09:00iPod Classicに大容量ストレージとバッテリーを搭載してみた<blockquote class="twitter-tweet tw-align-center" data-lang="en">
<div dir="ltr" lang="ja">
「ぼくのかんがえたさいきょうのiPod Classic」を作ります😎 <a href="https://t.co/Y29WpHJKan">pic.twitter.com/Y29WpHJKan</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/1016374267649273856?ref_src=twsrc%5Etfw">July 9, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
というわけで、長年考えていた「最強のiPod Classicを作りたい」という目標を実行してみたお話です。<br />
<br />
<b>改造に必要なiPod Classic(最終世代)の調達</b><br />
ヤフオクやメルカリ等で電池消耗はあるけど外観の状態が良さそうな物を4つ(シルバーとブラック2個ずつ)購入、うち2個はApple Storeにてバッテリー交換して保管用に、残り2つのうち1個を比較用に未改造状態、もう1個を改造用として用意しました。<br />
<br />
iPod Classic ... 1個 約1万円<br />
<br />
<b>ストレージ用の変換基板</b><br />
iPod 第5世代やiPod Classic(6世代以降)に対応した、microSDカードが4枚挿しできる基板を購入。<br />
<a href="https://www.iflash.xyz/store/iflash-quad/">https://www.iflash.xyz/store/iflash-quad/</a><br />
<br />
iFlash Quad ... 42ドル = 約5,000円<br />
<br />
<b>ストレージ用のSDカード</b><br />
ここ1年くらい大容量MicroSDカードの値動きを追っていて、200GBが1枚6000円を切ったら実行しようと思っていて...<br />
ついに、先日、テクノハウス東映でSanDisk Ultraの200GBが6000円を切ったため4枚まとめ買い。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-I3jr5RlJxxg/W0m241NswhI/AAAAAAAAU5Q/nbWcEYur7aAUzkN1SyDHICTZgkkOsDFBACLcBGAs/s1600/IMG_4477.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://2.bp.blogspot.com/-I3jr5RlJxxg/W0m241NswhI/AAAAAAAAU5Q/nbWcEYur7aAUzkN1SyDHICTZgkkOsDFBACLcBGAs/s320/IMG_4477.JPG" width="320" /></a></div>
<br />
SanDisk Ultra microSD 200GB ... 1枚5,880円 x4 =23,520円<br />
<br />
256GBを4枚挿しで1TBというのも憧れるけど、200GBと比較して256GBはまだまだ高いので、次やる時の楽しみにとっておきます。<br />
<br />
<b>「800GB」刻印のバックパネル (スリム仕様)</b><br />
せっかく大容量化するので、刻印も実際の容量と同じ <b>800GB</b> の物を購入。<br />
あと、フロントもバックパネルも金属製のClassicは開ける作業が非常に難しく、歪みや傷が入ること必至なので元のバックパネルは使わないという前提です。<br />
Aliexpressにて購入。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-eXcJCQU6_tY/W0m3GGKoVFI/AAAAAAAAU5U/9OxbPlEPmSUZbvv3ByViqsLM960kYKcxACLcBGAs/s1600/IMG_4478.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1198" data-original-width="1600" height="239" src="https://1.bp.blogspot.com/-eXcJCQU6_tY/W0m3GGKoVFI/AAAAAAAAU5U/9OxbPlEPmSUZbvv3ByViqsLM960kYKcxACLcBGAs/s320/IMG_4478.jpg" width="320" /></a></div>
<br />
バックパネル ... 950円 + 送料 200円くらい = 1,150円<br />
<br />
<b>1950mAhのバッテリー</b><br />
iFlash QuadとmicroSDの組み合わせでは元のHDDと比較してかなりスリム化するので、空きスペースに大容量バッテリーが入ります。<br />
eBayでフレキが互換の交換用バッテリーを購入。<br />
<br />
バッテリー ... 14.99ドル + 送料 350円くらい = 2,050円<br />
<br />
これでパーツは一通り揃ったので分解作業開始...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-dzXXV4IAShs/W0m3QZMJCNI/AAAAAAAAU5Y/Jru1n_UbtygWDG2aSJFS_LJzj6zEtGGtACLcBGAs/s1600/IMG_4419.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://4.bp.blogspot.com/-dzXXV4IAShs/W0m3QZMJCNI/AAAAAAAAU5Y/Jru1n_UbtygWDG2aSJFS_LJzj6zEtGGtACLcBGAs/s320/IMG_4419.JPG" width="320" /></a></div>
<br />
想定どおり非常に開けづらいので、開腹作業には1時間くらい要しました...<br />
今回はフロント側に傷を入れないようにし、バックパネルはどうなっても良いというスタンスで作業をしたので、バックパネルは縁が歪んで再度の取り付けは厳しい状態に。<br />
また、クリックホイール操作時にクリック音を鳴らすための圧電スピーカーがイヤホンジャック下部のフレキに付いていましたが脱落... 慌てて追加でこのフレキ部品を発注するも、結局使わないことに(後述)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-DqzD22U7FbQ/W0m3zRnWPsI/AAAAAAAAU5k/LOvr5Dlx9ecGO2eRbjtawpoBg21b5yGjQCLcBGAs/s1600/IMG_4479.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://2.bp.blogspot.com/-DqzD22U7FbQ/W0m3zRnWPsI/AAAAAAAAU5k/LOvr5Dlx9ecGO2eRbjtawpoBg21b5yGjQCLcBGAs/s320/IMG_4479.JPG" width="320" /></a></div>
<br />
HDDを取り外して、iFlash QuadにmicroSDカードを4枚セット、HDDと同じ部分に置いてみる。<br />
この状態だと元のHDDと比べて非常に薄いので、スッカスカです。<br />
一応、iFlashにはバッテリーを増量せずにデフォルトのバッテリーで筐体を閉じるために、スペーサーとなる黒いスポンジも付いています。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-TYKL2Cal8Gs/W0m4jgXuOVI/AAAAAAAAU5s/al-l2T6xo2gOY7eQrZqMRlPPK0UQ0X96ACLcBGAs/s1600/IMG_4482.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://1.bp.blogspot.com/-TYKL2Cal8Gs/W0m4jgXuOVI/AAAAAAAAU5s/al-l2T6xo2gOY7eQrZqMRlPPK0UQ0X96ACLcBGAs/s320/IMG_4482.JPG" width="320" /></a></div>
<br />
次にバッテリーの接続。<br />
左は元々の550mAhバッテリー、右が1950mAhバッテリーです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-MXgnUkVWbEM/W0m4_lH15sI/AAAAAAAAU54/pEZgDInR5B8_09lPafYjr_Zz3OohtQTzACLcBGAs/s1600/IMG_4483.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://3.bp.blogspot.com/-MXgnUkVWbEM/W0m4_lH15sI/AAAAAAAAU54/pEZgDInR5B8_09lPafYjr_Zz3OohtQTzACLcBGAs/s320/IMG_4483.JPG" width="250" /></a>
<a href="https://3.bp.blogspot.com/-TolDAWJPKj8/W0m5SYMUZNI/AAAAAAAAU6A/fYn4aSMs8swuWkNXhkFARIr54mP7i80kQCLcBGAs/s1600/IMG_4484.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://3.bp.blogspot.com/-TolDAWJPKj8/W0m5SYMUZNI/AAAAAAAAU6A/fYn4aSMs8swuWkNXhkFARIr54mP7i80kQCLcBGAs/s320/IMG_4484.JPG" width="250" /></a></div>
<br />
1950mAhバッテリーを入れるには少々フレームに加工が必要で、元のHDDを固定するために付いている突起を削る必要あり。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-RgTPZyolDJc/W0m5h1Icn9I/AAAAAAAAU6E/_5Ig1bl3j_gbo-U-qc_2U0WkrEwNVMQSACLcBGAs/s1600/IMG_4486.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://4.bp.blogspot.com/-RgTPZyolDJc/W0m5h1Icn9I/AAAAAAAAU6E/_5Ig1bl3j_gbo-U-qc_2U0WkrEwNVMQSACLcBGAs/s320/IMG_4486.JPG" width="320" /></a></div>
<br />
こうして完成したものを閉めようとすると...<br />
クリック音用のスピーカーが絶妙にバッテリーと干渉して液晶画面側が僅かに浮いてしまいます。<br />
ということで結局、分解時にスピーカーが脱落してしまったフレキを再利用することに...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-dKzL0OyzR20/W0m1qfYZZ8I/AAAAAAAAU5I/Vh9CDdy0ggslVPfvYHSuysDoW9S6T2UkgCEwYBhgL/s1600/IMG_4416.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://3.bp.blogspot.com/-dKzL0OyzR20/W0m1qfYZZ8I/AAAAAAAAU5I/Vh9CDdy0ggslVPfvYHSuysDoW9S6T2UkgCEwYBhgL/s320/IMG_4416.JPG" width="250" /></a>
<a href="https://4.bp.blogspot.com/-NZ7CQ6Mqox8/W0m6toYLOeI/AAAAAAAAU6U/b916MHsGqEglpA19ZGaVyf8jmRBlFmd1ACLcBGAs/s1600/IMG_4487.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://4.bp.blogspot.com/-NZ7CQ6Mqox8/W0m6toYLOeI/AAAAAAAAU6U/b916MHsGqEglpA19ZGaVyf8jmRBlFmd1ACLcBGAs/s320/IMG_4487.JPG" width="250" /></a></div>
<br />
iPodをMacと接続し、iTunesからファームウェアを復元、実際に使用できる容量は730GB程度のiPod Classicが完成。<br />
<br />
試しに90GBくらいの音楽ライブラリを同期して、LossLess音源を連続再生することでバッテリー持続時間を計測中...<br />
48時間程度経過した段階で、バッテリー表示上は7割くらい残っているようです。<br />
<br />
掛かった費用は4万5000円くらいでしょうか。<br />
最近流行りのハイレゾ対応プレイヤーだと物によるけど5万円以上したりするので、ハイレゾとまでは行かないものの48kHz/16bitまで再生できて大容量で長時間再生できるプレイヤーとしては割とお得なのでは?と思ったり...<br />
<br />
iTunesで10年以上続く音楽ライブラリを管理しているので、これからもiPod Classicには活躍してもらうことにします。<br />
<br />
<b>追記</b>:重さの比較してみました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-z4Rn5aIZKwM/W0nEPOCcTnI/AAAAAAAAU74/b_ZOTQiqbr4I1RLYWBqt7hrnkil6WcXqgCLcBGAs/s1600/IMG_4514.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://1.bp.blogspot.com/-z4Rn5aIZKwM/W0nEPOCcTnI/AAAAAAAAU74/b_ZOTQiqbr4I1RLYWBqt7hrnkil6WcXqgCLcBGAs/s320/IMG_4514.JPG" width="250" /></a>
<a href="https://4.bp.blogspot.com/-Fo_ScDdKFj4/W0nEPIskPgI/AAAAAAAAU78/n-fpHiYjMGgWb1zAUKm3W35rIK4TG-gcQCLcBGAs/s1600/IMG_4515.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://4.bp.blogspot.com/-Fo_ScDdKFj4/W0nEPIskPgI/AAAAAAAAU78/n-fpHiYjMGgWb1zAUKm3W35rIK4TG-gcQCLcBGAs/s320/IMG_4515.JPG" width="250" /></a></div>
<br />
シルバーが今回改造したiPod Classicで123g、ブラックが未改造で135gでした。<br />
体感としては、僅かに軽くなったかなというくらい。<br />
バッテリーが550mAhのデフォルトの物だと凄く軽く感じるけど、逆にオモチャっぽさを感じたので、ある程度の重さがある方が質感アップに寄与する模様。Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com3tag:blogger.com,1999:blog-7229367252151281027.post-76015274775956527462018-03-26T02:47:00.000+09:002018-09-11T10:35:36.538+09:00気象庁防災情報XMLの受信と周辺サービスをGCPに移行した話<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-RC1cDlv4SOY/WrfMqTjGoRI/AAAAAAAAUr0/ue29Pbfi7AE992t4gJs5gMSib2HgSEEMACLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-03-26%2B1.21.44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1188" data-original-width="1600" height="296" src="https://1.bp.blogspot.com/-RC1cDlv4SOY/WrfMqTjGoRI/AAAAAAAAUr0/ue29Pbfi7AE992t4gJs5gMSib2HgSEEMACLcBGAs/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-03-26%2B1.21.44.png" width="400" /></a></div>
<br />
そろそろ何かアウトプットしておかないとNo Activityマンになってしまうと思いつつも色々やることは山積みで筆の捗らない今日この頃、みなさんいかがお過ごしでしょうか。<br />
<br />
さて、2015年12月に<a href="http://evi.prioris.jp/" target="_blank">EVI 地震火山詳報</a>を公開してから約2年と3ヶ月(その前身の桜島詳報から数えると3年7ヶ月)が経過しました。<br />
実は、2017年10月頃のConoHaの障害によりサブスクライバが長時間止まってしまい、気象庁のPuSH配信から外されたため同月よりEVIのサービスが停止しておりました。<br />
この際、本業(<a href="https://www.gehirn.co.jp/" target="_blank">ゲヒルン</a>=<a href="https://twitter.com/un_nerv" target="_blank">UN_NERV</a>へ作画提供)でも震源・震度地図の作画エンジンを作っているので完全にサービスを畳んでしまおうかとも思ったのですが...<br />
振り返って周りを見てみれば、インタラクティブな震源・震度マップに挑戦している方が意外と少なく、作画方法も本業の仕組みとは全く異なるので <b>防災情報デザインに関する異なるアプローチの研究</b> ということで緩く継続してみようと思い立った訳です。<br />
<span style="color: #999999; font-size: x-small;"><br /></span>
<span style="color: #999999; font-size: x-small;">#防災情報デザイン、特に地震に関するものに関しては、様々な方が主にUN_NERVで提供されている地図デザインをパクって何度も何度も車輪の再発明をされていますが、みなさん少しは配色を変えてオリジナリティを出したり、「俺ならこうする!」といった伝え方の工夫を取り込んでみてはいかがでしょうか...? 芸が無さすぎて全くつまらんです。</span><br />
<br />
<a href="http://evi.prioris.jp/" target="_blank">EVI 地震火山詳報</a>のサービスと後ろ側については、以前書いた記事をご覧ください。<br />
<br />
<a href="http://eleclog.quitsq.com/2015/12/prioris-evi.html" target="_blank">地震とか火山噴火情報を閲覧できるWebサイトを作った</a> (2015年12月)<br />
<br />
上記の記事の通り、EVIは後ろ側がかなり複雑に絡み合っており、機能追加や改修をするにも面倒になっていました。<br />
また、受信したXMLや生成したGeoJSON、画像の保管も同じインスタンス内に入っていたため、ある一定期間ごとに古いデータを削除する等のメンテナンスが必要でした。<br />
<br />
...そこで、今回EVIを改修するにあたり以下の目標を立てて移行計画を実行することにしました。<br />
<br />
1. 出来る限りマネージドなクラウドサービスに載る(俗にいうサーバレス)システムにする<br />
2. 出来る限り最新の設計・構築方法、技術を用いる<br />
3. デザインをなんかイケてる感じにする<b>←重要</b><br />
<br />
ということで、これらを念頭に置きつつ、隙間時間を使って3ヶ月ほどで作ったものがこちらになります。(冒頭のスクリーンショットのサービス)<br />
<br />
<span style="font-size: large;">QUAKE.ONE</span><br />
<a href="https://quake.one/" target="_blank"><span style="font-size: large;">https://quake.one/</span></a><br />
<br />
<span style="color: #999999; font-size: x-small;">#火山要素が消えたことには目をつぶってください</span><br />
<br />
Twitterは以前のIDのまま <a href="https://twitter.com/Prioris_EVI" target="_blank">Prioris_EVI</a> を使っています。<br />
<br />
Pushbulletも以前のままです。<br />
<br />
<b>日本国内で発生した全ての震源・震度情報</b><br />
<a href="https://www.pushbullet.com/channel?tag=earthquake_jp" target="_blank">earthquake_jp</a><br />
<br />
<b>日本国内で発生した震度3以上の震源・震度情報</b><br />
<a href="https://www.pushbullet.com/channel?tag=earthquake_int3over" target="_blank">earthquake_int3over</a><br />
<br />
さて、ここからは技術的なお話。<br />
<br />
EVIからの進化ポイントは以下の通り。<br />
<br />
<b>1. 小さな画面を持つデバイスにおいて、操作可能な地図が非常に小さくなる問題を解決</b><br />
→どの画面サイズのデバイスにおいても全画面で地図を表示し、情報をマップ上に配置する新しいデザインを採用<br />
<br />
<b>2. OpenLayersのバージョンアップ</b><br />
→OL3から最新のOL4へ移行<br />
<br />
<b>3. ページを動的から静的生成に変更、SPA(single-page application)化</b><br />
→地震発生をトリガーにしてレンダリング用のJSONをあらかじめ生成<br />
<br />
<b>4. Twitter、Pushbulletにて配信する画像形式の震源・震度地図のデザイン変更</b><br />
→画像の生成方法もwkhtmltoimageからPuppeteer + Headless Chromeに刷新<br />
<br />
また、これに伴ってサブスクライバから後ろも全て刷新しました。<br />
構成図は以下の通り。(横に非常に長いので、拡大してご覧ください)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-e-4Grsof3mA/WrfiHOYzNPI/AAAAAAAAUsU/tiF6RRyPzfcMOsCfJKCxLauMDWtE7sWPgCLcBGAs/s1600/jmaxml-quakeone-gcp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="676" data-original-width="1600" height="168" src="https://4.bp.blogspot.com/-e-4Grsof3mA/WrfiHOYzNPI/AAAAAAAAUsU/tiF6RRyPzfcMOsCfJKCxLauMDWtE7sWPgCLcBGAs/s400/jmaxml-quakeone-gcp.png" width="400" /></a></div>
<br />
使用したサービスは以下の通り。<br />
<br />
<b>Google Cloud Platform</b><br />
・App Engine<br />
・Compute Engine<br />
・Cloud Functions<br />
・Cloud Datastore<br />
・Cloud Storage<br />
・Cloud Pub/Sub<br />
・Firebase Hosting<br />
<br />
地震が発生して「震源・震度に関する情報」が流れてきた時のパターンを簡単に説明すると...<br />
<br />
1. 気象庁からPubSubHubbubでJMAXML publishing feedを受ける<br />
2. atomを解析してEntryを取り出し、Task Queueに投げ入れ、Entryの内容をDatastoreに書き込む<br />
3. WorkerはXMLを取得、XMLスキーマを適用してJSON形式に変換、XMLとJSONをStorageに保存し、JSONをPub/Subに流す<br />
4. 3種のPub/Subトピックのうち地震に関係するトピックにぶら下がっているCloud Functionsが実行、Datastore内の地域コード対地域重心座標に基づいてGeoJSONを生成してStorageに保存、概要をPub/Sub(topic: quake-one)に流す<br />
5. Pub/Sub(topic: quake-one)にぶら下がっているCloud Functionsが実行、Puppeteer(+Express)が待ち受けているGCEインスタンスに画像生成リクエストを送信<br />
6. Headless Chromeで画像用ページを表示して撮影、Storageに保存<br />
7. 画像生成リクエストが成功すると、当該eventIDの地震の概要と画像のURLをPub/Sub(topic: quake-one-with-image)に流す<br />
8. Pub/Sub(topic: quake-one-with-image)にぶら下がっている各Cloud Functionsが実行、PushbulletやTwitterへ投稿<br />
9. QUAKE.ONE はStorageを参照し、概要の入ったJSONとインタラクティブ地図描画用のGeoJSONを取得、JavaScriptでレンダリング<br />
<br />
<a href="http://eleclog.quitsq.com/2015/12/prioris-evi.html" target="_blank">以前の複雑に絡み合った状態</a>からすれば、随分とメンテナンスしやすいシステムへと変わりました。<br />
<br />
AppEngine、Firebase Hostingは自動的にLet's EncryptでSSL証明書を更新してくれるし、しっかりキャッシュ、CDNが効いてくれます。<br />
Storageは、ライフサイクルを設定することで、古いXMLやJSON、画像データを自動的にNear line→Cold lineと安価なストレージに移行、あるいは削除してくれます。<br />
Cloud Functionsは実行時課金で、気象庁XMLをトリガーにして実行する程度の回数では全て無料範囲内に収まります。<br />
唯一、画像を生成するためのPuppeteer + Headless Chromeが入っているGCEインスタンスだけは面倒を見てあげなければなりませんが、これも永続化が必要なデータやステートは持っていないので管理は楽々です。<br />
<br />
さらに、副産物として<a href="https://viewer.jmx.prioris.jp/" target="_blank">JMAXML JSON Viewer</a>も出来ました。<br />
こちらはデータ保存期間が浅い&検索が弱いので受信状況の確認程度用です。<br />
商用利用は禁止ですので、お仕事で使いたい方はゲヒルンの<a href="https://www.gehirn.co.jp/services/disaster/" target="_blank">気象庁XML Viewer</a>をご契約ください。<br />
<br />
というわけで、出来る限り新しめの手法でマネージドな感じのイケてるサービスが出来ました。<br />
<br />
めでたし、めでたし。(終)<br />
<br />
<b>追記</b>:その後の話を書きました。<br />
<a href="http://eleclog.quitsq.com/2018/09/jmaxml-gcp-2.html" target="_blank">続・気象庁防災情報XMLの受信と周辺サービスをGCPに移行した話</a>Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com4tag:blogger.com,1999:blog-7229367252151281027.post-38368059697565996842017-12-31T06:23:00.001+09:002018-01-02T01:32:37.350+09:002017年の色々まとめ気づいたら2017年最終日...<br />
こまめに文章で残せなかったので、2017年何を作ったのか、何を買ったのか、何をやったのか、Twitterの投稿を拾いつつまとめておくことにします。<br />
(まとめておかないと自分でも何やったのか思い出せなくなっちゃうお年頃)<br />
<br />
<h3>
1月:SECCON TOWERをSECCON決勝戦で展示</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
SECCON TOWER展示しました <a href="https://twitter.com/hashtag/SECCON?src=hash&ref_src=twsrc%5Etfw">#SECCON</a> <a href="https://t.co/5LXzPCNO3l">pic.twitter.com/5LXzPCNO3l</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/825243908917456897?ref_src=twsrc%5Etfw">January 28, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
昨年末に作ったSECCON TOWERを決勝大会にて展示。<br />
スクリーンに動く様子を映し出してもらったけど、Keyは隠してませんでしたよ?<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
<a href="https://twitter.com/hashtag/SECCON?src=hash&ref_src=twsrc%5Etfw">#SECCON</a> のステッカーにも使われている腕木フォント"SECCON TOWER FONT"はGitHubで公開中です<a href="https://t.co/DZUI0hUjoe">https://t.co/DZUI0hUjoe</a> <a href="https://t.co/ClbbYPwLCp">pic.twitter.com/ClbbYPwLCp</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/825262295819247616?ref_src=twsrc%5Etfw">January 28, 2017</a></blockquote>
SECCON TOWER FONTを作ってGitHubで公開してたら、勝手にステッカー化されてて当日会場でビックリした。<br />
<br />
<h3>
1月:グレースモークアクリルとタカチのケースで何か良い感じの箱を作る</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
発注してたグレースモークのアクリルが届いたので早速ケースに付けてみた。(反対側のパネルは現在Elecrowで製造中) <a href="https://t.co/W4GD7yBbkK">pic.twitter.com/W4GD7yBbkK</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/822073074346397701?ref_src=twsrc%5Etfw">January 19, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
文字だけ透けて、良い感じ <a href="https://t.co/RGk0SyUT2n">pic.twitter.com/RGk0SyUT2n</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/822073970757234688?ref_src=twsrc%5Etfw">January 19, 2017</a></blockquote>
その後、この箱は中身を詰められて、とあるシステムとして納品されていきましたとさ。<br />
<br />
<h3>
1月:Mac mini(2011)をバラバラ分解してFusion Drive化</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
譲り受けたMac mini (Mid 2011)に1TB HDDと128GB SDDを入れてFusion Drive化した。MacBookとかのギチギチ構造からすれば分解超簡単だった <a href="https://t.co/t41OjzdWM0">pic.twitter.com/t41OjzdWM0</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/824331785689370624?ref_src=twsrc%5Etfw">January 25, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
ついでにメモリも16GBにしたのに、今は光出力をアンプに繋いで音楽再生用マシンになっている。勿体無い。<br />
<br />
<h3>
2月:サーマルプリンターでサーバルプリント</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
短辺が384px(感熱紙の横幅)になるようにresize&rotateして、Floyd–Steinbergでディザリングして、サーマルプリンタが受け取るbyte arrayに変換して... 印刷できるようになった <a href="https://t.co/cUbN8Q3adn">pic.twitter.com/cUbN8Q3adn</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/833042690824564736?ref_src=twsrc%5Etfw">February 18, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
サーバルプリンター <a href="https://t.co/XvsAnRKw5e">pic.twitter.com/XvsAnRKw5e</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/832681475803738112?ref_src=twsrc%5Etfw">February 17, 2017</a></blockquote>
ネタお遊び。カラー画像を良い感じに2値化するアルゴリズムとかを色々模索したりした。<br />
<br />
<h3>
5月:iPod miniを勝手にPRODUCT RED化</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
iPod miniの4GB MicroDriveを取り外して64GB SDカード化する作業中...🔧 <a href="https://t.co/v344TVAqiH">pic.twitter.com/v344TVAqiH</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/854139802983120896?ref_src=twsrc%5Etfw">April 18, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
iPod miniを勝手に(PRODUCT)RED化してみた <a href="https://t.co/mtpU7uWqzp">pic.twitter.com/mtpU7uWqzp</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/862700820671811585?ref_src=twsrc%5Etfw">May 11, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-conversation="none" data-lang="en">
<div dir="ltr" lang="ja">
ピンクを抜いて赤でアルマイト処理し直してもらったので、塗装ではない <a href="https://t.co/kPR4orTcEl">pic.twitter.com/kPR4orTcEl</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/862701118698041345?ref_src=twsrc%5Etfw">May 11, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
最終的に128GBのSDカードを入れて、メインのポータブルプレイヤーとして利用中。<br />
<br />
<h3>
4月〜10月:BEEP on USBを設計・製作</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
USB型のピポって鳴るやつを作ってみた。基板サイズ12x28mmに圧電サウンダと可変ボリュームが2個で音量と長さを変更可能。(画像はプロト版)<br />
技術書典3で販売予定です。 <a href="https://t.co/wpQXe9iNZU">https://t.co/wpQXe9iNZU</a> <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8?src=hash&ref_src=twsrc%5Etfw">#技術書典</a> <a href="https://t.co/ji8zWcP2NC">pic.twitter.com/ji8zWcP2NC</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/900738060383510528?ref_src=twsrc%5Etfw">August 24, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
技術書典3に向けて、鋭意製作中です。 <a href="https://t.co/6HghbpLjKD">https://t.co/6HghbpLjKD</a> <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8?src=hash&ref_src=twsrc%5Etfw">#技術書典</a> <a href="https://t.co/kg7yR6oXaX">pic.twitter.com/kg7yR6oXaX</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/900426701104070656?ref_src=twsrc%5Etfw">August 23, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
BEEP on USB 製造中... <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8?src=hash&ref_src=twsrc%5Etfw">#技術書典</a> <a href="https://t.co/LFOIAbn1fW">pic.twitter.com/LFOIAbn1fW</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/917282796632080384?ref_src=twsrc%5Etfw">October 9, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
頒布予定のBEEP on USB最終版はこんな感じになりました。 <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8?src=hash&ref_src=twsrc%5Etfw">#技術書典</a> <a href="https://t.co/BkCASOFUCk">pic.twitter.com/BkCASOFUCk</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/921350243114827776?ref_src=twsrc%5Etfw">October 20, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
Vカット割ってない実装済基板の束。プログラム書き込んで袋に入れる作業をしなければならない... (最終的な頒布数は秘密) <a href="https://t.co/FdpzfP2td8">pic.twitter.com/FdpzfP2td8</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/921351396510674944?ref_src=twsrc%5Etfw">October 20, 2017</a></blockquote>
<a href="https://twitter.com/kikuchan98">菊ちゃん先生</a>、<a href="https://twitter.com/cryks">りぶら先生</a>とPrioris名義で製作。<br />
最終的な「ver1.0」の形になるまで、10回以上の版更新を重ねている...<br />
<br />
<h3>
9月〜10月:中華チップマウンタを購入、稼働開始</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
チップマウンター(CHMT28)が届いた。木箱でっかい。 <a href="https://t.co/bOxVybhDVR">pic.twitter.com/bOxVybhDVR</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/903850633995837440?ref_src=twsrc%5Etfw">September 2, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
チップマウンタ稼働開始😤 <a href="https://t.co/PKdSJhpCyF">pic.twitter.com/PKdSJhpCyF</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/918691834569748480?ref_src=twsrc%5Etfw">October 13, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
起動時の動作とPull Pin, Work Lamp, Laserの確認 <a href="https://t.co/sUVn5dkEEV">pic.twitter.com/sUVn5dkEEV</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/918807728767692801?ref_src=twsrc%5Etfw">October 13, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
ステップ実行でチップコンデンサを載せる様子 <a href="https://t.co/61aoU3ZxW7">pic.twitter.com/61aoU3ZxW7</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/918811613515235333?ref_src=twsrc%5Etfw">October 13, 2017</a></blockquote>
BEEP on USBなどを極小ロット製造するために購入。<br />
ちょっと癖があるけど、色々調節しつつ使用中...<br />
これについても、もう少し知見が貯まったら記事にします。<br />
<br />
<h3>
9月:NanoPi NEOをクラスタ化するためのアクリル作り</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
FE社のNano Pi NEOを2個*4段スタックできるケースがごっつくて微妙だったので、スリムなやつを設計中... <a href="https://t.co/MTsUFqu7DD">pic.twitter.com/MTsUFqu7DD</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/909867859064455170?ref_src=twsrc%5Etfw">September 18, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
発注していたアクリル板が届いたのでNano Pi NEOを取り付け中... <a href="https://t.co/shFHwFNfBm">pic.twitter.com/shFHwFNfBm</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/913778659776856065?ref_src=twsrc%5Etfw">September 29, 2017</a></blockquote>
NanoPi公式のスタッキング用アクリルキットがゴツいので自作。<br />
CADで図面引いて深センの企業に発注。<br />
<br />
<h3>
9月:iPhone 8を購入</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
iPhone 8が届いた。6sから移行するぞ... <a href="https://t.co/T16JqR7mn0">pic.twitter.com/T16JqR7mn0</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/911387045544697856?ref_src=twsrc%5Etfw">September 23, 2017</a></blockquote>
2年ぶりにiPhoneを購入。SuicaをApple Watchから移行して超快適になった。<br />
<br />
<h3>
9〜11月:NanoPi NEOクラスタ稼働開始</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
Nano Piクラスタ作ってる <a href="https://t.co/usNzC3RcLE">pic.twitter.com/usNzC3RcLE</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/919491060786540544?ref_src=twsrc%5Etfw">October 15, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
Nano Pi NEOクラスタ稼働開始 <a href="https://t.co/2Idw5lAiMI">pic.twitter.com/2Idw5lAiMI</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/927096469840003078?ref_src=twsrc%5Etfw">November 5, 2017</a></blockquote>
何に使うか特に考えてなかったので、とりあえず暗号通貨をマイニングしてみたり。<br />
<br />
<h3>
10月:BEEP on USBを技術書典3で頒布</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
本日頒布予定の本の表紙デザイン、地味にこだわりました💪 どこか懐かしい雰囲気を感じた方はターゲットです。 <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8?src=hash&ref_src=twsrc%5Etfw">#技術書典</a> <a href="https://twitter.com/hashtag/beeponusb?src=hash&ref_src=twsrc%5Etfw">#beeponusb</a> <a href="https://t.co/eDkO2E0w2m">pic.twitter.com/eDkO2E0w2m</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/921849212857286657?ref_src=twsrc%5Etfw">October 21, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
BEEP on USB、おかげさまで完売いたしました。当日発表の隠し球、BEEP on USBの「書き換え機」もほぼ完売しました。ありがとうございました! <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8?src=hash&ref_src=twsrc%5Etfw">#技術書典</a> <a href="https://t.co/3Z4nCMQUju">pic.twitter.com/3Z4nCMQUju</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/922030046344122368?ref_src=twsrc%5Etfw">October 22, 2017</a></blockquote>
100個くらい用意していったら完売。<br />
表紙デザインに引き寄せられてくる方も多数いらっしゃって面白かった。<br />
<br />
<h3>
10月:BEEP on USBの書き換え機</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
BEEP on USB作者陣なのに製造で忙しくてあんまり遊んでなかったので、夜更かしして遊んでみる。書き換え機があるとこんな事が出来るんです。 <a href="https://twitter.com/hashtag/beeponusb?src=hash&ref_src=twsrc%5Etfw">#beeponusb</a> <a href="https://t.co/G2TzFHJRRc">pic.twitter.com/G2TzFHJRRc</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/922536155693719552?ref_src=twsrc%5Etfw">October 23, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
BEEP on USB 2個を書き換えて「ようこそジャパリパークへ」を演奏させてみた <a href="https://twitter.com/hashtag/beeponusb?src=hash&ref_src=twsrc%5Etfw">#beeponusb</a> <a href="https://t.co/rUDCJWs7R4">pic.twitter.com/rUDCJWs7R4</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/922783670963904512?ref_src=twsrc%5Etfw">October 24, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
BEEP on USB 1個で2トラック(擬似和音)出せるので、1個でも結構遊べるんです☺️ <a href="https://twitter.com/hashtag/beeponusb?src=hash&ref_src=twsrc%5Etfw">#beeponusb</a> <a href="https://t.co/ntLxyMIPdv">pic.twitter.com/ntLxyMIPdv</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/929260370132267008?ref_src=twsrc%5Etfw">November 11, 2017</a></blockquote>
忙しすぎて肝心の作者が遊んでなかったので、色々MMLで鳴らして遊んでみた。<br />
<br />
<h3>
11月:テクトロのオシロ画面ハードコピーを直接取り込むデバイスを製作</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
FT245Rを使って、古いTekのオシロに付いてるパラレルポートから画面ハードコピーを取得できるようになった <a href="https://t.co/aArKQ4w0du">pic.twitter.com/aArKQ4w0du</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/926139969185316864?ref_src=twsrc%5Etfw">November 2, 2017</a></blockquote>
フロッピーで波形を取り込むのが面倒なので、USBで直接パソコンに接続して取り込めるようにしてみた。<br />
この後、基板も設計して小さい箱に収めてみたけど、それはまた暇なときに記事にします。<br />
<br />
<h3>
11月:THETA Vを購入、秋葉原360度記録開始</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
THETA V買っちゃいましーた <a href="https://t.co/dau6BqmNoX">pic.twitter.com/dau6BqmNoX</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/931432662417342465?ref_src=twsrc%5Etfw">November 17, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
歩行者天国だったから中央交差点の真ん中で撮ってみたり、末広町から万世橋まで歩きながら4K撮影してみたりしたけど、THETA V本当に面白い <a href="https://t.co/yxNr9xNOH2">pic.twitter.com/yxNr9xNOH2</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/934826596388683776?ref_src=twsrc%5Etfw">November 26, 2017</a></blockquote>
Insta360 oneと迷ってThetaを購入。<br />
写真を撮るというよりも空間を切り取るという感覚に近かったので、移りゆく場所のその時々を記録する使い方をすることに。<br />
<br />
<h3>
12月:BitcoinでGoogle Homeを購入</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
bitcoinでGoogle Home買った <a href="https://t.co/XBlyybKvw3">pic.twitter.com/XBlyybKvw3</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/937194932787331073?ref_src=twsrc%5Etfw">December 3, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
開封 <a href="https://t.co/6tSUzhlw1c">pic.twitter.com/6tSUzhlw1c</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/937206948310564864?ref_src=twsrc%5Etfw">December 3, 2017</a></blockquote>
Dialogflowとかでアプリ作ってみたけど、イマイチだった。<br />
妄想では、直近起きた地震の情報とかをスムーズに教えてくれるものができる予定だった。<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
Actions on Google, Dialogflowを使ってGoogle Homeで遊んでみてるけど、Assistant Appを呼び出すというワンクッションあるのが微妙だなぁ...</div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/938440714496520193?ref_src=twsrc%5Etfw">December 6, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
データを入力する、何かを操作するという流れには使えるけど、何かの状況を知りたいという時に使えない。Assistant AppだとApp呼び出しのワンクッションが邪魔だし、声がApp用の声に切り替わるのも違和感あり。</div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/938450677642117120?ref_src=twsrc%5Etfw">December 6, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<h3>
12月:BEEP on USBを秋葉原の店舗で販売開始</h3>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
技術書典3から間が空いてしまいましたが、本日よりBEEP on USBの販売を開始しました! <a href="https://twitter.com/hashtag/beeponusb?src=hash&ref_src=twsrc%5Etfw">#beeponusb</a><a href="https://t.co/m46SLerc9K">https://t.co/m46SLerc9K</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/945865171590832128?ref_src=twsrc%5Etfw">December 27, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
店頭で紹介して頂いております。 Thanks🙏 <a href="https://twitter.com/hashtag/beeponusb?src=hash&ref_src=twsrc%5Etfw">#beeponusb</a> <a href="https://t.co/IrYMTzyOso">pic.twitter.com/IrYMTzyOso</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/946954197479538689?ref_src=twsrc%5Etfw">December 30, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
BEEP on USBを家電のケンちゃん 秋葉原ラジオデパート店で販売開始。<br />
実績「値札のついたものを秋葉原のお店で売る」を解除<br />
<br />
と、まあこんな感じでしょうか。
<br />
振り返ってみれば、2017年は「売り物(ハード)をいっぱい作る」方法や機械を学んだ年でした。<br />
<br />
さて、来年は何を作りましょうか。Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-21971810025322975992017-10-13T22:10:00.000+09:002017-10-13T22:10:14.133+09:00洗面台の水栓に合う後付けレバーを作ってみた<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-EUHzjMEdeY8/WeCzElXxaiI/AAAAAAAAUnM/UmsFnA92AyQCz7Esxlf29VQmPiJENJQPACLcBGAs/s1600/IMG_3312.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://3.bp.blogspot.com/-EUHzjMEdeY8/WeCzElXxaiI/AAAAAAAAUnM/UmsFnA92AyQCz7Esxlf29VQmPiJENJQPACLcBGAs/s320/IMG_3312.jpg" width="320" /></a></div>
<br />
3Dプリンターで、古い洗面台の水栓に取り付けられるハンドルレバーを作ってみたお話。<br />
<br />
実家は築25年超。<br />
洗面台やトイレなど色々なところに、今の最新式と比べれば劣る設備がついています。<br />
その最たるものが洗面台(親父曰く)であり、今風のシングルレバーではなく、<b>昔はおしゃれであったであろう</b>2つのハンドルがそこには付いています。<br />
しかし「手を洗う時に水を止めたり出したりしたいけど、握るのは嫌」という親父の意見もなるほど確かに理解できます。<br />
<br />
というわけで... 今回は3Dプリンタでぴったり合うハンドルレバーを作ってみることにしました。<br />
<br />
まずは、ハンドルの寸法を測ります。<br />
洗面台に付いていたハンドルは、王冠のようなギザギザ8個付いたタイプ。<br />
このギザギザの頂点から頂点まで、ハンドルの中心を通る長さを計測すると48mm。<br />
さらに、ギザギザの間の窪みから対向側の窪みまでの長さを計測すると40mm。<br />
これを元にFusion360で図面を引いていきます。<br />
<br />
ハンドルは、下に行くにつれて少し大きくなる形状だったので、余裕を持って50mmの円を描き、さらに内側に同じ中心点を持つ40mmの円を描きます。<br />
この円を8等分する線を引き、等分した線と外側の円が交わる部分を終点にして円弧を描きます。この時の円弧の頂点は内側の円にします。<br />
<br />
...これを繰り返してハンドルとほぼ同じ大きさの輪郭を作成。<br />
外側に円を描き、取っ手となる部分を描いて、押し出しツールで7mmの厚さにしたのが以下。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-10yV_9iZqgA/WeC2G5r3MII/AAAAAAAAUnY/CY0ZCbp7D4cYfnFZhK9llhd8ZUj3OLgzACLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-10-13%2B21.29.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1600" height="250" src="https://3.bp.blogspot.com/-10yV_9iZqgA/WeC2G5r3MII/AAAAAAAAUnY/CY0ZCbp7D4cYfnFZhK9llhd8ZUj3OLgzACLcBGAs/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-10-13%2B21.29.15.png" width="400" /></a></div>
<br />
これをSTL形式で出力して、3Dプリンタの付属ソフトでオブジェクトをスライスしてプリント開始。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-8B7X_YCYwe8/WeC4lWkI6ZI/AAAAAAAAUng/5mWLD8GttR0_9ICOgeNpyg6PcORz9TL-wCLcBGAs/s1600/IMG_3301.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://3.bp.blogspot.com/-8B7X_YCYwe8/WeC4lWkI6ZI/AAAAAAAAUng/5mWLD8GttR0_9ICOgeNpyg6PcORz9TL-wCLcBGAs/s320/IMG_3301.jpg" width="320" /></a></div>
<br />
30分程度で出力完了。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ltU_8ROcFbI/WeC4spAGfoI/AAAAAAAAUnk/xOWTQ6cG_50LkvYeaXgphFGqk0iwQptGgCLcBGAs/s1600/IMG_3308.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://1.bp.blogspot.com/-ltU_8ROcFbI/WeC4spAGfoI/AAAAAAAAUnk/xOWTQ6cG_50LkvYeaXgphFGqk0iwQptGgCLcBGAs/s320/IMG_3308.jpg" width="320" /></a></div>
<br />
実際にハンドルに取り付けてみると...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-hnXMYV-GueM/WeC408jKM6I/AAAAAAAAUno/8NSiDkx-lHcKgiDuhE-8zK-MNI_Ptm8lQCLcBGAs/s1600/IMG_3306.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" src="https://3.bp.blogspot.com/-hnXMYV-GueM/WeC408jKM6I/AAAAAAAAUno/8NSiDkx-lHcKgiDuhE-8zK-MNI_Ptm8lQCLcBGAs/s320/IMG_3306.jpg" width="260" /></a><a href="https://3.bp.blogspot.com/-KoWxUyUjYvM/WeC48GR2G9I/AAAAAAAAUns/roIELqAo4zU-lP8QfvEqZd8B_7BIBvIOgCLcBGAs/s1600/IMG_3307.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" src="https://3.bp.blogspot.com/-KoWxUyUjYvM/WeC48GR2G9I/AAAAAAAAUns/roIELqAo4zU-lP8QfvEqZd8B_7BIBvIOgCLcBGAs/s320/IMG_3307.jpg" width="260" /></a></div>
<br />
いい感じ!<br />
<br />
2Dで描いて押し出しで3D化するという超手抜きで飾り気のないデザインですが、Simple is BESTということで。<br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-5314777000827905232017-10-04T05:04:00.000+09:002017-10-04T05:09:27.361+09:00Nano Pi NEOをコンパクトにスタックしてみる<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Qig9rR5x_Ag/WdPeUwHNmQI/AAAAAAAAUgc/9XPzre62xw4U-ZOG-Z3zm8STSvVrG_QfwCLcBGAs/s1600/neo_stack_ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="845" data-original-width="1280" height="263" src="https://1.bp.blogspot.com/-Qig9rR5x_Ag/WdPeUwHNmQI/AAAAAAAAUgc/9XPzre62xw4U-ZOG-Z3zm8STSvVrG_QfwCLcBGAs/s400/neo_stack_ss1.png" width="400" /></a></div>
<br />
秋月電子通商やaitendoでも販売開始されたNano Pi NEO/NEO2を複数個買って、キレイにまとめてみた話です。<br />
<br />
どうでもいい話ですが、大きいこと片付けてからブログ書こうとすると永遠に書けなさそうな気がしてきたので、小さい細々したもので外に出せそうな話は書いていくことにしました。<br />
<span style="color: #999999;">#続くか分からないけど...</span><br />
<br />
Nano Pi NEO/NEO2は、Allwinner H3/H5が搭載された、非常にコンパクトなシングルボードコンピュータです。<br />
Raspberry Piと違ってHDMIや4つのUSBポートは搭載されていませんが、GPIOピンヘッダからUSBが2本出てたり、NEO2ではGigabit Ethernetを搭載していたりと、ヘッドレスでサーバ的に使ったり、何かに組み込んだりするには安くてコンパクトで使い勝手が良いボードです。<br />
<br />
とある目的でNEOにUSBドングルタイプの装置を繋げてみたところ、うまいこと認識してくれたので複数個買って束ねて使うと便利かも...というわけでキレイにまとめる方法を探し始めました。<br />
<br />
Nano Pi NEOの製造販売元であるFriendly Elecからは"4-layer Dual Stack Acrylic Case for Cluster DIY"という2個x4段重ねできるアクリル製の公式の製品がありますが、これがなかなかゴツい。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-cpttKZH_01s/WdPhuADyJ3I/AAAAAAAAUgo/Buudwk0mHCgSWzJVkYoPQIvdjPevIqZJwCLcBGAs/s1600/NEO-Acrylic-Case_05-900x630.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="630" data-original-width="900" height="224" src="https://2.bp.blogspot.com/-cpttKZH_01s/WdPhuADyJ3I/AAAAAAAAUgo/Buudwk0mHCgSWzJVkYoPQIvdjPevIqZJwCLcBGAs/s320/NEO-Acrylic-Case_05-900x630.jpg" width="320" /></a></div>
<div style="text-align: center;">
4-layer Dual Stack Acrylic Case for Cluster DIY (Friendly Elecより)</div>
<br />
また、ヒートシンクの下に(穴がいくつか空いているものの)アクリル面が来るため、少し放熱の面では効率悪そう...<br />
<br />
ということで、もっとスリムで熱も逃げやすそうなものを作ってみることに。<br />
今回は、以下の条件で設計してみました。<br />
<br />
・Nano Pi NEOの四隅の穴は35.4mm間隔<br />
・Nano Pi NEO自体のサイズは40mm四方<br />
・50x100mmに収まるようにする(コストを抑えるため)<br />
・配線をするときにケーブルなどを結束バンドで留められるようする<br />
・Nano Pi NEOを3mmのネジで固定できるようにする(2.5mm, 2.6mmネジは高いため)<br />
<br />
NEOを2個横に並べると80mm、間に5mmの余白、左右両端に7.5mmずつ余白を設けて合計100mmとします。<br />
短辺の長さは、NEOの幅(40mm)に合わせることでスッキリかつケーブルと干渉しないように。<br />
ヒートシンクをアクリル板側に向けて固定しても放熱性能を出来る限り落とさないように、ネジ固定とアクリル板の強度を保つための最低限の余白を残して繰り抜き。<br />
また、結束バンド固定穴としてNano Pi NEOの前後にくる面と各層の左右、計6個の長方形の穴を空ける。<br />
さらに、アクリル板自体も上下段に連結できるようにするため、ボードをアクリル板に固定するためのネジとアクリル板を連結するためのシャフトが干渉し合わないように...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-5sUQ99pLWZo/WdPjkuuiMGI/AAAAAAAAUg0/IFmLeZhUvHgnZ8YR9F2Dw3uBZTT98fYAgCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-10-04%2B4.22.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="685" data-original-width="1406" height="193" src="https://1.bp.blogspot.com/-5sUQ99pLWZo/WdPjkuuiMGI/AAAAAAAAUg0/IFmLeZhUvHgnZ8YR9F2Dw3uBZTT98fYAgCLcBGAs/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-10-04%2B4.22.33.png" width="400" /></a></div>
<br />
こんな感じにしてみました。<br />
今までに何度かアクリル板のレーザーカット用図面を引くのに使っているDraftSightを今回も使用しました。<br />
<br />
これに、埃除けのために最上段に付ける天板も同じ寸法で四隅の穴だけ空ける形で作ります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-qer5BngLnnI/WdPn7Am2tPI/AAAAAAAAUhA/CfxBfHvh2n0pszY1P-mq1Fh3qH1RK78ygCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-10-04%2B4.41.20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="686" data-original-width="1450" height="188" src="https://3.bp.blogspot.com/-qer5BngLnnI/WdPn7Am2tPI/AAAAAAAAUhA/CfxBfHvh2n0pszY1P-mq1Fh3qH1RK78ygCLcBGAs/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-10-04%2B4.41.20.png" width="400" /></a></div>
<br />
この2つを念のため少し古いバージョンのdwg形式で書き出して、それぞれzip圧縮して発注。<br />
発注先はElecrowで、アクリル板の色は透明(Transparent)、サイズは10cm Max * 10cm Maxの厚みは2.5mmにしました。<br />
重さで送料が変わるので、送料が変わらないところまで枚数を増やしていったら合計で25段分くらいに...<br />
<br />
製造と配送を含めて1週間くらいで届いたので、組み立てていきます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-7NaIGFpHfpE/WdPpn9_5ktI/AAAAAAAAUhM/qV901Lyc2EcTE2mbUimbIAmnAj5WwLB7wCLcBGAs/s1600/IMG_3207.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="300" src="https://4.bp.blogspot.com/-7NaIGFpHfpE/WdPpn9_5ktI/AAAAAAAAUhM/qV901Lyc2EcTE2mbUimbIAmnAj5WwLB7wCLcBGAs/s400/IMG_3207.jpg" width="400" /></a></div>
<br />
NEOをアクリル板に固定するのは直径3mm 長さ20mmのなべ小ネジ、長さ5mmのナット(FB3-5)、長さ3mmのナット(FB3-3)。<br />
各段を繋ぐシャフトは、長さ30mmの六角オネジ・メネジ(MB3-30)、最下段の足は長さ7mmの六角オネジ・メネジ(MB3-7)。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-rrCzHLCqK-M/WdPq-3eJJ3I/AAAAAAAAUhY/HZnV4JSfTd8z8dv-EgH44G7jvnwX6Ta_QCLcBGAs/s1600/IMG_3208.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="300" src="https://2.bp.blogspot.com/-rrCzHLCqK-M/WdPq-3eJJ3I/AAAAAAAAUhY/HZnV4JSfTd8z8dv-EgH44G7jvnwX6Ta_QCLcBGAs/s400/IMG_3208.jpg" width="400" /></a></div>
<br />
あとは、これを必要数に応じて積み重ねていって...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-T6J39nDQbwk/WdPrIm98KMI/AAAAAAAAUhc/U9cc5WM73mgKMt-vrJIFJ-ogVTvUzxpkgCLcBGAs/s1600/IMG_3209.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="300" src="https://1.bp.blogspot.com/-T6J39nDQbwk/WdPrIm98KMI/AAAAAAAAUhc/U9cc5WM73mgKMt-vrJIFJ-ogVTvUzxpkgCLcBGAs/s400/IMG_3209.jpg" width="400" /></a></div>
<br />
完成。今回はとりあえず手元にあった4個をスタックしてみました。<br />
<br />
残り20数段分あるので、40個くらいのNEOをスタックできそうです。<br />
そんなにあっても使いきれないので、欲しい方がいれば頒布します。<br />
<br />
データはGitHubに置いてますので、自分でカットしたり発注できる人は以下よりどうぞ。<br />
<a href="https://github.com/9SQ/Nano-Pi-NEO-Stack">https://github.com/9SQ/Nano-Pi-NEO-Stack</a><br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-69002466353801429292017-05-12T02:07:00.000+09:002017-05-12T02:18:16.471+09:00iPod miniを勝手に(PRODUCT)REDっぽくしてみた<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Zf7BWiNxZfw/WRSNunN9_vI/AAAAAAAAUTA/UfgYx7JSzlU5Mlzyam-6iHWw3C6NqVX2wCLcB/s1600/IMG_2464.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-Zf7BWiNxZfw/WRSNunN9_vI/AAAAAAAAUTA/UfgYx7JSzlU5Mlzyam-6iHWw3C6NqVX2wCLcB/s320/IMG_2464.JPG" width="320" /></a></div>
<br />
最近はスマホで音楽が聴けるので 携帯音楽プレーヤーを別に持つ人といえばハイレゾ趣味の人くらいになりつつある気がしますが、今回は12年前のiPod miniをリニューアルする話です。<br />
<br />
まずは、ジャンクで購入した時のiPod miniがこちら。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-Ksp78TVNAOY/WRSO1o9BapI/AAAAAAAAUTE/1u0nfw6cTSYs46b-sr7NR3lSkijdqr4GQCLcB/s1600/IMG_2357.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-Ksp78TVNAOY/WRSO1o9BapI/AAAAAAAAUTE/1u0nfw6cTSYs46b-sr7NR3lSkijdqr4GQCLcB/s320/IMG_2357.JPG" width="320" /></a></div>
<br />
起動しない問題がありましたが、これは内蔵Microdriveが故障しているのが原因だったので予備のMicrodriveに交換したら問題なく動作。<br />
それよりも気になるのは、このクリックホイールに保護フィルムを貼ったまま日光に晒されたことが原因と思われるパンダ日焼け。<br />
カラーアルマイトの色は紫外線で退色してしまいますが、プラの保護フィルムが貼ってあったところは元々の色に近い状態で残っています。<br />
<br />
外装自体には傷一つないので、この日焼けだけが何とも残念... ということでiPod miniを再カラーアルマイト処理に出してみることに。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-LqE91gnpFfY/WRSP2neGzGI/AAAAAAAAUTI/2vP0N2gzpYso-BUHPeopVQSXuENuUCL3ACLcB/s1600/IMG_2374.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-LqE91gnpFfY/WRSP2neGzGI/AAAAAAAAUTI/2vP0N2gzpYso-BUHPeopVQSXuENuUCL3ACLcB/s320/IMG_2374.JPG" width="320" /></a></div>
<br />
まずはアルミ外装から、ロジックボードやMicrodrive、バッテリー、クリックホイールなどの中身を取り出していきます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-6kvxJoAqaEM/WRSQFYpxyAI/AAAAAAAAUTM/ToQl9YTFqWsUUigYnv5D8eCmJ1b4GOkIwCLcB/s1600/IMG_2377.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-6kvxJoAqaEM/WRSQFYpxyAI/AAAAAAAAUTM/ToQl9YTFqWsUUigYnv5D8eCmJ1b4GOkIwCLcB/s320/IMG_2377.JPG" width="320" /></a></div>
<br />
クリックホイールと液晶部のアクリル窓も取り外し、アルミ外装側に接着剤や両面テープが残らないように掃除していきます。<br />
アクリル窓を外すときは、窓の周囲をドライヤーで温めながら押し込むと簡単に外せます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-PAnOARNkHTw/WRSQUi0aQGI/AAAAAAAAUTQ/3IfnNABvJH0MR5F0MJiuLmJ1vs99lvu2gCLcB/s1600/IMG_2385.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-PAnOARNkHTw/WRSQUi0aQGI/AAAAAAAAUTQ/3IfnNABvJH0MR5F0MJiuLmJ1vs99lvu2gCLcB/s320/IMG_2385.JPG" width="320" /></a></div>
<br />
全部バラバラにして並べると、こんな感じに。<br />
この完全にアルミだけになった外装を、アルマイトの再処理をしてくれる会社に送ります。<br />
元々のカラーアルマイト処理をしていたのはYKKらしい...ですが今回は、ポスト投函して1週間程度でカラーアルマイト処理して返送してくれる株式会社コーケンの「<a href="http://www.koh-ken.jp/koukendenka/alma_pack" target="_blank">光研アルパック10</a>」を利用してみることに。<br />
アルパックは秋葉原のヨドバシカメラにて3780円(税込)で購入。<br />
10点、250gまでのパーツを入れることができるので、もう一つピンク色のiPod miniの外装を入れて合計2点でやってもらうことに。<br />
<br />
今回依頼した会社は、普段は自動車やバイク、自転車の部品をアルマイト処理したり、ラジコンなどのホビーパーツをアルマイト処理するのがメインっぽい会社ですが、果たしてうまく行くだろうか...などと心配しつつパックに詰めてポストに投函したのが4月29日。<br />
<br />
間にゴールデンウィークで休業が入っていたので、処理されて返って来たのが5月11日でした。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-WL9mgGip-6Q/WRSSdFIVckI/AAAAAAAAUTg/0kO52ivOzWwVfStqyciPeL8olMU8z0IOwCLcB/s1600/IMG_2443.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-WL9mgGip-6Q/WRSSdFIVckI/AAAAAAAAUTg/0kO52ivOzWwVfStqyciPeL8olMU8z0IOwCLcB/s320/IMG_2443.JPG" width="250" /></a><a href="https://4.bp.blogspot.com/-OetfD8PFJQU/WRSSdLpCdUI/AAAAAAAAUTk/rnJIqPmTP0MZwDiWo_BAdubfFfZPPvdWwCLcB/s1600/IMG_2444.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-OetfD8PFJQU/WRSSdLpCdUI/AAAAAAAAUTk/rnJIqPmTP0MZwDiWo_BAdubfFfZPPvdWwCLcB/s320/IMG_2444.JPG" width="250" /></a></div>
<br />
返って来た外装をシルバーのiPod miniと並べて撮影。<br />
再度カラーアルマイト処理するときは、一旦元の色を抜いてから新しい色を入れるそうなので、ピンクが抜けているときはシルバーのような色になっていたはず...?<br />
本来、iPodの刻印はアルマイト処理された上から行なっているので、再処理すると消えてしまうのは知っていましたが、なかなか良い具合に跡が残っています。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-XF18TRbhAtk/WRSTTZaJrBI/AAAAAAAAUTs/qVOcl3qIx7I87Q4wMs03gzqLe7nloSxDgCLcB/s1600/IMG_2454.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-XF18TRbhAtk/WRSTTZaJrBI/AAAAAAAAUTs/qVOcl3qIx7I87Q4wMs03gzqLe7nloSxDgCLcB/s320/IMG_2454.JPG" width="320" /></a></div>
<br />
これを、CF変換に入れた128GBのSDカード、新しいバッテリーと共に組み上げていきます。<br />
手順は分解と逆なので省略...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-dnRyCPxQHlc/WRSTnWkU0kI/AAAAAAAAUTw/sZ6pV_wqs3oSG_n45hnFyTMOk4Os2PaigCLcB/s1600/IMG_2457.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-dnRyCPxQHlc/WRSTnWkU0kI/AAAAAAAAUTw/sZ6pV_wqs3oSG_n45hnFyTMOk4Os2PaigCLcB/s320/IMG_2457.JPG" width="320" /></a></div>
<br />
DockケーブルでMacと接続してiTunesで初期化すると、無事128GBのiPod miniとして認識。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-XyaHspjB6Gc/WRSU_8JpOMI/AAAAAAAAUUA/8rXqiLJZ2N0oKOTfoCTHnb0YyYArFu75wCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-05-12%2B1.43.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://2.bp.blogspot.com/-XyaHspjB6Gc/WRSU_8JpOMI/AAAAAAAAUUA/8rXqiLJZ2N0oKOTfoCTHnb0YyYArFu75wCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2017-05-12%2B1.43.52.png" width="400" /></a></div>
<br />
12年前のiPodが最新のiTunesで問題なく認識、ファームウェアの復元、音楽の同期ができるのは地味にすごい。<br />
Apple Lossless(ALAC)も同期、再生が可能なのでまだまだ長く使えそうです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-mz3VI6iIQbc/WRST1JJGXjI/AAAAAAAAUT0/_gYB9kqu3aEKICtqCUV03BVu3wgRNE-swCLcB/s1600/IMG_2459.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-mz3VI6iIQbc/WRST1JJGXjI/AAAAAAAAUT0/_gYB9kqu3aEKICtqCUV03BVu3wgRNE-swCLcB/s320/IMG_2459.JPG" width="250" /></a><a href="https://4.bp.blogspot.com/-s4b_QiBG_5E/WRST1EUA6NI/AAAAAAAAUT4/aPVY6kJvPqIEvvb-1OWPa6YBMnzSL_MLACLcB/s1600/IMG_2460.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-s4b_QiBG_5E/WRST1EUA6NI/AAAAAAAAUT4/aPVY6kJvPqIEvvb-1OWPa6YBMnzSL_MLACLcB/s320/IMG_2460.JPG" width="250" /></a></div>
<br />
最後にiPod mini 2世代(ブルー、シルバー)、iPod Video(5.5世代)との比較写真を。<br />
iPod 5.5世代は128GBのmSATA SSDに換装して、コンデンサも交換済みだけど... バッテリー持ちが少し悪いのとTriple.fi10で無音時にノイズが気になる問題があるので、これからはiPod miniがメインになりそう。<br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-11851916963842574912017-04-19T22:42:00.000+09:002017-04-20T01:46:58.577+09:00気象庁XML電文を「正しく」画像化するために必要な地図の話<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ko6Qs_fQCn0/WPdqFzR6nJI/AAAAAAAAUQc/nPkxy5d5v7EO4ZRmIvjptTuO9Wx9t_q9wCLcB/s1600/jma_2ndary_segmented_regins_all.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="337" src="https://1.bp.blogspot.com/-ko6Qs_fQCn0/WPdqFzR6nJI/AAAAAAAAUQc/nPkxy5d5v7EO4ZRmIvjptTuO9Wx9t_q9wCLcB/s400/jma_2ndary_segmented_regins_all.png" width="400" /></a></div>
<br />
皆さんは「地図」気にしていますか?<br />
伊能忠敬が日本全国を歩いて測量してまわり、精巧な日本地図を作成してから約200年、今や誰もが手のひらの上で正確な日本地図・世界地図を自由な縮尺で見ることができる便利な時代です。<br />
<br />
それにしても、久しぶりの投稿ですが...<br />
今回は、<a href="http://xml.kishou.go.jp/" target="_blank">気象庁が提供しているXML<span id="goog_1282979101"></span>電文</a>を画像化する、その時に使う地図の話をしようと思います。<br />
<br />
以前、地震発生時の震源・震度情報をブラウザ上でグリグリ動かして閲覧可能なWebサービス「<a href="http://evi.prioris.jp/" target="_blank">EVI 地震火山詳報</a>」を作りました。<br />
(参照: <a href="http://eleclog.quitsq.com/2015/12/prioris-evi.html" target="_blank">地震とか火山噴火情報を閲覧できるWebサイトを作った</a>)<br />
<br />
このとき使用した地図は、国土交通省が提供している<a href="http://nlftp.mlit.go.jp/ksj/" target="_blank">国土数値情報</a> 行政区域というもので、行政区(雑に言うと市区町村)単位で日本を分割した地図です。<br />
地震が発生した後に気象庁から発表される「震度速報」「震源・震度に関する情報」では、日本の行政区単位で震度が発表されます。<br />
<br />
さて、気象庁防災情報XMLフォーマット電文では、地震以外にも多数の情報を配信しています。<br />
例えば...<br />
<ul>
<li>気象特別警報・警報・注意報</li>
<li>土砂災害警戒情報</li>
<li>竜巻注意情報</li>
<li>地方気象情報</li>
<li>府県気象情報</li>
<li>全般週間天気予報</li>
<li>噴火に関する火山観測報</li>
<li>台風解析・予報情報</li>
</ul>
などなど...<br />
紫外線やスモッグ、生物季節観測では桜の開花や満開などの情報も配信されています。<br />
こういった情報の多くは行政区単位ではなく、気象庁が定める4つの地域の分け方単位で発表されています。<br />
<br />
<a href="http://www.jma.go.jp/jma/kishou/know/yougo_hp/shichoson_ichiran.html" target="_blank">気象庁|予報用語 特別警報・警報・注意報や天気予報の発表区域</a><br />
<br />
簡単にまとめるとこんな分類です。下になるほど細かく分割されています。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-qVPPdi3ynKs/WPdzYqD9lAI/AAAAAAAAUQs/6ROldQdE6BohMJJDZZYwFdP2r4lxTc7dwCLcB/s1600/jma_area.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-qVPPdi3ynKs/WPdzYqD9lAI/AAAAAAAAUQs/6ROldQdE6BohMJJDZZYwFdP2r4lxTc7dwCLcB/s640/jma_area.png" width="500" /></a></div>
つまり気象庁は、一番細かい単位として基本的に「二次細分区域」という地域の分け方で情報を発表していることになります。<br />
この二次細分区域ですが、実は<b>行政区域と1対1ではありません。</b><br />
日本の市区町村数は<b>1741</b>ですが、二次細分区域は<b>1775</b>の地域からなっています。(2017年4月 現在)<br />
ということは、行政区を更に何らかの基準で分割しているということになります。<br />
<br />
ここまで、気象庁の用いる発表区域について簡単に説明しましたが、ここで少し気象庁防災情報XMLフォーマット電文を利用するうえでの話をしましょう。<br />
気象庁防災情報XMLフォーマット電文(以下、気象庁XML電文)で配信される情報は、普段私たちがテレビやラジオ、新聞、Yahoo!天気やウェザーニューズなどで見る情報と根本は同じです。<br />
私たちは、気象庁XMLを受信して処理することで、テレビなどのマスコミが発信している気象情報と同じ物を世の中に発信することができます。<br />
<br />
ですが、これらの情報は、当然のことですが勝手に改変してはいけません。<br />
例えば、とある市に住んでる人が「気象庁の発表する警報は大げさだ。うちの市は注意報くらいに修正しておこう。」などと勝手に書き換えて、この情報をインターネットに流してはいけません。<br />
以下は、気象庁が公開している、気象庁XMLを利用するうえでの留意事項の抜粋です。<br />
<blockquote class="tr_bq">
<b>警報の取り扱いについて</b><br />
警報は重要な情報であり、万が一、誤った警報事項や錯誤を生じさせる情報が流通した場合、気象業務法第23条へ抵触する可能性があるほか、社会への影響が大きいことから、元の電文の本質を損なうような編集は認められません。</blockquote>
<blockquote class="tr_bq">
<b>公開XML電文の編集・加工について</b><br />
気象庁が発表した予報内容と異なる独自の予報を発表することは予報業務に該当し、気象業務法により許可を受けた者しか行えません。</blockquote>
<b>気象庁ホームページを通じて公開するXML形式電文のご利用にあたっての留意事項</b>より引用<br />
<a href="http://xml.kishou.go.jp/open_trial/considerationforxml.pdf">http://xml.kishou.go.jp/open_trial/considerationforxml.pdf</a> (PDF)<br />
<br />
さてさて、そこで地図の話です。<br />
気象庁が発表する情報は、気象庁の定める発表区域で出る訳ですが、もし気象庁の情報を国交省国土数値情報の行政区域を使って塗ったらどうなるでしょうか?<br />
<br />
これは、とある会社がTwitterや独自のアプリ内で配信している気象警報・注意報の画像です。<br />
<center>
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
【和歌山県気象警報・注意報】和歌山県では、18日明け方まで土砂災害に警戒してください。北部では、18日明け方まで河川の増水に警戒してください。<br />
[北部]大雨警報 洪水警報 雷注意報 強風注意報 波浪注意報 <br />
[南部]大雨警報 雷注意報 強風 <a href="https://t.co/AhkHAU4Y8l">pic.twitter.com/AhkHAU4Y8l</a></div>
— NewsDigest ニュース・地震速報 (@NewsDigestWeb) <a href="https://twitter.com/NewsDigestWeb/status/854038284892200961">2017年4月17日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
</center>
そして、こちらはゲヒルン株式会社が許諾して特務機関NERVで配信している気象警報・注意報の画像です。<br />
<center>
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
【和歌山県 気象警報 2017年04月18日 03:24】<br />
和歌山県では、18日明け方まで土砂災害に警戒してください。北部では、18日明け方まで河川の増水に警戒してください。 <a href="https://t.co/rMQF8LKj60">pic.twitter.com/rMQF8LKj60</a></div>
— 特務機関NERV (@UN_NERV) <a href="https://twitter.com/UN_NERV/status/854037894717071362">2017年4月17日</a></blockquote>
</center>
<br />
注目して頂きたいのはここです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-vHdyf4v-X5c/WPd8J3lcxhI/AAAAAAAAUQ8/BdO-tA1ZWQoffP93UbiRUDxFEMGlqKmNgCLcB/s1600/map_compare_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-vHdyf4v-X5c/WPd8J3lcxhI/AAAAAAAAUQ8/BdO-tA1ZWQoffP93UbiRUDxFEMGlqKmNgCLcB/s640/map_compare_1.png" width="500" /></a></div>
<br />
和歌山県の田辺市は、行政区域としては画像上段のようになっていますが、気象庁の二次細分区域としては画像下段のように5つの地域に別れています。<br />
ここで、2017年 4月18日 3:23に発表された気象警報・注意報を確認すると、田辺市龍神には大雨警報が発表されていますが、田辺市の他の地域には発表されていないことが分かります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-aigTHEWPDY8/WPd-wjZ2HhI/AAAAAAAAURI/qd7x7hXalYsz1HhvvNkbzI2fq_ulLDG-ACLcB/s1600/tanabe_xml.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-aigTHEWPDY8/WPd-wjZ2HhI/AAAAAAAAURI/qd7x7hXalYsz1HhvvNkbzI2fq_ulLDG-ACLcB/s640/tanabe_xml.png" width="500" /></a></div>
(画像が横に長いので、拡大してご覧ください)<br />
<br />
別の地域でも見てみましょう。<br />
<br />
以下は北海道の渡島・檜山(おしま・ひやま)地方に発表された気象警報・注意報です。<br />
<center>
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
【渡島・檜山地方気象警報・注意報】渡島地方では、18日昼過ぎまで土砂災害に警戒してください。渡島、檜山地方では、18日昼過ぎまで暴風に警戒してください。<br />
[渡島地方]大雨警報 暴風警報 雷注意報 波浪注意報 洪水注意報 濃霧注意報 <br />
[檜山 <a href="https://t.co/aeCpXlNJ7R">pic.twitter.com/aeCpXlNJ7R</a></div>
— NewsDigest ニュース・地震速報 (@NewsDigestWeb) <a href="https://twitter.com/NewsDigestWeb/status/854111307565416449">2017年4月17日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script><br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
【渡島・檜山地方 気象警報 2017年04月18日 08:14】<br />
渡島地方では、18日昼過ぎまで土砂災害に警戒してください。渡島、檜山地方では、18日昼過ぎまで暴風に警戒してください。 <a href="https://t.co/SSPvbO2KKp">pic.twitter.com/SSPvbO2KKp</a></div>
— 特務機関NERV (@UN_NERV) <a href="https://twitter.com/UN_NERV/status/854110866483970049">2017年4月17日</a></blockquote>
</center>
もう見ただけでお分かり頂けると思いますが...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-aYcdMBw67pU/WPd_y71XEWI/AAAAAAAAURQ/EUeK4UL5z2YNA9eyVSudNr0GhYPLCYotwCLcB/s1600/map_compare_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-aYcdMBw67pU/WPd_y71XEWI/AAAAAAAAURQ/EUeK4UL5z2YNA9eyVSudNr0GhYPLCYotwCLcB/s640/map_compare_2.png" width="500" /></a></div>
<br />
北海道二海郡八雲町は、気象庁二次細分区域では八雲町八雲と八雲町熊石に分割されています。<br />
<br />
そもそも、分割された地域は、<b>市町村等をまとめた地域</b>でも同一の地域に属していません。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-0q_j1UIgbjY/WPeAXKwoBGI/AAAAAAAAURY/xcN3bcgQAqwl0r4Bv62wMzUJlFvDL1DBwCLcB/s1600/map_compare_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-0q_j1UIgbjY/WPeAXKwoBGI/AAAAAAAAURY/xcN3bcgQAqwl0r4Bv62wMzUJlFvDL1DBwCLcB/s640/map_compare_3.png" width="500" /></a></div>
<br />
更にその上の<b>一次細分区域</b>でも同一地域ではありません。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-50N9sioo7rg/WPeAVdlj6kI/AAAAAAAAURU/me5BxGF9mvQIYYUYOxcOQXAmxPaBRO5nACLcB/s1600/map_compare_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-50N9sioo7rg/WPeAVdlj6kI/AAAAAAAAURU/me5BxGF9mvQIYYUYOxcOQXAmxPaBRO5nACLcB/s640/map_compare_4.png" width="500" /></a></div>
<br />
ここで、2017年 4月18日 8:13に発表された気象警報・注意報を確認すると、八雲町熊石には暴風警報が発表されていますが、八雲町八雲には発表されていないことが分かります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-eZ6ohBlLNBI/WPeBd20Um6I/AAAAAAAAURg/wtOwM3fDzEkr65N-Jvyudx4xUahy3pn1QCLcB/s1600/yakumo_xml.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-eZ6ohBlLNBI/WPeBd20Um6I/AAAAAAAAURg/wtOwM3fDzEkr65N-Jvyudx4xUahy3pn1QCLcB/s640/yakumo_xml.png" width="500" /></a></div>
<br />
さてさて...<br />
ここまで例を挙げながら解説してきましたが、いかがでしたでしょうか。<br />
気象警報が出ていない地域に警報が出ている、あるいはその逆という情報を、あたかも真実のように世の中に配信してしまう、そんなことはあってはいけません。<br />
<br />
<a href="http://www.gehirn.co.jp/" target="_blank">ゲヒルン株式会社</a>では、正しい情報を迅速かつ確実に分かりやすく伝えるために、気象庁二次細分区域の地図データセットやレンダリングエンジンを開発しています。<br />
<br />
実は、気象庁二次細分区域よりも更に細かい地域分けとして、<b>土砂災害警戒情報で使用する地域</b>という発表区域もありますが、これに対応する地図データセットも開発しています。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-kJF1T6SDW7g/WPeD7hcGm2I/AAAAAAAAURs/Lnkyx2oPsTUQD9muDLvCwI2xu6CXRLZjgCLcB/s1600/map_compare_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-kJF1T6SDW7g/WPeD7hcGm2I/AAAAAAAAURs/Lnkyx2oPsTUQD9muDLvCwI2xu6CXRLZjgCLcB/s640/map_compare_5.png" width="500" /></a></div>
<br />
ふう、だいぶ長々と書いてしまいましたが...<br />
こういうシステムを作っている人たちの気持ちは「一人でも多くの人に、安全で安心できる生活を送ってもらいたい」だと思います。<br />
そのためにも、現在気象庁XMLを受信して活用している方も、これから利用して何か作ろうと思っている方も、正確な防災情報を配信するように心がけましょう!<br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-64896674563455669392016-12-11T18:52:00.002+09:002016-12-18T10:23:01.766+09:00SECCON 2016 online "PNG over Telegraph"<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-4wK1llzDD8Q/WE0PmkzKvwI/AAAAAAAAUII/7zCCSPLxXh4xStovIWHkSQPXP49I312owCLcB/s1600/IMG_2064.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-4wK1llzDD8Q/WE0PmkzKvwI/AAAAAAAAUII/7zCCSPLxXh4xStovIWHkSQPXP49I312owCLcB/s320/IMG_2064.JPG" width="320" /></a></div>
<br />
<a href="http://2016.seccon.jp/" target="_blank">SECCON 2016</a> online CTFに参加された皆様、お疲れさまでした。<br />
今回は初めて問題を作る側に参加させてもらい、たくさんの高評価を頂いてとても嬉しいです!<br />
<br />
<a href="https://www.youtube.com/watch?v=Y6voaURtKlM">https://www.youtube.com/watch?v=Y6voaURtKlM</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-YbxWt3s0NEE/WE0SFjDjm4I/AAAAAAAAUIU/v56ndlKWczoP5T0aVx0IR46-I7saORVGgCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-12-11%2B17.44.29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="105" src="https://4.bp.blogspot.com/-YbxWt3s0NEE/WE0SFjDjm4I/AAAAAAAAUIU/v56ndlKWczoP5T0aVx0IR46-I7saORVGgCLcB/s200/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-12-11%2B17.44.29.png" width="200" /></a></div>
<br />
さて、このSECCON TOWERこと腕木通信の塔について、少しだけ解説をしようと思います。<br />
(解き方については、解けたチームがWrite Upなどを公開してくれる...と思いますので)<br />
<br />
腕木通信(Semaphore Line)は、18世紀末から19世紀にかけてフランスで考案されて使われた、世界で最初の大規模通信網です。
考案したのはクロード・シャップというフランス人で、フランスに存在する腕木通信の塔のことを「シャップの塔」と呼ぶこともあるようです。<br />
そもそも「セマフォ(Semaphore)」や「テレグラフ(Telegraph)」という用語は、このシャップさんが考案しました。<br />
この辺りの詳しい話は、各言語版Wikipedia(日本語, 英語, フランス語)あたりを参照してください。<br />
<br />
<a href="https://ja.wikipedia.org/wiki/%E8%85%95%E6%9C%A8%E9%80%9A%E4%BF%A1">https://ja.wikipedia.org/wiki/%E8%85%95%E6%9C%A8%E9%80%9A%E4%BF%A1</a><br />
<a href="https://en.wikipedia.org/wiki/Semaphore_line">https://en.wikipedia.org/wiki/Semaphore_line</a><br />
<a href="https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)">https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)</a><br />
<br />
この腕木通信を再現したのが、今回のSECCON TOWERです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-5KJREoDdEKs/WE0Pms0aFbI/AAAAAAAAUIM/-nQfvP6UwtA-PrDO4j9_dP_QWkhdBen-gCEw/s1600/IMG_2014.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-5KJREoDdEKs/WE0Pms0aFbI/AAAAAAAAUIM/-nQfvP6UwtA-PrDO4j9_dP_QWkhdBen-gCEw/s320/IMG_2014.JPG" width="320" /></a></div>
<br />
素材は割り箸と秋月電子で800円で売っているサーボモーター3個、制御はArduinoで行なっています。<br />
<br />
背景には、私が撮影した桜島の写真をネットプリントでA3サイズに印刷して使っています。<br />
<a href="https://www.flickr.com/photos/kei-y/14684044383/" target="_blank">DSC_4693 | 鹿児島大学教育学部より桜島を望む | Kei Yoshimura | Flickr</a><br />
<br />
ちなみに土台の部分にはセ○ンカフェの紙コップを使用し、塔の質感を演出しています。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-lvVUxW67oso/WE0Pmoej22I/AAAAAAAAUIM/VhPLP-xHZJk7FRD9CjNLGjeoAsLF4_M0wCEw/s1600/IMG_2067.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-lvVUxW67oso/WE0Pmoej22I/AAAAAAAAUIM/VhPLP-xHZJk7FRD9CjNLGjeoAsLF4_M0wCEw/s320/IMG_2067.JPG" width="240" /></a></div>
<br />
Arduinoのコードはこちら<br />
<a href="https://github.com/9SQ/SECCON_TOWER" target="_blank">9SQ/SECCON_TOWER: Semaphore tower (Chappe tower) made by Arduino</a><br />
<br />
Serialで待ち受けるArduinoに対して、1文字ずつ文字を送ることで動作します。<br />
送られた文字に対応する腕木の形は、基本的に フランス語版 Wikipediaに記載されているChappe Code表を基準にしています。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-YRNW1LpQKdw/WE0oP1wTlvI/AAAAAAAAUJE/jykdcA3-eQ806-P4sqVXOihECQJ7OfmEQCLcB/s1600/Chappe.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-YRNW1LpQKdw/WE0oP1wTlvI/AAAAAAAAUJE/jykdcA3-eQ806-P4sqVXOihECQJ7OfmEQCLcB/s320/Chappe.svg.png" width="196" /></a></div>
<br />
<a href="https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)#/media/File:Chappe.svg">https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)#/media/File:Chappe.svg</a><br />
<br />
しかし、このコード表には J が存在しません。使われている腕木のパターンは 36通りしかないため、使用頻度の低い J は文献によっては I で代替されていたりしました。<br />
とはいえ J と I が混同されると何かと不便なので、今回の SECCON TOWER では & を J として扱っています。<br />
このことは、問題動画の冒頭で紙に書き写している文章の一部から、補完可能です。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-AtGPy-MxLaM/WE0g8USiQtI/AAAAAAAAUI0/CaVQTtG8bFgtQGF4TtIkjt2IwnDA0yhcQCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-12-11%2B18.43.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://3.bp.blogspot.com/-AtGPy-MxLaM/WE0g8USiQtI/AAAAAAAAUI0/CaVQTtG8bFgtQGF4TtIkjt2IwnDA0yhcQCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-12-11%2B18.43.15.png" width="400" /></a></div>
<br />
WELCOME TO SECCON CTF.<br />
WE HOPE YOU WILL EN<b><span style="color: red;">J</span></b>OY THE GAME.<br />
GOOD LUCK.<br />
<br />
これに、flagの入っている PNG 画像を<b>BASE32</b>エンコードして流しました。<br />
<br />
なぜ、BASE32なのか... 前述の通り Chappe Code では、36通りの組み合わせが使われています。素直に考えると BASE36 という選択肢もあります。<br />
しかし今回は様々な理由で BASE32 を使った方が都合が良いことが多かったので、そうしています。<br />
(特に、冒頭の8文字をデコードするだけで PNG のシグネチャを得られるのが最重要でした)<br />
参考: <a href="https://tools.ietf.org/html/rfc4648" target="_blank">RFC 4648 - The Base16, Base32, and Base64 Data Encodings</a><br />
<br />
<br />
というわけで、作問者側が想定していた正攻法な解き方としては...<br />
<br />
1. 腕木通信であることを認識し、Semaphore、Chappe towerなどのワードからChappe Code表にたどり着く<br />
2. 50分の動画から、対応表を元に文字に戻す。(この手段は問わない)<br />
3. BASE32デコードする<br />
4. PNGファイルが出てくるので、開く<br />
5. flagをget<br />
<br />
そう。この腕木から文字を復元する作業について、手段は全く問わないのです。<br />
画像処理が得意な人は画像処理で解くもよし、機械学習で解くもよし、人力で解くもよし。<br />
<br />
この点について、発案者のきくちゃん先生からの熱いメッセージがあります。<br />
<blockquote>
時間内に効率よく文字に戻すにはどうしたらよいか、という命題に対し、各々が持てるリソースをどのように配分して投入するか。<b>手段は問わない。</b><br />
それこそが CTF における問題解決能力の腕の見せ所だと思います。<br />
もし何らかのプログラム的な手法で解くこと<b>だけ</b>を狙うなら、動画の長さは50分程度ではなく5時間くらいにしちゃいます。<br />
むしろ画像処理や機械学習を使わないと解けない、と思いこませることこそがミスリードでした。<br />
人力で読むにしても、ある程度コンピュータに手助けしてもらったり、様々な工夫や手法があると思います。</blockquote>
<br />
私が解くとしたら... 動画から各形のフレームを取り出して、同じ形状をしているものは同じ文字として... やはり人力でやると思います。<br />
プログラムで解くと思わせて、実は人力が最短?(かもしれない)問題なのです。<br />
<br />
ちなみに... こんな裏話もあったり。<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
直前まで「PNG over Telegraph」ではなく「Semaphore」という問題名だったけど、これだとすぐに腕木通信と分かってしまい、対応表を見つけて簡単に解けるのでは?ということでTelegraphに変更されたという経緯があります</div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/807839797024698368">2016年12月11日</a></blockquote>
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
三脚が無かったのでiPhoneをビニールテープで工具箱に貼り付けて撮影してたら、テープが緩んで少しずつ上に向いちゃったという経緯がありまして、決してわざと動くように撮ったのではありません(てへっ</div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/807834750995992576">2016年12月11日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
<br />
それから、今年はQRコードがなかった!!というあなた...<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
SECCON から QR が消えたとお嘆きのあなた。ちゃんと塔の中に隠してありますよ!</div>
— きくちゃん (@kikuchan98) <a href="https://twitter.com/kikuchan98/status/807835644126842881">2016年12月11日</a></blockquote>
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
今年のSECCONはQRコードが無かったなどと言われてますが「PNG over Telegraph」でQRコードのPNG画像を伝送しているので...😎 <a href="https://twitter.com/hashtag/SECCON?src=hash">#SECCON</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/807836250379948032">2016年12月11日</a></blockquote>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-WGcI9Ekl-O4/WE0ZQXQH9gI/AAAAAAAAUIk/KE2Q3QAwM-E4DGTnWFtDdH0-XVxdQQrVgCLcB/s1600/flag-qr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-WGcI9Ekl-O4/WE0ZQXQH9gI/AAAAAAAAUIk/KE2Q3QAwM-E4DGTnWFtDdH0-XVxdQQrVgCLcB/s320/flag-qr.png" width="320" /></a></div>
<br />
flag の PNG画像 は QRコードなので、半分ぐらい入力すれば、それっぽい画像が得られます。<br />
読み取りに失敗してQRコードが壊れてた? QRコードの復元は、みなさんお手の物、ですよね!<br />
<br />
解けた方は、ぜひWrite upを書いてくださいね!<br />
<br />
<br />
<b>追記:</b>この問題について記述されているWrite upを貼っていきます。<br />
<br />
SECCON 2016 Online CTF に参加しました (Write-up) | monolog<br />
<a href="http://blog.monora.me/2016/12/seccon-2016-online-ctf-write-up/">http://blog.monora.me/2016/12/seccon-2016-online-ctf-write-up/</a>
<br />
<br />
SECCON 2016 予選 - /home/cympfh/<br />
<a href="http://cympfh.hatenablog.jp/entry/2016/12/11/215023">http://cympfh.hatenablog.jp/entry/2016/12/11/215023</a><br />
<br />
PNG over Teregraph - TomoriNao SECCON 2016 Online<br />
<a href="https://hackmd.io/s/SJVWBNtXx">https://hackmd.io/s/SJVWBNtXx</a><br />
<br />
SECCON TOWER 参加記のようなもの - Unpronounceable Name<br />
<a href="http://tatarhy.hatenablog.jp/entry/2016/12/16/014821">http://tatarhy.hatenablog.jp/entry/2016/12/16/014821</a><br />
<br />
SECCON 2016 Online CTF Write up PNG over Telegraph - Qiita<br />
<a href="http://qiita.com/Liesegang/items/f6ac10b18064906a3808">http://qiita.com/Liesegang/items/f6ac10b18064906a3808</a>Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-9466657708042968972016-11-13T04:31:00.005+09:002016-11-13T04:35:28.665+09:00AkiCartをちょっとだけアップデートしました<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-OWfkRpEwARY/WCdWv9kQo8I/AAAAAAAAUDE/J-bZAN4DxdQFFTTvwN4wrnrJi8BqiWjqACLcB/s1600/th_%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-11-13%2B2.51.29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="310" src="https://4.bp.blogspot.com/-OWfkRpEwARY/WCdWv9kQo8I/AAAAAAAAUDE/J-bZAN4DxdQFFTTvwN4wrnrJi8BqiWjqACLcB/s400/th_%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-11-13%2B2.51.29.jpg" width="400" /></a></div>
<br />
初めての東京の冬。いきなり寒くなって風邪気味です...<br />
<br />
さて、6月に公開した、<a href="http://akizukidenshi.com/" target="_blank">秋月電子通商</a>のパーツで電子部品リストを作って一発で買い物かごに放り込めるサービス <a href="https://aki.prioris.jp/" target="_blank">AkiCart</a> について、少しだけ機能追加したのでご報告です。<br />
<br />
<b>1. パーツリストにコメント投稿できるようにしました</b><br />
自分や他人が作ったリストに対してコメントを付けられるようにしました。<br />
DISQUSを利用しています。(画像とかも投稿できます)<br />
Qiitaのコメント欄やクックパッドのつくれぽ...みたいに使われれば理想的ですが、まぁ、とりあえず感想やら質問やらを書き込む場所としてお使いください。<br />
<br />
AkiCartはリストの説明欄に特定のHTMLタグが使用可能で、説明や作り方などの記載もできるようになっています。<br />
<b>参考:</b> <a href="https://aki.prioris.jp/list/2d179724-3e52-48c4-b554-464d6d67c345/" target="_blank">ESP-WROOM-02でミニマルなIRKitクローンを作る | AkiCart</a><br />
<br />
リストを公開する方も、完成後の画像や簡単なコード、GitHubリポジトリへのリンクなどを記入していただければ、もっと便利になると思います。(説明欄をリッチに使ってる人が自分しかいなくて悲しい...)<br />
AkiCartだけで、パーツの一覧と個数、作り方、そしてコミュニティが完成すれば素敵だなぁと願っています。<br />
<br />
<b>2. 匿名公開を実装しました</b><br />
今までは、リストの表示権限について3つ用意していました。<br />
<br />
<b>公開 </b>: 誰でもリストを閲覧できる。トップページに表示される<br />
<b>限定公開 </b>: URLを知っている人だけが閲覧できる。トップページには表示されない<br />
<b>非公開 </b>: 自分以外は誰も閲覧できない。トップページにはもちろん表示されない<br />
<br />
ここに新たに「匿名公開」という権限を追加しました。<br />
匿名公開は、公開と基本的に同じですが、リスト作成者の名前が伏せられます。<br />
アノニマス パーツ リストです。<br />
リスト作って公開したいけど、自分の名前(Twitterアカウント)が晒されるのは嫌だ...という方は是非使ってみてください。<br />
<br />
<b>3. 検索機能を実装しました</b><br />
簡易的ですが、検索することが出来るようにしました。<br />
スペース区切りでAND検索できます。<br />
現時点では、リスト名とリストの説明に含まれるキーワードで検索を掛けるため、リストに含まれている部品名では検索できません。(近いうちに対応させたい)<br />
利用者のみなさん、リストに簡単で良いので説明を書きましょう!<br />
<br />
<b>4. HTTPSに対応しました。</b><br />
Let's Encryptが正式サービスとなったので、これを使ってhttps化しました。<br />
今のところ、まだhttpでもアクセス可能です。<br />
近いうちにリダイレクトを掛けようと思っています。<br />
<br />
とりあえず、こんなところです。<br />
<br />
そのうちやりたいこと、としては<br />
・パーツ1つに対して補足情報を付けられるようにする<br />
・秋月電子以外にも対応(共立とか?)<br />
などなど...<br />
<br />
こんな機能が欲しいなどありましたら、このブログへのコメントやTwitter <complete id="goog_1466594454">@9SQ で緩く受け付けています。</complete><br />
<complete><br /></complete>
<br />
<h3>
<complete>AkiCart</complete></h3>
<complete><a href="https://aki.prioris.jp/">https://aki.prioris.jp/</a></complete><br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com1tag:blogger.com,1999:blog-7229367252151281027.post-34387548793424921242016-10-15T08:18:00.001+09:002016-10-15T08:18:48.412+09:00e-statのshpを全国分取り込んで国交省の行政区域shpと比べてみる<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-_Vln_AVfXvE/WAFaKJ-YWaI/AAAAAAAAUA4/f72vb45kCy43Qf2gUPFSgtWMEmfrXfo-wCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.20.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="267" src="https://2.bp.blogspot.com/-_Vln_AVfXvE/WAFaKJ-YWaI/AAAAAAAAUA4/f72vb45kCy43Qf2gUPFSgtWMEmfrXfo-wCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.20.07.png" width="400" /></a></div>
<br />
久々にGISネタです。<br />
<br />
国交省の国土数値情報ダウンロードサービスでダウンロードできる行政区域のShapefileは<a href="http://eleclog.quitsq.com/2015/06/postgis-mlit-ksj.html">以前の記事</a>でも取り扱いました。<br />
国土数値情報 行政区域データは全国の行政界を記録したものですが、これは市区町村界レベルであって、大字(〜丁目)レベルの境界ではありません。(行政界なので当然なのですが)<br />
そこで、現状無料で手に入る大字レベルのshpとして、総務省統計局のデータを利用してみることに。<br />
<br />
<a href="https://www.e-stat.go.jp/">e-Stat 政府統計の総合窓口</a><br />
<br />
地図で見る統計(統計GIS) → データダウンロード → 国勢調査 → 平成22年国勢調査(小地域) 2010/10/01 → 男女別人口総数及び世帯総数 → 市区町村を選択 → 世界測地系平面直角座標系・Shape形式<br />
<br />
これをダウンロードします。<br />
ダウンロードするのですが... これを全国分となると、市区町村を選択してShapeを選んで...という作業をおよそ1900回繰り返さなければなりません。<br />
一括でダウンロード出来ない理由は負荷軽減のためで、全国分欲しい人は地図屋からデータ買ってねという記載があるので、ちゃんと正攻法で買いましょう。<br />
そもそも、このShapefileは数値情報を上に重ねたりグラフ化したりするためのもので、境界域を得る為に使用するものではありません。<br />
<br />
...ただ、今回はスクリプト書いて全部ダウンロードさせてもらいました。(ごめんなさい)<br />
一括ダウンロードのためのスクリプトは載せません。<br />
<br />
結論としては、やはり地図屋から買った方がいいです。<br />
しかし、同じことを企む人たちのために、何故そういう結論に至ったのか書き残そうと思います。<br />
<br />
まずは、視覚的に比較するためにShapefileを取り込みます。<br />
e-Statから手に入れたデータはzip化されてますので、まずは解凍。<br />
<br />
unzip \*.zip<br />
<br />
出てきたShapefileをQGISで結合します<br />
<br />
1. ベクタ → データマネジメントツール → 複数のシェープファイルを1つに結合する<br />
2. フォルダのレイヤによって選択する にチェック<br />
3. 入力ファイルで .shpファイルを全て選択して、エンコードにSift_JISを選択 → Open<br />
4. 出力シェープファイルで保存先を選んでエンコードにUTF-8を選択 → Save<br />
5. OK で処理開始<br />
<br />
この段階で結合されたshpができあがるのですが、CRS(測地系)がEPSG2454(JGD2000)になっていると思うので、今後扱いやすいようにEPSG4326(WGS84)で保存し直します。<br />
<br />
1. 結合処理が終了して、レイヤに追加されたデータを右クリックして名前を付けて保存<br />
2. パスに保存先を選び、CRSにEPSG4326(WGS84)を選択してOK<br />
<br />
これで準備完了。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-wAKkjdEsBN0/WAFiQpoZNGI/AAAAAAAAUBI/75V80Cy4t6MB6sOYSVARbMbeIXr9XcE6wCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.54.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://1.bp.blogspot.com/-wAKkjdEsBN0/WAFiQpoZNGI/AAAAAAAAUBI/75V80Cy4t6MB6sOYSVARbMbeIXr9XcE6wCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.54.42.png" width="400" /></a></div>
<br />
千代田区の大手町1丁目を選択してみました。<br />
なんだか良さそうな雰囲気。<br />
<br />
では、すこしズームアウトして湾岸部を見ましょう。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ginpdEb1ntM/WAFiw2hApsI/AAAAAAAAUBM/GPb422Ic8PIoYdu23vO7icrv_tu6rOCKwCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.56.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://1.bp.blogspot.com/-ginpdEb1ntM/WAFiw2hApsI/AAAAAAAAUBM/GPb422Ic8PIoYdu23vO7icrv_tu6rOCKwCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.56.42.png" width="400" /></a></div>
<br />
なんだか海岸線とは思えない鋭利なラインが目立ちます。<br />
この上に国交省 行政区域データを重ねてみます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-CLipxL-NZHM/WAFjElS0HfI/AAAAAAAAUBQ/pOnLI0MvVoopaK0WX3FcDWfKbaV3Af3fQCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.58.09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://2.bp.blogspot.com/-CLipxL-NZHM/WAFjElS0HfI/AAAAAAAAUBQ/pOnLI0MvVoopaK0WX3FcDWfKbaV3Af3fQCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B7.58.09.png" width="400" /></a></div>
<br />
どうやら、海域の一部も含まれているので、陸地の境界域として利用するにはイマイチでしょう。<br />
(こういう海域が取り込まれている部分が全国の海岸部分に沢山あるので、1つ1つ手で除去とかアホみたいに時間掛かることはしません)<br />
<br />
それと、もう1点。<br />
これは統計局のデータではなく国交省のデータの問題なのですが...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Y6z4DfMnUmA/WAFkWH_coxI/AAAAAAAAUBg/pvVBIlZithEdnVRg5EpU5V1xfF1MmBf2gCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B8.03.44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://4.bp.blogspot.com/-Y6z4DfMnUmA/WAFkWH_coxI/AAAAAAAAUBg/pvVBIlZithEdnVRg5EpU5V1xfF1MmBf2gCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B8.03.44.png" width="400" /></a></div>
<br />
中央の濃い赤は統計局shpの皇居、周囲の赤は国交省shpの千代田区です。<br />
周囲の境界をよーく見てみると...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-QXenH9HzKUM/WAFkt_a6w-I/AAAAAAAAUBk/ro_jCGII1R4xvX4UKMvmqhAeV2yh37A-ACLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B8.05.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://4.bp.blogspot.com/-QXenH9HzKUM/WAFkt_a6w-I/AAAAAAAAUBk/ro_jCGII1R4xvX4UKMvmqhAeV2yh37A-ACLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-10-15%2B8.05.00.png" width="400" /></a></div>
<br />
濃い赤の選択部分は統計局shpの八重洲1丁目、周囲の赤は国交省shpの千代田区です。<br />
八重洲1丁目が千代田区と中央区に跨がっています。<br />
こういうポイントが全国各地に山ほどあります。<br />
<br />
どちらのデータに問題があるのか、原典として使われている地図を調べてみないと分からないですが、おそらく国交省行政区域データの方が粗いのではないかと思われます。<br />
ベクタなので、点の数が増えれば複雑な形状にもフィットする境界を描けて、逆に点の数が少ないと簡素な境界しか描けません。<br />
もちろん、点を増やせばデータサイズも増えます。<br />
<br />
ということで、結論ですが...<br />
<br />
1. 大字レベルのShapefileが必要なら地図屋さんから買いましょう。<br />
2. 厳密な市区町村界が欲しいなら、購入した大字レベルのShapefileから市区町村レベルで地物の結合をして生成しましょう。<br />
<br />
以上です。<br />
<br />
普通、業務でこういったGISデータを利用されている方にとっては当然なのでしょうが、個人であれこれやるとぶつかりそうな問題だなぁと思ったので書いておきます。<br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com1tag:blogger.com,1999:blog-7229367252151281027.post-22653864841774723652016-09-20T04:13:00.004+09:002022-08-21T10:06:35.422+09:00ミニマルなIRKitクローンを作ってiOSから家電を制御するどうも、お久しぶりです。生きてます。<br />
<br />
さて、iOS 10が配信開始されて新たに登場した「ホーム」アプリのおかげで、日本ではあんまり注目されてなかったHomeKitが熱くなってるみたいです。(個人的感想)<br />
<br />
HomeKitではPhilips Hueを操作できたりするのですが、そもそも対応していない家電を対応させるためのDIY的手法も色々存在しています。<br />
例えば、HomebridgeとIRKitを組み合わせた方法。<br />
Raspberry Piに<a href="https://github.com/nfarina/homebridge">Homebridge</a>を入れて、<a href="https://github.com/senyoltw/homebridge-irkit">homebridge-irkit</a>でIRKitを叩くみたいなお手軽スマートハウスのやり方は検索すれば山ほど出てきます。<br />
そしてここで使われるIRKit、赤外線リモコンの信号を送受信できるオープンソースハードウェアなのですが、大人気なんですね。<br />
在庫切れ入荷予定無しで手に入らないんだけど(キレ)という声も周囲にチラホラあったり。<br />
<br />
というわけで、欲しいけど無いなら作りましょう。<br />
自分で作ると安いし、面白いですし...<br />
<br />
回路はこんな感じ。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-XxTGIKpIQ-M/V-AjYe-u3zI/AAAAAAAAT4w/UVZP2hcBuTYSQ0aRPs8E0YubOOb45e-nwCLcB/s1600/minirum_bb_schematic.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://4.bp.blogspot.com/-XxTGIKpIQ-M/V-AjYe-u3zI/AAAAAAAAT4w/UVZP2hcBuTYSQ0aRPs8E0YubOOb45e-nwCLcB/s400/minirum_bb_schematic.png" width="400" /></a></div>
<br />
必要な部品は以下の通り。<br />
<a href="https://aki.prioris.jp/list/2d179724-3e52-48c4-b554-464d6d67c345/">ESP-WROOM-02でミニマルなIRKitクローンを作る</a><br />
<br />
<iframe frameborder="0" height="400" sandbox="allow-popups allow-scripts allow-same-origin allow-forms" src="https://aki.prioris.jp/emb/2d179724-3e52-48c4-b554-464d6d67c345/" width="600"></iframe><br />
<br />
もしESP-WROOM-02とかブレッドボードとか抵抗とか...持ってるなら、赤外線LEDと赤外線リモコン受信モジュールだけ買っちゃってください。<br />
<br />
私はオリジナルのESP-WROOM-02搭載ボードとプロトタイプ・シールド基板を作っているので、これを使ってサクッと作りました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-snumNYmmvDI/V-AyklCzSuI/AAAAAAAAT5A/peQ5M7hCnpwfiQoc0RmgBx9m5J0hWDY2QCLcB/s1600/th_IMG_1841.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-snumNYmmvDI/V-AyklCzSuI/AAAAAAAAT5A/peQ5M7hCnpwfiQoc0RmgBx9m5J0hWDY2QCLcB/s320/th_IMG_1841.jpg" width="320" /></a></div>
<br />
中身のソフトウェアはIRremoteESP8266とaJSONを使って100行程度で実現しています。<br />
コードはこちら。<br />
<a href="https://github.com/9SQ/minIRum">9SQ/minIRum: A minimal implementation of infrared sender/receiver like IRKit by ESP8266</a><br />
<br />
Arduino core for ESP8266をArduinoに入れて、コードをビルドしてESP-WROOM-02に書き込んであげてください。<br />
<br />
あとは、IRKitみたいに GET /messages で最後に受信したリモコンのコードが取得できるので、これをメモしておいて...<br />
POST /messages にこれを投げてあげれば、リモコンと同じように発光してくれます。<br />
もし、エアコンなどの長めのコードを飛ばすリモコンの場合は、IRremoteESP8266/IRremoteESP8266.hの#define RAWBUF 100を200とかにしてあげれば取れるかも。<br />
<br />
あとはHomebridgeと組み合わせれば、このようなことが出来ます。<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
とりあえずシーリングライトをON/OFFできるようにしてみた。Homebridge+ESP8266 <a href="https://t.co/xnYNSa5BFn">pic.twitter.com/xnYNSa5BFn</a></div>
— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/776011374950359040">2016年9月14日</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script><br />
Raspberry PiにHomebridge諸々を入れるのは、検索すればいっぱい記事が出てくると思います。<br />
ただ、Raspbianはapt-getで取れるnodeが古かったりするので、楽をしたいならArch Linux(<a href="https://archlinuxarm.org/platforms/armv7/broadcom/raspberry-pi-2">RasPi2</a>/<a href="https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3">RasPi3</a>)をお勧めします...<br />
<pre class="brush: bash">pacman -S git python2 nodejs npm nss-mdns avahi
systemctl enable avahi-daemon
systemctl start avahi-daemon
npm install -g homebridge
npm install -g homebridge-irkit
mkdir .homebridge
cd .homebridge
nano config.json
</pre>
config.jsonは以下のような感じで。<br />
irkit_hostは適宜変更してください。<br />
<pre class="brush: js">{
"bridge":
{
"name": "Homebridge",
"username": "B8:27:EB:4D:31:D7",
"port": 51826,
"pin": "031-45-154"
},
"accessories": [
{
"accessory": "IRKit",
"name": "ライト",
"irkit_host": "minirum-a492cd.local",
"on_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,500,400,450,1300,500,400,500,400,450,450,450,1300,500,400,500,400,450,1300,450,450,450,1300,500,400,450,1300,500,450,500,400,500,1300,500,400,500,400,450,450,450,450,450,1300,500,400,500,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,450,450,500,1300,500,400,500,450,450,1300,500,400,500,400,450]},
"off_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,500,1300,500,400,500,400,500,1300,500,400,450,1300,500,400,500,1300,450,450,500,400,450,1300,500,400,500,400,450,450,450,450,500,1300,450,1300,450,1300,450,1300,450,450,500,1300,450,450,450,450,450,450,450,1300,500,1300,500,400,500,400,450,1300,500,400,500,400,500]}
}
]
}
</pre>
ちなみに、この赤外線コードはPanasonic製のシーリングライトのON/OFFです。<br />
<br />
homebridgeを立ち上げて、iPhoneとペアリングします。<br />
<pre class="brush: bash">homebridge
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded plugin: homebridge-irkit
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Registering accessory 'homebridge-irkit.IRKit'
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded config.json with 1 accessories and 0 platforms.
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loading 1 accessories...
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] [ライト] Initializing IRKit accessory...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
┌────────────┐
│ 031-45-154 │
└────────────┘
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Homebridge is running on port 51826.
</pre>
<br />
iOS 10のデバイスで「ホーム」アプリを起動して「アクセサリを追加」、Homebridgeが表示されるのでコードを入力してペアリングを完了させます。<br />
Homebridgeを追加したら、configに書いたアクセサリ(上記例では「ライト」)が表示されると思うので、これを追加すれば制御できるようになります。<br />
<br />
Raspberry PiでのHomebridgeの自動起動は以下を読むと早いです。<br />
Arch Linuxなら、Running Homebridge on Bootup (systemd)のセクションです。<br />
<a href="https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi">https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi</a><br />
<br />
homebridge-irkitではON/OFFの単純操作しかできないので、そのうち色々なコードを叩けるhomebridgeのプラグインでも書こうかな...<br />
ちなみに、Raspberry Piに<a href="https://github.com/senyoltw/homebridge-cmd">homebridge-cmd</a>を入れて、GPIOに<a href="http://akizukidenshi.com/catalog/g/gK-00203/">SSR</a>を繋いであげれば、リモコンの無いAC100Vの機器もON/OFFできます。<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com8tag:blogger.com,1999:blog-7229367252151281027.post-31186761671275744462016-06-04T19:53:00.003+09:002016-06-06T04:46:38.941+09:00秋月で買える電子部品でリスト作成して色々できるサービスを作った<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-qGDy7mraSXM/V1KrIrofasI/AAAAAAAATrA/7_hUfxpfFvkrMbCowLmrnbebpzC9or_JwCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.00.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="https://2.bp.blogspot.com/-qGDy7mraSXM/V1KrIrofasI/AAAAAAAATrA/7_hUfxpfFvkrMbCowLmrnbebpzC9or_JwCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.00.07.png" width="400" /></a></div>
<br />
大きな地震があったりでバタバタしてたら4月5月と過ぎて6月になっていました...<br />
というわけで2か月ぶりのブログ更新。<br />
<br />
タイトル通り、秋月電子通商で扱っている電子パーツでパーツリストを作成、公開、共有、そして秋月の買い物かごに一括して放り込めるWebサービスを作りました。<br />
<br />
<span style="font-size: large;">その名も AkiCart</span><br />
<span style="font-size: large;"><a href="http://aki.prioris.jp/">http://aki.prioris.jp/</a></span><br />
(ちょっとダサいネーミングだったかも)<br />
<br />
<b>そう、秋月通販をよく使っている人は知っている... 秋月の買い物かごはセッション切れで放置してるとすぐに消えることを...</b><br />
<br />
そこで、このサービスでは秋月で扱っている商品をリストに登録して保存し、リストのページにある「まとめてカートに入れる」ボタンを押すことで、いつでも秋月の買い物かごに商品をまとめて登録できるようにしました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ot7Z2VnF8Ss/V1KuCoyUgUI/AAAAAAAATrs/HgvQMmbQhjc3g739SHngS9c9gxQJ-dOowCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.02.10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://1.bp.blogspot.com/-ot7Z2VnF8Ss/V1KuCoyUgUI/AAAAAAAATrs/HgvQMmbQhjc3g739SHngS9c9gxQJ-dOowCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.02.10.png" width="400" /></a></div>
<br />
Twitterでログインすると、ダッシュボードが登場、ここから新しいパーツリストを作成できます。<br />
作成するパーツリストは、アクセスレベルが公開(Public)、限定公開(Unlisted)、非公開(Private)の3種類から選択可能。<br />
公開を選ぶとAkiCartのトップページにリストされる(こともある)ようになり、限定公開を選ぶとリンクを知っている人だけが閲覧可能なリストになり、非公開は文字通り自分しか見れないリストができます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-MoD1wFPNun8/V1Kt9Rn-ZAI/AAAAAAAATrk/cg3iEpEsRjk0Kmj09ffUD_6QTIsQGsN1gCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.01.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://4.bp.blogspot.com/-MoD1wFPNun8/V1Kt9Rn-ZAI/AAAAAAAATrk/cg3iEpEsRjk0Kmj09ffUD_6QTIsQGsN1gCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.01.46.png" width="400" /></a></div>
<br />
商品の追加はリストの画面からもできるのですが...<br />
AkiCartの一番の特徴は、超超超便利なブックマークレット。<br />
秋月の商品画面でブックマークレットをクリックすると、一発で作成したリストに追加できます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Se8D-2rHsQA/V1K0Nx7IFQI/AAAAAAAATsw/uLmxnAj6NsESfgBMo4TcnSRDkz1iLNmEgCLcB/s1600/bookmarklet_akicart.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://4.bp.blogspot.com/-Se8D-2rHsQA/V1K0Nx7IFQI/AAAAAAAATsw/uLmxnAj6NsESfgBMo4TcnSRDkz1iLNmEgCLcB/s400/bookmarklet_akicart.gif" width="400" /></a></div>
<br />
ブックマークレットをブラウザに追加しておくと、秋月のページでクリック→個数の変更がない場合はそのままEnterを押すだけでドンドン追加できます。<br />
AkiCartのブックマークを押して登録完了するまで最短2秒くらい。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-PJXYbDNspRo/V1Kvy5a347I/AAAAAAAATsE/Bas4nhc90fs8TX61AQaknRkJ4VJ1ZqkVACLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.01.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://4.bp.blogspot.com/-PJXYbDNspRo/V1Kvy5a347I/AAAAAAAATsE/Bas4nhc90fs8TX61AQaknRkJ4VJ1ZqkVACLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-04%2B19.01.56.png" width="400" /></a></div>
<br />
作ったリストは一括して買い物かごに入れるだけでなく、CSV形式でダウンロードしたり、印刷専用のレイアウトで印刷することもできます。<br />
高専とか大学とかで、事務の人に「これ買ってください」って渡すのも楽チンですね。<br />
<br />
〜ここからはちょっとだけ技術的な話〜<br />
<br class="Apple-interchange-newline" />
今までは、買いたい商品のページをブラウザでブックマークしておいて、買うときに一挙に開いてカートに追加するという作業で購入していました。<br />
流石にこれどうにかならんのか?というのと、何やら秋月の一括通販コード入力画面はリファラをチェックしてないから別サイトからPOSTできるという話を聞きまして...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-FPiCdBWEio8/V1KwgNyAaAI/AAAAAAAATsQ/OJkhCo06BiUPdkllhwZj_7bNEiv42MzywCLcB/s1600/check_akizuki.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://2.bp.blogspot.com/-FPiCdBWEio8/V1KwgNyAaAI/AAAAAAAATsQ/OJkhCo06BiUPdkllhwZj_7bNEiv42MzywCLcB/s400/check_akizuki.png" width="400" /></a></div>
<br />
一括通販コード入力画面からの遷移を見てみると、いつものカート画面(cart.aspx)に対して quick: True を指定して、あとはclass1_xに通販コードのハイフンの左側の英字1文字、goodsにハイフン右側の数字5文字、そしてqtyに数量を入れて、これを繰り返したものをPOSTしてあげればカートに入ることが分かりました。<br />
そしてやはりリファラをチェックしてないので、このページ以外からPOSTしても普通にカートに入ることも確認。<br />
これらを元にして、AkiCartができた...という訳です。<br />
ちなみに、AkiCartの任意のリストページのソースを見ると、まとめてカートに入れるボタンの近くにtype="hidden"でいっぱいinputが転がってますw<br />
<br />
バックエンドは<a href="http://evi.prioris.jp/">EVI(地震火山詳報)</a>でも使っているDjango(Python)です。<br />
ここ数ヶ月触ってなかったので結構忘れてて、調べながらコード書いてたので時間が掛かりました...<br />
6/3のAM2時頃に作り始めて、途中寝たり飯食ったりした時間を抜くと15時間くらいかな...?<br />
バグとかセキュリティ的なアレを発見したら、Twitterでリプライ頂けると非常にありがたいです。<br />
<br />
早速要望として、リスト間で商品を移動できるようにしたいとか、リストをブログなどに埋め込めるようにしたい、という意見が出ているので、ぼちぼちアップデートしていきたいと思います。<br />
<br />
これとは別件で、そこそこ実用的かつ面白いものづくりのプロジェクトも進んでいるので、また報告できるタイミングになったらブログなどなどに書きたいと思います。<br />
<br />
<b><span style="color: red;">追記</span></b> : ブログパーツ(埋め込み用コード)できました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-gOEBvPXEus8/V1SBLJhT7UI/AAAAAAAATtM/FktnM2sVRUszhtc7YAe5eL-XnjKWqhXewCLcB/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-06%2B4.43.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="307" src="https://3.bp.blogspot.com/-gOEBvPXEus8/V1SBLJhT7UI/AAAAAAAATtM/FktnM2sVRUszhtc7YAe5eL-XnjKWqhXewCLcB/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-06-06%2B4.43.48.png" width="400" /></a></div>
<br />
公開もしくは限定公開のリストであれば、リストページの右サイドバー下に「埋め込みコード」の欄があるので、これをコピーして貼り付ければOK!<br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com1tag:blogger.com,1999:blog-7229367252151281027.post-43778655191791126292016-03-18T09:05:00.000+09:002016-05-10T09:04:10.015+09:00DMM 3Dプリントを試してみた<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-CEAXl94X3oE/Vus5sWmB-JI/AAAAAAAATic/rgHiDZDJ9LAtqfR4-DDbxEZkXeXzPHskg/s1600/IMG_0774.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-CEAXl94X3oE/Vus5sWmB-JI/AAAAAAAATic/rgHiDZDJ9LAtqfR4-DDbxEZkXeXzPHskg/s320/IMG_0774.JPG" width="320" /></a></div>
<br />
3Dプリンタ、便利ですよね。<br />
サクッと3Dモデルを現実に出来るのは素敵... なんだけど、数万円程度の3Dプリンタでは精度が出ない... ということで前々から試してみたかったDMM 3Dプリントを使ってみました。<br />
<br />
今回注文したのは以下のようなモデル。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-YLruiVAcUZE/Vus9qssboOI/AAAAAAAATio/4-Hi0kBlLpEGVJHIgqskSjV9C7A_bkqgA/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.26.34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-YLruiVAcUZE/Vus9qssboOI/AAAAAAAATio/4-Hi0kBlLpEGVJHIgqskSjV9C7A_bkqgA/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.26.34.png" width="240" /></a> <a href="https://2.bp.blogspot.com/-oVALunLh1Sw/Vus9wklagjI/AAAAAAAATis/xyGW7TxQJ7QV-nQxw0V2IlbjinKj2zc_g/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.26.08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-oVALunLh1Sw/Vus9wklagjI/AAAAAAAATis/xyGW7TxQJ7QV-nQxw0V2IlbjinKj2zc_g/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.26.08.png" width="240" /></a></div>
<br />
うちの3Dプリンタでは出せなかったポイントは...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Rddwle-qHVw/Vus-LRrB6HI/AAAAAAAATiw/hbMcG7tfJt0eA1kYQg2t7a6xXCrcNvZXg/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.27.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://4.bp.blogspot.com/-Rddwle-qHVw/Vus-LRrB6HI/AAAAAAAATiw/hbMcG7tfJt0eA1kYQg2t7a6xXCrcNvZXg/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.27.04.png" width="320" /></a></div>
<br />
直径1.5mmのピンが2.54mm間隔で並んでいるところ。<br />
0.02mm余裕を持って直径1.52mmで開けてます。<br />
<br />
ちなみに、発注時は同じものを8個並べて注文。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-EX-Jghw6s_E/VutADvzDMmI/AAAAAAAATjY/jsF5S7zHEAcWqGHNeDV5LSpHvIQrkSpQg/s1600/main_l.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-EX-Jghw6s_E/VutADvzDMmI/AAAAAAAATjY/jsF5S7zHEAcWqGHNeDV5LSpHvIQrkSpQg/s320/main_l.jpg" width="320" /></a></div>
お値段は...<br />
<br />
ナイロン 4,251円<br />
ナイロン カラー 4,338円<br />
アクリル(Ultra Mode) 12,381円<br />
アクリル(Ultra Mode) カラー 12,489円<br />
アクリル(Xtreme Mode) 19,340円<br />
<br />
ちなみに、8個のデータを投げる前に6個のデータを投げたのですが<br />
<br />
ナイロン 3,555円<br />
ナイロン カラー 3,641円<br />
アクリル(Ultra Mode) 9,771円<br />
アクリル(Ultra Mode) カラー 9,879円<br />
アクリル(Xtreme Mode) 14,991円<br />
<br />
みたいな価格でした。<br />
<br />
ナイロンだと、8個の場合 531.375円/個、6個の場合 592.5円/個<br />
アクリル(Ultra Mode)だと、8個の場合 1547.625円/個、6個の場合 1628.5/個<br />
<br />
というわけで、今回はナイロンを選択。<br />
<br class="Apple-interchange-newline" />
stlで書き出したものをDMM 3Dプリントに注文したのが3/8の16時くらい、造形開始が3/9、発送が3/15、到着が3/17でした。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-YTYvx-16Evs/Vus_74G7FRI/AAAAAAAATjQ/NqWPgNtX7ywmHF5kdZ2IVCknSEXuWb0Gg/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.37.41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="118" src="https://3.bp.blogspot.com/-YTYvx-16Evs/Vus_74G7FRI/AAAAAAAATjQ/NqWPgNtX7ywmHF5kdZ2IVCknSEXuWb0Gg/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-18%2B8.37.41.png" width="400" /></a></div>
<br />
運送会社は佐川急便、梱包は以下のような感じ。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-LWmijzEOoHc/VutCVJSuuLI/AAAAAAAATjo/vIS7DTZ0eKksp1G3ldDHJhaNDjX9JUXjw/s1600/IMG_0772.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-LWmijzEOoHc/VutCVJSuuLI/AAAAAAAATjo/vIS7DTZ0eKksp1G3ldDHJhaNDjX9JUXjw/s320/IMG_0772.JPG" width="240" /></a> <a href="https://3.bp.blogspot.com/-oKiwG_xDeDU/VutCXyrGfxI/AAAAAAAATjs/RCkSgcyVIl0w_Acz2L_1rQIcfNbbcCEuA/s1600/IMG_0773.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-oKiwG_xDeDU/VutCXyrGfxI/AAAAAAAATjs/RCkSgcyVIl0w_Acz2L_1rQIcfNbbcCEuA/s320/IMG_0773.JPG" width="240" /></a></div>
<br />
全体の写真は記事の一番上に貼りましたが、アップで見ると以下。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-y2gg-Vk0-cs/VutCsHabTGI/AAAAAAAATjw/Xngg9GjwzrA1hXEnVbK8MW3sYCMoxKMPg/s1600/IMG_0775.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-y2gg-Vk0-cs/VutCsHabTGI/AAAAAAAATjw/Xngg9GjwzrA1hXEnVbK8MW3sYCMoxKMPg/s320/IMG_0775.JPG" width="320" /></a></div>
<br />
うちの3Dプリンタ(ダヴィンチ1.0 Jr)で出力したものと比較 (寸法が違うけど穴のサイズは同じ)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-cBitoGbq_jw/VutC8dkwwwI/AAAAAAAATj4/X0e-DzfYk2QnbAJD9JzKyWf3fdJYq-3rg/s1600/IMG_0783.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-cBitoGbq_jw/VutC8dkwwwI/AAAAAAAATj4/X0e-DzfYk2QnbAJD9JzKyWf3fdJYq-3rg/s320/IMG_0783.JPG" width="320" /></a></div>
<br />
ダヴィンチJrだと1.52mmの穴が潰れたり大きさが揃ってなかったりするのが、DMM 3Dプリントで作ったものは綺麗に空いています。<br />
<br />
で、これで何をするのかというと... この2つを組み合わせます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-NPSDaab4f8o/VutDl5-WDsI/AAAAAAAATkE/JTJwBDqezn8SUKOuEFQzHxt9-bWwizlLw/s1600/IMG_0777.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-NPSDaab4f8o/VutDl5-WDsI/AAAAAAAATkE/JTJwBDqezn8SUKOuEFQzHxt9-bWwizlLw/s320/IMG_0777.JPG" width="240" /></a> <a href="https://3.bp.blogspot.com/-6_sbQVG5mmg/VutDs4OFNEI/AAAAAAAATkI/GtMvrTGwgS41MWT_TQ6kZhDXp8ziNnBow/s1600/IMG_0776.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-6_sbQVG5mmg/VutDs4OFNEI/AAAAAAAATkI/GtMvrTGwgS41MWT_TQ6kZhDXp8ziNnBow/s320/IMG_0776.JPG" width="240" /></a></div>
<br />
ポゴピン(オス/メス)とネオジム磁石。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-s7dnrvD_icM/VutEIWk23OI/AAAAAAAATkQ/PQmC7yvTHjs6Z33XrgRGtqj2cZUN0mBZA/s1600/IMG_0778.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-s7dnrvD_icM/VutEIWk23OI/AAAAAAAATkQ/PQmC7yvTHjs6Z33XrgRGtqj2cZUN0mBZA/s320/IMG_0778.JPG" width="320" /></a></div>
<br />
ポゴピンは、先端がバネになっているもの&先端が受け皿になっているもので1組。<br />
<br />
ネオジム磁石も取り付けると...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-5p0vPt-P1zA/VutEszX87hI/AAAAAAAATkY/PssdTadRzTA1eRXhfQHpHG9z93U9Vf70g/s1600/IMG_0779.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-5p0vPt-P1zA/VutEszX87hI/AAAAAAAATkY/PssdTadRzTA1eRXhfQHpHG9z93U9Vf70g/s320/IMG_0779.JPG" width="320" /></a></div>
<br />
こうなります。<br />
<br />
<blockquote class="twitter-tweet tw-align-center" data-lang="ja"><p lang="ja" dir="ltr">ピタッと合体 <a href="https://t.co/MNRSSsNJs9">pic.twitter.com/MNRSSsNJs9</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/710316747878846464">2016年3月17日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<br />
そして、最終的にはこんな感じで、littleBits的な何かになる訳です。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-CHyEn9W7fYI/VutFLsO5TeI/AAAAAAAATkg/0eRjXqP3FEc_NeZavsW9p_5ijKEiz9TEw/s1600/IMG_0789.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-CHyEn9W7fYI/VutFLsO5TeI/AAAAAAAATkg/0eRjXqP3FEc_NeZavsW9p_5ijKEiz9TEw/s320/IMG_0789.JPG" width="320" /></a></div>
<br />
<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">右端のコア以外はダミー(ハンダ付けしてない)だけど、こんな感じのものを作ってる。ESPbits(仮称) <a href="https://t.co/T7WPPMUblc">pic.twitter.com/T7WPPMUblc</a></p>— けーいち (@9SQ) <a href="https://twitter.com/9SQ/status/710471865660125184">2016年3月17日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<br />
写真右端のブロック以外はダミーなのでハンダ付けしてません。 (もう少し暇になったら作り込みたい...)<br />
これについては、また改めて記事を書こうと思います。<br />
<br />
P.S. スマートミラーのソフトもぼちぼち進めてます... (ソフト編の記事はまだかと言われたので...)Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-67903116163842539232016-03-01T20:57:00.000+09:002016-03-01T21:25:03.377+09:00オーブントースターでおうちリフローする<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-drpoS74MSdQ/VtVP7k2sz0I/AAAAAAAATeU/SSIipvhCYlA/s1600/IMG_0616.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-drpoS74MSdQ/VtVP7k2sz0I/AAAAAAAATeU/SSIipvhCYlA/s320/IMG_0616.JPG" width="320" /></a></div>
<br />
格安でプリント基板を製造してくれる中国・深セン発のサービス、超便利ですよね。<br />
最近はElecrowを良く使うのですが、レジスト色が緑以外も無料で選べて、シルク印刷はめっちゃ綺麗で、しかも割と早く作ってくれるので最高です。<br />
<br />
ところで、プリント基板といえばやはりSMD(表面実装部品)を使いたくなる、というかSMDを使いたいがためにプリント基板を作るという感じですが、ここで問題となるのが「どうやって付けるか」な訳です。<br />
1, 2枚程度なら1個ずつ手ハンダで付けていっても「時間かかるなぁ」くらいのもんですが、大体のプリント基板製造サービスは10枚単位とかなので全部手ハンダで付けようとなると結構大変。<br />
という訳で、市販のオーブントースターで一気にSMDをハンダ付けしちゃおうという話です。<br />
<br />
既に色々なブログでやり方は取り上げられていると思うので、ここでは実際にやった準備や工夫、できあがった物、ネットに転がってない情報などをまとめておきます。<br />
<br />
やったことの大雑把な手順は<br />
1. スイッチサイエンスのリフローキットを組み立てる<br />
2. オーブントースターにリフローキットを取り付ける<br />
3. スイッチサイエンス謹製のULPでEagleからDXFを生成<br />
4. Silhouette Studio 3でDXFを読み込む<br />
5. silhouette CAMEO 2でポリプロピレン合成紙をカット<br />
6. 基板にステンシルを乗せるための固定具を作る<br />
7. 基板にペーストはんだを塗布<br />
8. 部品を載せる(チップマウント)<br />
9. 焼く(リフロー)<br />
10. 完成<br />
という感じなので、今回はこの手順をそのまま章とします。<br />
<h3>
<br />1. スイッチサイエンスのリフローキットを組み立てる</h3>
<br />
オーブントースターでリフローするにも、パンを焼くように適当な時間入れておく訳にはいかないので庫内の温度を適度に調節するコントローラーが必要。<br />
この辺も自作するのは然程難しくないのですが、既に誰かが作ってて売ってるなら買った方が早いということで今回はスイッチサイエンスさんが売っているものを買って組み立てます。<br />
<br />
<a href="https://www.switch-science.com/catalog/1690/">リフロートースターコントローラーキット - スイッチサイエンス</a><br />
<br />
これにはSSRが付いてないので、別途秋月でSSRを2個(上,下ヒーター用)買います。<br />
<br />
<a href="http://akizukidenshi.com/catalog/g/gI-08620/">大容量ソリッドステートリレー(SSR)24V~380VAC 40A (SSR-40DA) - 秋月電子通商</a><br />
<br />
組立手順はスイッチサイエンスさんのTracに載っているので、このまんまです。<br />
<br />
<a href="http://trac.switch-science.com/wiki/Solder_Toaster_Controller">「Dual_SSR_Solder_Toaster_Controller_Platform」の作り方</a><br />
<br />
ここで完成したコントローラーにSSRをつけて問題となるのが、<b><span style="color: red;">SSR-40DAが3.3Vでは動作不安定</span></b>ということ。<br />
安定化させるために、2SC1815を使って3.3Vから5Vにレベル変換するものを作りました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-SWQbepnfc4M/VtVXmATr9OI/AAAAAAAATek/r_ohSNzPzfo/s1600/IMG_0618.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-SWQbepnfc4M/VtVXmATr9OI/AAAAAAAATek/r_ohSNzPzfo/s320/IMG_0618.JPG" width="320" /></a></div>
<br />
箱は秋月で売ってるLCD用穴開きプラケースが丁度いい感じだったので、コネクタや電源の穴、ボタン用の穴などをフライスで開けて収めてみました。<br />
<a href="http://akizukidenshi.com/catalog/g/gP-09834/"><br /></a>
<a href="http://akizukidenshi.com/catalog/g/gP-09834/">プラスチックケース SW-125S(LCD) - 秋月電子通商</a><br />
<br />
2個のSSRに繋がっている小さい箱がレベル変換機。(ケースはタカチのSW-50S)<br />
<br />
<h3>
2. オーブントースターにリフローキットを取り付ける</h3>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-NV7ImmP4XuM/VtVrMFBs-1I/AAAAAAAATe8/Ch0mi1zROZU/s1600/IMG_0650.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-NV7ImmP4XuM/VtVrMFBs-1I/AAAAAAAATe8/Ch0mi1zROZU/s320/IMG_0650.JPG" width="320" /></a></div>
<br />
これもスイッチサイエンスさんのブログに載っている通りに取り付けました。<br />
<br />
<a href="http://mag.switch-science.com/2013/10/15/toaster-controller/">オーブントースターをリフローオーブン化してみた | スイッチサイエンス マガジン</a><br />
<br />
使用したオーブントースターは、パナソニック製のNT-T500というもの。<br />
スイッチサイエンスさんで使っているNT-W50の後継機種なので、改造位置は全く同じ。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/B00O5WWZU2/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00O5WWZU2&linkCode=as2&tag=earthkei-22">パナソニック オーブントースター ダークメタリック NT-T500-K - Amazon.co.jp</a><br />
<br />
配線は古いオーブントースター(以前破棄したもの)から取り出した耐熱ケーブルを使用。<br />
田舎のその辺に売ってるようなものではないので、普通に買うならちょっと面倒そう。<br />
<br />
<h3>
3. スイッチサイエンス謹製のULPでEagleからDXFを生成</h3>
<br />
これもスイッチサイエンスさんのTracにある情報&スクリプト(ULP)を使います。<br />
<a href="http://trac.switch-science.com/wiki/EagleCraftRobo"><br /></a>
<a href="http://trac.switch-science.com/wiki/EagleCraftRobo">EAGLEで作った基板のハンダマスクをCraft ROBOで作る</a><br />
<br />
スクリプトをulpフォルダに投げ込んでEagle上で実行すれば、プロジェクトのあるフォルダにdxfファイルが吐き出されます。<br />
<br />
今回はESP-WROOM-02の載った基板を作るので、以下のEagle部品ライブラリを使わせてもらったのですが...<br />
<br />
<a href="https://github.com/ikesato/eagle-libraries/blob/master/lbr/esp-wroom-02.lbr">ESP-WROOM-02のEagle用ライブラリ</a><br />
<br />
これのパッドの属性がCreamになってないので、普通にDXFを吐き出したらカットしたい部分が出力されない...というわけでライブラリを書き換えて使いました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-kns8tl2y5_w/VtV-7KyX2gI/AAAAAAAATgk/Xj56aEIhpDM/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-01%2B20.36.20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://4.bp.blogspot.com/-kns8tl2y5_w/VtV-7KyX2gI/AAAAAAAATgk/Xj56aEIhpDM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-01%2B20.36.20.png" width="320" /></a></div>
<br />
部品のPackage上で右クリックしてOpen in Library<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-G_jPE_bWgBo/VtV--d_2mfI/AAAAAAAATgo/HlOwb7rRqbE/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-01%2B20.36.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="251" src="https://4.bp.blogspot.com/-G_jPE_bWgBo/VtV--d_2mfI/AAAAAAAATgo/HlOwb7rRqbE/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-03-01%2B20.36.55.png" width="320" /></a></div>
<br />
ペーストはんだで付けたい足を選択して、CreamのチェックボックスをONにすればOK.<br />
あとはプロジェトを開いてLibraryからUpdateをすれば既存のプロジェクトでも反映されます。<br />
<br />
<h3>
4. Silhouette Studio 3でDXFを読み込む</h3>
<br />
今回は、シルエットカメオ2というカッティングマシーンでステンシルを作ります。<br />
<a href="http://www.amazon.co.jp/gp/product/B00SQMMH8C/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00SQMMH8C&linkCode=as2&tag=earthkei-22"><br /></a>
<a href="http://www.amazon.co.jp/gp/product/B00SQMMH8C/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00SQMMH8C&linkCode=as2&tag=earthkei-22">グラフテック 小型カッティングマシン silhouette CAMEO 2 - Amazon.co.jp</a><br />
<br />
これにSilhouette Studio 3というソフトが付属しているので、これでDXFを読み込んでカットする訳ですが、ちょっと調整が必要。<br />
<br />
まず、環境設定を開き、DXFの読み込み設定で「中央」を選択。<br />
これで実寸サイズでDXFを読み込んでくれるので、テスト出力してサイズ調整などは全く必要なくなります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-m01Nqt4oqwc/VtVsXeZgZQI/AAAAAAAATfE/2Csu2JUB7sI/s1600/ss3_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-m01Nqt4oqwc/VtVsXeZgZQI/AAAAAAAATfE/2Csu2JUB7sI/s320/ss3_1.jpg" width="168" /></a></div>
<br />
次に、ポリプロピレン合成紙用のプロファイルを作って設定します。<br />
右上のバーからカット設定(右から2番目)を選び、以下の赤枠のようにしました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-2768p82V7sY/VtVteCVD9zI/AAAAAAAATfM/4E9TlPWTZVk/s1600/ss3_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://2.bp.blogspot.com/-2768p82V7sY/VtVteCVD9zI/AAAAAAAATfM/4E9TlPWTZVk/s400/ss3_2.jpg" width="143" /></a></div>
<br />
これでスイッチサイエンスさんで扱っているポリプロピレン合成紙をうまくカット可能。<br />
<br />
<a href="https://www.switch-science.com/catalog/822/">ポリプロピレン合成紙A4版150μm厚5枚セット(クリームハンダステンシル用) - スイッチサイエンス</a><br />
<br />
<h3>
5. silhouette CAMEO 2でポリプロピレン合成紙をカット</h3>
<br />
ポリプロピレン合成紙をカッティング台紙の粘着面に貼ってカットするのですが、この台紙の粘着面は新品だと粘着力が強すぎて、剥がせない...ので何度か布などを貼り付けて<b>十二分に</b>粘着力を落としてから貼り付けます。<br />
ポリプロピレン合成紙は意外とピッタリ貼りつくので、剥がす時に曲げてしまうと特性上カールしたりストライプ状の跡が残ってしまう...<br />
そこで、手で触った感じで「これくらいの粘着力なら剥がれるだろう」と思ったところから更に粘着力を落とし、試しに角の方を貼って簡単に剥げることを確認してから貼るとOK.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-YxEc-RS-iJo/VtVYv90lFeI/AAAAAAAATes/pP7t44einLU/s1600/IMG_0626.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-YxEc-RS-iJo/VtVYv90lFeI/AAAAAAAATes/pP7t44einLU/s320/IMG_0626.JPG" width="320" /></a></div>
<br />
貼って、台紙をセットしたら、Silhouette Studio 3からカット開始。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-pe-WxaNNPIE/VtVwWHkd-lI/AAAAAAAATfY/1InNpZ99yIs/s1600/IMG_0627.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-pe-WxaNNPIE/VtVwWHkd-lI/AAAAAAAATfY/1InNpZ99yIs/s320/IMG_0627.JPG" width="320" /></a></div>
<br />
カットできたら、いらない部分にセロハンテープなどを貼って除去する。<br />
<br />
<h3>
6. 基板にステンシルを乗せるための固定具を作る</h3>
<br />
ステンシルを基板の上に置いてペーストはんだを塗るわけですが、ただ置いただけだとポリプロピレン合成紙がたわんだりして基板との隙間にペーストはんだが入り込んでしまう。<br />
そこで、木の板とビニールマットで固定具を作り、それにステンシルの位置を合わせて一辺をテープで固定しました。<br />
この辺りはもっと簡単にできる方法はあるはず... (基板の厚みと同じ板を基板の形にくり抜くだけでも随分違うはず)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-N8f5codchBU/VtVylWKTkhI/AAAAAAAATfs/O1J4lLhKhlI/s1600/IMG_0655.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-N8f5codchBU/VtVylWKTkhI/AAAAAAAATfs/O1J4lLhKhlI/s320/IMG_0655.JPG" width="320" /></a></div>
<br />
<h3>
7. 基板にペーストはんだを塗布</h3>
<br />
使ったペーストはんだはaitendoで扱っているもの。(今は在庫切れ)<br />
<br />
<a href="http://www.aitendo.com/product/7100">ソルダペーストはんだ[XG-50] - aitendo</a><br />
<br />
これ、かなり粘り気があるので塗るのが難しい。<br />
ホームセンターで買ったプラスチックのヘラで均一に伸ばそうとしても、塗れてないところが出てくる→もう一度塗る→厚くなる→狭ピッチ部分がブリッジする...となる訳です。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-d2r9ePg19Mc/VtVylbmMG2I/AAAAAAAATfw/LYDEShToF_4/s1600/IMG_0654.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-d2r9ePg19Mc/VtVylbmMG2I/AAAAAAAATfw/LYDEShToF_4/s320/IMG_0654.JPG" width="320" /></a></div>
<br />
この辺は何度かやりながらコツを掴むしかなさそう。<br />
<br />
<h3>
8. 部品を載せる(チップマウント)</h3>
<br />
ここがおそらく最難関。<br />
部品を順番に載せていると徐々にハンダの粘りがなくなってくる(乾燥する?)ので、ピッチの細かい部品、今回だとヒロセのMicro USBコネクタ、SSOPのFT231XSから先に配置。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-OMPvO8vMaMY/VtV0oRnZsqI/AAAAAAAATf8/JHBK6xBhijE/s1600/IMG_0633.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="226" src="https://1.bp.blogspot.com/-OMPvO8vMaMY/VtV0oRnZsqI/AAAAAAAATf8/JHBK6xBhijE/s320/IMG_0633.jpg" width="320" /></a></div>
<br />
ちょっとパッドの部分からハンダが出ていても、温めると部品の足に付くので大丈夫。<br />
ただ、あまりに多いと狭ピッチ部分でブリッジする原因なので、この辺りは何度かやってみて量のコツを掴む必要あり。<br />
<br />
<h3>
9. 焼く(リフロー)</h3>
<br />
焼くときは匂いがすごいので、家の外でやりました。<br />
家の中でやるなら換気の仕組みをキッチリ作るべきでしょう。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-JrBBHnyffmc/VtV4JFGNKXI/AAAAAAAATgE/GHHsOJDHjOY/s1600/IMG_0636.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-JrBBHnyffmc/VtV4JFGNKXI/AAAAAAAATgE/GHHsOJDHjOY/s320/IMG_0636.JPG" width="320" /></a></div>
<br />
上の写真では4枚を一気に焼いてますが、これ以前に何枚か焼いて調節などをしています。<br />
あんまり熱すぎると基板の材料まで焼けちゃうこともあるので、この辺も試しながらベストな焼き加減になる温度、時間を探る必要あり。<br />
<br />
<h3>
10. 完成</h3>
<br />
焼きあがったら、部品がズレたり、ブリッジしてるところがないかチェック。<br />
今回は4枚のうち2枚でSSOPの足がブリッジ、Micro USBの足がブリッジしてたので、無洗浄フラックスを塗ってコテを当てて修正しました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-G3POQiiNQeM/VtV4zhmbFSI/AAAAAAAATgM/eFpfSHFxiw0/s1600/IMG_0637.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-G3POQiiNQeM/VtV4zhmbFSI/AAAAAAAATgM/eFpfSHFxiw0/s320/IMG_0637.jpg" width="320" /></a></div>
<br />
焼きあがった基板のうち1枚をアップしたものが以下の写真。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-FetFBWh9KdY/VtV4_ulJTrI/AAAAAAAATgQ/Y2IL_TuQkFE/s1600/IMG_0653.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-FetFBWh9KdY/VtV4_ulJTrI/AAAAAAAATgQ/Y2IL_TuQkFE/s320/IMG_0653.jpg" width="320" /></a></div>
<br />
キレイに付きました。<br />
<br />
プッシュスイッチの頭と白シルク印刷が若干きつね色になってしまったので、次回はアルミ箔などでヒーターの光が直接当たらないようにしてみようかと考え中。<br />
<br />
<h3>
感想</h3>
<br />
リフローできるようになったおかげで、1枚作るのに手ハンダで45分くらい掛かってたのが、15〜30分くらいで部品を載せる&5分焼くような感じになりました。<br />
<br />
確かに時間短縮されたんだけど、ハッキリ言って...<br />
<br />
<span style="font-size: x-large;">チップマウンタが欲しい!!!</span><br />
<br />
以上です。<br />
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-42688011164166014672016-02-12T23:08:00.001+09:002018-03-20T19:31:26.142+09:00スマートミラーを作ってみた(ハードウェア編)<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-0Yp3Lp32i2Y/Vr3gGvelfHI/AAAAAAAATcY/45m9tv79O9w/s1600/IMG_0555.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-0Yp3Lp32i2Y/Vr3gGvelfHI/AAAAAAAATcY/45m9tv79O9w/s320/IMG_0555.JPG" width="320" /></a></div>
<br />
どうも、<a href="http://eleclog.quitsq.com/2016/01/restful-toilet.html">トイレハック</a>の人です。<br />
なんか最近そういう風に言われることが多いのですが、non技術者からは「トイレで苦しんでるの?」って言われるので困ってます。<br />
<br />
そういえば、2/19(金)の<a href="http://event.shoeisha.jp/devsumi/20160218/">デブサミ2016</a>で<a href="http://eleclog.quitsq.com/2016/01/restful-toilet.html">RESTfulトイレ</a>についてLTすることになりましたので、興味のある方は是非お越しください。(スマートミラーも持って行こうか考え中。)<br />
<br />
さて、本題ですが... つい最近、こんな記事を見てしまいまして...<br />
<br />
<blockquote class="tr_bq">
Google社員が自作した「スマート鏡」はスマホの通知センターのように時刻・天気・ニュースを表示 - GIGAZINE<br />
<a href="http://gigazine.net/news/20160203-smart-bathroom-mirror/">http://gigazine.net/news/20160203-smart-bathroom-mirror/</a></blockquote>
<br />
しばし意識を失ったのち気がついたら、手元に市販の額縁と秋月電子通商で売ってるSHARP製IGZO液晶が届いていました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-uDHnWRkwk3g/Vr3hGsvAG7I/AAAAAAAATcg/d0EN8Gxd-80/s1600/IMG_0508.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-uDHnWRkwk3g/Vr3hGsvAG7I/AAAAAAAATcg/d0EN8Gxd-80/s320/IMG_0508.JPG" width="320" /></a></div>
<br />
<br />
<ul>
<li><a href="http://akizukidenshi.com/catalog/g/gM-10016/">SHARP 7インチ高精細IGZO-LCDパネル 接続モジュールセット</a> 13000円</li>
<li><a href="http://www.amazon.co.jp/gp/product/B00FRC2ID8">HAKUBA 額縁 木製 額 リエージュ フェリチェ A4</a> 1064円</li>
</ul>
<br />
IGZO液晶、7インチに1920x1200という高解像度で、めちゃくちゃ薄くて明るいのに2Wくらいしか電気食わない省エネ仕様で素晴らしいですね。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-3ajUYdn6DfE/Vr3h3NlqhQI/AAAAAAAATco/z9ej6CjlYSk/s1600/IMG_0509.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-3ajUYdn6DfE/Vr3h3NlqhQI/AAAAAAAATco/z9ej6CjlYSk/s320/IMG_0509.JPG" width="320" /></a></div>
<br />
<a href="https://www.flickr.com/photos/kei-y/16301950606/">桜島の黒神から撮った星景写真</a>が綺麗に表示されたので感動しました。<br />
<br />
本題に戻りまして、これらを使ってスマートミラーを作ることにしましょう。<br />
額の裏ぶたを外して、液晶パネルと基板をつなぐフレキが通るスペースを作っていきます。<br />
鉛筆で穴あけの位置を書いたらフライスでサクッと。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-5JIAH6rz1F8/Vr3itV4vZWI/AAAAAAAATc0/6fMUl9zlWNg/s1600/IMG_0534.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-5JIAH6rz1F8/Vr3itV4vZWI/AAAAAAAATc0/6fMUl9zlWNg/s320/IMG_0534.JPG" width="240" /></a> <a href="https://4.bp.blogspot.com/-P0ARutxgp7Q/Vr3i5d-Be3I/AAAAAAAATc4/D0Fjtvh5oVg/s1600/IMG_0535.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-P0ARutxgp7Q/Vr3i5d-Be3I/AAAAAAAATc4/D0Fjtvh5oVg/s320/IMG_0535.JPG" width="240" /></a></div>
<br />
フレキを通したら、液晶を裏ぶたに両面テープで貼り付けます。<br />
ちなみに、失敗したら剥がせない(液晶が割れる)ので細心の注意を払って位置合わせする必要あり。<br />
フレキを通した穴は黒色のmtで塞いでおきます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-h1a0AreOBiE/Vr3jRuQ_NqI/AAAAAAAATc8/pLai2CwWjQw/s1600/IMG_0536.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-h1a0AreOBiE/Vr3jRuQ_NqI/AAAAAAAATc8/pLai2CwWjQw/s320/IMG_0536.JPG" width="240" /></a> <a href="https://2.bp.blogspot.com/-nRFO1zvbvoc/Vr3jjWgDl0I/AAAAAAAATdA/tLHYEnY7bvY/s1600/IMG_0537.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-nRFO1zvbvoc/Vr3jjWgDl0I/AAAAAAAATdA/tLHYEnY7bvY/s320/IMG_0537.JPG" width="240" /></a></div>
<br />
一旦動作テスト。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-L-Omx6ddHFY/Vr3j1YKxp_I/AAAAAAAATdI/mxeQshWZCU0/s1600/IMG_0538.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-L-Omx6ddHFY/Vr3j1YKxp_I/AAAAAAAATdI/mxeQshWZCU0/s320/IMG_0538.JPG" width="320" /></a></div>
<br />
うまくいったので、液晶部分の周りに厚紙(液晶の厚みの分だけある)を切り抜いて貼って、その上に黒い画用紙を貼り付け。<br />
液晶と厚紙の隙間には黒のmtを上から貼って横からの光漏れを完全にシャットアウトします。<br />
フレキの反対側サイドからの光漏れが激しかったので、ここにはmtを2重に貼りました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-0hxnI1AnWK8/Vr3j61ClqqI/AAAAAAAATdM/WfBXFmqXk4E/s1600/IMG_0540.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-0hxnI1AnWK8/Vr3j61ClqqI/AAAAAAAATdM/WfBXFmqXk4E/s320/IMG_0540.JPG" width="240" /></a> <a href="https://3.bp.blogspot.com/-Si1Gi0Md0uk/Vr3kJaim78I/AAAAAAAATdU/KHkRCQ0yASM/s1600/IMG_0541.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Si1Gi0Md0uk/Vr3kJaim78I/AAAAAAAATdU/KHkRCQ0yASM/s320/IMG_0541.JPG" width="240" /></a></div>
<br />
液晶周りが完成したら、IGZO液晶駆動基板とRaspberry Pi B 2を裏ぶたに固定します。<br />
プラナットをアロンアルファーで止めて、プラネジで止めました。<br />
(もうちょっとちゃんとした固定方法をとった方がいいかも)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-1GxU4jF_c0Q/Vr3kn8D4lOI/AAAAAAAATdc/eC6EQ5oBwJk/s1600/IMG_0547.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-1GxU4jF_c0Q/Vr3kn8D4lOI/AAAAAAAATdc/eC6EQ5oBwJk/s320/IMG_0547.JPG" width="320" /></a></div>
<br />
最後に、額についてたガラスをマジックミラーに変えます。<br />
マジックミラーは大阪吹田市の株式会社コーワさんに発注。<br />
<a href="https://mirror.kowa-j.co.jp/magicmirror.html">https://mirror.kowa-j.co.jp/magicmirror.html</a><br />
<br />
額に元々入っていたガラスの寸法を測って、厚み3mm、角磨き上げ、縦210mm、横297mmで作ってもらいました。<br />
お値段3564円 + 梱包送料864円 = <b>計4428円</b><br />
注文日は2/7、2/10に発送されて、届いたのは2/12です。<br />
<br />
マジックミラー、裏ぶたをセットして起動!<br />
※写真写り上あまり反射してないように見えますが、実際は普通の鏡くらい綺麗に反射してます。(たぶん部屋が暗いせい)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-F6Yw6oRBm-M/Vr3l492FHII/AAAAAAAATdo/JoTh44i81uQ/s1600/IMG_0542.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-F6Yw6oRBm-M/Vr3l492FHII/AAAAAAAATdo/JoTh44i81uQ/s320/IMG_0542.JPG" width="240" /></a> <a href="https://3.bp.blogspot.com/-G1Jwv2URGr4/Vr3mC7jDnkI/AAAAAAAATds/SckmSyG5j54/s1600/IMG_0546.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-G1Jwv2URGr4/Vr3mC7jDnkI/AAAAAAAATds/SckmSyG5j54/s320/IMG_0546.JPG" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-0Yp3Lp32i2Y/Vr3gGvelfHI/AAAAAAAATcc/zrLSP8u-7Ms/s1600/IMG_0555.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://4.bp.blogspot.com/-0Yp3Lp32i2Y/Vr3gGvelfHI/AAAAAAAATcc/zrLSP8u-7Ms/s400/IMG_0555.JPG" width="400" /></a></div>
<br />
と、いうわけでハードウェアは完成です。<br />
これから、ここに表示するためのソフトウェアを作っていかなければ...<br />
<br />
冒頭の記事で紹介されているGoogle社員作のミラーは白文字で天気や予定などの情報を表示しているので、まずはそんな感じのものを作ろうかと。<br />
<br />
Raspberry Pi 2 Bというちょっと強力なやつを載せてるので、カメラ繋いで顔認識させて鏡に映った顔にオーバーレイするようなプログラムとか、なんか色々夢が広がりそうだなぁ...と思っているところです。<br />
ソフトウェア編の記事も後ほど書く予定です。Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com1tag:blogger.com,1999:blog-7229367252151281027.post-29298538741203092022016-01-04T14:59:00.000+09:002016-01-04T21:03:21.134+09:00トイレにRESTfulなAPIを実装してみた<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-1h21fsmCFas/Von7ksyU-kI/AAAAAAAATZs/-0gRdTFyw8Y/s1600/IMG_0351.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://2.bp.blogspot.com/-1h21fsmCFas/Von7ksyU-kI/AAAAAAAATZs/-0gRdTFyw8Y/s400/IMG_0351.jpg" width="400" /></a></div>
<br />
あけましておめでとうございます。<br />
<a href="http://eleclog.quitsq.com/2013/01/toilet-tweet-bot.html" target="_blank">プライバシーも一緒に流れるトイレ</a>から3年経ちましたが、皆様いかがお過ごしでしょうか。<br />
<br />
お正月の三が日、昨今のIoTブームに乗るべく、私もIoTで真に豊かになるものは何かと一生懸命考えた結果、3年前と同じ部屋に辿り着いたことをご報告いたします。<br />
<br />
前回はウォシュレットの使用状況をTwitterに投稿するというシステムでしたが、今回はウォシュレットにRESTfulなAPIを付与することで様々な機器から操作することを可能にするシステムを制作しました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-jAmBLOIOrtg/Von9Zp8gSuI/AAAAAAAATZ4/JBxG74p3sNg/s1600/IMG_0355.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-jAmBLOIOrtg/Von9Zp8gSuI/AAAAAAAATZ4/JBxG74p3sNg/s320/IMG_0355.jpg" width="320" /></a></div>
<br />
使用したのは巷で話題のESP-WROOM-02(ESP8266)と赤外線LED、上記写真のボードはオリジナルのもの。<br />
(赤外線LEDの足がJST-PHコネクタに吸い込まれているように見えますが、良い子はLEDの足にJSTコンタクトピンを圧着したりしないように。)<br />
<br />
このデバイスを電源に接続すると...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-BCtod6LS-GA/Von-ZebderI/AAAAAAAATaA/wE86SEqImWg/s1600/image.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://4.bp.blogspot.com/-BCtod6LS-GA/Von-ZebderI/AAAAAAAATaA/wE86SEqImWg/s200/image.jpg" width="150" /></a> <a href="http://2.bp.blogspot.com/-dRSaMUFXy-g/VooE9uW5ycI/AAAAAAAATbQ/1aN4MmYk3Gc/s1600/IMG_0352.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="http://2.bp.blogspot.com/-dRSaMUFXy-g/VooE9uW5ycI/AAAAAAAATbQ/1aN4MmYk3Gc/s200/IMG_0352.jpg" width="200" /></a></div>
<br />
http://<b>toilet.local</b> にアクセスし、ウォシュレットを操作可能になります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-zES583mWQyQ/Von-dDFGziI/AAAAAAAATaI/3Fi92uqxcVw/s1600/image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://3.bp.blogspot.com/-zES583mWQyQ/Von-dDFGziI/AAAAAAAATaI/3Fi92uqxcVw/s400/image.png" width="223" /></a></div>
<br />
<h3>
API</h3>
http://toilet.local/washlet に対して、Key <b>c</b>に以下のValueを設定してPOSTすると、それぞれの動作が実行されます。<br />
<br />
<table border="1" cellpadding="1" cellspacing="1" style="border-collapse: collapse; width: 200px;">
<tbody>
<tr height="18" style="height: 18.0pt;">
<td class="xl63" height="18" style="height: 18.0pt; width: 77pt;" width="77">Value</td>
<td class="xl63" style="border-left: none; width: 95pt;" width="95">動作</td>
</tr>
<tr height="18" style="height: 18.0pt;">
<td class="xl63" height="18" style="border-top: none; height: 18.0pt;">rear</td>
<td class="xl63" style="border-left: none; border-top: none;">おしり</td>
</tr>
<tr height="18" style="height: 18.0pt;">
<td class="xl63" height="18" style="border-top: none; height: 18.0pt;">soft</td>
<td class="xl63" style="border-left: none; border-top: none;">おしりやわらか</td>
</tr>
<tr height="18" style="height: 18.0pt;">
<td class="xl63" height="18" style="border-top: none; height: 18.0pt;">bidet</td>
<td class="xl63" style="border-left: none; border-top: none;">ビデ</td>
</tr>
<tr height="18" style="height: 18.0pt;">
<td class="xl63" height="18" style="border-top: none; height: 18.0pt;">stop</td>
<td class="xl63" style="border-left: none; border-top: none;">停止</td>
</tr>
</tbody></table>
<br />
また、DELETEメソッドでc=bigとすると流す(大)、c=smallとすると流す(小)が実行されます。<br />
(DELETEなのはお察し)<br />
<br />
<h3>
仕組み</h3>
まず、<a href="http://eleclog.quitsq.com/2013/01/toilet-tweet-bot.html">3年前の時</a>に取得した赤外線リモコンコードでは正しく動作しなかったので、改めて取り直し、トイレのリモコンがどのような送信を行っているのかを再検証しました。<br />
リモコンコードはArduino UNOに赤外線受信モジュールを接続して、<a href="https://github.com/z3t0/Arduino-IRremote" target="_blank">IRremote Arduino Library</a>のサンプルを実行して取得。<br />
結果、流す以外の動作は2回に分けてコードを送信していることが判明。<br />
約6ms、2.9msの送信開始リーダ部の後は、1.5msで1, 0.5msで0のデータ部が続いているのは3年前に調べたのと同じ。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-2KzdMByRIdM/VooBVtNTBRI/AAAAAAAATac/HkSjMaTAnyM/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.20.37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="124" src="http://1.bp.blogspot.com/-2KzdMByRIdM/VooBVtNTBRI/AAAAAAAATac/HkSjMaTAnyM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.20.37.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-F2o46eXJl9M/VooBV0dvM8I/AAAAAAAATaU/G6PQyEzP77Q/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.20.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="http://1.bp.blogspot.com/-F2o46eXJl9M/VooBV0dvM8I/AAAAAAAATaU/G6PQyEzP77Q/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.20.48.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-oKmsE-9MaTU/VooBV2kQw2I/AAAAAAAATaY/rLsnQuvnv8U/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.20.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="123" src="http://3.bp.blogspot.com/-oKmsE-9MaTU/VooBV2kQw2I/AAAAAAAATaY/rLsnQuvnv8U/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.20.58.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-KXNSYPtb174/VooBWb3dQ9I/AAAAAAAATag/SdBf5A4e1TU/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.21.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="124" src="http://4.bp.blogspot.com/-KXNSYPtb174/VooBWb3dQ9I/AAAAAAAATag/SdBf5A4e1TU/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.21.05.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-gDOLbMbLm2U/VooBWcGhKmI/AAAAAAAATak/dpfhFayMD5E/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.21.11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="122" src="http://1.bp.blogspot.com/-gDOLbMbLm2U/VooBWcGhKmI/AAAAAAAATak/dpfhFayMD5E/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-01-04%2B14.21.11.png" width="320" /></a></div>
<br />
あとは、この通りに38kHzで変調して赤外線LEDを発光してあげるようなコードを書いてESP-WROOM-02に焼けばOK.<br />
<br />
コードはこちら<br />
<a href="https://github.com/9SQ/RESTful-Toilet" target="_blank">GitHub : 9SQ/RESTful-Toilet</a><br />
<br />
上記リモコンコードのデータもリポジトリに放り込んでいますので、TOTO製トイレリモコン赤外線で遊びたい方は参考にしてください。→ <a href="https://github.com/9SQ/RESTful-Toilet/blob/master/washlet_command.csv">washlet_command.csv</a><br />
<br />
これで、トイレ中にスマホが手放せない人でも、スマホからウォシュレットの操作が可能になりました!<br />
<br />
<h3>
番外編</h3>
トイレ引き籠もりのプロに、このシステムについて伺ったところ「ライブ中にタスク切り替えしてブラウザを開くのは厳しい」とのご感想を頂いたので、これについてAndroidアプリを制作することで対処しました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-ziYVXeEt7zg/VooEVe5qIZI/AAAAAAAATbA/kkR_BnwyUlw/s1600/Screenshot_2016-01-03-16-57-19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-ziYVXeEt7zg/VooEVe5qIZI/AAAAAAAATbA/kkR_BnwyUlw/s320/Screenshot_2016-01-03-16-57-19.png" width="180" /></a></div>
<br />
もちろん、通知領域からボタンひとつで操作可能です。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-QfbV5LqnAsI/VooEl2DWoYI/AAAAAAAATbI/wtHD9t-tCYM/s1600/IMG_0356.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-QfbV5LqnAsI/VooEl2DWoYI/AAAAAAAATbI/wtHD9t-tCYM/s320/IMG_0356.jpg" width="320" /></a></div>
<br />
デレステ中も快適なトイレライフが実現できます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-81oDj6DXynw/VoocO75dY3I/AAAAAAAATbo/ZUMYd47K9pQ/s1600/Screenshot_2016-01-03-16-59-46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="http://2.bp.blogspot.com/-81oDj6DXynw/VoocO75dY3I/AAAAAAAATbo/ZUMYd47K9pQ/s320/Screenshot_2016-01-03-16-59-46.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-tBdkbJV_Ox0/VopfcQB4irI/AAAAAAAATb4/8O-G6qGdVs4/s1600/restful_toilet_imas.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="http://4.bp.blogspot.com/-tBdkbJV_Ox0/VopfcQB4irI/AAAAAAAATb4/8O-G6qGdVs4/s320/restful_toilet_imas.gif" width="320" /></a></div>
<br />
コードはこちら<br />
<a href="https://github.com/9SQ/RESTful-Toilet-App" target="_blank">GitHub : 9SQ/RESTful-Toilet-App</a><br />
<br />
<h3>
実際の動作</h3>
流石にトイレに座っているお見苦しい姿を晒すわけにはいかないので、流す動作だけ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-E3QHFRfptNg/VooFc-A-ptI/AAAAAAAATbY/gal2AqOGOj8/s1600/restful-toilet.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://2.bp.blogspot.com/-E3QHFRfptNg/VooFc-A-ptI/AAAAAAAATbY/gal2AqOGOj8/s320/restful-toilet.gif" width="320" /></a></div>
<br />
このシステムの脆弱性として、トイレの外から使用中の人に物理的な攻撃が可能になるという問題が発見されていますが、今後修正の予定が無いことを予めここに記しておきます。<br />
<br />
最後に、今年1年が素敵なIoT(Internet of Toilet)の年になりますよう、お祈り申し上げます。Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-19524706379289186802015-12-27T22:34:00.000+09:002015-12-27T23:42:36.561+09:00ESP-WROOM-02でYoを送るボタンを作ってみた今年の夏からESP-WROOM-02で色々やっているけど、よく考えたら公開できるものを何も出してなかったので簡単なものを作ってみたり。<br />
<br />
ボタンを押すとYoが飛ぶ、という単純明快なボタンです。<br />
誰かにYoを送るも良し、自分のusernameを設定しておいて呼び鈴にするも良し。<br />
Li-Poと充電回路を内蔵しているので、完全ワイヤレス動作も可能。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-PztNQoC86X8/Vn_eQN7xKvI/AAAAAAAATZA/JLmkJJSw5MM/s1600/yo_button1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://4.bp.blogspot.com/-PztNQoC86X8/Vn_eQN7xKvI/AAAAAAAATZA/JLmkJJSw5MM/s320/yo_button1.jpg" width="320" /></a></div>
<br />
ESP-WROOM-02周りの回路はこんな感じ。(レギュレータとLi-Po充電回路は省略)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-o5eOQYWcc00/Vn_1qgcJAnI/AAAAAAAATZY/h-aKxTEFhwc/s1600/yo_button_sch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-o5eOQYWcc00/Vn_1qgcJAnI/AAAAAAAATZY/h-aKxTEFhwc/s640/yo_button_sch.png" width="500" /></a></div>
<br />
構成は、ESP-WROOM-02(写真の緑のボードはオリジナル)と<br />
・<a href="http://akizukidenshi.com/catalog/g/gP-03637/" target="_blank">無接点プッシュスイッチ(コード付)</a> (秋月電子通商)<br />
・<a href="http://www.aitendo.com/product/10261" target="_blank">リチウムイオン電池充電基板(1A) [CHR4056-MCU1A]</a> (aitendo)<br />
・<a href="http://www.aitendo.com/product/9668" target="_blank">リチウムポリマー電池(3.7V/850mAh)</a> (aitendo)<br />
<br />
今回使った無接点プッシュスイッチはスイッチ自体に電源を入れてあげる必要がありますが、上記回路図には書いてません。<br />
プッシュスイッチの代わりにリードスイッチやマイクロスイッチにするというのもOK。<br />
<br />
ケースは3Dプリンターで出力。<br />
こんな感じで収まります。(まだ裏蓋を作ってない...)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-rYdmZ2jiGkQ/Vn_fbG7UWAI/AAAAAAAATZI/f8CzUCEyZ4g/s1600/yo_button2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://2.bp.blogspot.com/-rYdmZ2jiGkQ/Vn_fbG7UWAI/AAAAAAAATZI/f8CzUCEyZ4g/s320/yo_button2.jpg" width="320" /></a></div>
<br />
ソースコードはGithubに。<br />
<a href="https://github.com/9SQ/esp8266-Yo-button">https://github.com/9SQ/esp8266-Yo-button</a><br />
<br />
今回はWiFiClientSecureではなく、WiFiClientを使ってます。<br />
本当はhttpsでPOSTすべきなのですが、まだWiFiClientSecureの動作が微妙で何故かレスポンスを受け取れなかったので、とりあえずhttpでPOSTしてます。<br />
(通信経路が信頼できない場合は使わない方が良いですね)<br />
<br />
仕組みとしては、単純にHTTP POSTするだけなので、宛先をYoから別のもの(IFTTTなど)に変更すれば、色々応用が利くはず...Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-22012805109957317472015-12-26T04:11:00.000+09:002015-12-26T04:17:52.686+09:00Panasonic製ネットワークカメラのレンズ曇りを取るPanasonic製のネットワークカメラ BB-HCE481の修理依頼が来た時の記録。<br />
故障と呼べるのかは謎だけど、前玉のレンズ内側が曇って映像が不鮮明というのが今回の修理理由。<br />
前玉にアクセスするまで結構な手順があったので、今後のためにもメモとして残しておくことに。<br />
<div>
<br /></div>
<div>
<h3>
1. 左右のプラスチックカバーを外す</h3>
</div>
<div>
片方は上下チルト用のステッピングモーター、もう片方は台座に入っている基板から来ているフレキが見えます。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-S1iDX2gsHws/Vn2G6TzUdkI/AAAAAAAATVc/KbiDeThNC_8/s1600/IMG_0308.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-S1iDX2gsHws/Vn2G6TzUdkI/AAAAAAAATVc/KbiDeThNC_8/s320/IMG_0308.jpg" width="260" /></a>
<a href="http://4.bp.blogspot.com/-ADIGp-Sgijs/Vn2HC1F7OjI/AAAAAAAATVk/iDikcU0a1Qw/s1600/IMG_0307.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-ADIGp-Sgijs/Vn2HC1F7OjI/AAAAAAAATVk/iDikcU0a1Qw/s320/IMG_0307.jpg" width="260" /></a></div>
<div>
<h3>
<br />2. 更に左右のプラスチックカバーを外す</h3>
</div>
<div>
1で外したカバーの下に隠れていたネジを外すと、片側にはチルト用ステッピングモーター制御基板、もう片側にはステッピングモーターとその軸からカメラ部横のギアに張ってあるベルトが登場。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-dZU6ZMOIWuk/Vn2Ht-6eF5I/AAAAAAAATV0/rtpXYfxGglo/s1600/IMG_0305.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-dZU6ZMOIWuk/Vn2Ht-6eF5I/AAAAAAAATV0/rtpXYfxGglo/s320/IMG_0305.jpg" width="260" /></a> <a href="http://3.bp.blogspot.com/-SLSCuzAgoBY/Vn2HqARefTI/AAAAAAAATVs/yRNhxmbJyPg/s1600/IMG_0306.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-SLSCuzAgoBY/Vn2HqARefTI/AAAAAAAATVs/yRNhxmbJyPg/s320/IMG_0306.jpg" width="260" /></a></div>
<br />
<h3>
3. カメラ部を分離</h3>
ステッピングモーターが見える側の軸はEリングで留められているので、マイナスドライバーなどを隙間に突っ込んで捻ると取れる。<br />
もう片方はねじ止めされている基板を外し、同様にEリングを外すと上に持ち上がる。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-_SgHAFV4HY4/Vn2I0K7dcrI/AAAAAAAATV8/eQPOW9dIBhY/s1600/IMG_0303.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-_SgHAFV4HY4/Vn2I0K7dcrI/AAAAAAAATV8/eQPOW9dIBhY/s320/IMG_0303.jpg" width="260" /></a> <a href="http://3.bp.blogspot.com/-ZGOCZadumDk/Vn2I16da3DI/AAAAAAAATWE/mqVv-o54OG0/s1600/IMG_0304.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-ZGOCZadumDk/Vn2I16da3DI/AAAAAAAATWE/mqVv-o54OG0/s320/IMG_0304.jpg" width="260" /></a></div>
<h3>
<br />4. カメラ部を分解</h3>
横のネジを全部外してギアを取ると、カメラ部の上側が外れる。<br />
下側も同様に。<br />
実は下記の写真は掃除後に組み立てるときに撮ったので、レンズが綺麗になってたりします...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-fNK8UZJ2UcI/Vn2Jvin_-TI/AAAAAAAATWM/vRQVSxU7jx8/s1600/IMG_0301.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-fNK8UZJ2UcI/Vn2Jvin_-TI/AAAAAAAATWM/vRQVSxU7jx8/s320/IMG_0301.jpg" width="260" /></a> <a href="http://3.bp.blogspot.com/-tYRtIRSn-No/Vn2KCxoZPmI/AAAAAAAATWU/64qJ-dPCIjY/s1600/IMG_0300.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-tYRtIRSn-No/Vn2KCxoZPmI/AAAAAAAATWU/64qJ-dPCIjY/s320/IMG_0300.jpg" width="260" /></a></div>
<br />
<h3>
5. 基板をレンズ部から外す</h3>
ネジで止まっている基板を順次外していきます。<br />
左の写真はカメラ部のメインっぽい基板。<br />
レンズと逆側についてる基板を外すと、イメージセンサーが登場。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-0Q_ROlRVjvU/Vn2KebS3AWI/AAAAAAAATWc/1jQrRfUULqc/s1600/IMG_0299.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-0Q_ROlRVjvU/Vn2KebS3AWI/AAAAAAAATWc/1jQrRfUULqc/s320/IMG_0299.jpg" width="240" /></a><a href="http://1.bp.blogspot.com/-T3vuGtjGN-Q/Vn2KqINhqaI/AAAAAAAATWk/70qZb4dg9S0/s1600/IMG_0298.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-T3vuGtjGN-Q/Vn2KqINhqaI/AAAAAAAATWk/70qZb4dg9S0/s320/IMG_0298.jpg" width="240" /></a></div>
</div>
<br />
下側にはレンズ部内に入っている中玉を動かすためのモーター制御ICが付いていました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-7zrl0oVt1Cg/Vn2LJQ-h11I/AAAAAAAATWs/MtsXxEnnDPw/s1600/IMG_0297.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-7zrl0oVt1Cg/Vn2LJQ-h11I/AAAAAAAATWs/MtsXxEnnDPw/s320/IMG_0297.jpg" width="320" /></a></div>
<br />
<h3>
6. レンズ部へと続くケーブルを外す</h3>
これが面白いと思ったところ。<br />
フレキが入っていってる謎の丸いプラスチックケース。<br />
開けるとフレキがゼンマイ状になっていて、これのおかげで回転する部分と外側で通信が可能になっている訳です。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-lyIf8NhHpSQ/Vn2LashYbxI/AAAAAAAATW0/zOJb7n0mXNo/s1600/IMG_0296.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-lyIf8NhHpSQ/Vn2LashYbxI/AAAAAAAATW0/zOJb7n0mXNo/s320/IMG_0296.jpg" width="260" /></a> <a href="http://4.bp.blogspot.com/-gDieYx_vta8/Vn2L-e2BicI/AAAAAAAATXA/Ve6J1W5GnYA/s1600/IMG_0295.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-gDieYx_vta8/Vn2L-e2BicI/AAAAAAAATXA/Ve6J1W5GnYA/s320/IMG_0295.jpg" width="260" /></a></div>
<br />
<h3>
7. 金属板、フォーカス制御用のモーターを外す</h3>
ネジで止まっているので、見えているネジから外していくと分離可能。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-yZl1WDSGHNs/Vn2MZKOOmgI/AAAAAAAATXI/9owY840Ap4w/s1600/IMG_0294.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-yZl1WDSGHNs/Vn2MZKOOmgI/AAAAAAAATXI/9owY840Ap4w/s320/IMG_0294.jpg" width="260" /></a>
<a href="http://2.bp.blogspot.com/-1kxwlzMIdy4/Vn2MdERLRfI/AAAAAAAATXQ/ZOTHc2ALaLw/s1600/IMG_0293.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-1kxwlzMIdy4/Vn2MdERLRfI/AAAAAAAATXQ/ZOTHc2ALaLw/s320/IMG_0293.jpg" width="260" /></a></div>
<br />
<h3>
8. レンズ部を分解</h3>
ついにレンズ部分に到達!<br />
後ろから1枚づつ外していきます。<br />
レンズを外すとシャッターが登場<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-cyzBy05F_Dw/Vn2NDLwNjKI/AAAAAAAATXw/MGHuweGksYo/s1600/IMG_0292.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-cyzBy05F_Dw/Vn2NDLwNjKI/AAAAAAAATXw/MGHuweGksYo/s320/IMG_0292.jpg" width="260" /></a> <a href="http://3.bp.blogspot.com/-PIe3_NWyA2k/Vn2NCwzRpPI/AAAAAAAATXo/CvGMCDXb59g/s1600/IMG_0290.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-PIe3_NWyA2k/Vn2NCwzRpPI/AAAAAAAATXo/CvGMCDXb59g/s320/IMG_0290.jpg" width="260" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-YTZDIDpv9BM/Vn2NCD7O8II/AAAAAAAATXg/bpm9CzbCm6o/s1600/IMG_0289.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-YTZDIDpv9BM/Vn2NCD7O8II/AAAAAAAATXg/bpm9CzbCm6o/s320/IMG_0289.jpg" width="260" /></a> <a href="http://3.bp.blogspot.com/-0QTeBTsSRIY/Vn2NCMkPKeI/AAAAAAAATXc/_sm6YKXsUYo/s1600/IMG_0288.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-0QTeBTsSRIY/Vn2NCMkPKeI/AAAAAAAATXc/_sm6YKXsUYo/s320/IMG_0288.jpg" width="260" /></a></div>
<br />
全部外すとこんな感じ。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-r5j3S8x9IRI/Vn2NCAw7U-I/AAAAAAAATXY/MXEP5VQfhbk/s1600/IMG_0287.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-r5j3S8x9IRI/Vn2NCAw7U-I/AAAAAAAATXY/MXEP5VQfhbk/s320/IMG_0287.jpg" width="260" /></a> <a href="http://1.bp.blogspot.com/-nBo0brRZih0/Vn2OVlHqmOI/AAAAAAAATYM/zNDcM-zXbWA/s1600/IMG_0286.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-nBo0brRZih0/Vn2OVlHqmOI/AAAAAAAATYM/zNDcM-zXbWA/s320/IMG_0286.jpg" width="260" /></a>
</div>
<br />
<h3>
9. 前玉のお掃除</h3>
一眼レフとか用のレンズクリーニングキットで拭いていきます。<br />
左はbefore、右がafter。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-8ARMDT2_-Yo/Vn2QXSgBnFI/AAAAAAAATYY/Gsa8S10IuoQ/s1600/IMG_0282.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-8ARMDT2_-Yo/Vn2QXSgBnFI/AAAAAAAATYY/Gsa8S10IuoQ/s320/IMG_0282.jpg" width="260" /></a> <a href="http://4.bp.blogspot.com/-O01YneHS1TQ/Vn2QbLOENXI/AAAAAAAATYg/44eCVXtdwn4/s1600/IMG_0285.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-O01YneHS1TQ/Vn2QbLOENXI/AAAAAAAATYg/44eCVXtdwn4/s320/IMG_0285.jpg" width="260" /></a></div>
<br />
<h3>
10. 逆の手順で組み立て</h3>
フレキとか切らないように注意しながら、組み立てていきます...<br />
終わり。<br />
<br />
<h3>
まとめ</h3>
Panasonicのネットワークカメラ、とても良くできてます。<br />
<br />
カメラとしてのスペックは、画素数は38万画素、光学21倍ズーム、F値1.6~3.6。<br />
分解して分かったレンズ部の構成は、中玉が3枚、レンズ2枚を2つのモーターで前後に移動させることでフォーカス合わせを実現しているという感じ。<br />
ちなみに、チルト部分はフォトリフレクタと羽で回転角の限界を見ているようで、バラして組み上げた時に角度がずれていても、初回起動時のイニシャライズ(頂点で位置合わせしている)でバッチリ初期位置に戻っていました。<br />
<br />
これ、2006年製なので約10年前の製品でビジネス向けなのですが、当時は定価16万円くらいしたそうです。<br />
外見はなんだか無骨なデザインですが、中身は技術の塊っていう感じ。<br />
ビジネス向けの製品として売ってるので当然といえば当然ですが、とっても良くできている、これなら10万超えてても納得だな〜という感想。<br />
<span style="color: #666666; font-size: x-small;">#Pla**xとかの製品と比較したら大変失礼なレベルの完成度</span><br />
<br />
最後に外から見た前玉の曇りbefore/afterの写真で終わりとします。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-cTWskC4grT0/Vn2RAIND1YI/AAAAAAAATYo/sE384S4QSKc/s1600/IMG_0281.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-cTWskC4grT0/Vn2RAIND1YI/AAAAAAAATYo/sE384S4QSKc/s320/IMG_0281.jpg" width="260" /></a> <a href="http://4.bp.blogspot.com/-vDQ4tOvpYHQ/Vn2RKLp938I/AAAAAAAATYw/wTxmQlAZFtw/s1600/IMG_0309.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-vDQ4tOvpYHQ/Vn2RKLp938I/AAAAAAAATYw/wTxmQlAZFtw/s320/IMG_0309.jpg" width="260" /></a></div>
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-16983840434168109182015-12-08T04:02:00.000+09:002015-12-12T17:34:47.747+09:00地震とか火山噴火情報を閲覧できるWebサイトを作った<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-3244qIN1lXU/VmMZ7jLxzHI/AAAAAAAATUI/O3LVqM8CBm4/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B2.07.43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="322" src="http://3.bp.blogspot.com/-3244qIN1lXU/VmMZ7jLxzHI/AAAAAAAATUI/O3LVqM8CBm4/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B2.07.43.png" width="400" /></a></div>
作るのを思い立ってから半年くらい掛かった... (実質作業時間は短い)<br />
<br />
<a href="http://evi.prioris.jp/" target="_blank"><span style="font-size: large;">地震火山詳報</span></a><br />
<a href="http://evi.prioris.jp/">http://evi.prioris.jp</a><br />
<br />
地震と火山(桜島に限らない)に関する気象庁XML電文情報と、それに付随する情報を配信するWebサイトです。<br />
これの立ち上げに伴い、桜島詳報を閉じました。<br />
<strike>現時点では火山噴火情報は未実装ですが、統合するつもりで地震<b>火山</b>詳報とネーミングしたので、近々実装します。</strike><br />
<strike>と言っても、桜島詳報のコードをちょっと改造して合体させるだけなのですが、最近全国的に火山活動が落ち着いているのでモチベーションが...</strike><br />
<b>→ <span style="color: red;">実装しました!</span></b><br />
12月12日より、噴火に関する火山観測報も追加しました。<br />
桜島詳報では桜島の噴火・爆発のみを扱っていましたが、地震火山詳報では桜島以外の火山(阿蘇山など)の情報を配信されます。<br />
<br />
発生した地震の詳細ページでは、震源と揺れを観測した地域の震度がGoogle Mapsライクな操作感で閲覧できます。<br />
例 : <a href="http://evi.prioris.jp/earthquake/6e5020fa-309c-3c16-beb0-81747721325e/" target="_blank">震源・震度情報(2015年12月4日 5時40分頃に発生した地震) - 地震火山詳報</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-MG2j8mfdsoM/VmMuBWXgtnI/AAAAAAAATVI/t6uo9vDhF40/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B3.33.24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="http://1.bp.blogspot.com/-MG2j8mfdsoM/VmMuBWXgtnI/AAAAAAAATVI/t6uo9vDhF40/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B3.33.24.png" width="400" /></a></div>
震源や震度のアイコンをクリックすると、上記画像のように地名や座標が表示されます。<br />
地図は<a href="https://openstreetmap.jp/" target="_blank">OpenStreetMap</a>を使っています。<br />
あとレスポンシブ対応なのでスマホでもPCでも良い感じに閲覧可能です。<br />
<br />
地震火山詳報は、地震に関する情報をTwitterとPushbulletでも配信しています。<br />
(Pushbulletって何?っていう人は、<a href="http://japanese.engadget.com/2015/01/28/pushbullet-ipad-mac-safari-pc/" target="_blank">Engadget</a>とか<a href="http://www.lifehacker.jp/2014/04/140404pushbullet.html" target="_blank">Lifehacker</a>の記事を読むといいです。)<br />
<br />
Twitter : <a href="https://twitter.com/Prioris_EVI" target="_blank">@Prioris_EVI</a><span id="goog_1856695912"></span><span id="goog_1856695913"></span><a href="https://draft.blogger.com/"></a><br />
Pushbullet : <a href="https://www.pushbullet.com/channel?tag=earthquake_jp" target="_blank">#earthquake_jp</a><br />
<br />
上記Pushbulletのチャンネルは、日本全国のすべての地震(震度1〜)をプッシュ通知で教えてくれるので若干鬱陶しいです。<br />
(日本全国でこんな頻度で地震が起きてるんだ〜!っと認識するのには最高ですが)<br />
というわけで、震度3以上の地震があった時だけプッシュ通知してくれるチャンネルもあります。<br />
<br />
Pushbullet : <a href="https://www.pushbullet.com/channel?tag=earthquake_int3over" target="_blank">#earthquake_int3over</a><br />
<br />
桜島、阿蘇山の噴火・爆発時プッシュ通知は<a href="https://www.justyo.co/" target="_blank">Yo</a>にて配信しています。<br />
<br />
Yo : SAKURAJIMA (鹿児島県 桜島の噴火・爆発時に配信)<br />
Yo : ASOSAN (熊本県 阿蘇山の噴火・爆発時に配信)<br />
<br />
<h3>
技術的な話</h3>
<br />
以下の記事の集大成みたいな感じです。<br />
<br />
<a href="http://eleclog.quitsq.com/2015/06/postgis-mlit-ksj.html" target="_blank">PostgreSQLとPostGISで国土数値情報(行政区域)を扱ってみる</a> (2015/06)<br />
<a href="http://eleclog.quitsq.com/2015/06/postgis-eqarea-centroid.html" target="_blank">PostGISで気象庁の細分区域&市町村等に対応する重心を求める</a> (2015/06)<br />
<a href="http://eleclog.quitsq.com/2015/07/seismic-intensity-map.html" target="_blank">OpenLayers 3で気象庁発表の震度をマッピングする</a> (2015/07)<br />
<a href="http://eleclog.quitsq.com/2015/12/ol3-maptiles.html" target="_blank">OL3で扱える地図タイルをShapeから生成する</a> (2015/12)<br />
<br />
あと、ベースとして以下も。<br />
<a href="http://eleclog.quitsq.com/2014/08/sakurajima-yo-backend.html" target="_blank">桜島が噴火したYoの裏側</a> (2014/08)<br />
<br />
上記の記事中にも書いていますが、気象庁XML電文から震度マップ(GeoJSON)を作るのに必要なデータやGeoJSON生成コードはオープンソースとして公開しています。<br />
<br />
<a href="https://github.com/9SQ/jma-eqarea-centroid" target="_blank">9SQ/jma-eqarea-centroid</a> (気象庁が用いる地域区分の重心座標テーブル)<br />
<a href="https://github.com/9SQ/jma-eqxml2geojson" target="_blank">9SQ/jma-eqxml2geojson</a> (気象庁XMLから上記テーブルを利用してGeoJSONを生成する)<br />
<a href="https://github.com/9SQ/seismic-intensity-map" target="_blank">9SQ/seismic-intensity-map</a> (震度GeoJSONをOpenStreetMapにオーバーレイ表示する)<br />
<br />
...以下詳細...<br />
<br />
気象庁から送られてくる震源・震度に関する情報のXML電文には、発生時刻や地震の規模を表すマグニチュード、震源地の座標、津波に関するコメント、そして揺れを観測した地域の地域コードと地名、震度が含まれています。<br />
このXML電文から、<b>震源地の座標</b>を地図にプロットするのは非常に簡単ですが、<b>各地の震度</b>を、<b>その地域の中心となる場所にプロットする</b>というのが結構面倒です。<br />
というのも、気象庁は地域コードや地名のテーブルは公開していますが、その中心(厳密に言えば重心)座標は提供していません。<br />
また、気象庁の区域割りはちょっと特殊で、例えば「石狩地方北部」みたいに、ある程度の市区町村をまとめていたりします。<br />
そこで、まずこれらの区域の中心座標を求めよう、ということで...<br />
<br />
1. <a href="http://eleclog.quitsq.com/2015/06/postgis-mlit-ksj.html" target="_blank">PostgreSQLとPostGISで国土数値情報(行政区域)を扱ってみる</a> (2015/06)<br />
国土交通省から提供されている行政区域(群市区町村みたいな区域割り)のShapefileをPostgreSQLに読み込んで<br />
<br />
2. <a href="http://eleclog.quitsq.com/2015/06/postgis-eqarea-centroid.html" target="_blank">PostGISで気象庁の細分区域&市町村等に対応する重心を求める</a> (2015/06)<br />
PostGISを使って気象庁が提供している区域とすり合わせて、重心を出力し、テーブルを作り<br />
<br />
3. <a href="http://eleclog.quitsq.com/2015/07/seismic-intensity-map.html" target="_blank">OpenLayers 3で気象庁発表の震度をマッピングする</a> (2015/07)<br />
作成した重心テーブルと気象庁XML電文からOpenLayersなどの地図システムで扱えるGeoJSON形式のデータを生成する<br />
<br />
という流れで、震度を地図上のその地域の上に表示させることが出来ました。<br />
ちなみに、表示される位置が<b>中心</b>ではなく<b>重心</b>なのは、地域の形が収まるバウンディングボックスから中心を求めてしまうと、突起やへこみ、極端に長細い岬が出ているような地形ではそれらに引っ張られて視覚的(感覚的?実際的?)な中心から外れてしまうからです。<br />
重心をSQLを叩いてパッと計算(全国分計算するのには数分掛かりましたが)することができるのは、<a href="http://postgis.net/" target="_blank">PostGIS</a>最強としか言えません。<br />
<br />
この生成した重心座標のテーブルは、上にもリンク張っていますが、<a href="https://github.com/9SQ/jma-eqarea-centroid" target="_blank">GitHubに置いている</a>ので、これから気象庁による区域割りの地図上に何か情報を表示させるようなことをしたい方は使ってみてください。<br />
<br />
<h3>
裏側の話</h3>
<br />
昨年作った桜島の噴火情報配信サイト「桜島詳報」と若干設計が異なります。<br />
以下は、桜島詳報とプッシュ通知システムの構成。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-gleIjA-RmhM/VmMfExu5AdI/AAAAAAAATUY/nAXDAPBgP5E/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B2.29.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="http://4.bp.blogspot.com/-gleIjA-RmhM/VmMfExu5AdI/AAAAAAAATUY/nAXDAPBgP5E/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B2.29.42.png" width="400" /></a></div>
<br />
さらに詳しいスライド版は<a href="https://speakerdeck.com/9sq/an-attempt-to-volcanic-activity-information-delivery-using-a-push-notification-service" target="_blank">こちら</a><br />
<br />
桜島詳報ではSubscriber自身に色々と他の処理もさせていました。<br />
そして、詳細ページにアクセスする度にXML本体をパースしてサーバ側でページを組み立ていました。<br />
<br />
今回のシステムでは、SubscriberはXMLの保存と、電文の種類別に行う動作を振り分けるBridgeに概要を渡すところまでさせています。<br />
それと、概要とUUIDを一緒にMySQLへ入れていた処理を廃止して、XMLをJSONに変換してMongoDBに入れるようにしています。<br />
(桜島詳報のシステムを合体させるために、元のXMLも一緒に保存しています)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-QjqykXiBXPo/VmMf1Q5RgmI/AAAAAAAATUg/5u09COcaXlo/s1600/evi_backend1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="283" src="http://3.bp.blogspot.com/-QjqykXiBXPo/VmMf1Q5RgmI/AAAAAAAATUg/5u09COcaXlo/s400/evi_backend1.png" width="400" /></a></div>
<br />
今回のシステムでは電文が届く度にjsonが生成され、詳細ページにアクセスすると生成されたjsonを取得してクライアントサイドでページを組み立てていく仕組みです。<br />
<br />
届いた電文が震源・震度情報の場合の処理は以下のとおり。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-BMH8KT9-dKk/VmMheXHSVyI/AAAAAAAATUs/vPebrmxlv9A/s1600/evi_backend2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="238" src="http://4.bp.blogspot.com/-BMH8KT9-dKk/VmMheXHSVyI/AAAAAAAATUs/vPebrmxlv9A/s400/evi_backend2.png" width="400" /></a></div>
<br />
将来的にAPIとか公開するかもなぁーということで、複数のサーバに分けています。<br />
(現時点では性能に余裕があるので1つのVPSの中に上記4つが詰まっている)<br />
地震火山詳報は上記のEVIの部分になります。<br />
今回新たにEDSという地震に関する情報を保存&提供するサーバと、AZMAPという日本の地図タイルを持っているサーバを作りました。<br />
<br />
地震火山詳報の震源・震度情報一覧から任意の1ページを開くと、info.json(発生日時や最大震度、マグニチュードなどが入っている)、smallScalePoints.json(広域ポイント)、largeScalePoints.json(詳細ポイント)の3つがEDSからダウンロードされて、JavaScript(jQuery, OpenLayers3)で処理されます。<br />
<br />
地震火山詳報のページ内では提供していませんが、情報を各種SNSに流す時に付属させるデータとして、震度マップをWebKitに描画させてキャプチャした画像も生成しています。<br />
こんな画像がTwitterに震源・震度情報の概要と共に投稿されます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-H_034VTvzoU/VmMjsRV-_9I/AAAAAAAATU4/hJs_tU6peCE/s1600/intensityMap.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="http://4.bp.blogspot.com/-H_034VTvzoU/VmMjsRV-_9I/AAAAAAAATU4/hJs_tU6peCE/s400/intensityMap.jpg" width="400" /></a></div>
<br />
似たような震源・各地の震度画像出力エンジンを作っている会社もありますが、こちらは普通のHTML/CSS/JSで記述されたWebページから画像を生成しているので、簡単に出力する画像のデザインが可能というわけです。<br />
<br />
この画像地図は詳細ページの地図と違って、OpenStreetMapの地図タイルを使用していません。<br />
国土交通省の国土数値情報(行政区分)Shapefileから地図タイルを生成して、使用しています。(この地図タイルを持っているのがAZMAPサーバ)<br />
<br />
<h3>
関連する話</h3>
<br />
これも公開していないのですが、気象庁XML電文が届く度にheadlineをJSONに変換して流しているWebSocketサーバも作って使っています。<br />
これは、グローバルIPを持つサーバが無いと受け取れない気象庁XML電文を、どこでも受信できるように...という考えで立てているのですが、キャパシティがそんなに無いので(今のところ)自分用です。<br />
これをRaspberry Piで受けとって64x16ドットのフルカラーLEDマトリクスに表示させたりしている話は、また改めて記事にしようと思います。<br />
<br />
<h3>
感想と告知</h3>
<br />
<ul>
<li>自分の想像(妄想)を形にするものづくりは楽しい。生きている、生きていける理由。</li>
<li>Web系欲が満たされたので、またしばらく組み込み系に戻ります。</li>
<li>3か月くらい前から、はぐれエンジニアになって実家療養中です。</li>
</ul>
<br />Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-70980176551107425512015-12-05T21:39:00.000+09:002015-12-06T01:51:47.517+09:00OL3で扱える地図タイルをShapeから生成する<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-EeXcOsoTQzI/VmMNvbeoy3I/AAAAAAAATTs/7LxfOZoEGt0/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B1.14.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="273" src="http://3.bp.blogspot.com/-EeXcOsoTQzI/VmMNvbeoy3I/AAAAAAAATTs/7LxfOZoEGt0/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B1.14.00.png" width="400" /></a></div>
OpenLayers3で扱える地図タイルを<a href="http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03.html" target="_blank">国土交通省 国土数値情報(行政区域)</a>から生成する方法のメモ。<br />
この方法で出力すればOpenLayers3以外(Leafletなど)でも利用可能です。<br />
<br />
使用するのは<br />
<ul>
<li>TileMill <a href="https://www.mapbox.com/tilemill/">https://www.mapbox.com/tilemill/</a></li>
<li>mb-util <a href="https://github.com/mapbox/mbutil">https://github.com/mapbox/mbutil</a></li>
</ul><br />
<h3>1. Shapefileからmbtilesを生成する</h3>
<br />
<a href="http://learnosm.org/ja/map-design/tilemill/" target="_blank">LearnOSM</a>に詳しい手順が載っているので、おおまかな手順だけ。<br />
<br />
1. TileMillを起動し、New projectから新しいプロジェクトを作成する<br />
2. 適当なFilenameを入力し、Image formatを選択し、Addをクリック<br />
この時、デフォルトの世界地図を利用しない(読み込むShapefile以外必要ない)場合は、Default dataのチェックを外す<br />
3. Editor画面になったら、左下のLayersからAdd layerをクリック<br />
4. Datasourceで読み込みたいShapefileを選択し、Save & Styleをクリック<br />
5. Layerが追加されるので、適宜デザインを調整する(デザインはCartoCSSで記述可能)<br />
6. 右上のExportからMBTilesを選択する<br />
7. 書き出す範囲やズームレベルを以下のような形で選択し、Export<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-iTpFich5gyY/VmMQk95iPgI/AAAAAAAATT4/gl8qtDfEHCY/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B1.15.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="273" src="http://4.bp.blogspot.com/-iTpFich5gyY/VmMQk95iPgI/AAAAAAAATT4/gl8qtDfEHCY/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-12-06%2B1.15.33.png" width="400" /></a></div>
おおまかな容量がZoomの下に表示されるので、参考程度に。<br />
(100GB+とかの場合、出力に結構な時間を要する&ファイルサイズが大きくなるので注意)<br />
<br />
<h3>2. mbtilesから地図タイルを生成する</h3>
<br />
今回はTileMillで出力したjapan.mbtilesからjapan/tiles下に"Z/X/Y.png"の形で出力した。<br />
<pre class="brush: shell">git clone git://github.com/mapbox/mbutil.git
cd mbutil
python setup.py install
mb-util japan.mbtiles japan/tiles</pre>
<br />
tilesディレクト下の構造を保ったまま、適宜設置する。<br />
<br />
<h3>3. OL3で開く</h3>
<br />
ol.min.jsなどを呼び出してあげてから、以下のような感じで。<br />
<pre class="brush: javascript">var map = new ol.Map({
target: 'map',
renderer: 'canvas',
layers: [
new ol.layer.Tile({
source: new ol.source.XYZ({
url: '/tiles/{z}/{x}/{y}.png'
})
}),
new ol.layer.Tile({
source: new ol.source.TileWMS({
attributions: [new ol.Attribution({
html: "地図データ © 国土交通省 国土数値情報(行政区域)"
})]
})
})
],
view: new ol.View({
//中心座標(仮指定)
center: ol.proj.transform([134.15, 35.27], 'EPSG:4326', 'EPSG:3857'),
zoom: 6
})
});</pre>
<br />
(OpenLayers 3.11.2で動作確認済み)<br />
<br />
WGS84あたりに測地系を揃えてあげれば、QGISなどで作ったShapefileも同じ手法で地図タイルにできるので、色々なデータをOL3で見ると面白い(かも)Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0tag:blogger.com,1999:blog-7229367252151281027.post-3051815062690072172015-11-14T02:03:00.001+09:002015-11-14T02:26:16.267+09:00Arduino core for ESP8266でHTTPSが叩けるようになっていた件以前から使っている Arduino core for ESP8266 WiFi chip の<b>Staging Version</b> (ver. 1.6.5-1160-gef26c5f) でWiFiClientSecureが使えるようになっていました。<br />
<br />
今まではWiFiClientではhttpしか叩けなかったのですが、これでhttpsなWebサーバにもアクセス可能です。<br />
(<a href="http://eleclog.quitsq.com/2015/08/esp8266ssl-client.html" target="_blank">以前の記事</a>では、espconn_secure_connectを直接叩くことでhttpsなWebサーバにアクセスする方法を紹介していました)<br />
<br />
多分、こんなコードでPOSTできるはず!<br />
(現在やってるプロジェクトからhttpsPostの関数だけコピって持ってきたので、全体としては動作確認してませんが、関数自体は問題なく動くことを確認済み)<br />
<br />
<script src="https://gist.github.com/9SQ/200c796672b0f4db173e.js"></script>
ちなみに、text=Hello ESP8266!とbat=現在のVCC電圧がPOSTされます。<br />
<br />
もっとイケてるコードは examples/HTTPSRequest/HTTPSRequest.ino があるので、そちらを参考にしてください... (GitHubのAPIを叩いてJSONをパースしてる)<br />
→ <a href="https://github.com/esp8266/Arduino/commit/2ff8aa08d478aceee39fe4147cb7fcc1eef263f1">https://github.com/esp8266/Arduino/commit/2ff8aa08d478aceee39fe4147cb7fcc1eef263f1</a><br />
<br />
<a href="http://eleclog.quitsq.com/2015/08/esp8266ssl-client.html" target="_blank">以前の記事</a>で、SSLライブラリを有効化して、直接ESP8266のAPIを叩くという方法でHTTPS通信した場合と同様、暗号種は以下の4種対応です。<br />
<br />
<ul>
<li>TLS_RSA_WITH_AES_128_CBC_SHA</li>
<li>TLS_RSA_WITH_AES_256_CBC_SHA</li>
<li>TLS_RSA_WITH_RC4_128_SHA</li>
<li>TLS_RSA_WITH_RC4_128_MD5</li>
</ul>
<br />
WireSharkでパケット見た結果↓<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-gOe-pBxMmIU/VkYVmCqB0WI/AAAAAAAATTA/oaUGBUpmD-s/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-11-12%2B02.27.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="96" src="http://1.bp.blogspot.com/-gOe-pBxMmIU/VkYVmCqB0WI/AAAAAAAATTA/oaUGBUpmD-s/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-11-12%2B02.27.53.png" width="400" /></a></div>
<br />
ライブラリはlibsslではなく、axTLSという組み込み向けのSSLライブラリを使っています。<br />
<br />
<a href="http://axtls.sourceforge.net/" target="_blank">axTLS Embedded SSL</a><br />
<br />
これに気づいたのも、おニュー環境のMacにArduino IDEとArduino core for ESP8266のStaging Versionを入れて、<a href="http://eleclog.quitsq.com/2015/08/esp8266ssl-client.html" target="_blank">以前の記事</a>の通りにplatform.txtの27行目に -lsslを追記しようとしていたら...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-k3iQHN1Et9M/VkYWn2__xqI/AAAAAAAATTI/Q9ZG0GHVE0o/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-11-14%2B1.57.08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="http://3.bp.blogspot.com/-k3iQHN1Et9M/VkYWn2__xqI/AAAAAAAATTI/Q9ZG0GHVE0o/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2015-11-14%2B1.57.08.png" width="400" /></a></div>
<br />
axTLSがリンクされていたので、まさか... と思いGitHubのIssuesを遡ってたら、WiFiClientSecureを追加したよ!みたいな会話があったという。<br />
<br />
まだステージングなので色々変わるかもしれませんが、とりあえずこれでサクッとhttps使えますね。Keiichirohttp://www.blogger.com/profile/10635780479760219958noreply@blogger.com0