本記事の内容
Raspberry Pi Picoとwaveshare-19650を使って、ボタン(A/Y)を押すとカウントアップ・カウントダウン、ボタン(B/X)を押すと数値をリセットするカウンター装置を作製します。
さらに、余っている人体赤外線感応モジュールHC-SR501を活用して、検知回数をカウントして表示する「人感検知カウンター」に改良してみました。
必要なもの
- Raspberry Pi Pico:580円
- waveshare-19650:1100円
- (Treedix GPIO 外部拡張ボード:880円)
- (人体赤外線感応モジュールHC-SR501:200円)

カウンターの作製
まずは、ボタンを押すだけでカウントアップ・カウントダウンする普通のカウンターから作製します。
普通の液晶カウンターでさえ100均で売っていそうなので、明らかにRaspberry Pi Picoの無駄遣いです。Raspberry Pi Picoで作るとなると、材料費だけで2000円以上かかっています。。。
以前のデジタル時計の作製といい、100均商品の安さとクオリティには、頭が上がりません。
配線
配線と言っても、Raspberry Pi Picoとwaveshare-19650を接続するだけなので、何も難しいことはありません。※ピンヘッダが実装されていないRaspberry Pi Picoを購入している場合は、はんだ付けが必要です。
私の場合は安定性を求めて拡張ボード「Treedix GPIO 外部拡張ボード」上で組み立てていますが、別に必須というものでもありません。
上記記事でも解説しましたが、拡張ボードは40×3の120カ所のはんだ付けが必要なので、初心者向けではないのは確かです。
プログラムコード
waveshare-19650の公式サイトにPythonのサンプルコードがあるのですが、こちらではフォントサイズが小さすぎて数字を表示するには使えませんでした。
比較的新しい商品のせいなのか、waveshare製品を解説している方がとても少ないんですよね。。。(海外のサイトも含めて)
苦労して探したところ、こちらのサイトで改良したコードが紹介されていました。とてもありがたいです。ダウンロードさせて頂き「WS240 picofontsTony Mods.py」をベースに、以下のコードを追記しました。
keyA = Pin(15,Pin.IN,Pin.PULL_UP)
keyB = Pin(17,Pin.IN,Pin.PULL_UP)
keyX = Pin(19 ,Pin.IN,Pin.PULL_UP)
keyY= Pin(21 ,Pin.IN,Pin.PULL_UP)
n = 0
while(1):
c = colour(255,255,255)
printstring("Human-Sensor",10,50,3,0,0,c)
printstring(str(n),100,120,3,0,0,c)
LCD.show()
if keyA.value() == 0:
n += 1
print("A")
LCD.fill(000000)
if(keyY.value() == 0):
n -= 1
print("D")
LCD.fill(000000)
if(keyB.value() == 0 or keyX.value() == 0):
n = 0
print("B/X")
LCD.fill(000000)
LCD.show()

369行目以下を上記コードに書き換えることで、数値を液晶に表示するだけのカウンターが完成します。
ジョイスティックの上下でカウントアップ・カウントダウンができれば一番良いのですが、私のRaspberry Pi PicoはGP18が不調でジョイスティック「↓」が使えません。。。そのため、ひとまずA~Yボタンだけで対応しています。
人感検知カウンターの作製
これだけでは面白さが足りないので、家に余っていた人体赤外線感応モジュール「HC-SR501」を取り付けて、人を検知するとカウントアップするようにさせました。
家の玄関にでもおいておけば、防犯用の何かに活用できないかと考えています。
配線

ここにきて、Treedix GPIO 外部拡張ボードの強みがやっと発揮されました。Raspberry Pi PicoのPinを2倍に増やして、一方を液晶モジュール、もう一方をセンサに取り付けています。
HC-SR501の3Pinは、それぞれ以下のようにRaspberry Pi Picoと接続すれば完成です。
HC-SR501 | Raspberry Pi Pico |
VCC | ㊵VBUS |
OUT | ㉞GP28 |
GND | ㉝GND |

プログラムコード
先のコードの一部に、以下のコードを挿入すれば完成です。
sensor = Pin(28, Pin.IN, Pin.PULL_DOWN)
led = Pin(25, Pin.OUT)
if sensor.value() == 0:
led.value(0)
else:
led.value(1)
n += 1
LCD.fill(000000)

人を検知したタイミングでひたすらカウントアップする「人感検知カウンター」の完成です。
まとめ
waveshare-19650のボタンと液晶を活用して、普通のカウンターと人感検知カウンターを作製してみました。
SSD1306 I2C OLEDディスプレイモジュールと比べると、waveshare-19650はライブラリが不十分で少々扱いにくいです。しかし、最初からボタンが付いていて、ブレッドボード上での配線が不要なことは、waveshare-19650の優れた点だと思います。
コメント