布団から脱出できないので、全自動布団引き剥がし機を作った

# 概要
　冷え込んだ冬の朝に布団から自力で脱出することは大きな精神的苦痛を伴うことが知られており、また冬期の午前中における活動性低下は日本経済に多大な損失をもたらしている。かどうかは知らないが、とりあえず朝早く家を出ないと私の卒業が危うくなってしまうので対策を講じることにした。
　「布団 脱出 方法」と検索して出てくる方法 (目覚ましをベッドから離れたところに置いておく、暖房をつけて寝る、など) は一見有効そうに見えるものの、実際試してみたところ目覚ましを止めたり暖房を切ったりしたあとで二度寝してしまうということが明らかになった。私は怠惰な人間なので、真の意味で布団を脱出するには何らかの方法で布団を使用不能にする必要があるのだ。
　そこで、本稿ではラズパイを用いて布団を引き剥がす機械の製作を検討する。実装の概略を下図に示す。布団に取り付けた糸を電動リールで牽引して巻き取り、それにより布団を引き剥がすことを目標にする。さらにラズパイを Web サーバ化し、スマホなどから引き剥がし時刻の設定ができるようにする。
<img width="892" alt="スクリーンショット 2020-01-04 16.36.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100205/3d703487-044a-b7d6-90f1-f35400b444b5.png">

# 準備するもの
|材料|個数|備考|
|---|---|---|
|[Raspberry Pi 3 Model B+](http://akizukidenshi.com/catalog/g/gM-13470/ )|１個|もっとローエンド寄りなやつでもいけると思う
|[ラズパイ用 AC アダプタ](http://akizukidenshi.com/catalog/g/gM-12001/)|１個|
|ブレッドボード|１枚|
|ジャンパワイヤ|15本|
|電線|４m
|[モータドライバモジュール](http://akizukidenshi.com/catalog/g/gK-09848/)|１個
|[ギアボックス](https://www.amazon.co.jp/%E3%82%BF%E3%83%9F%E3%83%A4-%E6%A5%BD%E3%81%97%E3%81%84%E5%B7%A5%E4%BD%9C%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-No-97-%E3%83%84%E3%82%A4%E3%83%B3%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%AE%E3%83%A4%E3%83%BC%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9-70097/dp/B001Q119AC)|１個
|[電池ボックス (単３×３本)](http://akizukidenshi.com/catalog/g/gP-12240/)|１個
|[マスキングテープホルダー](https://www.amazon.co.jp/%E3%82%A4%E3%83%8E%E3%83%9E%E3%82%BF%E5%8C%96%E5%AD%A6%EF%BC%88%E6%A0%AA%EF%BC%89-%E3%83%9E%E3%82%B9%E3%82%AD%E3%83%B3%E3%82%B0%E3%83%86%E3%83%BC%E3%83%97%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC-%E3%82%AB%E3%83%83%E3%82%BF%E3%83%BC%E4%BB%98-%E3%82%AF%E3%83%AA%E3%82%A2/dp/B07C6BSSMG)|２個
|かまぼこ板|１枚
|紐|合計で５m|PP ロープとかで OK
|ショックノンテープ|20cm
|単三電池|３本
|安全ピン|２つ
その他、ドライバーセット、ハンダ付けに必要なもの一式、ニッパ、接着剤 (セロハンテープ、ガムテープ、アロンアルファ) などを使用した。

# 実装
## 電動リール部分の組み立て
　ツインモーターギアボックスを組み立てたのち、どういうわけか誂えたようにサイズがぴったりだったかまぼこ板に穴を開け固定した。糸巻き (マスキングテープホルダーを半分に切断したもの) をギアボックスのシャフトと連動させるため、摩擦係数の大きそうなもの (ショックノンテープ) を 8cm ほど切り取ってシャフトにきつく巻きつけ、糸巻きを差し込んだ。
ここまでの作業の進捗を下図に示す。ハンダ付け下手すぎるし、なんか微妙に魚臭い気もするけどまあ良いか……
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100205/2263c785-d08b-4da8-f956-35854ca4eeb1.png)


## 布団との接続
　次に、リール部分を布団に接続する。布団の最上部に安全ピンを付けてそれに対して糸結びを施行し、糸のもう片端を白い糸巻きの部分にテープで貼り付ける。審美的にどうかと思うが、完成図は以下の通り。
![IMG_3548.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100205/7ae0f6ce-ed3a-e428-b9ca-9af5533c364f.png)

　なお、リール部分は上の物干し竿から吊り下げている。それだけでは吊り下げた糸を軸にリールが回転してしまうため、Amazon の箱で下敷きとして用いられていたダンボールを物干し竿に貼り付け、それとリールを紐でつなげることによりある程度の安定性を担保している。

## リールを回転させてみる
　[この図](https://1.bp.blogspot.com/-eNIO-1TsOuk/XVpOh4ZaSAI/AAAAAAAAG2c/uErkI2tbFUczHBGGufiGR2gDR1waIkyyACLcBGAs/s1600/bitfig09-12-NewMD.png) のように配線した上で、リールの回転は以下のように GPIO 制御をすることによって実現できる (コードは [こちら](https://qiita.com/tan-z-tan/items/70f8cf8b11a02bea13fc) を参考にした)。

```python

import RPi.GPIO as GPIO
import time

# init gpio
GPIO.setmode(GPIO.BCM)
channel_list = [24, 25]
GPIO.setup(channel_list, GPIO.OUT)
# 10 秒間右回転させてみる
GPIO.output(24, True)
GPIO.output(25, False)
time.sleep(10)
# stop
GPIO.output(24, False)
# cleanup
GPIO.cleanup()
```
　では、早速実行してみよう。
![IMG_3551.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100205/e1246bb6-c9fc-b5b7-27b1-46fd5eda4d58.png)

　**やったね！！！** (色々問題はあるのだがそれは後述する)

## 引き剥がし時刻の設定
　[WebIOPi](https://webiopi.trouch.com/) を用いてラズパイを Web サーバ化し、リールを回すスクリプトの実行時刻をスマホなどから設定できるようにした。設定ページにアクセスすると下図のような画面が表示される。時刻を送信すると

- 設定時刻にリールが 10 秒間回転し、布団を引き上げるタスク
- 設定時刻の３時間後にリールが 10 秒間逆回転し、布団を開放するタスク

の２つがラズパイの crontab に登録されるようになっている (３時間も布団を使用不能にすれば流石に二度寝しないだろうという目論見)。この辺の実装に関してはコードを [こちらのレポジトリ](https://github.com/iwasaki501/wakeup) にまとめたので興味のある方はどうぞ。
<img width="533" alt="スクリーンショット 2020-01-04 21.01.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100205/92a56fca-315a-98c2-6c77-c50771e5dbb3.png">


# 問題点
## リールの位置が不安定すぎて紐がコースアウトする
　リールを上から吊り下げているという設計の都合上、巻取り部に対する紐の位置を固定することが難しく、白い糸巻きとそれを囲むプラスチック部分に紐が挟まってなんかすごい音を出しながら動かなくなってしまうという事態がかなりの頻度で発生する。これには実用上大きな問題がある。

## 音がすごい
　おそらくこのギアボックスが空中 (?) で使うことを想定して設計されていないからであると考えられるが、毎朝紐を巻き取っている間に人智を超えた騒音が発生する。測定していないので分からないが、体感的に iPhone の目覚まし最大音量の２倍くらいの音が頭上から聞こえてくるので、正直布団云々は関係なく音がうるさすぎて離床せざるを得ない状況になっている。本来の目的は達成できているから良いものの、近所迷惑なのではないかという懸念があるのでこれは改善が求められるところであろう。

　以上の問題点を踏まえ、よりよい布団引き剥がし方法を思いついた方は是非コメントにてお知らせください。最後までお読みくださりありがとうございました。