【押ボタンでLINE送信】高齢者向けの押ボタン式LINE投稿装置を作った(①電子回路編)

f:id:yoshy_toshy:20190919043641p:plain

祖父が最近タブレットを買ってもらってLINEの使い方などを練習中らしいのですが、まだ使いこなすには時間がかかるということなので、敬老の日に「押ボタン式LINE投稿装置」の試作品を作ってみました。

作ったもの

操作盤で送信したいメッセージのボタンを押すと、あらかじめ設定しておいた特定のLINEグループにメッセージを投稿できます。

f:id:yoshy_toshy:20190919040417p:plain

f:id:yoshy_toshy:20190919055535p:plainf:id:yoshy_toshy:20190919055527p:plain
対象ユーザによるLINE投稿操作

送受信したメッセージは、居間のテレビ(HDMI入力)から確認できます。母の部屋にちょうどいいテレビがあったので、LINE専用台として使うことにしました。

f:id:yoshy_toshy:20190919045039p:plain
テレビ画面での表示

もちろん、LINEアプリでも投稿装置によって送信したメッセージの内容を確認できます。

f:id:yoshy_toshy:20190919045423p:plain
LINEアプリでの表示

試作品なので改善すべき課題は残っていますが、とりあえず動くものはできたので作り方などを紹介していきます。

作り方

今回のシステムは、Raspberry Pi(電子回路関係)、LINE Messaging API(LINEメッセージ送信関係)、Google Apps Script(大画面表示関係)など複数の技術を組み合わせて作っており、1つずつ説明すると長くなるので、記事を「電子回路編」「LINEメッセージ送信編」「大画面表示編」の3回に分けます。今日は電子回路編です。

本記事での目標

ボタンを押すと、コンソール上にメッセージが表示されるところまでを作ります。 f:id:yoshy_toshy:20190919074644g:plain

大まかな流れ

下記の流れで作成します。

  1. 材料の調達
  2. Raspberry Piのセットアップ
  3. 回路の作成
  4. テストコードの実行

1. 材料の調達

f:id:yoshy_toshy:20190929014545j:plain

秋葉原や大阪日本橋の電子部品屋に行くと入手できます。Raspberry Piやブレッドボードはさまざまな工作や実験に使えるので、1台買っておくと今後のクリエイティビティの幅が広がると思います。

部品名 価格 必要な個数 説明 URL
Raspberry Pi 3 MODEL B 本体 5,000 [円/台] 1台 RaspbianというUNIX系OSで動く小型PC。電子回路への入出力をするためのピンが40本生えており、LED発光やモーター回転やボタン押下検知や温度検知など、さまざまな物理操作をプログラム上で制御できる。 RASPBERRY-MODB-BPLUS 【本体】Raspberry Pi Model B+
Raspberry Pi用の電源コード 700 [円/個] 1個 Raspberry Piを電源につなぐためのコード。 スイッチングACアダプター(USB ACアダプター) MicroBオス 5V3A: 電源一般 秋月電子通商-電子部品・ネット通販
マイクロSDカード 780 [円/枚] 1枚 Raspbian(Raspberry PiのOS)を焼くためのメモリ。 TOSHIBA マイクロSDカード(microSDHC)EXCERIA 16GB 100MB/s: 雑貨 秋月電子通商-電子部品・ネット通販
ブレッドボード 200 [円/枚] 1枚 電子回路を組むための板。 ブレッドボード BB−801: パーツ一般 秋月電子通商-電子部品・ネット通販
ジャンパーワイヤ(オス - メス) 220 [円/10本] 6本 Raspberry Piとブレッドボードを接続するための導線。 ブレッドボード・ジャンパーワイヤ(オス−メス) 15cm(黒) (10本入): パーツ一般 秋月電子通商-電子部品・ネット通販
ジャンパーワイヤ(オス - オス) 180 [円/18本] 最低4本 ブレッドボード内で回路を作るための導線。 ブレッドボード・ジャンパーワイヤ(オス−オス) 10cmセット: パーツ一般 秋月電子通商-電子部品・ネット通販
ボタン 168 [円/個] 4個 ブレッドボード内で回路を作るための導線。 日本開閉器工業 JF-15SKCBNP2 タクトスイッチ黒枠○(青)
抵抗(330Ω) 100 [円/100個] 4個 回路を作る際に使用する抵抗。抵抗がない場合、回路に大電流が流れてRaspberry Piが壊れるおそれがある。 カーボン抵抗(炭素皮膜抵抗) 1/4W 330Ω (100本入): パーツ一般 秋月電子通商-電子部品・ネット通販

※上記のほか、Raspberry Piをセットアップするために、マイクロSDカードを自分のPCに挿すためのアダプタ、HDMI接続可能なディスプレイ、HDMI-HDMIコード、マウス、キーボードなどを適宜用意する必要があります。Raspberry Piセットアップまわりで必要な道具は、次章で紹介する記事が詳しいので参考にしてください。

また、電子回路が初めての人はLEDなども買っておいた方がよいかもしれません。電子工作の世界ではLEDをチカチカさせる通称「Lチカ」が、プログラミングでいうHello, world!にあたります。この記事の内容を実践する前に、Raspberry PiでのLチカを成功させておいたほうが理解がスムーズになります。

2. Raspberry Piのセットアップ

下記の記事のとおりにRaspberry Piをセットアップします。wi-fiに繋がるようになったら大丈夫です。

qiita.com

3. 回路の作成

下記のとおりに回路を作成します。 橙色の線がオス- メスのジャンパーワイヤで、青色の線がオス-オスのジャンパーワイヤです。

Raspberry Piの各ピンは役割が決まっているので、必ず下図に示したとおりのピンを利用します。

f:id:yoshy_toshy:20190919091105p:plain

Raspberry Piのピンに関する解説

Raspberry Piのピンには複数の種類があり、電子回路を自作する際には、その配置を確認する必要があります。

下記は公式ドキュメント(https://www.raspberrypi.org/documentation/usage/gpio/README.md)に載っている図ですが、黄色が任意の入出力のためのピン、黒がグラウンド、橙が3.3V電源、赤が5V電源になっています。

f:id:yoshy_toshy:20190919091520p:plain
ピン配置(Raspberry Pi 公式ドキュメントより)

今回の押ボタン式LINE投稿装置では、3.3V電源ピンからグラウンドピンにかけて電圧3.3Vの電気を流し、6番、13番、19番、26番の入力ピンにかかる電圧を見ることにより、どのボタン(回路を繋ぐためのスイッチ)が押されたかを判断します。Pythonプログラム上では、GPIO.input(ピン番号)という関数がTrueを返すかFalseを返すかによって、その瞬間における当該ピンの入力を得ることができます。

ブレッドボードに関する解説

ブレッドボードは、大量の穴があいており、ジャンパーワイヤを挿すことによって回路を作成できるようになっています。各穴は下図の黄色で示すように内部で繋がっており、異なる2列にまたがるようにジャンパーワイヤを挿すと、その2列は回路的に接続された状態になります。

f:id:yoshy_toshy:20190919095320p:plain

ボタンの爪に関する解説

ボタンの裏には回路に接続するための爪があるのですが、どの爪とどの爪がセットになっているのかを仕様書を読んで確認し、正しくブレッドボードに設置する必要があります。

そもそもボタンとは、回路図を見てわかるように、押している間だけ回路が繋がるスイッチのような役割を持つ部品です。今回購入したJF-15SKCBNP2という型番のボタンは、4つの爪があります。仕様書によると、各爪の関係性は下図のような構造になっているとのことなので、今回は1番と3番の組み合わせを利用します(2番と4番の組み合わせでも問題ありません)。 f:id:yoshy_toshy:20190919064159p:plain

多くの場合、電子部品の仕様書はメーカの公式サイトからPDFダウンロードできます。

JF-15SKCBNP2の仕様: https://www.nkkswitches.co.jp/product/detailed/JF-15SKCBNP2.html

購入した部品の型番をGoogleで検索すると、公式サイトや仕様書などが見つかります。

4. テストコードの実行

下記のPythonコードで電子回路の動作確認ができます。test.pyという名前で保存し、Raspberry Piの任意のディレクトリに置きます。

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time

BUTTON_MESSAGE={}
BUTTON_MESSAGE[6]="こんにちは"
BUTTON_MESSAGE[13]="ありがとう"
BUTTON_MESSAGE[19]="さよなら"
BUTTON_MESSAGE[26]="また会いましょう"

class Button:
    gpio=None
    before=False
    now=False
    text=""
    def __init__(self,gpio,text):
        GPIO.setup(gpio, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
        self.gpio=gpio
        self.text=text
    def check(self):
        self.now=GPIO.input(self.gpio)
        if self.before==False and self.now ==True:
            print(self.text)
        self.before=self.now


if __name__ == "__main__":
    GPIO.setmode(GPIO.BCM)
    buttons=[]
    for key in BUTTON_MESSAGE:
        buttons.append(Button(key,BUTTON_MESSAGE[key]))
    try:
        while True:
            for button in buttons:
                button.check()
            time.sleep(0.05)
    except KeyboardInterrupt:
        GPIO.cleanup()

test.pyを保存したディレクトリで、下記のコマンドを実行します。

$ python3 test.py

ボタンを押せば、コンソール上に「こんにちは」「ありがとう」などのメッセージが表示されます。

f:id:yoshy_toshy:20190919112830p:plain

ここまでで、本記事で目標としていた「ボタンを押すとコンソール上にメッセージが表示される状態」が完成しました。

表示するメッセージを変えたい場合はBUTTON_MESSAGE[ピン番号]の値を書き換えます。 たとえば、6番ピン(「Raspberry Piのピンに関する解説」に掲載した図を参照)につながっているボタンのメッセージを「おはよう」に変えたい場合は、BUTTON_MESSAGE[6]="こんにちは"BUTTON_MESSAGE[6]="おはよう"に書き換えます。

なお、アルゴリズムに関しては詳しくは解説しませんが、自分でソースコードを改変して実験してみたい人は「ラズパイ GPIO」などで検索すると、GPIO(ピン制御)まわりのコードについて詳しく知ることができます。たとえば、下記の記事がわかりやすいです。

mamerium.com

次回予告

次回は、今回表示できるようになった各ボタンのメッセージをLINE Messaging APIによって送信する部分の作成方法を紹介します。