grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


2017年7月31日月曜日

ワイヤレス充電器(USB:5V)

ワイヤレス充電器を購入してみました。あいかわらずAliExpressで数百円で売っていたので試してみたという感じです。

AliExpress.com Product - Ifavor Universal Qi Wireless Charging Kit Charger Pad Coil Receiver Charger Adapter For Samsung Xiaomi Android Phone Micro USB515円(送料無料)、受電(左)と送電(右:直径70mm)のセット
左側の受電用の薄っぺらいカードは厚さ1mm程度で、スマホケースを使えばスマホの裏側におさまります。ただ、MicroUSBの差し込む向き、あるいはタイプCやiPhone用のものなど、選択する必要があります。

AliExpress.com Product - Android Micro USB Universal Qi Wireless Charger Receiver Charging Adapter Receptor Receiver Pad Coil Chip For Samsung HUAWEI131円(送料無料)、受電用のカード(コイル)だけ。スマホ以外にも使えるかもしれないので、MicroUSBの向きが逆のタイプも購入してみました。

こんな感じで、受電用カード(右)は厚さ1mm程度なのでスマホケース内部に収まります。受電カード上のワイヤレスマーク(((●)))側が充電器(給電器)と向き合うように配置します。距離的には、8mmくらい離れていても給電できました。

受電用カードの裏には、5V/1000mAまでの出力と書いてあります。給電用の丸い充電器は5V/1500mAまで入力可能のようです。
Amazonでも購入できますが、やはり少し高い。

ESP8266への給電:実は、スマホ用充電器として購入したのではなく、以下のような使い方を想定していました。
ESP8266に接続して5Vをワイヤレスで給電。安定はしないかもしれませんがESP8266だと一応動くようです。


受電用カードとブレッドボードはほぼ同じサイズ。

間に電圧電流計をはさんで計測してみると、安定しているときでは0.11Aくらいでしたが、0.4〜0.25Aの間を上下していました。不安定なときは4.8Vに下がるなど、充電器の位置が多少ずれると電力が変動しているようでした。
Raspberry Pi Zero Wへの給電:試しにRaspberry Pi Zero Wも接続してみましたが、もっと電力が必要そうでダメでした。
たまに安定して起動するときもあるのですが、電圧が5.0V以下になることもあり不安定で途中で落ちてしまいます。もう少し強力な充電器が必要そうです。ちなみに、Raspberry Pi Zero Wの場合は、
18650(一本)のUSB電源であれば動きますが、右端の単3電池を2本使うタイプ(100均)のUSB電源だとやはり電力不足。ということから、18650の電源を使ったほうがよさそうですが問題はケーブルが邪魔。ケーブルを使わないで直接Raspberry Pi Zero Wに配線してしまったほうがコンパクトになりそうです。Raspberry Pi Zero Wの裏側に電源の端子があるのですが、そこに直接ケーブルをハンダつけするというよりは、以下のようなポゴピンコネクターを電気接点に使うとよさそうです。
AliExpress.com Product - 10pcs Spring Loaded Pogo Pin Connector Diameter 2.0 mm x 7.0 mm height SMT / SMD PCB brass Gold plate 1u 50g force Probe Pin505円(10個:送料無料)

ワイヤレス充電器の部品:再び、ワイヤレス充電器についてですが、以下のような5Vで2Aまで流せる部品もあります。これを使えば、Raspberry Pi Zero Wも起動するのかもしれません。
AliExpress.com Product - 5V2A Large current wireless charging module Wireless power supply module free shipping1332円(送料無料)ある程度容量があるので、これは何かに使えそうです。
AliExpress.com Product - Universal Charging Receiver Charger 3 Coils Qi Wireless Charger PCBA Circuit Board Coil Wireless Charging Micro USB Ap 25 472円(送料無料)、こちらは3個コイルがついているタイプで強力そうです。その分、横長になっています。ある程度安定して給電するには、これくらいのほうがよさそうです。
テーブルに給電器を埋め込んでおけば、ただそこに置くだけでちょっとした電化製品なら電源が入る仕組みになりそうです。ノートパソコンなどもそうなればいいとは思いますが、そこまで強力だと電磁波など問題にならないのでしょうか?

ワイヤレス充電器内蔵型家具:IKEAの家具の中には、ワイヤレス充電器を埋め込むためのキットが売っています。
IKEAワイヤレス充電ユニット:3000円直径9cm、5V/2000mAなので、スマホやタブレット程度なら充電が可能なのかもしれません。

このように既存のテーブルなどに穴を開けて埋め込むようです。

すでにワイヤレス充電器が埋め込まれているベッドサイドテーブル:6999円もあるようです。家具も電源が必要になってきたという感じです。

2017年7月26日水曜日

Raspberry Pi Zero W:IPカメラ実験(Picamera)

Raspberry Pi Zero Wでやりたかったことの一つにIPカメラがあります。Zero Wにカメラをつないで、他の端末からZero WのIPアドレスにアクセスして監視できるようにするものです。主には、レーザー加工時の監視用カメラ(直接目で確認するより安全なので)です。

カメラの種類:
カメラは以前AliExpressから以下のような赤外線カメラを購入しておりました。このタイプはカメラ両脇に赤外線LED照明がついており、それを照射して暗い部屋の中でもその赤外線反射光を頼りに撮影可能になるらしい。ただし、レンズには赤外線フィルターがついていないため、明るい状況下ではやや色味が実際とは異なってしまうと思います(やや赤紫っぽくなる)。

AliExpress.com Product - Raspberry Pi Camera RPI Focal Adjustable Night Version Camera + Acrylic Holder + IR Light + FFC Cable for Raspberry Pi 2 / 31677円(送料込み)、赤外線LED照明のついた暗視タイプ、5メガピクセル。
また通常のタイプのものであれば以下。こちらは赤外線フィルターがついているため色味は自然なほうかと。
AliExpress.com Product - Free Shipping raspberry pi camera 5mp pixels RASPBERRY PI CAMERA730円(送料込み)、5メガピクセル、これは比較的安価。でも国内で買うと3000円くらい。
どうやら5メガピクセルのカメラV1がV2へバージョンアップして8メガピクセルになったようで、以下。
AliExpress.com Product - Original RPI 3 Camera Raspberry pi Camera V2 Module Board 8MP Webcam Video 1080p 720p Official camera For Raspberry Pi 3 2206円(送料無料)、8メガピクセル。これは純正。こちらは国内価格が5000円くらい。
なぜかカメラが国内では高いのですが、試す程度なら730円のV1でもよさそうです。

カメラ用プログラム:カメラ撮影を可能にするプログラム/アプリケーションがいくつかあるようで、ざっと調べた限りでは、・Motion・MJPG-streamer・Picamera(python)があるようです。こちらの記事を参考にすると、Motionは遅延があるようでMJPG-streamerのほうがいいらしい。また、公式ドキュメンテーションを見ると、Picameraが標準インストールされているらしいので、すぐにコマンドを打てば使えるらしい。ということから、MJPG-streamerは後回しにして、まずはPicameraで軽く実験してみることに。
Picamera:公式ドキュメンテーションのカメラ使用については、RASPBERRY PI CAMERA MODULEというページ(英語)があります。さらに、Picameraのドキュメンテーションとしてはこちらのページに詳しく書かれています。
セッティングと動作チェック:Zero Wでカメラ使用を可能にするための設定として、以下の「Raspberry Piの設定」画面で「カメラ」を「有効」にチェックを入れておきます。そして一度再起動が必要らしいです。このあたりの設定については、ドキュメンテーションのGetting Startedに書いてあります。 

尚、パソコンからWifiを通してZero Wを遠隔操作しているため「VNC」も「有効」にしてあります。どうやら、その後「シリアル」も「有効」にしておいたほうがよさそうですが、いまのとこ無効のまま。Picameraを起動する前に、sudo apt-get updatesudo apt-get upgradeをしておいたほうがいいでしょう。数ヶ月使っていなかったため、10分以上アップグレードに時間がかかりました。
Zero Wを再起動後、ターミナルを開いて、
raspistill -o test.jpg

を入力すれば、test.jpgという名前のファイルで静止画を出力(保存)するようです。実際にやってみると、
このように、test.jpgが/home/piディレクトリ内に出力保存されています。これをクリックし写っていればカメラは問題なく機能しているということになります。

プレビュー画面:ビデオ映像をプレビューするには、raspivid -t 10000を入力すれば、10秒間プレビュー画面がでてくるようです。raspivid -t 0であれば、ctrl+cを押してプログラムを終了するまでずっとプレピューとなるようです。しかしながら、VNCを通してプレビューしようとするとプレビュー画面が現れません。これはVNCにプレビュー画面を転送表示する機能がないからのようです。その場合はでネットワーク表示させろと書いてあります

Webストリーミング:次に本題のWebストリーミングの方法に入っていきたいと思います。ちなみに、これらすべてはVNCを通してMacBook ProからWifi経由で操作しています。いろいろ探してみると、PicameraのドキュメンテーションのAdvanced Recipesに、そのまんま「4.10 Web Streaming」という項目があります。冒頭の説明で、Webを通してのビデオストリーミングは驚くほど複雑だと書いてあります。しかしながら、Pythonによる88行からなるサンプルソースが掲載されています。試しにコピペしてZero W上で確かめてみようと思います。


import io
import picamera
import logging
import socketserver
from threading import Condition
from http import server

PAGE="""\
<html>
<head>
<title>picamera MJPEG streaming demo</title>
</head>
<body>
<h1>PiCamera MJPEG Streaming Demo</h1>
<img height="480" src="stream.mjpg" width="640" />
</body>
</html>
"""

class StreamingOutput(object):
    def __init__(self):
        self.frame = None
        self.buffer = io.BytesIO()
        self.condition = Condition()

    def write(self, buf):
        if buf.startswith(b'\xff\xd8'):
            # New frame, copy the existing buffer's content and notify all
            # clients it's available
            self.buffer.truncate()
            with self.condition:
                self.frame = self.buffer.getvalue()
                self.condition.notify_all()
            self.buffer.seek(0)
        return self.buffer.write(buf)

class StreamingHandler(server.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.send_response(301)
            self.send_header('Location', '/index.html')
            self.end_headers()
        elif self.path == '/index.html':
            content = PAGE.encode('utf-8')
            self.send_response(200)
            self.send_header('Content-Type', 'text/html')
            self.send_header('Content-Length', len(content))
            self.end_headers()
            self.wfile.write(content)
        elif self.path == '/stream.mjpg':
            self.send_response(200)
            self.send_header('Age', 0)
            self.send_header('Cache-Control', 'no-cache, private')
            self.send_header('Pragma', 'no-cache')
            self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
            self.end_headers()
            try:
                while True:
                    with output.condition:
                        output.condition.wait()
                        frame = output.frame
                    self.wfile.write(b'--FRAME\r\n')
                    self.send_header('Content-Type', 'image/jpeg')
                    self.send_header('Content-Length', len(frame))
                    self.end_headers()
                    self.wfile.write(frame)
                    self.wfile.write(b'\r\n')
            except Exception as e:
                logging.warning(
                    'Removed streaming client %s: %s',
                    self.client_address, str(e))
        else:
            self.send_error(404)
            self.end_headers()

class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
    allow_reuse_address = True
    daemon_threads = True

with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
    output = StreamingOutput()
    camera.start_recording(output, format='mjpeg')
    try:
        address = ('', 8000)
        server = StreamingServer(address, StreamingHandler)
        server.serve_forever()
    finally:
        camera.stop_recording()




とりあえず、デスクトップ上にテキストエディタでwebstream.pyなるファイルをつくって、そこにコピペです。どうやらこれは、Python3用のソースです(このままではPython2.7では動きません)。Zero WにPIXELをインストールしていれば、Python2.7も3も両方入っているので特に問題はありません。
保存したあと、ターミナルを開いて、まずはwebstream.pyのあるDesktopディレクトリへ移動するために、
cd Desktop
そして、Python3でこのスクリプトを起動するのですが、
python3 webstream.py
と打ち込みます。そうすると、特にモニタリング用の画面などは現れずに以下のような画面。
これは、Zero W上のターミナル画面です。サンプルが起動したら、Zero WのIPアドレス:8000/index.htmlに他の端末のブラウザでアクセスするとリアルタイムでの映像を見ることができます。


こんな感じで、193.168.3.2:8000/index.htmlにMacBook ProのChromeでアクセスしてみました。手を揺らしてみましたが、特に目立った遅延などなくスムースに動いています。コードを編集する必要もなく、すぐに動作確認することができました。画面上方の文字が邪魔ですが、コード11行目のHTMLを編集し直せばすぐに消しとることができます。
プログラム終了方法:ctrl+cを押すか、ターミナルを閉じてしまうと終了します。
Zero WのIPアドレス:
ちなみに、Zero WのIPアドレスは、画面右上のWifiアンテナマークにカーソルを重ねると出てきます。
またポート:8000に関しては、コード下から5行目に8000を指定してあるので、変更したい場合はその部分を任意のポートにすればいいと思います。


Python IDLEで起動:
ターミナルが苦手というのであれば、すでにPython 3 (IDLE)がインストールされているので、

コピペしたPythonスクリプトをデスクトップ上で右クリックして、
アプリケーションで開くを選択し、

Python 3(IDLE)を選択すれば、

先程のコードがIDLE上にでてきます。あとはRun Moduleすれば、このプログラムが起動します。
そして、別の端末のブラウザでIPアドレスにアクセスすれば撮影内容を見ることができます。

モバイルバッテリーにつなげばスタンドアロンのIPカメラとして使えるので便利そうです。バッテリーとUSBケーブルの間に電圧電流計をはさんでみましたが、カメラ起動中は約0.2〜0.3A程度の電流になっていました(以下)。
カメラ起動中は、赤いLEDがオンになります。

まとめ:
比較的簡単にWebストリーミングできました。このソースにHTMLの表示内容も書き込んであるので、見た目や配置を変更することも簡単にできそうです。
この実験のあと、Python2.7でも動かせるかどうか確かめてみました。Python3のsocketserverならびにserverモジュールが、python2.7ではSocketServer、SimpleHTTPServerに置き換わるのですが、そのために多少書き直す部分がでてくるので面倒。そのうちやろうと思います。
それから、かなりZero Wのチップが熱くなっていたので、ヒートシンクはつけたほうがよさそうです。

Posted at 2017.7.26
EasyWordMall アルミニウムヒートシンク Raspberry Pi用 6枚入り
Apple Trees E-commerce co., LT
販売価格 ¥198
(2017年7月26日4時48分時点の価格)

2017年7月19日水曜日

Raspberry Pi Zero Wを購入

昨日7/18にようやく日本でもRaspberry Pi Zero Wが販売になりました。やっと技適が通り、これまで海外で売っていたもの(技適なし:技適マークはあるものの、番号がない)とは違うものらしい。

スイッチサイエンスでは、会員登録して入荷通知設定をしておくと上のようなメールが届くシステムになっており、販売日時などは予めわかっていました。7/18の18:00から販売開始でしたが、その時間にログインしてみてもなかなか販売開始にならず、しかもアクセスが集中しているためかほぼ接続できない状況になっていました。アクセスできてもあいかわらず以下のような「この商品は在庫がありません」だけの表示。


このような人気商品がネットショップで発売になる場合、サーバ混雑はよくあることなので、ここは冷静にレスポンスを受け取れるまで何度も再読み込みをしてみました。
18:00開始とは言っても、実際は19:34になってはじめて、商品をカートに追加できるボタンが現れて、ようやくクリック。


どうやらカートには追加されたようでしたが、その後の購入手続きのボタンをクリックすると画面移行後にエラー続出。
以前も似たような経験はしたことがあるので、URLをコピペし再読み込みを繰り返すと、10回に1回くらいの再読込でアクセスできる感じで、次の画面に移行できました(画面移行でエラーがでるといっても、複数買いになってしまうことがあるので「カートへ追加」ボタンなどは何回も押さないほうがいい)。
しかし、購入完了までは何回か画面移行しなければいけなく、その都度移行失敗でエラー画面が出てしまいます。何度もチャレンジして、ようやく支払い画面、もうすでに10分以上はこの手続きのために時間がかかっています。

こんな感じ:
・まず、商品画面の表示(「カートに追加」ボタンがあるかどうか)
・「カートに追加」ボタンを押し、購入手続きへ移行
・購入決定(注文発生)
・支払い画面へ移行
・支払い手続き(Paypal経由のクレジットカード払い)

購入完了までの4〜5回画面移行するたびにエラー画面が現れるので、画面表示されたらそのURLをコピーしておき、次の画面へ移行後エラーが出た場合、前のURLを再入力して再度前画面に戻るか、移行後のURLもコピーしておき、何度もアクセスする感じで、10回に1回くらいの頻度で少しずつ進んで行く感じです。画面移行したら、その画面はキープしておき、また別の画面を用意して元のURLをペーストして再読み込みさせるという感じで、ひとつの画面で先にも進めず、元にも戻れずとはならないように、複数の画面を使い分けるのがいいと思います(とは言っても、こんなアクセス不安定な状況下での注文の機会はあまりありませんが)。
最後のPaypalでの支払いボタンを押すところまで辿りつけたのですが、支払いボタンをクリックした後にまたエラー。これも何度か繰り返し、Paypalアカウントのほうも開いて支払い済みになっているかチェックしてみたものの、まだ支払いが未確認。
そうすると、どうやら登録してあるGmailのほうになにやら返事が来ているようで、みてみると、


このような注文と支払い完了のメールが2通届いていました。
これでどうやら購入できたようです。ようやく安心。
その後Paypalアカウントのほうもチェックしてみると、支払いが発生しており無事購入完了となりました。何度も再読み込みやクリックをしたので、複数支払いが発生していないか心配でしたが大丈夫そうでした。
結局、19:34にカートへ追加の画面が現れて、購入手続きと支払い手続きが完了するまでにエラー画面をくぐりぬけて19:51に購入成立に至りました。どうやら19:30以降の20分程度(アクセス状況が悪い中)で売り切れになったようです。Twitterを見ると、カートに追加はできたけれども、支払い画面でエラーが出て、再度画面を戻るとすでに売り切れ状態になっていて購入できなかったという人も多かったようです。
もしサーバが安定していて、スムースに購入できていれば、5分もたたないうちに売り切れになっていたでしょう。逆にアクセスしにくい状況であったからこそなんとか運良く買うことができたのかもしれません。
もうひとつの販売ショップであるKSYのほうでは、20:00頃でも4320円のセット販売の商品なら売り切れにはなっていませんでしたが、それもいつのまにか売り切れ。
やはり、案の定すぐに売り切れという結末でした。


PimoroniのRaspberry Pi Zero W:
Raspberry Pi Zero Wは、3月頃に発売予定でしたが、技適マークは印刷されてはいるものの番号がまだついておらず、ずっと販売延期になっており、再度新しいタイプ(技適番号付き)を発売するには数ヶ月後になるのではと思っていたので、待ちきれず英国のPimoroniのほうで購入しておりました。
PimoroniのZero Wは技適マークはついているものの、番号まではついていないのでこのままでは正式な技適認証済のものとはならないようです。
最近のPimoroniのZero W(購入当時は送料込みで1970円)は、以下のようにもう技適番号もついているようです。
おそらくしばらくはヤフオクやAmazonで高額転売されると思うのですが、今回購入できなかった場合は、Pimoroni(送料込みで約2000円)で購入すればいいと思います。早ければ1週間程度で届きます。


カメラモジュール:
いずれにせよZero WにカメラモジュールをつけてWifiカメラをつくりたいと思っていたので、

AliExpress.com Product - Raspberry Pi Zero Camera Focal Adjustable Night Vision Camera Module +2 IR Sensor LED Light for RPI Zero 1618円(送料無料)
このような暗視カメラもAliExpressで購入しました。国内でこのようなカメラモジュールはなぜか高い(5MPで3000円くらい、8MPで5000円くらい)。


Raspberry Pi用のカメラモジュールは、いくつか出ていますが、問題はこのフラットケーブルで、Pi3の端子(幅広)とZeroやZero Wの端子(幅細)の幅が違うし(幅変換が必要)、もう少し短いケーブルも欲しかったことから、
この公式のケース(648円)に付属している短いケーブル欲しさのために、これも今回スイッチサイエンスから購入しました(案外このような短い変換ケーブルが売っていないので)。

最初に販売された$5のZeroのほうはWifiがないために、$10のZero Wのほうが圧倒的に便利だろうとZeroは購入しませんでした。
実際にZero Wを使ってみると、Pi3に比べるとスペックは下なので、やはり動きはやや遅いという感じです。モニターをつないで、ブラウザでインターネットをしてみると動画などは少々きついという感じでした。それでも、この小ささでWifiもBLEもついているし、ESP32よりもかなり強力なのではないかと思います(消費電力は高いけれども)。

Zero Wには、MiniUSB端子が2つしかなく、そのうち一つは電源用なので、実際はMiniUSB端子一つしかありません。そのため、キーボードやマウス操作は以前購入したBluetoothキーボード(タッチパッド付き)を使っています。
AliExpress.com Product - Windows PC 59 Keys Ultra Slim Mini Bluetooth Keyboard with Touch Pad Panel RR6V1451円(送料込み)
USBハブがなければ、普通のUSBキーボードとマウスを両方同時に接続することができません。この部分がZero Wの不便な点ですが、以下のVNCを使えばいいかと。

VNCによる遠隔操作:
そもそもZero Wにはモニターやキーボードを直接接続せずに、パソコンからVNCを使ってWifi経由で遠隔操作したほうが使いやすいと思います。そのためWifiのないZeroではなく、すぐにVNC接続可能なZero Wのほうが便利という感じです。
このようにパソコンにVNC Viewerをインストールし、Zero Wのほうでも設定しておけばZero WのIPアドレスにアクセスして操作できます。

パソコン(MacBook Pro)の画面上に現れたZero Wの画面。
この状態でパソコンからZero Wを扱うことができます。最近のPIXELをZero Wにインストールしておけば、VNCは標準装備されていたと思うので、すぐに使えると思います。
「Raspberry Piの設定」画面内でVNCを有効にしておけば使えるようになります。ただし、最初だけこの設定をモニタとつないで設定しなければいけなかったような。

各種サイズ比較:
左から、18650電池ボックス(USB5V出力)、100均単3電池ボックス(USB5V出力/改造:スイッチ付き)、Zero W、ESP32、ESP8266。
Zero W(65mm x 30mm)は、ESP32より少し大きいのですが、それでもこのスペックにしてはかなり小さい感じです。


ということで数日中には、この変換ケーブルつき公式ケースとともに技適認証済みZero Wが届くと思うので、Wifiカメラの実験をしてみようかと考えています。


追記(現物到着):
7/18の注文から2日後の7/20には、Raspberry Pi Zero Wが到着しました。
さっそく中身を確認してみると、
上のほうは少し前にPimoroniで購入したもの(技適マークはあるものの番号がない)。
そして、下のほうが今回スイッチサイエンスで購入したZero W 。新しいタイプが届くのかと思いきや、技適マークと番号がシールで貼られているタイプのものでした。
最初の国内ロットは、このタイプなのかもしれません。
スイッチサイエンスのページに、このシールについて書いてありましたが、このシールは販売店や購入者が勝手に貼ってはいけないらしい。ハードウェア的な上では、シール以外は何ら変わらない感じで、このシールを貼るだけで済んだのかと少々疑問。当然、このシールの偽造は違法行為となるので、こんなシールであっても重要らしい(苦肉の策という感じ)。
ということで、あまり新鮮味は感じませんでしたが、無事届いたのでよかったです。

そして公式ケース(カメラ用の短いフラットケーブル付き)はというと、
こんな感じでカメラと接続してケースに収納してみました。赤いケースに対して、白い蓋が3種類ついています。カメラは以前AliExpressで購入したもの、そして下に見えるのがカメラに付属していた150mmフラットケーブル。

公式ケースに付属していた短いフラットケーブルはコンパクトにまとまりそうでいいのですが、ケースやZero W本体に対してカメラレンズがどっち向きになるかということが問題。
このカメラの場合はこの状態でレンズが上向きなので、フラットケーブルを折り曲げると、白い蓋のほうには向かず、裏側に向いてしまいます。カメラによっても、基板の裏側にフラットケーブル・コネクタがついているものもあるようで、その場合はレンズは逆向きになるというわけです。カメラを購入する場合は、この向きに注意したほうがよさそうです。
そもそも、このカメラはレンズが大きいのでカメラ用の穴がついている白い蓋には合いません。このケースを使うならば、仕方なくこのように裏側にまわして使うしかないでしょう。幸い、このカメラモジュールの基板の裏面には何も実装されておらず、ただの平面なのでそのまま両面テープなどでも固定できそうです。
単に短いフラットケーブルが欲しかったためにこのケースを購入したので、ケース自体は使うかどうかわかりませんが、せっかくあるので使ったほうがいいかと。

関連: