GPIOでソーラー人形を踊らせる


はじめに
====
100均でよく見かけるソーラーフリフリ人形をGPIOで踊らせようという話です。

ソーラーフリフリ人形とは
----
![IMG_1875.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/7ea1630e-3015-6856-cbe7-e55fd20ca7f6.jpeg)
正式名称は知りませんが、こういう子たちです。これをGPIOで動かしたい。

なぜ、そんなことを考えたかというと、遠隔地に設置したモーションセンサーがなにか動きを捉えた時、それをどうやって表現するのがよいかということを検討したのがきっかけです。
具体的には安否確認というか遠隔見守りなのですが、一人暮らしのお年寄りがどうしているか心配なかたも多いのではないでしょうか。安否確認とプライバシーの問題は難しい問題ですが、これくらいの表現であればちょうどよいかと考えました。
それから、子供部屋で勉強しているはずのお子さんが居眠りしてないか気になる！という方も応用できます？

分解してみる
----
小さめのマイナスドライバーを隙間に突っ込んでこじれば簡単に開けることができます。
<img width="200" alt="IMG_1881.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/a94996b9-2a4a-7e05-6916-e65e26684a52.jpeg"> <img width="200" alt="IMG_1884.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/02144141-fc3c-d989-36df-5433fd0fed1f.jpeg">

完全に上下に分離できます。底板の上に、コイルと太陽電池、電子基板が入っていて、配線で接続されています。コイルの電線はとても細いので、うっかり切ってしまわないように注意が必要です。
ハンダゴテで太陽電池を外します。このとき発生するガスはとても臭いので風通しのよいところで作業したほうが良いかと思います。

太陽電池のパワーは？
----
どれくらいの電流を流してやるといいのか検討するために、太陽電池の開放電圧と短絡電流を測ってみます。
<img width="200" alt="IMG_1876.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/5a60eec0-f796-8f5e-a312-9dda93fb4918.jpeg"> <img width="200" alt="IMG_1877.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/c48a5793-3743-3959-ce1f-da95321617f9.jpeg">

明るめの室内の条件で、開放電圧は1.3Vくらいで、短絡電流は0.1mAとなりました。かなり小電力で動いているようです。
このパワーで十分に踊るのですが、ためしに太陽電池を蛍光灯にぎりぎりまで近づけてみると、電流は4mAくらいまで上がることがわかりました。

GPIOにつないでみる
----
ではGPIOに人形を接続してみましょう。
その前に基盤に配線をはんだ付けしてケースをもとに戻します。太陽電池は接続してないですが、フタ代わりにもとの位置に戻しておきました。
<img width="200" alt="IMG_1887.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/3c40621b-5db9-b4d7-4ba0-dff0c541d834.jpeg"> <img width="200" alt="IMG_1890.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/8cada1c4-6d65-1787-8103-33d65d74125b.jpeg"> <img width="200" alt="IMG_1891.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/8916761a-78a3-49a0-00fc-48ac3e7f8316.jpeg">

当然GPIOと人形を直接つなげるのはやめたほうが良いでしょう。抵抗を挟んで接続します。フリフリ制御基盤のスペックがわからないので、なるべく太陽電池に近い電流を流してやることが基本です。
3.3Vで0.1mAを流すためには、3.3V ÷ 0.1mA = 33kΩですが、10kΩくらいからテストしてみましょう。
<img width="200" alt="IMG_1893s.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/42a6a21f-8e10-b3a4-6834-f90325b1f95f.gif"> <img width="200" alt="IMG_1892s.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487627/a9a15879-5af8-fa57-924e-ec2d99547fe3.gif">
左が10kΩの抵抗、右が100kΩの抵抗を直列につないだ場合です。
100kΩでも一度踊りだせばよく踊るのですが、立ち上がりが悪いというか腰が重い感じです。結局30kΩくらいがちょうどよいと思いました。派手に踊るとガチャガチャ音がなって不快ですので、10kをベースに100kの可変抵抗を入れて調節できるようにするのがよいと思います。

Raspberry Pi で制御
----
ここでは、Raspberry Piの7番ピンに接続したものとして説明します。7番ピンにはGPIO4が割り当てられています。

まずは、GPIOを利用する設定です。

```sh
$ sudo echo 4 > /sys/class/gpio/export
$ sudo echo out > /sys/class/gpio/gpio4/direction
```
1行目では、GPIO4を利用する設定をしています。その結果 `gpio4` というディレクトリが作成されます。
2行目で `gpio4` が出力用であることを設定しています。

次に、出力を変化させてみます。
gpio4/value に1を書き込むと GPIO4 つまり7番ピンの出力が HIGH すなわち 3.3V となります。
また、ここに0を書き込むと LOW すなわち 0V が出力されます。

```sh
$ sudo echo 1 > /sys/class/gpio/gpio4/value
$ sudo echo 0 > /sys/class/gpio/gpio4/value
```

おわりに
----
今回は3.3VのGPIOで説明してきましたが、arduino の出力は5Vのものが主流なので、その時は抵抗を割りましてください。5 ÷ 3.3 = 1.5倍とすれば大体良いでしょう。

これといった使いみちはないかもしれませんが、ちょっとゆるい主張やさりげない何かを表現するのに適していると思います。

* 遠隔見守り
* 植木鉢の水やり
* キンギョに餌をやる時間
* 電気の使いすぎ
* 温度の上げすぎ、下げすぎ
* ゆるめのタイマー、就寝時間や休憩時間のお知らせ
* 秘密の合図

面白い使い方があれば活用してください。