移动投票箱
组件和用品
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 2 | ||||
![]() |
| × | 3 |
应用和在线服务
![]() |
| |||
![]() |
|
关于这个项目
背景
我着迷于我们每个人处理信息和得出结论的不同方式。我同样着迷于同辈压力和群体思维如何影响或彻底改变人们的反应。
所以我想知道,如果我能建造一台机器,让我能够向匿名和随机人群提问,会怎样?它需要不令人生畏(简单)并且在没有同伴压力或其他外部影响的环境中。
这个项目是我应对挑战的 MVP,我称之为移动投票箱。在我的第一个实验中,我问了一个简单但充满激情的问题。
我在芝加哥和拉斯维加斯附近的随机地方放置了移动投票箱。你可以在这里看到每个人的回复。
<人物>
<人物>

移动投票箱依靠电池运行,并通过蜂窝网络传输每一张投票,非常容易设置和忘记。零件成本约为 50 美元,但如果您通过全球速卖通采购所有部件,则可以便宜至 6 美元。
Hologram.io 提供免费的蜂窝连接。他们的开发者计划允许我获得一张免费的全球 SIM 卡以及每月 1MB 的免费数据(相当于每月大约 2,000 个免费投票数据包)。立即订购您的免费开发者 SIM 卡,使用促销代码 BUDS-WITH-BENSTR 免费送货和几美元的信用。
**完全披露:我为 Hologram 工作,所以你会看到我制作了一堆基于蜂窝连接的 IoT tuts。**
<人物>

迭代这个想法并最终得出一个足够强大的设计,我们可以在全球拥有数百个移动投票箱,每天向世界提出一个新问题并公开数据,这将是令人惊奇的。
我们将如何构建移动投票箱
从较高的层次,我们将向后工作 - 从出口开始,以我们的方式到达入口。
- 首先,我们将制作一个 IFTTT Applet 以将数据推送到 Google 电子表格中。
- 接下来,我们将激活我们的 SIM 卡,设置我们的数据路由,并使用模拟数据进行验证。
- 最后,我们将连接硬件并刷新设备。
- 现在问一个有趣的问题并将盒子放在公共场所。
了解数据的去向。
每次记录投票时,我们的设备都会向全息数据路由器发送一个数据字符串。数据路由器将字符串膨胀/操作为 JSON 对象并将其发送到 IFTTT Webhook。 IFTTT 会将每张选票附加到 Google 表格中。
乍一看,它可能看起来有些过分,但每个元素都扮演着独特而重要的角色。
- 全息图数据存储 之所以使用它,是因为它很好地抽象了将数据从 SIMCom 模块发送到云的复杂性。
- 全息数据路由器 使用它是因为它可以很好地将我的最小字符串数据处理为 IFTTT 所需的 JSON 格式。它还让我可以自由添加其他集成,而无需修改我的设备代码。
- IFTTT 之所以使用它,是因为它非常擅长将复杂的集成抽象到其他云,在我们的例子中是 Google 表格。
- Google 表格 只是因为。

1. IFTTT <人物>



- 转到 IFTTT,登录或创建帐户
- 创建一个新的小程序
- 1 个,共 6 个:选择 Webhook 服务
- 2 of 6:选择接收网络请求 触发器,将事件命名为“投票 "并创建触发器。
- 3 个,共 6 个:选择 Google 云端硬盘 服务
- 4 of 6:选择操作向电子表格添加行
- 5 个,共 6 个:完成操作字段,查看下面的图片(如果您忽略这一点,一切仍然正常)。
- 6 个,共 6 个:完成小程序!
- 重要事项 - 复制您的 webhook 密钥(URL 的最后一部分)。在此处找到您唯一的 IFTTT 网络钩子密钥:https://ifttt.com/services/maker_webhooks/settings

2.全息图
创建新设备
- 前往 Hologram.io,登录或创建一个帐户
- 激活您的 SIM 卡或选择现有设备
- 注意:激活新 SIM 卡将自动创建新设备
- 为设备命名任何你想要的名字,也许 投票 Btn #1
创建新的数据路由
- 在左侧导航中选择路线并添加新路线
- IN:输入主题“投票 "
- OUT:选择 IFTTT Maker Webhook
- Webhook Key:将您的 IFTTT Webhook 密钥粘贴到此字段中(上述 IFTTT 说明中的最后一步)
- 事件:投票
- 数据:
{"value1":"Pizza:Chicago or New York Style?", "value2":"<
>"}
- 创建路线
3.测试路由和Webhook
- 转到设备> 选择您的设备> 消息> 从设备模拟
- 发送数据芝加哥 到主题投票
- 全息图控制台应该会弹出并显示一条成功的路线
- 如果您转到 Google 云端硬盘并打开电子表格,则会出现一个新条目。
- 如果您有任何错误或数据未到达,请查看上述详细信息。
- 如果您无法使用它,请访问 https://community.hologram.io 寻求帮助
4.硬件
- 从 Hologram 仪表板获取您的数据路由器设备密钥。
- 设备> 选择设备> 配置> 显示 CSR 凭据
- 查看下面的原理图和草图代码。
- 确保替换全局变量中的设备密钥。
享受!
代码
- 移动投票箱 Arduino 代码 - v1
移动投票箱 Arduino 代码 - v1C/C++
您需要手动将 HologramSIMCOM 库添加到您的 Arduino IDE - https://github.com/hologram-io/hologram-SIMCOM#include#define RX_PIN 2 //SIMCom RX - MCU TX#define TX_PIN 3 //SIMCom TX - MCU RX#define RESET_PIN 4 //SIMCom reset#define HOLO_KEY "########" //替换你的 SIM 卡#define CONNECT_LED 12#define VOTE1_BTN_PIN 6#定义 VOTE1_LED_PIN 7#define VOTE2_BTN_PIN 9#define VOTE2_LED_PIN 10HologramSIMCOM 全息图(TX_PIN, RX_PIN, RESET_PIN, HOLO_KEY); // 实例化 HologramString VOTE1_VALUE ="chicago";String VOTE2_VALUE ="newYork";String HOLOGRAM_TOPIC ="vote";void setup() { Serial.begin(19200);而(!串行); // 启动调制解调器并连接到 Hologram 的全球网络 Hologram.debug(); //为使用的引脚设置模式 pinMode(CONNECT_LED, OUTPUT); pinMode(VOTE1_BTN_PIN,输入); pinMode(VOTE1_LED_PIN,输出); pinMode(VOTE2_BTN_PIN,输入); pinMode(VOTE2_LED_PIN,输出); bool cellConnected =Hologram.begin(19200, 8888); // 将波特率设置为 19200 并在端口 8888 上启动服务器 if(cellConnected) { 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 VOTE_VALUE, const int VOTE_LED) { digitalWrite(VOTE_LED, HIGH); // 发送到全息图数据路由器 if(Hologram.send(VOTE_VALUE, HOLOGRAM_TOPIC)) { // 如果投票成功则闪烁 LED // 这是糟糕的代码,考虑重构 digitalWrite(VOTE_LED, LOW);延迟(100);数字写入(VOTE_LED,高);延迟(100);数字写入(VOTE_LED,低);延迟(100);数字写入(VOTE_LED,高);延迟(100);数字写入(VOTE_LED,低); } else { digitalWrite(VOTE_LED, LOW); }}
示意图

制造工艺