34
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ラズパイでコンデジを作る

Last updated at Posted at 2018-07-13

ラズパイでズームレンズが使えるコンデジを作ってみました。

完成したものがこちら。

IMG_4317.JPG

IMG_4321.JPG

カメラモジュールは Raspberry Pi Camera V2 を使っています。レンズはCマウントか、CSマウントのレンズを付けれるようにします。液晶モニターを見ながらズームやピントを合わせて、ボタンをポチッと押したら撮影できます。

必要なもの

  • Raspberry Pi 3 Model B+
  • Raspberry Pi Camera V2
  • 3Dプリンター
  • その他こまごましたものたくさん

Raspberry Pi Model B+ (Plus)

Raspberry Pi Camera V2

作業全体の流れとしてはこのような感じになります。

  1. 必要なパーツを3D印刷する

必要なパーツを3D印刷する

STLファイルを Thingiverse にアップしてあるのでダウンロードして印刷してください。
Raspberry Pi Camera Case with CS(C) Mount Lens

レンズを固定するマウントです。3D印刷したパーツとアルミのリングを接着して使います。

a_00.jpg

a_01.jpg

スイッチ類やバッテリーを入れる部分です。カメラを構えるときに右手で握る場所でもあります。本体と接着します。

a_02.jpg

a_03.jpg

ラズパイやカメラモジュールや液晶が入る場所です。

a_04.jpg

a_05.jpg

最終的にはこのような形にくっつけます。

a_06.jpg

a_07.jpg

黒い丸いのはCマウントのリングです。3Dプリンタではネジの部分を再現できないのでこれは購入して接着剤で付けてしまいます。

uxcell アダプターリング CSマウントレンズ-Cマウントカメラ ブラック アルミ マウントアダプター

接着剤はエポキシ樹脂のものが接着力が超強力なのでおすすめです。これは溶剤を混ぜてから5分で硬化がはじまるもの。

セメダイン 5分硬化型エポキシ系接着剤 ハイスーパー5 15gセット箱 CA-184

Cマウントリング以外は作業のしやすさを考慮して、まだ接着しないでおきます。

カメラモジュールから余計なものを外す

ラズパイカメラのイメージセンサーは基盤に両面テープで固定されているのですが、ものによっては間にクッションが挟まっているものもあります。綺麗に映像を撮影するにはイメージセンサーとレンズの位置が正確に合ってる必要があります。なのでこれらを取り除きます。

モジュールが浮いてます。

d_00.jpg

ピンセットなどでそーっと外してあげます。コネクターのところも少し力を加えれば外れます。

d_01.jpg

両面テープとクッションを外して、接着剤でモジュールを基盤に付け直します。

d_02.jpg

d_03.jpg

次にレンズを外します。

d_04.jpg

この白く丸いものはラズパイレンズの焦点を調整できるものなのですが、どこで手に入れたのか覚えていません。何かのセットに含まれていたようです。

いちおうここで売ってますが日本に発送できるのかは試してないです。
Lens Adjustment Tool for Raspberry Pi Camera

3Dモデルにレンズを外すツールを含めてあります。プリンターの精度によっては使えないかもしれません。

d_07.jpg

だめな場合はピンセットなどでも外せるので、慎重にレンズをつまんで時計と反対方向に回してみてください。

d_05.jpg

綺麗に外せました。

d_06.jpg

レンズを外すとイメジーセンサーが見えます。

d_07.jpg

配線と組み立て

まず。ケースの中に何が含まれているのかざっくりと説明します。

概要.jpg

バッテリーは3.7Vで1200mAhのリチウムポリマーバッテリーです。ラズパイの電源は5Vなので、3.7Vバッテリーを昇圧器に繋いで5Vに変換します。この昇圧器はバッテリーの充電もできるものです。充電したいときはMicro USBで接続します。このモジュールはさすがに日本では売ってないようです。輸入するか別のもので代用したほうが良さそうです。

PowerBoost 1000 Charger - Rechargeable 5V Lipo USB Boost @ 1A - 1000C

バッテリーは1200mAhのものを探せなかったですけど、2000mAhでもケースに収められるかもしれません。

【防犯用】【超小型カメラ】 【小型ビデオカメラ】 基板完成ユニット用二次バッテリー リチウムポリマー電池 3.7V 2000mAh (UT-004)

電源スイッチは昇圧器からラズパイに繋ぐ端子の途中に入れます。

撮影用スイッチはラズパイのGPIOと3.3V出力に繋ぎます。

それでは組み立てていきましょう。まずカメラモジュールをレンズマウントにネジで止めます。

a_10.jpg

ネジは M2x6 (太さ2mmで長さ6mm) のネジとナットで止めれます。

GORCHEN M2 M2.5 M3 M4 M5 フィリップス ボルトセット ロックワッシャ 平ワッシャー ステンレス 収纳ケース付き 修理ツール 400本入り

シャッターボタンを作ります。

e_00.jpg

端子はラズパイのGPIOにつなぐのでデュポンケーブルのメス側を接続します。

e_01.jpg

ここにピンセットなどを指せばカバーを外せます。モニターの接続と干渉するので必ず外します。

b_01.jpg

b_00.jpg

昇圧器からラズパイに接続するケーブルを半田付けします。

e_02t.jpg

昇圧器をケースにネジで止めします。M2x8あたりを使うとよいと思います。

e_03.jpg

電源スイッチとシャッターボタンをケースに接着剤をとめます。

e_04.jpg

ラズパイに電源接続のケーブルをはんだ付けします。

c_00.jpg

c_01.jpg

ラズパイを台に固定します。この台はラズパイとモニターを本体に固定するためのものです。

UNADJUSTEDNONRAW_thumb_af9b.jpg

UNADJUSTEDNONRAW_thumb_af9a.jpg

最後の仕上げとしてケーブル類を繋いでいきます。撮影スイッチはGPIO4に繋ぐことにします。2本のうちどちらを3VとGPIO4に繋いでも問題ありません。蓋をネジで固定する時に使うナットも接着剤で付けてしまいます。

UNADJUSTEDNONRAW_thumb_af9c.jpg

モニターをラズパイに接続します。

UNADJUSTEDNONRAW_thumb_af6d.jpg

モニターはこれを使いました。

OSOYOO HDMI 3.5インチLCDディスプレイ モニター タッチスクリーン Raspberry Pi 3 2 Model B に対応 (3.5" HDMI LCD)

モニターの設定には手間取ったけど、ここを参考にたらうまくできました。
Raspberry Pi に3.5inch HDMI タッチスクリーンモニタをつけてみた

そして、ラズパイとモニターを本体に格納します。ケースには小さな出っ張り(レール)があり、台の方には凹みがあります。うまく滑らせるようにはめます。台の奥の方にネジ穴があるので本体と固定します。

UNADJUSTEDNONRAW_thumb_af71.jpg

底板にも側面にレールがあるので上からはめます。!

UNADJUSTEDNONRAW_thumb_af73-2.jpg

バッテリーを接続して。

UNADJUSTEDNONRAW_thumb_af74.jpg

蓋をしてネジで止めて完成。

z_01.jpg

撮影アプリを動かす

撮影アプリはラズパイが起動したら自動的に立ち上がるようします。

UNADJUSTEDNONRAW_thumb_afa3.jpg

アプリのプログラムはこのようになります。

camera.py
import Tkinter as tk
import RPi.GPIO as GPIO
from datetime import datetime
import picamera
import os.path
import time


camera = picamera.PiCamera()
camera.resolution = (2592, 1944)
camera.rotation = 270

switchGPIO = 4
picturesPath = '/home/pi/projects/camera/output' # 写真の保存先


# フルスクリーンアプリを作るためのクラス
class FullScreenApp(object):
    def __init__(self, master, **kwargs):
        self.master = master
        pad = 3
        self._geom = '200x200+0+0'
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth() - pad, master.winfo_screenheight() - pad))
        master.bind('<Escape>', self.toggle_geom)

    def toggle_geom(self, event):
        geom = self.master.winfo_geometry()
        print(geom, self._geom)
        self.master.geometry(self._geom)
        self._geom = geom


window = tk.Tk()
FullScreenApp(window)
window.title("Camera")

shotLabel = tk.Label(text='')
shotLabel.place(x=564, y=20)
shotLabel.config(font=('System', 32))
window.update()


# カメラのプレビュー画面を表示する
def previewCamera():
    scale = 0.85
    w = int(640 * scale)
    h = int(480 * scale)
    camera.start_preview(
        fullscreen = False,
        window = (0, 67, w, h))


def initGPIO():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(switchGPIO, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)


def cleanGPIO():
    GPIO.cleanup()


# 写真撮影
def takePicture():
    filename = datetime.now().strftime('%Y%m%d-%H%M%S.jpg')
    path = os.path.join(picturesPath, filename)
    camera.capture(path)
    checkSaved(path)


# 撮影できたかチェックしテキストを画面に表示する(まれに失敗する)
def checkSaved(path):
    if os.path.exists(path) and os.path.getsize(path) > 0:
        shotLabel['text'] = 'Saved'
    else:
        shotLabel['text'] = 'Error'
    window.update()
    time.sleep(3)
    shotLabel['text'] = ''
    window.update()


def main():
    try:
        initGPIO()
        previewCamera()

        switch = False
        while True:
            switchStatus = GPIO.input(switchGPIO) == GPIO.HIGH
            if not switch:
                if switchStatus:
                    takePicture()
            switch = switchStatus
    except KeyboardInterrupt:
        pass

    cleanGPIO()
    camera.close()


if __name__ == '__main__':
    main()

レンズから取り込まれた映像が常にスクリーンに写り、ボタンを押すと撮影し、ファイルが正しく保存された場合は画面に Saved と表示されます。まれに撮影してもファイルサイズが0バイトの時があるので、その場合はErrorと表示されます。

このファイルをラズパイの電源が入ったら自動で起動するように設定ファイルを書きます。Execの行を適当に変更してください。

~/.config/autostart/camera.desktop
[Desktop Entry]
Type=Application
Name=windowpy
Exec=/usr/bin/python2.7 /home/pi/projects/camera/camera.py
Terminal=false

どんなレンズが使えるのか?

IMG_4347.JPG

CマウントとCSマウントのレンズが接続できます。CとCSは接続部分の経口が同じで、焦点距離だけCの方が5mm長くなります。そこでCマウントのレンズを接続するときは写真左下の5mmのリングを途中に挟みます。

写真には望遠レンズが3つ写っていて、一番手前の小さいのが 2.8mm-12mm, 2列目の左が 3.5mm-8mm, 二列目の中央が 6mm-15mm になります。2列目右は単焦点35mmです。

レンズに関しては日本でのリンクが見つけられなかったので海外で入手したときのリンクを書いておきます。

2.8-12mm 1/3" F1.4 CCTV Video Vari-focal Zoom Lens for CCTV Security Camera

Security Lens 1/3" 3.5-8mm f1.4 Varifocal, Fixed Iris CCTV Lens, CS Mount

Lapetus 6-15mm 1/3 F1.4 CS Mount Varifocal CCTV Manual Camera Lens

3mmくらいのレンズで普通の写真のような画角になります。なので手前の一番小さいレンズだけが普通の画角の写真を撮ることができます。ただし、このレンズはCマウントではなくM12マウントのレンズをC用に加工したものです。

02.jpg

3Dデータにアダプタパーツが含まれているのでレンズとアダプターとCマウントリングを接着剤で固定して使います。

00.jpg

単焦点35mmのレンズは10倍望遠のような絵しか撮れないので使い勝手はいまいちです。

Fujian 35mm f/1.7 CCTV cine lens for Sony NEX E-mount camera & Adapter bundle for Sony NEX7 NEX-F3 a6000 a5000 a3500

写真の奥にとても大きいレンズが写っていますが、これは 43mm-150mm で最大倍率は100倍になります。小さな生き物でも撮影しようかと思います。

Monocular 8x-100 x 43mm-150mm C-mount Zoom Glass Lens for Industry Lab Microscope Camera

撮影してみる

どのような絵が撮れるのか撮影してみます。使ったレンズは 2.8mm-12mm と 3.5mm-8mm です。

20180708-190709.jpg

20180708-190758.jpg

20180708-190817.jpg

20180708-190835.jpg

20180708-191058.jpg

20180708-191250.jpg

20180708-191312.jpg

20180712-190635.jpg

20180712-190650.jpg

20180712-190712.jpg

20180712-190720.jpg

20180712-190832.jpg

20180712-190905.jpg

20180712-190916.jpg

20180712-190941.jpg

20180712-191030.jpg

20180712-191204.jpg

20180712-191405.jpg

まず、撮影してみるとピントを合わせるのが非常に難しいです。モニターはできるだけ明るいものを選びましたが、それでも外で見るとかなり暗くピントが合っているのか確認するのが難しいです。またレンズが非常に小さいため、ピント調整を回す量を1mm変えるだけで合ったり合わなかったりします。

あまり綺麗に撮れない理由もいくつかあります。まずイメージセンサーは8万画素の解像度がありますが、レンズの解像度が低いので中央は綺麗に写っていても周囲にいくほどぼやけてきます。15ドル以下の安いレンズしか使っていないからかもしれません。そしてラズパイカメラモジュールの仕様なのか、どのモジュールを使っても周囲の四隅が赤みがかります。

しかしながら、マニュアル操作で距離とピントを合わせて撮るのはやはり楽しいものです。

塗装する

塗装します。見た目てきにも塗装したほうがかっこいいのですが、実は塗装しないで白いカバーのままだと、光がカバーを通り抜けてレンズに入ってしまうので写真が白っぽくなってしまいます。黒に塗装するか黒いフィラメントで3Dプリントした方がよいと思います。

塗装はどこまでかっこよく仕上げるかによってやり方が変わってきます。とりあえず色を付ければいいなら、そのままスプレーをかけてしまっていいと思います。

今回はできるだけ綺麗に塗装したいので表面を平らに仕上げてから色を付けていきます。手順としては「穴を埋める」→「紙やすりで削る」を繰り返していって、最後に色を付けるような感じになります。

3D印刷したてのパーツはいろいろとデコボコです。そこにパテを塗って紙やすりで削ることで表面を平らにしていきます。今回使う紙ヤスリの型番150, 400, 600になります。

UNADJUSTEDNONRAW_thumb_af92.jpg

まず150番のヤスリで余分なでっぱりを削っていきます。終わったらそこに400番をかけて触っても不快感がない感じまで仕上げます。

次にパテを塗ります。

タミヤのポリエステルパテを使います。このパテは1時間ほどで乾きすぐに加工ができるので便利です。乾かした後に600番の紙やすりで磨きます。白と黄色の縞々な感じになります。

タミヤ メイクアップ材 ポリエステルパテ (40g) 87097

UNADJUSTEDNONRAW_thumb_af91.jpg

次にサーフェイサー500番を表面に塗布します。これで大きなデコボコがある程度塞ぐことができます。そしてまた600番の紙やすりで磨きます。

GSIクレオス Mr.サーフェイサー 500 スプレー 100ml ホビー用仕上材 B506

UNADJUSTEDNONRAW_thumb_af94.jpg

UNADJUSTEDNONRAW_thumb_af95.jpg

灰色のサーフェイサーを吹くと光の反射で平ではない面がよく見えるようになります。大きなへこみがあればまたパテを塗ってもいいでしょうし、小さなへこみなら500番のサーフェイサーをもう一度吹いてもいいかもしれません。その後またヤスリで磨いて納得できる状態に仕上げましょう。

そして、仕上げの最後として1000番のサーフェイサーを吹きます。

GSIクレオス Mr.サーフェーサー 1000 徳用 スプレー 170ml ホビー用仕上材 B519

IMG_4287.JPG

最後に黒のスプレーを塗って完成です。

タミヤ スプレー No.06 TS-6 マットブラック 85006

IMG_4298.JPG

おわりに

最近3Dプリンターを買ったので、いろいろなものをプリントしたりモデリングしたりしていました。そして、昔一眼レフでマニュアル撮影を楽しんでいたのを思い出し、無性に再現したくなって思わず作りました。いやぁ、カメラってやっぱり面白いですね。

作っていて画質をどうやれば上げれるのか試行錯誤したのですが、どうもラズパイカメラのモジュールサイズではどうしようもないように思いました。画質を求めてカメラで遊ぶなら gPhoto といツールで市販されてるコンデジやら一眼レフのほとんどを制御できるようなので、中古の一眼レフなんかを安く買って遊ぶのがよいかもしれません。
gPhoto サポートされているカメラの一覧

さて。次はデジタル撮影できる顕微鏡でも作りたいと思います。ミジンコを撮影するぞー!

34
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?