🎄「4℃」の表示がされるネックレス🎁
年の瀬が近づくと毎年ネットで話題となる、水の密度が最大になる温度の宝飾品。
ところで、こんなものを見つけました。
温度表示だけでしたら、
- NJU9252P超小型温度計キット [0~99]表示: キット一般 秋月電子通商-電子部品・ネット通販
- ミニサーモメーター(小型温度計モジュール) ブラック(黒): バラエティグッズ 秋月電子通商-電子部品・ネット通販
でいいのですが、せっかくなので温度計測できて「4℃」表示モードつきのネックレスを作ります。
何番煎じでも構わない。私はまだ煎じていない。
(Little Curly「サリーとアンの約束」 「新刊あります(遺作)」より)
「贈られるジュエリー」から「自分で選ぶジュエリー」へ、そして「自分で作るジュエリー」に。え、どこが「ジュエリー」かって?「石」が付いているじゃないですか...
目的
- 電池稼働
- 温度を計測
- ネックレスとして吊ることができる
- 「摂氏4度表示固定モード」を備える(ここ重要)
レシピ
(使用数量、概算価格は一台当たり)
| 部品 | 調達方法例 | 数量 | 概算価格(JPY) |
|---|---|---|---|
| attiny avr1シリーズ | AVRマイコン ATTINY1604-SSNR: 半導体 秋月電子通商-電子部品・ネット通販 | 1 | 100 |
| 温度センサ(I2C) | デジタル温度センサー PJ85775P: 計測器・センサー・ロガー 秋月電子通商-電子部品・ネット通販 | 1 | 100 |
| TM16xx | 7セグメント用LEDドライバーIC(最大3個) TM1617: 半導体 秋月電子通商-電子部品・ネット通販 | 1 | 50 |
| 2桁7セグメントLED | 表面実装用 2桁7セグメントLED表示器 カソードコモン OSL2051A-LR: オプトエレクトロニクス 秋月電子通商-電子部品・ネット通販 | 1 | 100 |
| 電源スイッチ 4℃固定モード切替スイッチ |
表面実装用スライドスイッチ SSSS213202: 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販 | 2 | 50 |
| LR44ホルダー | 電池ケース LR44×1個 表面実装用 引出し付き: ケース・ネジ・固定具 秋月電子通商-電子部品・ネット通販 | 2 | 100 |
| スペーサー | スペーサー M3 10mm TP-10: ケース・ネジ・固定具 秋月電子通商-電子部品・ネット通販 | 3 | 100 |
| 深圳製PCB基板 | PCB Prototype & PCB Fabrication Manufacturer - JLCPCB | 2 | 100 |
| 配線材料、抵抗、コネクタなど | (冷蔵庫の中の余り物から) | ||
| 合計 | (どんぶり勘定) | 700 |
オール表面実装、オール秋月部品1、運河4度よりも更にリーズナブルなお値段。
「石」の数は(数え方にもよりますが)attiny, 温度IC, 7セグメントドライバで3石となります。この「石」に含まれるシリコンの質量を合計して「カラット」に換算すると、概ね0.05カラット程度になる2そうです。
ポイント
温度センサ PJ8775P
アドレス選択が32パターンもあるという素敵なi2c温度計です。
湿度は測れませんが、AHT25類のような複雑なプロトコルもないので簡単に使えます。
7セグメントLEDドライバ TM1617
TM16xxシリーズは物によってアノードコモンとカソードコモンの対応が違います。
TM16xx chips features and support · maxint-rd/TM16xx Wiki
ドライバIC側のSEG1〜8とLED側のDIG A〜G,DPの順番を揃えようとすると、PCB配線が複雑になります。SEGxとDIGxの対応はソフトウェアでどうにでもなるので、PCB配線を優先で割り当てます。
PCB上は綺麗になりますが、回路図上はスパゲッティ🍝
TM1617の場合、最初に0x00のコマンドを発行して2桁であることを指示する必要があります。アラインメントの関係で、7セグメント1桁あたり2バイトの書き込みが必要です。
のコードですと、
/*
AAA
F B
GGG
E C
DDD
p(dot)
*/
// AFCBEDpG
#define SEG7_CHAR_0 B11111100 // A, B, C, D, E, F
#define SEG7_CHAR_1 B00110000 // B, C
#define SEG7_CHAR_2 B10011101 // A, B, D, E, G
#define SEG7_CHAR_3 B10110101 // A, B, C, D, G
#define SEG7_CHAR_4 B01110001 // B, C, F, G
#define SEG7_CHAR_5 B11100101 // A, C, D, F, G
#define SEG7_CHAR_6 B11101101 // A, C, D, E, F, G
#define SEG7_CHAR_7 B10110000 // A, B, C
#define SEG7_CHAR_8 B11111101 // A, B, C, D, E, F, G
#define SEG7_CHAR_9 B11110101 // A, B, C, D, F, G
#define SEG7_CHAR_A B11111001 // A, B, C, E, F, G 大文字の 'A'
#define SEG7_CHAR_B B01101101 // C, D, E, F, G 小文字の 'b'
#define SEG7_CHAR_C B00001101 // D, E, G 小文字の 'c'
#define SEG7_CHAR_D B00111101 // B, C, D, E, G 小文字の 'd'
#define SEG7_CHAR_E B11001101 // A, D, E, F, G 大文字の 'E'
#define SEG7_CHAR_F B11001001 // A, E, F, G 大文字の 'F'
#define SEG7_DOT B00000010 // p 小数点 (OR用)
// AFCBEDpG
#define SEG7_CHAR_MINUS B00000001 // G マイナス記号
#define SEG7_CHAR_OVER B11010001 // A, B, F, G オーバーフロー表示 上にo
#define SEG7_CHAR_ERROR B10000101 // A, D, G エラー表示 三
const uint8_t HexChars[16] = {
SEG7_CHAR_0, SEG7_CHAR_1, SEG7_CHAR_2, SEG7_CHAR_3,
SEG7_CHAR_4, SEG7_CHAR_5, SEG7_CHAR_6, SEG7_CHAR_7,
SEG7_CHAR_8, SEG7_CHAR_9, SEG7_CHAR_A, SEG7_CHAR_B,
SEG7_CHAR_C, SEG7_CHAR_D, SEG7_CHAR_E, SEG7_CHAR_F};
TM16XX display(TM1617, PIN_TM16_CLK, PIN_TM16_DIO, PIN_TM16_STB);
void tm16setup(void)
{
display.command(0x00);
}
void tm16printnum(int num)
{
uint8_t dot0 = SEG7_DOT;
uint8_t dot1 = 0x00;
//...
display.DisplayBin(0, (HexChars[num / 10] | dot0) << 4); //左側の桁
display.DisplayBin(1, (HexChars[num / 10] | dot0) >> 4);
display.DisplayBin(2, (HexChars[num % 10] | dot1) << 4); //右側の桁
display.DisplayBin(3, (HexChars[num % 10] | dot1) >> 4);
//...
}
という感じです。
このままでは使いにくい上にカプセリングを破壊しているので、class TM16XXを継承してclass TM1617を作ります。
表面実装LR44電池ホルダー
LR44は1個あたり1.5Vですので、2個直列で3Vにします。
電池のマイナス極は基板上のパッドのみとなりますが、このパッドに少しハンダを盛ることで安定します。
組み立て
attinyなどの面をリフローしたのち、はんだコテで頑張って7セグメントLEDをつけます。その後UPDIから書き込み、もう一枚の基板を保護用としてスペーサーでサンドイッチにします。
ツイストペアとPHでネックレスとしての紐を作成して繋げます。
常設版
電池ホルダーを使わずに常時外部電源供給で、計算機類のambient温度を(grafana等の可視化画面を見ずに現地で)確認できるリアル「只今の気温」もできます。
今後の展望
本作の固定表示モードは「4℃」の表示がされているだけで、実際に本作の表面温度が摂氏4度になっているわけではありません。
ペルチェ素子をつけてPID制御し、4℃の温度を維持することでリラックス効果(?)の得られる製品の作成が望まれます。
謝辞
元ネタの皆様、宝飾品を含め各メーカー・店舗の皆様に感謝いたします。
なお、本作は個人の趣味で作成したに過ぎず、これらの権利を侵害等をする意図はなく、また、関わりもございません。販売・頒布等もされておりません。
-
生成AIによると、「仮に目安として4mm×4mm、厚さ0.1mmのシリコンダイと仮定すると、$\mbox{体積} = 4\mbox{mm} \times 4\mbox{mm} \times 0.1 \mbox{mm} = 1.6 \mbox{mm}^3 = 0.0016 \mbox{cm}^3$ となり、$\mbox{重さ} = \mbox{体積} \times \mbox{密度} = 0.0016 \mbox{cm}^3 \times 2.33 \mbox{g/cm}^3 \approx 0.0037 \mbox{g} = 3.7 \mbox{mg}$となります。3つのICすべてが上記と同じ重さであると仮定すると、合計の重さは$3.7\mbox{mg/個} \times 3 \mbox{個} = 11.1 \mbox{mg}$となり、これをカラットに換算すると、$11.1\mbox{mg} \div 200 \mbox{mg/ct} \approx 0.0555 \mbox{ct}$となります。結論として、SOP8、SOP14、SOP16の3つのICに含まれるシリコンダイの合計の重さは、一般的なICのサイズに基づくと、約0.05から0.1カラット程度の非常にわずかな重さであると推測されます。」とのことです。 ↩



