🤖

【Raspberry Pi】 シアーハートアタック (LCDを使ってみる)

2022/09/10に公開

LCD

普段、ジョジョの奇妙な冒険 第四部 を見ているのですが、
気になるヤツが現れました。

キラークイーンの左手から発射される爆弾戦車「シアーハートアタック」
戦車という点に共感を得たわけではありませんよ。

「コッチヲ見ロ!」って言いながら、人の体温を感知して突撃し爆発するそうです。
作れるかな?とか思った次第です。(爆発は無理ですが・・・)

ラズパイとしては、自分の温度は取得可能。
センサーを使えば、周囲の気温なども取得可能。
人の体温を感知するというのは、どうすればよいのやら・・・。

ふと浮かんだのが、サーマルスコープ。銃に取り付けて暗闇で人を検知するヤツです。
次に、動体検知。不審者対策でライトが付いたりするヤツ。
ただ動体検知は、動くものに反応するのであって、体温見ているわけじゃなさそう。
そして赤外線センサ。遠くから対象の温度を瞬時に検知できるそうです。
すごくコレっぽいです。
しかしながら、当然手持ちにありませんので、
ひとまず「コッチヲミロ」を実現すべく、
これまで使いそうで使わなかった、LCD(液晶ディスプレイ)を使ってみようと思います。
強引ですが、今回はLCDを利用します。


手持ちのLCD、種類は不明ですが、QAPASS 1602A のシリーズのどれかだと思います。
上の写真でも分かりますが、ブルーバックに黒文字なので、
視認性が良いとは言えないのが残念です。

バックライトを消すとほぼ文字が見えず、明るい場所だとカメラで文字が撮影できません。
本格的に活用する場合は、新調することになるでしょう。

型番を調べていると白文字との情報が多いのですが、古いモノなのでしょうか・・・。

I2C基盤が取り付けられており、4つのPINだけで操作可能です。
I2Cはシリアル通信の方式のひとつという事らしいです。

ラズパイ(RaspberryPi 3 Model B)では、GPIP2,GPIO3 がI2Cのためのピンとなっています。
あとは電源のための+とGNDで合計4ピンです。配線が簡単で良いですね。

ラズパイでI2Cを利用するには、設定が必要です。
ターミナルで、
sudo raspi-config と入力し、
7 Advanced Options の項目を選択し、
A7 I2C を選択し、YES を押下すれば有効になります。

機器との接続は簡単で、
VCC を ラズパイ 3.3V電源に、
GND を ラズパイ GNDに、
SDA を ラズパイ SDA(GPIO2)に、
SCL を ラズパイ SCL(GPIO3)に、
接続すれば完了です。

ターミナルから、
sudo i2cdetect -y 1 と入力して、機器のアドレスが表示されていればOKです。下図27がそれです。

LCD

複数接続することもでき、その場合は複数のアドレスが表示されます。

次に制御のためのソースコードの準備です。
pythonからI2Cデバイスを操作できる「python-smbus」というライブラリがあるので、
これをインストールします。(同時に i2c-tools もインストールします。)

プログラミングですが、データシート等との睨めっこになります。
SPIもそうでしたが、要は「どのアドレス」に「どんなデータを送るか」です。
データシートに記載がありますので、その通り行えばよいのですが、
先人様たちが用意してくれた便利なライブラリを用いることで、簡単になります。
SPI通信で挫折した身としては、いかに楽をするかはモチベのために大切です。 (特に今回は番外編のお遊びですので・・・)

下記のモノをお借りしました。C++用のliquidcrystal_i2cというライブラリを
python用にしたものかと思います。
python-liquidcrystal_i2c

これを利用すると、とても簡潔に記述できます。


import liquidcrystal_i2c

cols = 16
rows = 2

lcd = liquidcrystal_i2c.LiquidCrystal_I2C(0x27, 1, numlines=rows)
s=chr(0xa2)+chr(0xba)+chr(0xaf)+chr(0xc1)+chr(0xa6)+chr(0xd0)+chr(0xdb)+chr(0xaf)+chr(0x21)+chr(0xa3)
lcd.printline(0, 'SheerHeartAttack'.center(cols))
lcd.printline(1, s.center(cols))

初期化して、文字をセットするだけの簡単なソースです。
注意点としては、英数字や一部の記号は、そのまま設定できるが、
カタカナ等は1文字ずつ、8bitの文字コードとして設定する必要があるということです。

文字コードはデータシートに載っておりましたが、
LCDで共通していることが多い為、流用も出来そうです。

!
0xa2 0xba 0xaf 0xc1 0xa6 0xd0 0xdb 0xaf 0x21 0xa3

となります。一文字ずつchrで囲って連結します。

センサーと併用すれば温度表示などにも使えますね。

まとめ

視認性が低いのは残念ですが、持て余していたLCDを使う事ができました。
先駆者様に感謝。

GitHubで編集を提案

Discussion