朝の待ち合わせ用の簡易的な時計を作ってみた

# はじめに

小学生の子供が毎朝お友達と待ち合わせをして登校しているのですが、うまく行かずに困っていたので、技術の力で解決しました。

# つくったもの

こんな小型の時計的なデバイスです。
![gatheringclock.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13867/0dc53273-7239-3bae-80c8-609339ed80b1.gif)

https://github.com/task-jp/ch32v003j4m6-rx8900ce

ソフトウェアなど一式を上記で公開しています。興味がある人がいたら作ってみてください。

# 待ち合わせについて

## ルール

* 毎朝３人で待ち合わせをします
* それぞれの自宅から少し歩いた、商店街の交差点で待ち合わせをします
* 8:00 に集まります
* ３人が揃ったら出発します
* 揃わなくても、8:05 になったら出発します
* 小学校には腕時計を持っていけません
* 待ち合わせ場所周辺に時計がありません

## うまくいかない

そもそも時刻がわからないので、以下のような失敗が発生します。

* 8:00 より前についてしまい、他の２人に置いていかれたと思って急いで追いかけてしまう
* 8:05 が分からないので、３人揃っていない場合に待ち続け、学校に遅れてしまう

そもそも無理がありますね。

## 運用でカバーしていました

２年ほど、大人（＝私）が待ち合わせに参加することで解決していました。

## 最新のテクノロジーで改善しました

待ち合わせ専用の時計を作成し、子供たちが時刻を知れるようにしました。

# 開発したもの

ボタンを押すと、緑と赤のLEDで現在の時間を知ることができるデバイスです。

![gatheringclock.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13867/0ac2a23a-9d64-7e46-4103-8bfebc0f60d4.gif)

以下の特徴があります

* 7:55 〜 8:00 の間は緑が点滅します → 待ち合わせ時間より前が分かる
* 8:00 〜 8:05 の間は緑が点灯します → 待ち合わせ時間中が分かる
* 8:05 〜 8:10 の間は赤が点滅します → 待ち合わせ時間が過ぎたことが分かる
* それ以外は赤が点灯します

緑の間は揃うまで待つ、赤くなったら揃ってなくても出る。というシンプルなものです。

## 開発にあたり考えたこと

### 必要なこと

* 待ち合わせ時間がわかること
* 小学生が使えること
* 小学校に持っていけること

### できたらいいこと

* 小さいこと
* 壊れにくいこと
* 充電しなくても長く使えること
* 安くつくれること
* お友達に配れること

## 開発に際して学んだこと

たまたま会社で電子回路の社内勉強会があり、以下のことを学びました。

* 電子回路の基礎知識
* 電源、電流
* 様々な電子部品
* マイコンの使い方
* モータードライバ
* センサ
* プリント基板の作り方
* 通信方式
* CPUとは（次回）

それから、１年くらい前に3Dプリンターを買って、よく遊んでいました。

# デバイスの開発

## 部品の選定

以下の部品を組み合わせて、必要な機能を実現しました。
とにかく小さく作るために、小さいものを選択しました。

* [CH32V003J4M6](https://akizukidenshi.com/catalog/g/g118062/) マイコン
* [RX8900CE](https://akizukidenshi.com/catalog/g/g113320/) リアルタイムクロック
* チップLED、チップ抵抗、チップコンデンサ
* プッシュボタン
* [CR1220](https://akizukidenshi.com/catalog/g/g109561/) ボタン電池

## 回路設計、基板の製造

回路と基板の設計は [KiCad](https://www.kicad.org/) で行い、製造は [Elecrow](https://www.elecrow.com/referral-program/NjM2MDBqMnQ/) で行いました。

## 組み立て

![msg162771868-336637.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13867/15d853f4-0435-adfe-4395-a98a131e7d6c.jpeg)

RX8900CE のハンダ付けがちょっと難しかったので、Miniware の [MHP50](https://ja.aliexpress.com/item/1005006297252436.html) というリフローはんだ付けをしました。

![mhp50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13867/a7f6ff70-3864-8601-9822-4b74f5f25b1d.gif)

## ソフトウェア

Rust で MCU 向けに専用のソフトウェアを書きました。

参考：[CH32V003J4M6マイコンでRustでLチカをしてみた](https://zenn.dev/tasuku/articles/c0515386a011c4)


# ケースの開発

## 設計

Kicad からエクスポートした 3D データを元に、Adobe Fusion で基板を挟み込むような形のケースを作りました。
![fusion_v0.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13867/a6f1aadf-65ab-3290-d8c3-177d03bc217f.png)

## 製造

3D プリンターで印刷し、基板を収納しました。

サイズは、幅20mm、長さ40mm、厚さ6.3mm になりました。

![gatheringclock.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13867/5c4e6256-bbec-a7d0-9189-a268af857013.gif)

# まとめ

* とてもコンパクトな簡易的な時計デバイスの設計と製造をしました
* 待ち合わせ時間が分かるようになりました

## FAQ
* 8:00 専用なの？
  → 任意の時刻でリセットできるので、待ち合わせ時間が 7:55〜8:00 などでも利用可能です
  → 何時かに関わらず、毎時、何分かでLEDのパターンが変わります
* 時刻のリセットはどうするの？
  → ボタンを20秒押しつづけると、赤と緑のLEDが交互に点滅し、リセットの予告を行います
  → さらに10秒押しつづけると、赤と緑のLEDが両方点灯し、時刻が 00:00:00 にリセットされます
  → ボタンを離したタイミングから時刻のカウントがはじまります
* 原価はいくら？
  → RTC が一番高くて400円、電池が70円、ボタンホルダーが60円、マイコンが40円、LEDが10円くらい。それ以外の部品は10円以下です
  → 基板は10枚で $1 でした。送料を加えると、１枚あたり180円くらいです
  → リールは [ダイソーで100円で買いました](https://jp.daisonet.com/products/4968583188491)
  → 全体で1000円いかないくらいかな