GSM接続対応ポータブル投票システム「Mobile Vote Box」
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| Adafruit FONA mini GSMブレークアウト | 1 | SIMComモジュール搭載 |
| フルサイズブレッドボード | 1 | |
| タクトスイッチ (カラフル) | 2 | 投票ボタン用 (選択肢A/B) |
| LED | 3 | 接続表示・投票確認用 |
使用サービス・アプリ
- Hologram Data Router: デバイスからクラウドへのデータ転送・変換
- IFTTT Maker Webhooks: Webhook受信 → Googleスプレッドシート追記
- Hologram SIM (Developer Plan): 月1MB無料 (約2000投票/月)、プロモコード「BUDS-WITH-BENSTR」で送料無料+クレジット
プロジェクト背景
「匿名・ランダムな群衆に質問し、ピアプレッシャーなしで本音を集められないか?」という着想から生まれたのが「Mobile Vote Box」です。電池駆動・セルラー通信でどこでも置くだけ運用可能。部品代約$50 (AliExpress調達なら$6程度)。
初回実験では「ピザはシカゴ風かニューヨーク風か?」という問いを、シカゴとラスベガスの随所に設置して回収しました。
データフロー全体像
- 投票ボタン押下 → ArduinoがHologram Data Routerへトピック「vote」でデータ送信 (例: "chicago" / "newYork")
- Hologram Data RouterがJSONに整形し、IFTTT WebhookへPOST
- IFTTTがGoogleスプレッドシートに行追加 (タイムスタンプ付き)
各レイヤーの役割: Hologram Store (デバイス通信抽象化) → Router (データ変換・マルチ連携) → IFTTT (クラウド連携抽象化) → Sheets (蓄積・可視化)
セットアップ手順
1. IFTTT Applet作成
- IFTTTで新規Applet → Trigger: Webhooks「Receive a web request」、イベント名「vote」
- Action: Google Drive「Add row to spreadsheet」
- スプレッドシート名・フォルダ・列フォーマット設定 (Value1=質問, Value2=投票内容)
- Webhookキーをコピー (https://ifttt.com/services/maker_webhooks/settings のURL末尾)
2. Hologram設定
- Hologram.ioでSIMアクティベート → デバイス作成 (例: "Vote Btn #1")
- Routesで新規ルート: IN トピック「vote」、OUT「IFTTT Maker Webhook」
- Webhookキー貼付け、Event「vote」、Data:
{"value1": "Pizza: Chicago or New York Style?", "value2": "<>"}
3. 動作テスト
- Hologramコンソールのデバイス→Messaging→「Simulate from Device」
- トピック「vote」にデータ「chicago」送信
- ルート成功表示 → Googleスプレッドシートに行追加確認
4. ハードウェア組み立て
- HologramダッシュボードのDevice Key (CSR Credentials) を取得
- 回路図に従い配線 (FONAのTX/RX/RESET、ボタン、LED)
- スケッチの
HOLO_KEYを自分のDevice Keyに書き換え
サンプルコード
#include
#define RX_PIN 2 // FONA RX ← Arduino TX
#define TX_PIN 3 // FONA TX → Arduino RX
#define RESET_PIN 4 // FONA RESET
#define HOLO_KEY "########" // ここにDevice Keyを設定
#define CONNECT_LED 12
#define VOTE1_BTN_PIN 6
#define VOTE1_LED_PIN 7
#define VOTE2_BTN_PIN 9
#define VOTE2_LED_PIN 10
HologramSIMCOM Hologram(TX_PIN, RX_PIN, RESET_PIN, HOLO_KEY);
String VOTE1_VALUE = "chicago";
String VOTE2_VALUE = "newYork";
String HOLOGRAM_TOPIC = "vote";
void setup() {
Serial.begin(19200);
while(!Serial);
pinMode(CONNECT_LED, OUTPUT);
pinMode(VOTE1_BTN_PIN, INPUT);
pinMode(VOTE1_LED_PIN, OUTPUT);
pinMode(VOTE2_BTN_PIN, INPUT);
pinMode(VOTE2_LED_PIN, OUTPUT);
bool connected = Hologram.begin(19200, 8888); // ボーレート19200、サーバーport 8888
if (connected) digitalWrite(CONNECT_LED, HIGH);
}
void loop() {
Hologram.debug(); // 内部処理
if (digitalRead(VOTE1_BTN_PIN) == HIGH) {
sendVote(VOTE1_VALUE, VOTE1_LED_PIN);
}
if (digitalRead(VOTE2_BTN_PIN) == HIGH) {
sendVote(VOTE2_VALUE, VOTE2_LED_PIN);
}
}
void sendVote(String value, int ledPin) {
digitalWrite(ledPin, HIGH);
if (Hologram.send(value, HOLOGRAM_TOPIC)) {
// 成功時: LED点滅
for (int i=0; i<3; i++) {
digitalWrite(ledPin, LOW); delay(100);
digitalWrite(ledPin, HIGH); delay(100);
}
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, LOW); // 失敗時は消灯
}
}
回路図
添付画像を参照。FONAのTX/RX/RESET、各ボタン・LEDのプルダウン/プルアップ抵抗込みで配線。
発展アイデア
- 世界中に数百台配布し、日替わり質問でグローバルな意見収集
- 太陽電池+リチウムイオンで完全無人長期運用
- 質問内容を遠隔更新 (Hologramからデバイスへコマンド送信)
- 複数選択肢 (3択以上) 対応、LCDで質問文表示
注意点
- HologramSIMCOMライブラリはGitHubから手動インストール必要
- FONAのボーレートは19200固定 (ライブラリ仕様)
- ボタンはチャタリング対策 (ソフトウェア/ハードウェア) を検討
- 電源はFONAのピーク電流 (最大2A) に耐えられるものを (LiPo推奨)
製造プロセス
- ジュースボックスの革命:歴史、設計、環境への影響
- ブラックボックス飛行記録装置:初期試作から将来の統合設計まで
- DIY Wall-E 風 Raspberry Pi CD ボックスロボット
- DIY UVC滅菌ボックスキット:低コスト・簡単自作の医療・日用品用紫外線殺菌器
- UnifiedWater v1 - 完全なArduino水質センサーキット
- Really Smart Box: IoT対応スマート収納ボックス – 重量・温湿度をSigfoxで送信
- コンパクト気象ステーション:Arduino Nano & ESP8266 + BMP280 + OLED/Nokia LCD
- Arduino Portenta H7で作る高性能エッジAIカメラ:OpenMV + TensorFlow Lite
- ボックスカット採掘:定義、工法、リスク管理
- C#のクラス完全ガイド:定義・カプセル化・コンストラクタ・デストラクタ・静的メンバー
- C#の演算子オーバーロード:カスタム型で演算子を再定義する