誰にでも経験があるでしょう。トイレで用を足している時に、トイレットペーパーがもう残っていないことに気づく。家族や同居人に、隅に積み上げた予備のトイレットペーパーをちゃんと見ておくように言っても、忘れてしまう人は多いものです。結局、トイレットペーパーが1枚も残っていないという事態に陥ってしまうかもしれません。そんな時、Raspberry Piを使ってトイレットペーパー切れを防ぐ方法があります。Raspberry Piは、トイレに予備のトイレットペーパーがなくなった時に通知してくれます。
この記事では、Raspberry Pi Zero Wと超音波センサーを使ってスマートトイレットペーパーホルダーを作る方法をご紹介します。ホルダー内のトイレットペーパーの残量を測定し、30分以上空になった場合にメールを送信します。メールはトイレを指定したり、次の行動プランを提案したりするようにカスタマイズできます。
Raspberry Pi トイレットペーパーリマインダーはどのように機能しますか?
超音波センサーは30分ごとにトイレットペーパーの残量をチェックします。2回のチェックでホルダーが空になった場合、Raspberry Piからホルダーの補充またはトイレットペーパーの追加購入を促すメールが送信されます。
トイレットペーパーホルダーが補充されるまで、Raspberry Piは1時間ごとにメールを送信し続けます。各メールには、トイレットペーパーホルダーが最初に空になった時刻と、これまでに送信したリマインダーの回数が記載されます。トイレットペーパーホルダーが補充されると、すべてがリセットされ、Raspberry Piはリマインダーメールの送信を停止します。コードには、夜間にメールを送信しないようにする「Do Not Disturb(おやすみモード)」オプションも用意されています。デフォルトは午後10時から午前8時ですが、カスタマイズも可能です。
必要なもの:
- GPIOヘッダーがあらかじめはんだ付けされたRaspberry Pi Zero W、または自分ではんだ付けすることも可能です。どのモデルでも使用可能ですが、Raspberry Pi Zero Wは小型で消費電力が低いため、このモデルをおすすめします。
- 電源/キーボード/マウス/モニター/HDMIケーブル(Raspberry Pi用)
- 超音波センサー HC-SR04
- 小型ブレッドボード
- ジャンパー線セット(M-F、M-M、F-F)
- 抵抗器2個(330オームと470オーム)
- 5インチ×5インチの段ボール
- 小さな磁石
- スーパーグルー
- ラズベリーパイケース
- 超音波センサーハウジング
- トイレットペーパーホルダー
パート1:トイレットペーパーリマインダーのハードウェア組み立て
このステップでは、Raspberry Pi、超音波センサー、小型ブレッドボードをトイレットペーパーホルダーの上部(通常はトイレットペーパーの芯が置かれる場所)に取り付けます。超音波センサーは下向きに、下のトイレットペーパーの芯に対して垂直になるようにします。Raspberry Piとブレッドボードは上部に水平に置きます。このセクションでは、各コンポーネントを配線します。このステップが完了すると、Raspberry Piの電源を入れる準備が整います。
1. Raspberry Pi OS でフォーマットされたmicroSD カードをRaspberry Pi に挿入します。
2.超音波センサーのハウジングの背面に 2 つの小さな磁石を瞬間接着剤で貼り付けます。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
3.超音波センサーの各端子に4本のメス-オスケーブルを接続します。超音波センサーをハウジングに挿入します。
4.ハウジング付きの超音波センサーをトイレットペーパーホルダーに取り付け、トイレットペーパーの上部ロールに直接向き合うようにします。
5.超音波センサーからの4 本のワイヤーをトイレットペーパーホルダーに通して、ブレッドボードに順番に挿入します。
6.ブレッドボードとRaspberry Piをトイレットペーパーホルダーの上部に取り付けます。Raspberry Piは、ボードが金属製のホルダーに直接接触してショートしないように、ケースに収納する必要があります。Raspberry Piを固定するために、ケースに2つの小さな磁石を接着しました。ブレッドボードには、ホルダーに貼り付けるための粘着剤があらかじめ付いている必要があります。
7.超音波センサーのVCC ピンをRaspberry Pi のピン 2 に接続して 5V 電源を供給します。
8. TRIG をRaspberry Pi のGPIO 18 に接続します。
9. ECHOを330オームの抵抗器に接続します。
10.抵抗器のもう一方の端をRaspberry Pi の GPIO 24 に接続します。
11. 330オームの抵抗器からGNDレールに470オームの抵抗器を接続します。
12.センサーのGNCピンをGNDレールに接続します。
13.トイレットペーパーの芯と同じ幅(直径約5インチ)の円形を段ボールから切り取ります。これは次のステップで使用します。または、このSTLファイルを3Dプリントすることもできます。
パート2:トイレットペーパーの残量通知用超音波センサー
このセクションでは、Raspberry Piのトイレットペーパーリマインダーに超音波センサーを設置し、ホルダーのベースからの距離を測定して空かどうかを判断します。注:超音波センサーは、聞こえない音を発信し、音波が返ってきた時点から距離を測定します。トイレットペーパーは超音波を吸収するため、メール送信のトリガーとなる距離を測定するために、前のステップで使用した段ボールを使用します。
1. Raspberry Piを起動します。microSDカードをお持ちでない場合は、 Raspberry Piの初回セットアップ方法、またはヘッドレスRaspberry Piのインストール方法に関する記事をご覧ください。
2. Raspberry Pi を起動します。
3.ターミナルを開きます。Ctrl + T を押してください。
4.このリポジトリをクローンします。
git clone https://github.com/carolinedunn/TP_Reminder
5.ファイル マネージャーのTP_Reminder フォルダーに移動します。
6. Geany または Thonny でultrasound.py を開きます。
7. Geany の紙飛行機アイコンまたは Thonny の再生ボタンをクリックして、ultrasonic.py を実行します。
8.トイレットペーパーの芯をホルダーに出し入れする際は、円形の切り欠きを上にしてください。トイレットペーパーの芯を追加したり交換したりすると、ホルダーの間隔が変化するのを確認できます。
9.ホルダーからトイレットペーパーをすべて取り除き、ホルダーの下部にある円形の切り欠きを残します。
10.画面に表示される距離をメモします。この距離をステップ4で使うためにメモしておいてください(必要であれば書き留めてください)。
11. Ctrl + C キーを押してプログラムを終了します。
当社のトイレット ペーパー ホルダーでは、満杯のトイレット ペーパー ホルダーは約 1 インチ、空のトイレット ペーパー ホルダーは 18 インチ以上と表示されます。結果は異なる場合があり、トイレット ペーパー ホルダーが空になったときではなく、トイレット ペーパー ロールが 1 つ残っているときに警告が表示されるように、トイレット ペーパー ロールが 1 つ残っているときの測定値を使用することもできます。
画像
1
の
2

パート3:トイレットペーパーリマインダーのメール自動化
このステップでは、自動メールサービスを設定し、Raspberry Piのトイレットペーパーリマインダーからテストメールを送信します。このステップでは、メールサービスのアカウントが必要です。私はシンプルさを重視してMailgunを選択しましたが、お好みのメールサービスに合わせてコードを変更できます。Mailgunのアカウント作成には有効なクレジットカードが必要です。このプロジェクトでは、Mailgunのデフォルトのサンドボックスドメインを使用しました。
1.ブラウザでmailgun.com にアクセスします。
2. Mailgun アカウントを作成し、ログインします。サンドボックスドメインに移動し、「API」をクリックしてから「Python」をクリックしてAPI 資格情報を表示します。
3.ファイル マネージャーの Thonny または Geany で、TP_Reminderディレクトリにあるsend-email-test.py を開きます。
4. 9行目の「https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages」の「YOUR_DOMAIN_NAME」を正しいものに置き換えます。
5. 10 行目で、「YOUR_API_KEY」をMailgun の API キーに置き換えます。
6. 12 行目に、 Mailgun アカウントの メール アドレスを追加します。
7.コード send-email-test.py を実行します。ステータスコード 200 と「Message: Queued」というメッセージが表示された場合は、メールを確認してください。
この手順を正常に完了すると、次のメールが届きます。このメールは迷惑メールフォルダに振り分けられている可能性があります。
Mailgunアカウントの設定に使用したメールアドレスとは別のメールアドレスにメールを送信したい場合は、Mailgunの「承認済み受信者」に入力してください。受信トレイで追加のメールアドレスを確認することを忘れないでください。
パート4:トイレットペーパー残量通知
このパートでは、パート 2 で超音波センサーから記録した距離とパート 3 の電子メール送信演習を組み合わせ、起動時に Python コードを実行するように Raspberry Pi を設定します。
1.ファイル マネージャーの Thonny または Geany で、TP_ReminderディレクトリにあるTPLevel.py を開きます。
2.パート 3 と同様に、18 行目、19 行目、21 行目に資格情報を入力します。
3. emptyDist(9行目)を、部品2から測った値から2インチ引いた値に設定します。例えば、部品2から空のトイレットペーパーまでの距離が19インチだった場合、emptyDist = 17と設定します。このコードは、現在の距離がemptyDistより大きいかどうかを確認します。より早い警告が必要な場合は、残り1ロール分の距離を使用してください。
4. TPLevel.py を実行すると、距離の読み取り値が 1 つ表示されます。画面に距離が 1 つ表示された後、何も起こらないことにお気づきですか?そうです。このコードは 30 分ごとに距離をチェックし、2 回連続でチェックしてホルダーが空になった場合にのみメールを送信します。コードを実行したままにしておくと(ホルダーが空の場合)、30 分後にメールが届きます。Ctrl + X キーを押して コードを停止してください。
5. テスト用に処理を高速化するため、10行目をコメントアウト(行頭に#を追加)し、11行目をコメント解除(intervalTimeの前の#を削除)します。これにより、5秒ごとにレベルがチェックされます。更新したコードを実行してください。
6. 5インチ厚の段ボール紙を使って、トイレットペーパーの残量に関する様々なシナリオをテストしてみましょう。このプロジェクトを午後10時から午前8時の間に作業する場合、デフォルトのコードではその時間帯にメールを送信しないように設定されていることに注意してください。12行目と13行目の「endHour = 22」または「startHour = 8」を調整する必要があるかもしれません。22は24時間制の軍用時間、つまり午後10時を表します。
テストシナリオ:
a. トイレットペーパーホルダーに10秒間紙がいっぱいになる。メールは不可。
b. トイレットペーパーを少し減らしますが、1ロールは残しておきます。メールは送信されません(レベルを1ロール分の距離に設定していない場合)。
c. トイレットペーパーをすべて取り除き、段ボールを一番下に置きます。5秒間隔で2回確認すると、最初のメールが届きます。さらに10秒後に、2通目のメールが届きます。メールの受信を停止するには、次のシナリオに進んでください。
d.トイレットペーパーを2ロール重ね、その上に段ボールを乗せます。10秒待ちます。メールの送信は止まるはずです。
e. トイレットペーパーを取り除きます。メールは最初からやり直してください。
7.トイレットペーパーの残量を最も正確に測定できるように、超音波センサーの位置を調整してください。多少の「揺れ」により測定値が不正確になる場合がありますが、徐々に落ち着くはずです。例えば、センサーがホルダーの側面に近すぎると、距離の測定値は側面を反映し、トイレットペーパーの残量を正確に測定できません。
8. Ctrl + X を押してコードを停止します。
9. この時点で、特定のニーズに合わせてコードを更新できます。例えば、22行目と23行目のメールの件名または本文を更新できます。
10.このセクションのステップ5の作業を元に戻し、インターバル時間を30分に戻します。11行目をコメントアウトし、10行目のコメントを解除します。
11.作業内容を保存します。
次に、起動時に実行されるよう TPLevel.py を設定します。
12.ターミナルで/home/pi/.bashrc を開いて編集します。
sudo nano /home/pi/.bashrc
13. .bashrc の下部に次のテキストを入力して保存します (CTRL + X を押します)。
python /home/pi/TP_Reminder/TPLevel.py
a.終了するには Ctrl + X を押し、保存するには Y を押します。
b. Pi を再起動します。
Pi を再起動すると、TPLevel.py Python スクリプトが毎回自動的に実行されるはずです。