2025/12/06、北陸Ruby会議01にて5分LT「猫の健康を見守りたい!実践 Raspberry Pi + Ruby」を発表させていただきました。今回のテーマは「みんなのRubyの使い方」ということで、Rubyのtech寄りな話でなく、使った成果物にフォーカスした発表とさせていただきました。 聴いてくださったみなさん、ありがとうございました!
https://regional.rubykaigi.org/hokuriku01/
(発表資料URLが後日ここに入ります)
5分に精一杯詰め込みましたが(※早口で喋った結果30秒くらい余ったけど)、時間都合上細かい余談が入らないと判断し、ブログ記事に逃しました。 超ド級の初心者がIoTをやろうとして困ったことの備忘録として記します! ご笑覧いただけますと幸いです。

- 買ったはいいがラズパイの電源が無い
- USBのリーダーモジュールは未対応
- このラズパイにはピンが無い
- ラズパイ <-> PN532 の接続
- 買ったはいいがタグが使えない(周波数)
- 必要なライブラリとか環境構築
- 読み取り距離の対処
- 読み取り距離の対処(失敗) デカいPN532を海外から取り寄せたけどダメだった話
- Q: そもそも自動トイレで区別つくのでは?
- ありがとうございました!
買ったはいいがラズパイの電源が無い
一念発起した際に、以下のアイテムを購入しました。
- Raspberry Pi Zero 2 W
- NFCタグ(10枚入り)
- micro USB - USB A のアダプタ
- USBカードリーダー
いざ届いて Raspberry Pi Zero 2 W に繋ごうと思った時、電源を供給する microB のアダプターが無いことに気付きました。改めて振り返ると、初心者うっかりでございました。
USBのリーダーモジュールは未対応
すでに上記の買い物リストでお察しですが、最初はUSBのカードリーダーを購入しまして、ラズパイに接続→動かない・なぜならWindowsとかMac向けなので…、ということがありました。そもそもリーダーとして何を購入するかというのがド素人としては第一関門でした。選択肢として、今回発表に使用した PN532 とは別に RC522 というモジュールもありましたが、ChatGPT曰く猫首輪につけるタグとの相性としてPN532が良い、というアドバイスに従って再購入をしました。
このラズパイにはピンが無い
さて PN532 が届いたことで意気揚々と繋ごうと思った段で、今度はラズパイにピンが無いことに気づきました。
- Raspberry Pi Zero 2 W → GPIOピンヘッダーが無い(最初に買ったやつ)
- Raspberry Pi Zero 2 WH → GPIOピンヘッダーがある
Wireless の W、そして Header の H らしいですね、なるほどな。 ピンヘッダー単独で売ってたのでそれを買いつつ、はんだ付けの過程で壊したらどうしようという気持ちがあり、おとなしく WH のほうを買い直したりしました。(なので今、家に遊ばせてるラズパイがもう1台あるんですよね。ピンのハンダ付けは必要だけど…さてどうしようかな…。)
ラズパイ <-> PN532 の接続
線を繋ぐところも分からなかったので、ChatGPTに画像を出してもらったりしたのですが、まるきり嘘の画像を出してきたので配線にはちょっと難儀しました。Webで改めてピン配置図を探し、接続しました。
- ( ラズパイ ←→ PN532 )
- 1 (3.3v) ←→ VCC ※5v(2番)のほうがいいのかも?(未検証)
- 3 (GPIO 2) ←→ SDA
- 5 (GPIO 3) ←→ SCL
- 6 (GND) ←→ GND
また、PN532上のスイッチは「1」のみON ( I²C モード ) としています。スイッチはめちゃくちゃ小さいので、ピンセットでカリカリして動かしました。


- ※参考: ピン配置図 – Raspberry Pi ZERO W(WH) – マイコン技術Navi
- ※参考: 【最速】ラズベリーパイ(Raspberry Pi)でGPIOピンの配置を簡単に確認する方法(ターミナル使用) | sozorablog
買ったはいいがタグが使えない(周波数)
色々買い足す時に、タグも急ぎ2〜3種類ゲットしたのですが、いざ試す時になって使用不可のタグがあることに気付きました。 リーダーが出す周波数に合うタグでないと読み取れないためです。(よく考えてみると当たり前…。)
Amazonで「RFID タグ」のようなキーワードで出てくるタグでは、次のようなものが見られます。
- 125kHz, 134kHz → LF帯 ( Low Frequency: 低周波 ) → 猫の登録に使われるマイクロチップはこれらしい
- 13.56MHz → HF帯 ( High Frequency: 高周波 ) → 交通系、マイナンバーカードなど。 ※PN532にはこれ。
- 860〜960MHz → UHF帯 ( Ultra High Frequency: 超高周波 ) → 倉庫とかで使われてるタイプ
何も分からず適当に買ってしまったタグが 125kHz のもので「わ〜なんでや動かん」と困っていた時がありました。勉強になった。
必要なライブラリとか環境構築
備忘録ですがこんな感じでした。※要らないものも入れてたりするかも…。
$ sudo raspi-config # → Interface Options → I2C → Enable $ sudo reboot $ sudo apt-get install -y i2c-tools $ sudo apt install libnfc-bin $ vi /etc/nfc/libnfc.conf device.connstring = "pn532_i2c:/dev/i2c-1" $ sudo apt-get install -y libusb-dev $ wget https://github.com/nfc-tools/libnfc/releases/download/libnfc-1.8.0/libnfc-1.8.0.tar.bz2 $ tar -xf libnfc-1.8.0.tar.bz2 $ cd libnfc-1.8.0 $ ./configure --prefix=/usr --sysconfdir=/etc … $ make … # ※ruby-nfc > ffi が、C拡張のコードを含むので、ruby3.1-dev が必要。 $ sudo apt install -y ruby3.1-dev build-essential libffi-dev libnfc-dev pkg-config $ sudo apt install -y libfreefare0 libfreefare-dev $ sudo ldconfig # 念のためライブラリキャッシュ更新 $ sudo gem install ffi --no-document $ sudo gem install nfc --no-document
読み取り距離の対処
読み取り精度の工夫が一番難しかったです。
(1) コンデンサをつける
コンデンサをつけ、電圧の変動を防ぐと安定するという記事を見かけ、つけてみました。 47μFの電解コンデンサと、0.1uFのセラミックコンデンサをハンダづけしました。

発表でMAX3cmとお伝えしましたが、コンデンサをつけた上でのMAXなので、つけない場合はもうちょっと読み取り距離は短いかもです。(つける前の動作をもっと確認しておけばよかった…。)
コンデンサはネットで買おうとすると100本単位とかのレベルで注文になってしまうので、秋葉原の千石電商でお買い物しました。 47μF * 3個、0.1uF * 3個 で合計135円税込。安い…! 一桁数レベルのコンデンサはインターネットで買うのは良くないなと学びました。
(2) ひたすら首輪にお裁縫
発表準備の内容としては、ひたすらタグを縫い付けるためのお裁縫をしていた記憶が多いです。タグは真ん中に配線のないエリアがあるので、そこに針を刺し、チクチク縫います。すあまの首輪はCatlogのシュシュ生地を使っているので、縫い付けやすいのですが、サラさんの首輪がフェルト製で硬いので縫い付けが難しかったです。また塗ってるとタグのシートが裂けてしまい、破損して読み取れなくなるということもありました。もう一工夫、なにかできないものだろうか…。



(3) 猫たちの姿勢を観察
読み取り距離MAX3cmの範囲で、2匹の猫を検知可能にするというのも難易度が高かったです。 観察の結果、すあま(白猫)のほうは頭を天井に寄せ気味スタイルで出てくるのに対し、

サラさん(キジトラ)の方は頭を低めに下げつつ出てくるのです。

最終的に、出入り口のエリアの上・端に制限を設けることで、両猫共に無理やりモジュールのほうへ寄ってもらう形にしました。 この工夫後、さらに読み取り成功確率がUPしました。


読み取り距離の対処(失敗) デカいPN532を海外から取り寄せたけどダメだった話
読み取り距離を上げるためにChatGPTと色々とやりとりする中で「検知モジュールがよりデカければ良い」という発想がありました。実は elechouse から PN532 の"External Antenna" があるバージョンが出ています。
https://www.elechouse.com/product/pn532-nfc-rfid-module-w-external-antenna-updated-version/
これを発見したとき、すでに北陸Ruby会議01のLTに採択いただいていたので、やれる努力はすべてやる、の気持ちでポチーッ。滅多に無い海外からのお取り寄せ・送料込み $44.70 (約7000円) でゲット。 11月中旬に無事届きました。

読み取り距離の改善に大期待したのも束の間、テストの結果、読み取り可能距離は 2.3cm でした。既存のPN532(コンデンサ付き)のほうが成績が良いです。冷や汗を感じながら、コンデンサの有無のせいでは…と思い、はんだ付け後に再トライしましたが、結果は 2.6〜2.9cm までにとどまりました。結局、元々使ってたノーマルなPN532の方が良い、と判断してお蔵入りとなりました。苦い出費…。良いのだ、トライが大事だから…。 ( 今思うと 3.3v 供給してたからか? 5vにして再検証しても、いいかもしれないな…。 )
Q: そもそも自動トイレで区別つくのでは?
今回入り口にPN532を設置した猫トイレは、PetSnowyという自動トイレです。これにも猫の体重測定の機能があったりしますが、今回の主要利用を想定した2猫、すあま & サラさん の体重差が僅差(200gくらい)でして、頻繁に誤判定してしまうという状況があり、別の手段を探したという経緯がありました。
ありがとうございました!
ふとした思いつきでしたが、故郷での発表機会をいただいたこともあり、一通りの実現を挫けずやりきることができました。実際に、白猫のトイレ事情のチェックに役立っています。Sinatraに表示させる情報にまだ工夫の余地があったり、首輪のタグが壊れて検知できなくなったりする場合もあったりするので、引き続き日々活用しつつ改善を回していきたいです。ありがとうございました!
書き散らしコードはこちら: https://github.com/betachelsea/cat-sensor
ChatGPTに描いてもらったけど、あまりスライドで出番のなかったアイコン画像↓
