マイコンガジェットをラスト2週間で製造した話

# ガジェットを作る

11月に開催した、500人規模のイベントでのノベルティーを作りました。

![IMG_20171117_220158.jpg](https://qiita-image-store.s3.amazonaws.com/0/165002/e8df529f-46ac-aed2-6b18-c7b9a6fc1e9b.jpeg)
cf.,AVTOKYO http://ja.avtokyo.org/avtokyo2017

- イベントでは、バッジとして使用
- ストラップで首から下げる
- マイコンボード
- 電池駆動
- ミニゲーム入れたい

日本で行われるセキュリティイベントです。同様の海外のセキュリティイベントではバッジとして使われる電子回路のボードが多数あるらしいです。
以下はDEFCONのもの。
![image](https://qiita-image-store.s3.amazonaws.com/0/139524/34340b52-56e6-2b16-c656-8789ff699813.png)



今年（2017年）のDEFCON25では、やたらめったら乱立しています。
https://hackaday.com/2017/08/04/all-the-hardware-badges-of-def-con-25/


# 通信をどうする？

今年までは、Arduino互換機としてLEDを光らせたりしてたとのこと。今回はより発展して通信に踏み込みたいところです。

どの通信方法を使うか？

- CAN通信
- WiFi通信
- Bluetooth通信

なども検討しましたが、コスト、電波の錯綜、搭載OSのからみで上記は断念！


ボタンを押すと通信して、

- ドリンクチケット発行
- 内部のポイントを仮想通貨として
- 仮想通貨でチケット支払い
- ミニゲームでポイントが貯まる

ということを考えました。

すぐ下に述べますが、なるべく安くということを考えると、通信するためのコスト増は￥100ぐらいまでに抑えなければいけません。

ということで、赤外線通信かな・・・。

# なるべく安く

全員に配るということで、あまりコスト高にはできません。1,000円ぐらいまでにしたい・・・。ドル建てでUSD9ぐらいで考えます。

# OS

## Arduino 開発環境
- セキュリティイベントのノベルティなので、気軽にHACKして中身とか書き換えられるようにしたい。
- 内部にはポイントがあるけれども、正攻法で貯めるのではなくHACKしまくってポイントGETするのもWelcomeな方向で。
- Hackのために必要な最低限の機材、例えば USBシリアルモジュールとかは標準添付したい。

HACKできるものとすると、ハードウェアにあまり知識がない人でも触れるとなるとArduino開発環境かな。
とりあえず経験ない人でも何とかなるということで。

また、MS-Windows/Mac OSX/Linuxのマルチプラットフォームを前提としたいのでそれにもマッチ。

## RTOS

先のArduino開発環境はHack用ということで、それを使ったら書き換えることができるけれども、セキュリティイベントということで、本命はセキュアOSを載せたい。

組み込み用に静的コードで記述した、本質的にセキュアな組込みソフトができないかな・・・

配布時にはRTOSベースのものが搭載されていて、ArduinoIDEベースでHACKしたければ上書きということで。




# 構成要素
先に1,000円ぐらいまでにしたいと書きましたが、それについて。

基本的に海外に発注するのでドル建て(USD)で考えます。USD9ぐらいになるように。

- USD2 表示デバイス
- USD0.2 タクトSW（押ボタンスイッチ）
- USD1 PCB（キバン）
- USD1 デコレーション
- USD1 MPU（マイコン）
- USD0.5 赤外線通信
- USD1 電池
- USD2 USBシリアル

1000個ぐらい作るつもりで考えたらこのくらいかな・・・。
これにアセンブリ費用がUSD2くらいと考えると、
合計USD10.7となります。

大体こういったものはある程度数が無いと安く作れないことからまずは1000個として考えました。

あとUSD1.7ぐらい高くなってますね。ここらへんはプロジェクト進めるに沿って最適化することを見込んで。

これを元に、アレコレ決めていきます。

## USD2 表示デバイス

表示装置としてはキャラクタ or グラフィックディスプレイ載せたい・・・
コストとしては難しいのでナシにしてLEDという意見もあったけど、内部に書き込むソフトウェアでできることが格段に増えることから、キャラクタ or グラフィックディスプレイにはこだわりたかった。

調べてみると、OLEDであればUSD2.5程度で入手できそうということがわかりました。
その程度で入手できるものは小さいものですが、その中で最大のサイズとなるとSPIまたはI2Cの128*64の0.96inのものになります。
0.96in! 小さい・・・
しかしながらキャラクタ液晶にしてもあまりコストが下がりそうになかったことから、グラフィック液晶の見栄えを重視。

目標のUSD2にするには、インターフェース基板を省略すればそのくらいにはなりそうということで、これでいくことにしました。

## USD0.2 タクトSW（押ボタンスイッチ）

ユーザインタフェースはとりあえず上下左右ABの6ボタンで。これがあればどんなコンテンツでもなんとかなるかな。


## USD1 PCB（キバン）

キバンに、マイコンを動かすためのコンデンサやら、電源回路やらも含めてUSD1にするとして考えます。
しかしながら後に述べるように電池で動かす前提であれば電子部品はほとんど省略でき、ほとんどがキバンのコストになります。
コストダウンのためにはなるべく小さくするのが最も有効です。先のOLEDのサイズから考えても、大きなキバンに小さなディスプレイを取り付けるよりは小さなキバンでまとめたほうが見栄えもいいかな。
ということでOLEDが収まって上下左右ABのタクトSWが入る最低のサイズだと100x30mmぐらいかな・・・。

このくらいだと鉛フリーだとかソルダレジストの色（＝キバンの色）の指定などもある程度自由にしてもUSD1に十分収まります。

## USD1 デコレーション

レーザーカッターでアクリルを切って、キバンに重ねて見栄えをよくする程度のことはやってみてもいいかな。これも、面積を小さくすることでこのくらいのコストには収めることができます。また、バッジということですが首からぶら下げる形式ということでストラップもこのコストに。コスト的には一番安いただのヒモかな。

## USD1 MPU（マイコン）

Arduino開発環境が使用できるとなるとAVRマイコンを使いたくなってきます。しかしながらArduinoUnoとかに入っているATMEGA32だとかだと到底USD1にはなりません。

####    ATMEGA328P
        32KBytes Flash
        1KByte EEPROM
        2KBytes SRAM

安くするにはフラッシュの容量が少なかったりするATMEGA8系

####    ATMEGA8A
        8KBytes Flash
        512Bytes EEPROM
        1KByte SRAM

とかになりますが、それでも高い。

※ちなみに、2017/12/3時点の価格を調べると、ATMEGA32系もATMEGA8系も安いものだとUSD1前後に値下がりしてました。検討当初は高かった・・・

ここらへんの壁を突破しようと中華性の謎のAVR互換マイコンを使うとかなり安くなります。

####    LGT8F88A
        8KBytes Flash
        504Bytes EEPROM
        2KByte SRAM

しかしながら8KBytesはRTOS入れるのにはさすがに苦しいということで、AVR系を離れて候補を探しました。

### 候補 ARM系

####     STM32F030K6
        32KBytes Flash
        4KByte SRAM
####     STM32F103C8
        64KBytes Flash
        20KByte SRAM
####     LPC812M101
        16KBytes Flash
        4KByte SRAM

こうなるとSTM32F103C8が際立ってますね。Arduino開発環境も使えるようです。EEPROMが無いのはエミュレーションで何とかなるようで、これを選択することにしました。

## USD0.5 赤外線通信

赤外線通信だとIrDAでさくっと・・・と考えましたが、IrDAは安くなかった！300円ぐらいかかるということで、IrDAを使わずにもっと安いパーツを使う前提で考えました。送信はとりあえず赤外線ダイオードでOKとして、受信はフォトダイオードとか赤外線リモコン受光素子とかでこの金額に収めたいところです。

## USD1 電池

STM32は3.3V駆動であり、電源電圧はあまりシビアでないので単3乾電池x2本で何とかなりそうです。
最も安い電池は8本入り￥100のダイソーの単3マンガン乾電池。計算では十分持ちますが、もしダメであった場合4~5本で￥100の単3アルカリ乾電池にしてもコスト的には十分OKです。

## USD2 USBシリアル

Hackするのに使います。Hack可能であることを前提としたい。
USD1ぐらいの値段のもの、ケーブルを含めてこのくらいで。

# 試作を進める

この時点で4~5ヶ月ぐらい余裕がありました。
テイク1で荒く作り、テイク2でいろいろ直してテイク3で量産かな・・・

## テイク1

とりあえず、STM32のチップを買う前に素性を調べるために、マイコンボードを購入、それを使ったテイク1を作ります。

BluePillというボードがUSD2~3ぐらいでありました。

これを使ってコンセプト作りました。

これを使ってSTM32の素性を調べて、何とか動く感じですね。
https://qiita.com/nanbuwks/items/ba37f049f45378da0e2b

電池の実験してみました。
STM32のテストボード使って、テストプログラムを走らせっぱなしにして24時間OK。

## テイク2

さて、テイク1に使った、USD2~3で買ってきたBluePillが使えたので、次はマイコン基板を起こそうと思ったけれど・・・

いや、クリスタルとかメインとRTC用と2つあるし、コンデンサもレギュレータも一通りついていて、この値段。

これならこのボードそのまま使って基板に組み入れたほうが良くない？
ということで、モジュールとしてボードはんだづけボードを使うことにしました。

更に、このマイコンボードにはUSBインターフェースがついています。
ということで、

トータルとしてはコストダウンできることがわかりました。


ただしBluePillはいろいろ怪しくてバグがあったりします。
ちゃんと信頼できるところを探すとRobotDynというところがよさそうなところがありました。
BluePill→RobotDynに
バグ持ち→FIX
保証つき
BluePillよりは値段高くなるけど、十分OKかな。

また、テイク1では基本的な動作を確認しましたが、テイク2では
- シリアルポート
- スリープ
- ファーム書き込みのトラブル対処
- 赤外線通信
の挙動についてかなりがんばって調べています。

「STM32 を Arduino 開発環境で使う場合のシリアルポートの調査 （STM32duino + STM32F103C8 : Blue Pill)」
https://qiita.com/nanbuwks/items/5a01b924b192d5d36b31

「STM32F103 + Arduino_STM32 で Sleep」
https://qiita.com/nanbuwks/items/9abca51134226d5431da

「安直に赤外線通信回路を作る」
https://qiita.com/nanbuwks/items/57e6a6112d0459ca7810



## テイク3
これでほぼFIXかなと思ったら、
「こんな感じで」
「えっえっ」
変更多数。

### キバンサイズ変更

30x100mm程度だったものを、67x112mmに変更要望が入りました。

### デコレーション

アクリル＋ヒモのデコレーションをやめて、刺繍の入ったバンドストラップにしたいということになりました。これについては別途調達してもらうことに。

### OLEDを取り換え可能なようにソケットで接続するように

例えばプレミアつけてカラーOLEDに差し替えできるようにしたかったのですが、ソフト側の対応が結構かかりそうで、これは断念！　

### コストアップ
主に、キバンのサイズアップです。

USD9
↓
USD11


### RTOSは断念

RTOSお願いする方へのアサインができなくて断念
無念!


## テイク4

再調整

### 電源スイッチつける

元々、電源スイッチはつけるつもりではありませんでした。Sleepからボタンを押すと復帰するように考えてましたが、そういやRobotDynのボードには電源LEDがついている！
それではSleepの意味がないということで、これを取り外した特注をしようと交渉してましたが実現しそうになったところで時間切れ、あきらめて電源スイッチ取り付けました。

# 製造しなきゃ！！

時間があると思っていたらもう9月です。
某社に依頼投げるが・・・返事が無い！！

10月になって、しびれを切らして先行100台発注かけました。
6-8日でといっているけど本当かな・・・問題なければ同じラインで追加生産をすることでお願いして・・・

## 迫る期日
11/11がイベントです。

### 10月31日

この時点で進めていた製造委託は断念しました。


突貫製造で自分たちで組立することにして、

### 簡略版

一部組立ても簡略版とし、スイッチを減らしたバージョンを作ることにしました。

![IMG_20171117_220158.jpg](https://qiita-image-store.s3.amazonaws.com/0/165002/e8df529f-46ac-aed2-6b18-c7b9a6fc1e9b.jpeg)
cf.,AVTOKYO http://ja.avtokyo.org/avtokyo2017
左：フル版（個人スポンサーなど向け用）　　右：ボタン３つ版（一般参加者頒布用）

### パーツ調達

## 頼れる中華1

無理にお願いして、翌日DHLで送ってもらったり

> Hello Yoshimasa,
> 
> We have arranged the shipments on November 1, 
> the goods are in transit now. 
> 
> Please kindly find the details of transports service as follows:
> Logistics Company: HKDHL
> Tracking Number: –------
> 
> Attached packaging details for your reference.
> 
> Any question, please contact with me.

## 頼れる中華2

こちらはストックがないのを製造ごとに送ってもらうことにしたり

> If it is ok for you, today we can start the production.
> And below is the last update delivery plan:
> 1. 120pcs old version shipment 1st Nov
> 2. 180pcs new version,shipment 1st Nov
> 3. 300pcs new version shipment 2nd Nov

## 頼れない中華

一方、

>  I want to 6*6*8.5 RED.
> If red is slow to prepare, Please change
>  Yellow or Green.
> 
> → 6*6*8.5 red smd 5000pcs can 
> send tomorrow if you make order now.
> 
> 
>  I order now.
> Please send tomorrow.
> Thank you. 
> 
> → ok ,best regards

こちらの発注先は明日と言っているのは実際には6日後だっり。

## タイムスケジュール

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/febff452-a83f-378e-5c02-384ef38f5b73.png)

電池ボックスはいろいろトラブルがあって、サンプル受け取れないまま発注したら見事に間違ったパーツが来たりしました。

# 困った時の秋月電子

基本パーツは海外調達でしたが、電池ボックスは秋月電子に走って600ヶ調達しました。

# 困った時のAITENDO

上記のタイムスケジュールで遅延したタクトスイッチはAITENDOの中の人に数えてもらって3600ヶ調達！



# パーツ揃った！

国内での手当です。

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/c1368d52-84a7-529a-21b8-f733f61edf5f.png)

Wi-Fiドングルは、ボードとは別に会場で開発環境を配布するためのWi-Fi環境を構築するためのものです。来ないのでおかしいなーと思っていたらヨドバシカメラの配送遅延でした。キャンセルして秋葉原で買ってきました。

# 人海戦術

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/6a81dfaf-643b-e107-35fb-3228576c8e17.png)


# ソフトウェア

なんとか、以下の内容を間際に作成しました。
- Ticket request
- Clicker game
- Mini ctf quiz
- Name entry
- Credit
- Factory reset

# USBブートローダ

ハードウェア買わなくてもいい

USBだけで書き込みできる

苦労して入れる

# 会場

当日、会場に到着して六本木のクラブで書込

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/641f82c5-2068-61a0-3210-f42082be8699.png)

# はんだづけ大会

間に合っていない組立ては会場ではんだづけしました。

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/96b51d4c-67cb-52d9-22e9-2cc1fa350ea8.png)

# 残念！
- ドリンクチケットは断念、
- できたものから配る方式に


# 結果

元々、600 で部材は用意しましたが必要実数は400ぐらい、残りは部材予備として会場に持っていくということになりました。

最終的に 425 完成、そのうち300強を頒布しています。当日残ったものは割と不良品が多く、配布したものも動作おかしかったものはその場で交換対応しました。事後に検証したところ、ほとんどはんだ不良で当日急いではんだづけしたもののNGが目立ちました。

こういった原因は簡単に修理できるので、それをFIXした後のカウントではパーツ不良によるもの1.5%,回復不能な組立てミス（マイコンボード逆にはんだづけしたとか）が1.5%,合計3%程度がNGでした。

なお、製造に要したリソースは
- 予算・・・個人のお小遣いで作る（事後精算）
- 準備時間・・・(プライベート)半年＋２週間
- 組立・・・知り合いなどを巻き込んで2日かかりきり！


実際に使ってもらっている状況です。
![image](https://qiita-image-store.s3.amazonaws.com/0/139524/5fa0b875-9931-0607-61ed-256e60404865.png)
クリッカーが思いの外好評


# 資料
「inside of AVTOKYO 10th HACK BADGE」
https://qiita.com/lowlevel/items/0fd3402e0dd4584de65f

## ライセンス
マイコンボード、資料、このドキュメントなどなど Public DOMAINです。