秋月の球面プロジェクタをRaspberry Piで使う方法

# 概要
秋月電子で販売中の格安「[ドーム型スクリーン用カラー液晶プロジェクター](https://akizukidenshi.com/catalog/g/gM-16328/)」をラズパイから使えるようにしてみたので、報告します。
今回は液晶を交換せず、秋月でセット販売されている変換基板(AE-COM15T1M10DLZ)を使用してラズパイのGPIOから制御します。
主に[Moo Softさんの方法](https://moosoft.jp/index.php?option=com_content&view=article&id=109&Itemid=14)を踏襲して、液晶の表示領域全体が使えない問題を解消しました。

# 配線
ラズパイとはパラレルディスプレイインターフェース[(参考)](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#parallel-display-interface-dpi)で接続します。
チャージポンプ回路などは変換基板で必要部品がついているので、以下のようにラズパイにバスをつなぐだけでOKです。あと、点灯用LEDの電源は適当に用意します。REVは映像反転の信号ですが、プログラムで反転できるのでGND（反転なし）に固定してます。
![スクリーンショット 2022-04-07 223806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/345525/86491200-b60f-7dc9-9971-793fc109785f.png)

今回はRaspberry pi zeroにスタックできるように小さく切ったユニバーサル基板を使って配線をしました。線の数が多いので、UEW線を使って配線しました。周波数もそんなに高くないので、コレぐらい小さく作ればあんまり気にせずに配線していいと思います。

<img width="400px" alt="IMG_2268.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/345525/8678175c-49ba-64a6-6678-8f311ec5b74f.jpeg">
<img width="400px" alt="IMG_2267.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/345525/77b4b909-3d08-0323-0952-5c9692358cf4.jpeg">

# プログラム
今回はMoo Softさんの用意されているSDカードイメージを使ってテストをしました。ただ、きちんと表示するためには一部修正が必要だったのでそこについて示します。
イチからセットアップする方法については検証できてないので、また検証できたら報告します。
まず、[Moo Softさんのところ](https://moosoft.jp/index.php?option=com_content&view=article&id=109&Itemid=14)から使用するラズパイに合わせてイメージをダウンロードし、SDカードに焼いておきます。Raspberry pi zeroを使う場合は、USB OTGでのデバッグ[（参考）](https://qiita.com/Liesegang/items/dcdc669f80d1bf721c21)が便利なので、合わせて設定しておくことをおすすめします。

変更が必要だったのは以下の部分です、ここを変更しなければ、液晶の全体を使用できません。

- /boot/config.txt (最後の方)
変更前は液晶の横サイズが違っており(?)それを修正しました。また液晶制御の関係で縦サイズを本来より22px大きくしておく必要がありそうでした。試してみながら表示したところ、以下のような設定でうまくいきました。
大事なのは画面サイズの変更で、その他はあんまり関係ないと思います。

```
# ドーム型スクリーン用カラー液晶プロジェクタ(球体液晶・光学表示ユニット)
# Set screen size and any overscan required
# ダミー信号分の垂直信号22ライン分をずらしておく。
display_overscan=1
overscan_left=0
overscan_right=0
overscan_top=22
overscan_bottom=0

# ドット構成：588 x 196 (球面照射される有効表示エリアは、半径90ドット)
# -> 196 x 196+22　に変更。液晶サイズは196x196だが、ダミー信号を22ラインが必要
framebuffer_width=196
framebuffer_height=218

# 左右反転
#display_rotate=0x10000
# 上下反転
#display_rotate=0x20000

# enable the DPI display
enable_dpi_lcd=1
display_default_lcd=1
dpi_group=2
dpi_mode=87

# set up the hsync/vsync/clock polarity and format(454661=0x6f005)
# set up the size to 588 x 196
# -> 196 x 196+22　に変更。
dpi_output_format=454661
hdmi_timings=196 1 40 48 88 218 0 0 2 22 0 0 0 60 0 32000000 6

# Enable audio (loads snd_bcm2835)
dtparam=audio=on
gpu_mem=128
max_usb_current=1
```

ダミー信号について、[秋月](https://akizukidenshi.com/catalog/g/gM-16328/)にあるデータシートp.14~を参照してください。垂直信号の22ライン分は無視されると書かれています。overscanだけで設定できるかな、と思いましたが、いろいろ試しましたがうまくいきませんでした。これで合ってるのか不安ですが、一応上手く行ってるので…

左図が変更前、右図が変更後です。表示領域の変化がわかりやすいように上部のレンズユニットを外してあります。
画面下部にあった黒いラインが消えていて、表示領域が広がっています。
![IMG_2269.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/345525/c21cd4df-1a4e-0a88-b4ca-c8054a649bf9.jpeg)


- ./prg/moo_pi3d_move.py ( __init__関数内 )
液晶のサイズが変更になったので、サンプルプログラムの表示位置を合わせて変更しておきます。
なお、いろいろパラメータを変えてみたのですが、回転中心が少しずれてしまうのが治りませんでした。

```python
    # ドームドット構成：588 x 196 (球面照射される有効表示エリアは、半径90ドット)
        self.x_org     = (196.0 + img_w) / 2      # 原点(X)
        self.y_org     = (196.0 + img_h) /2       # 原点(Y)
```