The Negligible Lab

Astray in the forest of electrical and electronic circuits. Adrift in the gap between time and frequency domains. 独立独歩を是とする。

NeoPixelを光らせる ~ PICマイコン編 ~

はじめに

前回Raspberry PiPythonによるNeoPixelの制御方法を述べました。本記事ではPICマイコンによるNeoPixelの制御方法を書いて参ります。

ウェブやXを検索すると,PICマイコンの中でもCLC (configurable logic cell)を搭載するタイプにて,SPIとCLCを巧く組み合わせる方法が知られていることが分かりました。Microchip社のアプリケーションノートAN1606にもPIC16F1509のCLCを用いたNeoPixelの制御方法が紹介されております*1。この方法では,SPIモジュールが送信している最中にPICマイコンのコアでは別の処理が可能となるというメリットがあります。

本記事ではそのようなスマートな方法ではなく,単純にI/OポートをHigh/Lowに制御するだけという脳みそ筋肉なシンプルな方法でNeoPixelを点灯させるべく試行錯誤した結果をまとめます。また,ボタン電池(CR2032)にてNeoPixel (WS2812B)を点灯できるか否かについても確認した結果を報告します。

完成イメージ

図1にPIC12F1840を用いたNeoPixel実験基板を示します。PIC12F1840はCLCを持っていませんが,1個のNeoPixel (WS2812B)を制御できました。また,WS2812Bのデータシートによると電源電圧(VDD)は+3.7 V ~ +5.3 Vとなっておりますが,それよりも低い電圧(消耗具合や負荷にも拠りますが2.5 ~ 2.8 V程度)しか出ていないボタン電池CR2032でも,さらにはVDDをPICマイコンのI/Oポートから供給しても点灯させることができました。

図1: PIC12F1840を用いたNeoPixel実験基板
PIC12F1840のクロック周波数を8 MHz以上に設定していれば,正常に点灯できるようです。

続きを読む

NeoPixelを光らせる ~ Raspberry Pi + Python編 ~

はじめに

前回PICマイコンによるポータブル気圧計をプリント基板化し,その際に,普通のLEDの代わりにNeoPixelを用いました。その下準備として,筆者はRaspberry PiPICマイコンのそれぞれによるNeoPixelの制御方法(光らせ方)をいろいろと試行錯誤しました。本記事ではまずRaspberry PipigpioライブラリPython)を用いたNeoPixelの制御方法について書いて参ります。PICマイコンについては次回に委ねたいと存じます。

図2に完成イメージとしてRaspberry Pi Zero 2 Wにて12個のNeoPixel (WS2812B)を制御した様子を示します。

図1: Raspberry Pi Zero 2 WでNeoPixelを制御

続きを読む

プリント基板を作ろう ~ KiCadとJLCPCB ~

はじめに

前々回にて,PICマイコンPIC16F18326と温湿度気圧センサBME280を用いたポータブル気圧計について述べました。本記事では,その基板をKiCadで再設計し,JLCPCBに発注してプリント基板化したことについて書いてみたいと思います。

マイコン内蔵フルカラーLED(いわゆるNeoPixel)をPICマイコンで制御する方法についても書く予定でしたが,記事が長くなり過ぎたので次回とさせて頂きたいと存じます。

完成イメージ

図1に完成イメージを示します。回路構成は前々回の試作2号機とほとんど変わっていません。一点,LEDの代わりにNeoPixel (WS2812B)を用いました。両面基板として設計したため,ジャンパ線代わりの0 Ω抵抗器が一切なくなり,見た目はすっきりしていますね。十字配線ユニバーサル基板を使った従来機では裏面に部品がありましたが,それもなくなりました。

図1: KiCadで設計しJLCPCBに発注した基板に部品を実装

LEDをNeoPixelに変えたことで,ソフトウェアひとつで様々な色に光らせることが可能となりました。しかし,後述のようにPICマイコンがスリープモードとなった際の消費電流が増えてしまったため,ボタン電池の消耗が早くなってしまった気がしています(定量的に測定はしていませんが…)。リビジョンアップする機会があればもう少し見直したいと思っています(リビジョンアップしました!「まとめ」以降に追記しています)。

続きを読む

気圧計を作る ~ Seeed Studio XIAO ESP32C3編 ~

はじめに

前々回,前回と気圧計に関する記事を投稿して参りましたが,今回も同様の記事となります。ちょっとこれまでの主題と外れますが,「気圧計を作る」シリーズに入れてしまうことにします😅

本ブログに書いたことはありませんが,温湿度気圧センサBME280を用いた空気モニタからGoogle スプレッドシートに記録する装置(図1)を作り,ときどき稼働しておりました。秋月電子通商のキャラクタOLEDディスプレイを使って美しい文字を表示していましたが,残念なことに使用していたEPS32モジュール(互換基板)のmicroUSB端子の半田付けが劣化してしまい,動作が極めて不安定になってしまっておりました。修理または作り直しが必要だと思いながらも,しばらく放置しておりました。

図1: BME280とESP32マイコンを用いた空気モニタ(旧作)

そんな中,2020年頃から,Seeed Studio社による「XIAO」シリーズと呼ばれる各種の超小型マイコンボードが売り出されるようになりました(XIAOは中国語の「小 (xiǎo)」から来ているのでしょうね)。恐らく最初に発売されたSAMD21G18を搭載するもの(無印の「Seeed XIAO」または「Seeeduino XIAO」がコレでしょうか)をはじめとして,RP2040を搭載するもの,ESP32C3を搭載するものなど,ほぼピン互換,かつほぼ同じサイズで展開されており,秋葉原の電子部品ショップでも簡単かつ手頃*1に入手可能となっています。図2は本記事で用いたものと同じSeeed Studio XIAO ESP32C3です。10円硬貨と比べるとその小ささ(まさに「xiǎo」!)がお分かり頂けると思います。

図2: Seeed Studio XIAO ESP32C3

温湿度気圧をセンシングして表示し,Googleスプレッドシートに記録するだけであればピン数はそれほど必要ない…という訳で,超小型ながらWiFiにも接続可能なSeeed Studio XIAO ESP32C3(以下,単にXIAOとも呼びます)と,前回も使用したキャラクタLCDを用いた空気モニタを新たに作ることにしました。

完成イメージ

図3に完成したSeeed Studio XIAO ESP32C3を用いた空気モニタを示します。

図3: Seeed Studio XIAO ESP32C3とBME280を用いた空気モニタ
ダイソーのディスプレイキューブLに全体が収まるように作っています。前面には16文字 × 2行を表示できるキャラクタLCDと2つのタクトスイッチを設けました。左側のタクトスイッチを押すと:

  • 温湿度気圧モード
  • 時計モード
  • WiFiモード
  • 総合表示モード

の4つを切り替えることができます。図4にそれぞれのモードの表示例を示します。

図4: 4つの表示モード
なお,右側のタクトスイッチを押すとWiFi再接続を試みるようにしていますが,他に面白い使い方が思いついたら変えてみたいと思います。

ESP32C3はWiFiに接続できますので,測定した温度,湿度,気圧を1分毎にGoogle スプレッドシートに記録します。

図5: Google スプレッドシートに記録された温度・湿度・気圧

こんなに小さなマイコンがWiFiを介してインターネットに繋がることは,一昔前では考えられませんでしたね。まさにIoT工作に最適なデバイスと言えるでしょう。

*1:2025年11月現在,千石電商では990円でした。WiFiに繋がるマイコンがこの価格とは,隔世の感がありますね。

続きを読む

気圧計を作る ~ PICマイコン編 ~

はじめに

前記事ではM5Stackに気圧センサLPS25Hを接続し,計測した温度と気圧をmicroSDカードに保存する気圧ロガーを作りました(今はM5Stack Protoモジュール13.2に収めようと画策しています)。本記事ではPICマイコンを用いたボタン電池駆動の「かわいい」気圧計を作ります。

PICマイコンと私

筆者がPICマイコンと出会ったのは2005年頃だったのではないかと思い出します。トランジスタ技術2005年4月号の付録だったR8C/Tinyマイコン基板で遊んでいた頃,もっと手軽かつ安価なマイコンとしてPICマイコンの存在をどなたからか教えてもらい,秋月電子通商のAKI-PICプログラマーを組み立てました(今でも売っているんですね)。誰もが触った往年の名マイコンPIC16F84AやPIC16F877Aで実験ボードを作ったり,実際に大学での実験に使ったりもしましたね。この時期,開発ツールMPLABで無料で使用できるのはアセンブリ言語だけでした。

しかしその後,PICマイコンはおろか,電子工作をまったくしない時期が10年ほど続きました。筆者の「空白期」「暗黒時代」です。この時期にもっといろいろ学んでいれば…??

それからしばらくして,mbed,M5Stack,Raspberry Piといったマイコンシングルボードコンピュータと出会った筆者は,かつて遊んでいたPICマイコンでもう一度遊んでみたいと思い,MPLAB X IDEをパソコンにインストールし,PICKit 2,PICKit 3(の互換機)をAmazonでポチってみました。今やアセンブリ言語ではなくC言語も無料で使えるではないか…! PIC12F1840でフルカラーLEDを制御するといった練習を試みた後,また2,3年ほど電子工作ができない時期に突入してしまいました。

再び少しずつ工作ができるようになったところで,前記事のM5Stack気圧ロガーを作りましたが,PICマイコンの練習を兼ねて少ピンマイコンでかわいい気圧計を作ろうと思い立ちました。当初は8ピンのPIC12F1840などを用い,microSDカードへの記録も目指していましたが,プログラムメモリが足りないことからmicroSDカードへの記録は諦め,また14ピンのPIC16F18326(プログラムメモリが16 kwordもある!)を使うことにしました。これを秋月電子通商のC基板に収め,かつ,ボタン電池(CR2032)とキャラクLCDと一緒に窓付きブリキ缶ケースに収めると,なかなか見栄えもするのではないか…?

完成イメージ

完成イメージを図1に示します。窓付きブリキ缶ケースの中に秋月電子通商十字配線ユニバーサル基板(Cタイプ)で作成した基板を収めています。基板の中にはバックライト付きキャラクタLCDPIC16F18326温湿度・気圧センサBME280ボタン電池CR2032,タクトスイッチがあります。

図1: PIC16F18326とボタン電池による携帯型気圧計
ボタン電池を入れると直ちに起動し,温度・湿度・気圧を0.5秒毎に表示します。この状態でタクトスイッチを押すとPICマイコンはスリープモードに入り,キャラクLCDの電源も遮断されます。タクトスイッチを再度押すとスリープモードから復帰します。復帰とスリープの様子を動画1に示します。
youtu.be
動画1: 復帰とスリープの様子
ただ単に温度,湿度,気圧を表示するだけで,記録することも,インターネットに報告することも何もできません…。

図2,3に示すように,暗いところで見ると,透明な窓付きブリキ缶ケースの中でキャラクLCDのバックライトと白色LEDが光を放ち,なかなかエモい雰囲気になります。

図2: 白文字黒背景キャラクLCD
図3: 少し暗いところでの様子
白文字黒背景キャラクLCDは僅かながらVFD (vacuum fluorescent display)のような雰囲気がありますね。

以降,このPICマイコン気圧計のハードウェア構成,MPLAB MCCでの設定,そしてソフトウェア構成について述べていきます。

続きを読む

気圧計を作る ~ M5Stack気圧ロガー編 ~

はじめに

気圧計と私

気圧計が欲しい! ──小中学生の頃,私はそう思っていました。気圧は当たり前ながら天気に深く関わり,台風の際などに大きく変動する重要なパラメータであるにもかかわらず,それを測る気圧計は,温度計や湿度計のようにその辺のお店で簡単に手に入るものではなかったからです。どこかのホームセンターでやっと見かけた(アナログ)気圧計には1万円近いお値段が付けられており,当時の私のお財布事情ではおいそれと手を出すことはできませんでした。

SCP1000とMARY基板

それから何年もの後…,2011年頃でしたでしょうか,秋月電子通商で気圧センサSCP1000をDIP化したモジュールが売り出されました。これが1,000円 + αほどのお値段(現在は700円のようです)でしたので,すぐに購入し,(何年か放置した後にやっと)ついに気圧計を作ることにしました。このSCP1000を当時のトラ技増刊の付録となっていたMARY基板に繋げ,さらにこれをRaspberry Piとシリアル通信することで,台風の気圧推移などを記録できました。mbedのC++言語でSPI通信する方法など,さまざまに苦労した記憶がよみがえります。

携帯できる気圧計を

それからまた何年かが経ち,M5Stackと出会った筆者は,その中身であるESP32マイコンを触るようになり(Arduino IDEです),ESP32-DevKit-Cなどの開発ボードと温湿度気圧センサBME280やBME680を繋げて,WiFi経由でGoogle スプレッドシートに記録するなどして遊んでおりました。

しかしそれらはみなUSBケーブルによる給電が必要でした。簡単に持ち運べる気圧計,できればオフラインで何かに記録できるものを作りたいと思い,次の2つを作ることとしました。携帯型気圧計です。これであれば,例えば高いビルに上った際や,電車が地下に潜った際などの気圧変化を観測できますね。

  • M5Stackに気圧センサを接続し,データをmicroSDに記録するもの
  • PICマイコンに気圧センサを接続したシステムで,ボタン電池駆動できるもの(microSDへの記録は優先度低)

本記事では前者,M5Stack版(M5Stack気圧ロガー)について記述します。

続きを読む

1 ~ 25を1回ずつ用いた5 × 5行列の最大の行列式

はじめに

久しぶりの投稿として,数ヶ月前にやってみた数学の遊びについて書いてみます。

X(旧Twitter)で,5 × 5の行列を眺めていたら,「ビンゴみたい」と言われた──というポストを見かけました。なるほど25個の数が正方形の形に並んでいたらビンゴに見えますね。ならば,1 ~ 25の自然数がそれぞれ1回ずつ使われた5 × 5行列を「ビンゴ行列」と呼ぶこととし,ランダムに配られたビンゴ行列の──そうですね,行列式が最も大きいものが勝ち,としてみましょう。さて,このとき,最強のビンゴ行列,つまり理論上可能な最大の行列式はいくつでしょうか?

1 ~ 25の自然数をそれぞれ1回ずつ使った5 × 5行列をビンゴ行列と呼ぶとき,ビンゴ行列として可能な最大の行列式はいくつか? また,そのビンゴ行列は何か?

続きを読む