エンジンを弄っているとピストン&ヘッドの状態が気になるときがあります。素直にシリンダヘッドを取り外せばいいのですが、ちらっと見たいだけのときにそこまでするのはちょっと面倒です。そこで安価なUSBエンドスコープを購入してみました。これがあればスパークプラグを外すだけでシリンダヘッドの状態を観察できるハズです。
購入したエンドスコープ
ものは直径5.5mmの筐体にカメラとLED照明を収めた代物です。手術で用いる内視鏡のようなものを期待しているとがっくりくるかもしれませんが、私のようにちょっとプラグホールからシリンダーを見たいというような用途にはぴったりです。お値段は送料込みで約500円でした(ヤフオクでも同じような商品がありました。値段だけなら送料を考えるとAliexpressの方が安そう)。
なお、私が購入したサイトでは直径5.5mm/7mmのふたつが選べました。私はなるたけ狭い場所にも使えるよう5.5mmにしましたが、もしかすると7mmのほうがLED照明は明るいかもしれません。
- Aliexpress - 2017 Newest 5.5/7mm Waterproof Mini Android Endoscope USB Wire Snake Tube Inspection Borescope Compatible Android Smartphone PC
https://ja.aliexpress.com/item/2017-5-5-7-android-usb-android-pc/32841045162.html
対応アプリケーション
PC(Windows10)に接続して使うなら標準のカメラアプリが使えます。他にもUSBカメラに対応したアプリなら大丈夫かと思います。
AndroidやiPhone等のスマートフォンに繋ぐ場合は対応ソフトをインストールする必要があります。私はAndroid端末にOTG Viewというアプリケーションをインストールして使いました(広告表示が無かったのでコレにしましたが、ほかにも同じようなアプリがあるので気に入ったものを使うと良いかと思います)。
カメラでエンジン内部を見る
早速エンジンのプラグ穴からカメラを突っ込んでみました。このカメラは対象が近いとピントが合わないのであらかじめピストンを引っ込めておきました。
こんな感じになります。解像度が640x480なので画質には期待出来ませんが、ピストン上面を観察するくらいなら問題なさそうです。続いてカメラの先に反射鏡オプションをつけて燃焼室側を確認してみました。
うーん、正直なところ単純にカメラを挿入するだけだと思ったように撮影出来ません。針金のようなものでカメラの位置を調整してやればもっと上手く撮れるかもしれません。続いてオイルキャップからいれてみました。
こちらもカメラの視野角が狭いので思ったように全体像を撮れません。まぁ、本当に気になるギアやクランクはここからは見れないのですが。。。うっかりカメラを突っ込みすぎてオイルに浸かってしまいましたが防水仕様ということで浸水(?)はしませんでした。
ディスクリプタテーブルを見る
USBViewを使ってこのマイクロスコープのディスクリプタテーブルを取得してみました。製品説明通り最大解像度は640x480(VGA)で、画像フォーマットはYUY2のみのようです。コントラスト等の調整機能はあるようですが手動のみで自動補正(オートフォーカスとか)は未対応でした。ピント調整はソフト側の機能次第かな。
[Port6] : USB Composite Device Is Port User Connectable: yes Is Port Debug Capable: no Companion Port Number: 0 Companion Hub Symbolic Link Name: Protocols Supported: USB 1.1: yes USB 2.0: yes USB 3.0: no Device Power State: PowerDeviceD3 ---===>Device Information<===--- String Descriptor for index 2 not available while device is in low power state. ConnectionStatus: Current Config Value: 0x01 -> Device Bus Speed: High (is not SuperSpeed or higher capable) Device Address: 0x08 Open Pipes: 1 ===>Device Descriptor<=== bLength: 0x12 bDescriptorType: 0x01 bcdUSB: 0x0200 bDeviceClass: 0xEF -> This is a Multi-interface Function Code Device bDeviceSubClass: 0x02 -> This is the Common Class Sub Class bDeviceProtocol: 0x01 -> This is the Interface Association Descriptor protocol bMaxPacketSize0: 0x40 = (64) Bytes idVendor: 0x1908 = APPOTECH LIMITED idProduct: 0x2311 bcdDevice: 0x0100 iManufacturer: 0x01 String Descriptor for index 1 not available while device is in low power state. iProduct: 0x02 String Descriptor for index 2 not available while device is in low power state. iSerialNumber: 0x00 bNumConfigurations: 0x01 ---===>Open Pipes<===--- ===>Endpoint Descriptor<=== bLength: 0x07 bDescriptorType: 0x05 bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1 bmAttributes: 0x03 -> Interrupt Transfer Type wMaxPacketSize: 0x000A = 1 transactions per microframe, 0x0A max bytes bInterval: 0x05 ---===>Full Configuration Descriptor<===--- ===>Configuration Descriptor<=== bLength: 0x09 bDescriptorType: 0x02 wTotalLength: 0x0155 -> Validated bNumInterfaces: 0x02 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0x80 -> Bus Powered MaxPower: 0x80 = 256 mA ===>IAD Descriptor<=== bLength: 0x08 bDescriptorType: 0x0B bFirstInterface: 0x00 bInterfaceCount: 0x02 bFunctionClass: 0x0E -> Video Interface Class bFunctionSubClass: 0x03 -> Video Interface Collection bFunctionProtocol: 0x00 -> PC_PROTOCOL_UNDEFINED protocol iFunction: 0x02 String Descriptor for index 2 not available while device is in low power state. ===>Interface Descriptor<=== bLength: 0x09 bDescriptorType: 0x04 bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x01 bInterfaceClass: 0x0E -> Video Interface Class bInterfaceSubClass: 0x01 -> Video Control Interface SubClass bInterfaceProtocol: 0x00 iInterface: 0x02 String Descriptor for index 2 not available while device is in low power state. ===>Class-Specific Video Control Interface Header Descriptor<=== bLength: 0x0D bDescriptorType: 0x24 bDescriptorSubtype: 0x01 bcdVDC: 0x0100 wTotalLength: 0x0033 -> Validated dwClockFreq: 0x02DC6C00 = (48000000) Hz bInCollection: 0x01 baInterfaceNr[1]: 0x01 USB Video Class device: spec version 1.0 ===>Video Control Input Terminal Descriptor<=== bLength: 0x12 bDescriptorType: 0x24 bDescriptorSubtype: 0x02 bTerminalID: 0x01 wTerminalType: 0x0201 = (ITT_CAMERA) bAssocTerminal: 0x00 iTerminal: 0x00 ===>Camera Input Terminal Data wObjectiveFocalLengthMin: 0x0000 wObjectiveFocalLengthMax: 0x0000 wOcularFocalLength: 0x0000 bControlSize: 0x03 bmControls : 0x00 0x00 0x00 D00 = 0 no - Scanning Mode D01 = 0 no - Auto-Exposure Mode D02 = 0 no - Auto-Exposure Priority D03 = 0 no - Exposure Time (Absolute) D04 = 0 no - Exposure Time (Relative) D05 = 0 no - Focus (Absolute) D06 = 0 no - Focus (Relative) D07 = 0 no - Iris (Absolute) D08 = 0 no - Iris (Relative) D09 = 0 no - Zoom (Absolute) D10 = 0 no - Zoom (Relative) D11 = 0 no - PanTilt (Absolute) D12 = 0 no - PanTilt (Relative) D13 = 0 no - Roll (Absolute) D14 = 0 no - Roll (Relative) D15 = 0 no - Reserved D16 = 0 no - Reserved D17 = 0 no - Focus, Auto D18 = 0 no - Privacy D19 = 0 no - Focus, Simple D20 = 0 no - Window D21 = 0 no - Region of Interest D22 = 0 no - Reserved D23 = 0 no - Reserved ===>Video Control Processing Unit Descriptor<=== bLength: 0x0B bDescriptorType: 0x24 bDescriptorSubtype: 0x05 bUnitID: 0x02 bSourceID: 0x01 wMaxMultiplier: 0x0000 bControlSize: 0x02 bmControls : 0x3F 0x05 D00 = 1 yes - Brightness D01 = 1 yes - Contrast D02 = 1 yes - Hue D03 = 1 yes - Saturation D04 = 1 yes - Sharpness D05 = 1 yes - Gamma D06 = 0 no - White Balance Temperature D07 = 0 no - White Balance Component D08 = 1 yes - Backlight Compensation D09 = 0 no - Gain D10 = 1 yes - Power Line Frequency D11 = 0 no - Hue, Auto D12 = 0 no - White Balance Temperature, Auto D13 = 0 no - White Balance Component, Auto D14 = 0 no - Digital Multiplier D15 = 0 no - Digital Multiplier Limit iProcessing : 0x00 ===>Video Control Output Terminal Descriptor<=== bLength: 0x09 bDescriptorType: 0x24 bDescriptorSubtype: 0x03 bTerminalID: 0x03 wTerminalType: 0x0101 = (TT_STREAMING) bAssocTerminal: 0x00 bSourceID: 0x02 iTerminal: 0x00 ===>Endpoint Descriptor<=== bLength: 0x07 bDescriptorType: 0x05 bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1 bmAttributes: 0x03 -> Interrupt Transfer Type wMaxPacketSize: 0x000A = 1 transactions per microframe, 0x0A max bytes bInterval: 0x05 ===>Class-specific VC Interrupt Endpoint Descriptor<=== bLength: 0x05 bDescriptorType: 0x25 bDescriptorSubtype: 0x03 wMaxTransferSize: 0x000A = (10) Bytes ===>Interface Descriptor<=== bLength: 0x09 bDescriptorType: 0x04 bInterfaceNumber: 0x01 bAlternateSetting: 0x00 bNumEndpoints: 0x00 bInterfaceClass: 0x0E -> Video Interface Class bInterfaceSubClass: 0x02 -> Video Streaming Interface SubClass bInterfaceProtocol: 0x00 iInterface: 0x00 ===>Video Class-Specific VS Video Input Header Descriptor<=== bLength: 0x0E bDescriptorType: 0x24 bDescriptorSubtype: 0x01 bNumFormats: 0x01 wTotalLength: 0x00E3 -> Validated bEndpointAddress: 0x82 -> Direction: IN - EndpointID: 2 bmInfo: 0x00 -> Dynamic Format Change not Supported bTerminalLink: 0x03 bStillCaptureMethod: 0x02 -> Still Capture Method 2 bTriggerSupport: 0x01 -> Hardware Triggering Support bTriggerUsage: 0x01 -> Host will notify client application of button event bControlSize: 0x01 Video Payload Format 1 0x00 D00 = 0 no - Key Frame Rate D01 = 0 no - P Frame Rate D02 = 0 no - Compression Quality D03 = 0 no - Compression Window Size D04 = 0 no - Generate Key Frame D05 = 0 no - Update Frame Segment D06 = 0 no - Reserved D07 = 0 no - Reserved ===>Video Streaming Uncompressed Format Type Descriptor<=== bLength: 0x1B bDescriptorType: 0x24 bDescriptorSubtype: 0x04 bFormatIndex: 0x01 bNumFrameDescriptors: 0x05 guidFormat: {32595559-0000-0010-8000-00AA00389B71} = YUY2 Format bBitsPerPixel: 0x10 bDefaultFrameIndex: 0x01 bAspectRatioX: 0x00 bAspectRatioY: 0x00 bmInterlaceFlags: 0x00 D0 = 0x00 Interlaced stream or variable: No D1 = 0x00 Fields per frame: 2 fields D2 = 0x00 Field 1 first: No D3 = 0x00 Reserved D4..5 = 0x00 Field patterns -> Field 1 only D6..7 = 0x00 Display Mode -> Bob only bCopyProtect: 0x00 -> Duplication Unrestricted ===>Video Streaming Uncompressed Frame Type Descriptor<=== --->This is the Default (optimum) Frame index bLength: 0x22 bDescriptorType: 0x24 bDescriptorSubtype: 0x05 bFrameIndex: 0x01 bmCapabilities: 0x00 wWidth: 0x0280 = 640 wHeight: 0x01E0 = 480 dwMinBitRate: 0x04650000 dwMaxBitRate: 0x08CA0000 dwMaxVideoFrameBufferSize: 0x00096000 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x02 ===>Additional Discrete Frame Type Data dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) dwFrameInterval[2]: 0x000A2C2B = 66.666700 mSec (15.00 Hz) ===>Video Streaming Uncompressed Frame Type Descriptor<=== bLength: 0x22 bDescriptorType: 0x24 bDescriptorSubtype: 0x05 bFrameIndex: 0x02 bmCapabilities: 0x00 wWidth: 0x0160 = 352 wHeight: 0x0120 = 288 dwMinBitRate: 0x01734000 dwMaxBitRate: 0x02E68000 dwMaxVideoFrameBufferSize: 0x00031800 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x02 ===>Additional Discrete Frame Type Data dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) dwFrameInterval[2]: 0x000A2C2B = 66.666700 mSec (15.00 Hz) ===>Video Streaming Uncompressed Frame Type Descriptor<=== bLength: 0x22 bDescriptorType: 0x24 bDescriptorSubtype: 0x05 bFrameIndex: 0x03 bmCapabilities: 0x00 wWidth: 0x0140 = 320 wHeight: 0x00F0 = 240 dwMinBitRate: 0x01194000 dwMaxBitRate: 0x02328000 dwMaxVideoFrameBufferSize: 0x00025800 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x02 ===>Additional Discrete Frame Type Data dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) dwFrameInterval[2]: 0x000A2C2B = 66.666700 mSec (15.00 Hz) ===>Video Streaming Uncompressed Frame Type Descriptor<=== bLength: 0x22 bDescriptorType: 0x24 bDescriptorSubtype: 0x05 bFrameIndex: 0x04 bmCapabilities: 0x00 wWidth: 0x00B0 = 176 wHeight: 0x0090 = 144 dwMinBitRate: 0x005CD000 dwMaxBitRate: 0x00B9A000 dwMaxVideoFrameBufferSize: 0x0000C600 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x02 ===>Additional Discrete Frame Type Data dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) dwFrameInterval[2]: 0x000A2C2B = 66.666700 mSec (15.00 Hz) ===>Video Streaming Uncompressed Frame Type Descriptor<=== bLength: 0x22 bDescriptorType: 0x24 bDescriptorSubtype: 0x05 bFrameIndex: 0x05 bmCapabilities: 0x00 wWidth: 0x00A0 = 160 wHeight: 0x0078 = 120 dwMinBitRate: 0x00465000 dwMaxBitRate: 0x008CA000 dwMaxVideoFrameBufferSize: 0x00009600 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x02 ===>Additional Discrete Frame Type Data dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) dwFrameInterval[2]: 0x000A2C2B = 66.666700 mSec (15.00 Hz) ===>Still Image Frame Type Descriptor<=== bLength: 0x0A bDescriptorType: 0x24 bDescriptorSubtype: 0x03 bEndpointAddress: 0x00 bNumImageSizePatterns: 0x01 wWidth[1]: 0x0280 wHeight[1]: 0x01E0 bNumCompressionPattern: 0x00 ===>Color Matching Descriptor<=== bLength: 0x06 bDescriptorType: 0x24 bDescriptorSubtype: 0x0D bColorPrimaries: 0x00 bTransferCharacteristics: 0x00 bMatrixCoefficients: 0x00 ===>Interface Descriptor<=== bLength: 0x09 bDescriptorType: 0x04 bInterfaceNumber: 0x01 bAlternateSetting: 0x01 bNumEndpoints: 0x01 bInterfaceClass: 0x0E -> Video Interface Class bInterfaceSubClass: 0x02 -> Video Streaming Interface SubClass bInterfaceProtocol: 0x00 iInterface: 0x00 ===>Endpoint Descriptor<=== bLength: 0x07 bDescriptorType: 0x05 bEndpointAddress: 0x82 -> Direction: IN - EndpointID: 2 bmAttributes: 0x05 -> Isochronous Transfer Type, Synchronization Type = Asynchronous, Usage Type = Data Endpoint wMaxPacketSize: 0x1400 = 3 transactions per microframe, 0x400 max bytes bInterval: 0x01 ===>Additional Error Checking<=== PASS: number of uncompressed-frame frame descriptors (5) == number of frame descriptors (5) specified in uncompressed format descriptor(s)
所感
おひとつ500円、用途が決まっているならコストパフォーマンスはよいと思います。手元にあれば使う機会もあるかも?
値段が値段なので過度の期待は禁物ですが、狭くて中が見えないようの場所のちょっとした確認には便利かなと思います。私としてはプラグ穴からピストン表面が確認出来たので満足ですが、カメラケースはある程度の長さがあるので細くて折れ曲がったパイプだと難しいかもしれません。