10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32を搭載し、リチウムポリマー電池によって駆動できるArduino互換機をゼロから自作してみた話

Last updated at Posted at 2024-04-26

はじめに

今回は初めてArduino互換機の自作に挑戦してみました。特徴としては低消費電力なESP32-C3-WROOM-02を搭載し、BLE1やWi-Fiが利用できる点、Type-C端子に対応した点、直接リチウムポリマー電池を接続して駆動できる点です。既製品を使用する中で少し不便に感じていたところを解消できるように設計してみました。なんとか期待した通りに動くところまでは確認できたので手順などを共有します。ご参考になりましたら幸いです。
picture.jpg

方針

まずは既製品の長所と短所を考えてみました。今回は秋月電子通商より購入できる以下の製品を基準に取り上げます。

長所だと思う点は以下の通りです。

  • USB経由で書き込める
  • 高性能なESP32を搭載
  • Arduino開発環境が利用できる

逆に短所だと思う点は以下の通りです。

  • 少し高価
  • 標準的なブレッドボードに対して幅が広い
  • micro-B端子を搭載

このような長所は活かしつつ、なるべく短所を克服するため、以下のような点を目標に設計しました。

  • 安価
  • 標準的なブレッドボードに合わせて幅が狭い
  • Type-C端子を採用
  • リチウムポリマー電池から駆動できる
  • リチウムポリマー電池を充電できる
  • 低消費電力

設計

今回はKiCadを使用しました。無償のソフトですが、機能は豊富で日本語の資料も割と簡単に見つかる印象です。導入についてはこちらが参考になりました。

部品表

使用した部品は以下の通りです。

リファレンス番号 型番 LCSC 個数 価格
J1 U262-161N-4BVC11 C319148 5個 292.2885円
C2, C3, C5 CL05A106MQ5NUNC C15525 15個 10.6709円
R1 0402WGF3301TCE C25890 5個 0.3866円
SW1, SW2 SKRKAEE020 C115357 12個 193.1888円
U1 MCP73831T-2ACI/OT C424093 5個 548.6209円
R5, R6 0402WGF4700TCE C25117 10個 0.7732円
R3, R4 0402WGF5101TCE C25905 10個 0.7732円
R7, R8 0402WGF1002TCE C25744 10個 0.7732円
R2 0402WGF1003TCE C25741 5個 0.3866円
D1 B5819W C8598 5個 19.9499円
D2, D3 KT-0603R C2286 10個 8.0418円
U2 AP2112K-3.3TRG1 C51118 7個 95.1561円
C6, C7 CL05B104KB54PNC C307331 10個 8.1965円
Q1 AO3401A C15127 5個 45.6991円
C1, C4 CL05A475MP5NRNC C23733 10個 8.3511円

後述するように今回はJLCPCBのPCBA2を利用するため、そこで安く用意されている部品を優先的に選んでいます。実装費が高い数個の部品については秋月電子通商で別に購入し、後から手実装しました。

リファレンス番号 型番 販売コード 個数 価格
J3, J4 PHA-1x9SG 100167 10個 80円
J2 B2B-PH-K-S 112802 5個 50円
U3 ESP32-C3-WROOM-02-N4 117493 5個 1550円

ここからは主要な部品に関して説明します。

ESP32-C3-WROOM-02

今回はESP32-C3-WROOM-02を使用します。そこそこ安価でWi-FiやBLE1が利用できます。また、USB機能を内蔵し、別途USBシリアル変換ICなどを載せる必要がないため、簡素化、小型化できました。省電力性も高いので今回のような用途にはぴったりです。

AP2112

ESP32-C3-WROOM-02の電源電圧は3.3Vです。そのため、USBから給電する場合やリチウムポリマー電池で駆動する場合は3端子レギュレータ等で降圧する必要があります。ただし、後者の場合は特にドロップアウト電圧が低い部品を使わないと安定的に駆動できません。今回はAP2112を選びました。出力電圧は3.3V、出力電流は600mA、ドロップアウト電圧は最大250mV程度なので起動時や通信時の消費電流が大きいESP32も駆動できそうです。パッケージはSOT-25なのでコンパクトな方だと思います。

MCP73831

リチウムポリマー電池の充電を制御するため、MCP73831を使用しました。まず、動作の概要ですが、充電中はUSBから供給される5Vを降圧し、定電流充電します。充電池の電圧が約4.2Vを超えたら定電圧充電に切り替えて充電は完了し、過充電を防止します。データシートより抜粋した下図においては約90分を境に切り替わる様子が読み取れます。
datasheet.png
STATピンの電圧レベルが充電中はLレベル、充電後はHレベルと切り替わるため、ここにLEDを接続することで簡単に確認できます。また、充電時の電流$I_{REG}$はPROGピンに接続した抵抗器$R_{PROG}$で次式のように求まります。

I_{REG} = \frac{1000}{R_{PROG}}

この電流が大きくなると充電に要する時間は短くなりますが、充電池の容量とCレートに応じて適切な設計を行わないと非常に危険です。例えば100mAh、1Cの充電池を使用する場合、これは1時間で満充電できる電流を意味するため、充電時の電流は100mA以下、抵抗器は10kΩ以上が妥当です。

回路図

今回は電源がUSBから給電する場合、またはリチウムポリマー電池で駆動する場合の2系統です。このまま並列に接続すると片側に電流が逆流してしまう危険性もあるため、電源を切り替えるための回路が必要です。単純にダイオード2個のみで組むこともできますが、順方向電圧の分だけ損失が生じてしまいます。特に充電池で駆動する場合は無視できない損失です。そのため、より損失が小さいMOSFETを使用し、こちらを参考に組んでみました。
schematic.jpg
また、先述したようにESP32-C3-WROOM-02は従来のUART経由に加えてUSB経由で書き込むことも可能です。その場合、リセットスイッチや動作モード切り替え用スイッチの操作は不要ですが、念のために付けておきました。後述しますが、結果的には付けた方が無難だと思います。

レイアウト

今回のプリント基板は2層です。シルクが重ならない範囲で部品の配置は割と大雑把に決めましたが、その代わり配線には苦労しました。下図においては左側にType-C端子、リチウムポリマー電池を接続するためのPH端子、各スイッチ、右側にESP32-C3-WROOM-02、その他の部品が載ります。
rendering_front.png
ESP32の全ピンを引き出してあります。ピン名のシルクは表面に余白が足りず、裏面に入れました。
rendering_back.png
また、プリント基板の幅は標準的なブレッドボードに差し込んでも両側1列が余るように調整しました。ガーバーファイルはこちらからダウンロードできます。

製造

今回はJLCPCBにPCBA2まで依頼しました。

発注

KiCadで作成したガーバーファイル、BOM3ファイルやCPL4ファイルをアップロードします。ただし、JLCPCBの形式に合わせる必要があるので少し面倒です。ここでは専用のプラグインを使うと手間が省けます。導入についてはこちらが参考になりました。後は必要に応じて各項目を変更しますが、基本的にはデフォルトのままでも大丈夫です。今回は青色のレジストに変更してみました。実際はイメージより少し暗い青色でした。また、JLCJLCJLCJLCとシルクを入れておくことで製造番号の位置を任意に指定することも可能です。無償です。ちょうどESP32で隠れるような位置に今回は入れました。

価格

プリント基板は5枚を発注しました。配送業者は送料が最も安いOCS Expressを選び、納期は約10日間でした。クーポンを適用し、全体的には1枚当たり約700円となりました。

実装

残りの部品を手実装し、完成です。
pcb.jpg

動作確認

最後に正しく動作することを検証します。

LEDの点滅

書き込み方法などは以下の記事と重複するので今回は割愛します。

まずは短絡などのミスを入念に点検し、それからLEDの点滅を試してみました。電源を入れる瞬間は緊張しますが、ちゃんと期待した通りに動いたので良かったです。リチウムポリマー電池を接続しても問題なく動きました。
led.jpg

書き込みに失敗する場合

偶にエラーメッセージが表示されて上手く書き込めないこともありました。解決策としてはUSBから切断し、動作モード切り替え用スイッチを押しながらUSBを再接続することみたいです。確実にプログラムを書き込める状態へ切り替わるため、書き込みに成功しました。本来USB経由で書き込む場合は不要ですが、ここでは動作モード切り替え用スイッチを付けておいた恩恵を受けることができました。

反省点

リチウムポリマー電池が未接続のところに電源としてUSBを接続した場合、2個のLEDが同時に点灯してしまうので少し不自然に見えます。改めてMCP73831のデータシートを読んでみたところ、その場合はSTATピンがオープンとなるようでした。組み込む前にブレッドボードなどで挙動を確認しておく必要もありました。
mistake.jpg
また、当初はリチウムポリマー電池の電圧をESP32から測定し、過放電を防止する想定でしたが、そのための配線が容易には引き出せないような設計となっていました。それでも保護回路が付いたリチウムポリマー電池なら使用できますが、あまり望ましい設計ではありません。さらに、今回は余白の都合でピン名のシルクを裏面に入れましたが、実際に使用してみると少し不便に感じました。

おわりに

まずは無事に完成し、なんとか正常に動作したので安心しました。そこから見つかった反省点については改めて考え直し、しっかり次に活かしていきたいと思います。

  1. 低消費電力で通信することが可能なBluetoothの仕様です。 2

  2. プリント基板の製造から部品の実装まで行うことです。 2

  3. 部品の型番や個数などに関するデータです。

  4. 部品の位置などに関するデータです。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?